/
githubmirror
/
atom
Обзор
Документация
Войти
/
githubmirror
/
atom
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
v1.59.0
src/babel.js
80 строк
2 KB
Amin Yahyaabadi
Convert var to const/let in src files
30 мар 2021, 18:12
30 мар 2021, 18:12
6473f52
Код
Авторство
О чём код?
'use strict'; const crypto = require('crypto'); const path = require('path'); const defaultOptions = require('../static/babelrc.json'); let babel = null; let babelVersionDirectory = null; const PREFIXES = [ '/** @babel */', '"use babel"', "'use babel'", '/* @flow */', '// @flow' ]; const PREFIX_LENGTH = Math.max.apply( Math, PREFIXES.map(function(prefix) { return prefix.length; }) ); exports.shouldCompile = function(sourceCode) { const start = sourceCode.substr(0, PREFIX_LENGTH); return PREFIXES.some(function(prefix) { return start.indexOf(prefix) === 0; }); }; exports.getCachePath = function(sourceCode) { if (babelVersionDirectory == null) { const babelVersion = require('babel-core/package.json').version; babelVersionDirectory = path.join( 'js', 'babel', createVersionAndOptionsDigest(babelVersion, defaultOptions) ); } return path.join( babelVersionDirectory, crypto .createHash('sha1') .update(sourceCode, 'utf8') .digest('hex') + '.js' ); }; exports.compile = function(sourceCode, filePath) { if (!babel) { babel = require('babel-core'); const Logger = require('babel-core/lib/transformation/file/logger'); const noop = function() {}; Logger.prototype.debug = noop; Logger.prototype.verbose = noop; } if (process.platform === 'win32') { filePath = 'file:///' + path.resolve(filePath).replace(/\\/g, '/'); } const options = { filename: filePath }; for (const key in defaultOptions) { options[key] = defaultOptions[key]; } return babel.transform(sourceCode, options).code; }; function createVersionAndOptionsDigest(version, options) { return crypto .createHash('sha1') .update('babel-core', 'utf8') .update('\0', 'utf8') .update(version, 'utf8') .update('\0', 'utf8') .update(JSON.stringify(options), 'utf8') .digest('hex'); }