motion
Version:
motion - moving development forward
152 lines (107 loc) • 3.73 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.file = file;
exports.app = app;
exports.motionFile = motionFile;
var _gulpUtil = require('gulp-util');
var _gulpUtil2 = _interopRequireDefault(_gulpUtil);
var _through = require('through2');
var _through2 = _interopRequireDefault(_through);
var _vinylSourcemapsApply = require('vinyl-sourcemaps-apply');
var _vinylSourcemapsApply2 = _interopRequireDefault(_vinylSourcemapsApply);
var _replaceExt = require('replace-ext');
var _replaceExt2 = _interopRequireDefault(_replaceExt);
var _flintBabelCore = require('flint-babel-core');
var _onMeta = require('./lib/onMeta');
var _onMeta2 = _interopRequireDefault(_onMeta);
var _config = require('./lib/config');
var _config2 = _interopRequireDefault(_config);
var _writeStyle = require('../lib/writeStyle');
var _writeStyle2 = _interopRequireDefault(_writeStyle);
var _fns = require('../lib/fns');
var _getMatches = require('../lib/getMatches');
var _getMatches2 = _interopRequireDefault(_getMatches);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function file(opts) {
return babelStream({
transformer: motionFile,
opts
});
}
function app(opts) {
return babelStream({
transformer: motionApp,
opts
});
}
exports.default = { file, app };
function babelOpts(file, opts) {
return Object.assign({}, opts, {
filename: file.path,
filenameRelative: file.relative,
sourceMap: Boolean(file.sourceMap)
});
}
function motionApp(file) {
let res = (0, _flintBabelCore.transform)(file.contents.toString(), babelOpts(file, _config2.default.app()));
return { res, file };
}
const babelRuntimeRegex = /require\(\'(babel-runtime[a-z-A-Z0-9\/]*)\'\)/g;
const babelRuntimeRequire = src => (0, _getMatches2.default)(src, babelRuntimeRegex, 1);
function motionFile(file) {
let track = {
imports: [],
isExported: false
};
const onImports = imports => track.imports.push(imports);
const onExports = val => track.isExported = val;
let res = (0, _flintBabelCore.transform)(file.contents.toString(), babelOpts(file, _config2.default.file({
log: _fns.log,
onMeta: _onMeta2.default,
writeStyle: _writeStyle2.default,
onImports,
onExports
})));
var _res$metadata = res.metadata;
const usedHelpers = _res$metadata.usedHelpers;
const imports = _res$metadata.modules.imports;
const importedHelpers = usedHelpers && usedHelpers.map(name => `babel-runtime/helpers/${ name }`) || [];
const importNames = imports.map(i => i.source);
let meta = {
imports: _fns._.uniq([].concat(importNames, track.imports || [], importedHelpers || [], babelRuntimeRequire(res.code))),
isExported: track.isExported
};
_fns.log.gulp('meta', meta);
return { res, meta };
}
function babelStream(_ref) {
let transformer = _ref.transformer;
return _through2.default.obj(function (file, enc, cb) {
if (file.isNull()) {
cb(null, file);
return;
}
try {
var _transformer = transformer(file);
const meta = _transformer.meta;
const res = _transformer.res;
file.babel = meta;
if (file.sourceMap && res.map) {
res.map.file = (0, _replaceExt2.default)(res.map.file, '.js');
(0, _vinylSourcemapsApply2.default)(file, res.map);
}
file.contents = new Buffer(res.code);
file.path = (0, _replaceExt2.default)(file.path, '.js');
this.push(file);
} catch (err) {
this.emit('error', new _gulpUtil2.default.PluginError('gulp-babel', err, {
fileName: file.path,
showProperties: false
}));
}
cb();
});
}
//# sourceMappingURL=babel.js.map