motion
Version:
motion - moving development forward
154 lines (112 loc) • 3.78 kB
JavaScript
exports.__esModule = true;
exports.file = file;
exports.app = app;
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
var _gulpUtil = require('gulp-util');
var _gulpUtil2 = _interopRequireDefault(_gulpUtil);
var _through2 = require('through2');
var _through22 = _interopRequireDefault(_through2);
var _vinylSourcemapsApply = require('vinyl-sourcemaps-apply');
var _vinylSourcemapsApply2 = _interopRequireDefault(_vinylSourcemapsApply);
var _replaceExt = require('replace-ext');
var _replaceExt2 = _interopRequireDefault(_replaceExt);
var _libRequires = require('../lib/requires');
var _libOnMeta = require('./lib/onMeta');
var _libOnMeta2 = _interopRequireDefault(_libOnMeta);
var _libConfig = require('./lib/config');
var _libConfig2 = _interopRequireDefault(_libConfig);
var _libWriteStyle = require('../lib/writeStyle');
var _libWriteStyle2 = _interopRequireDefault(_libWriteStyle);
var _libFns = require('../lib/fns');
var _libGetMatches = require('../lib/getMatches');
var _libGetMatches2 = _interopRequireDefault(_libGetMatches);
function file(opts) {
return babelStream({
transformer: motionFile,
opts: opts
});
}
function app(opts) {
return babelStream({
transformer: motionApp,
opts: opts
});
}
exports['default'] = { file: file, app: app };
function babelOpts(file, opts) {
return Object.assign({}, opts, {
filename: file.path,
filenameRelative: file.relative,
sourceMap: Boolean(file.sourceMap)
});
}
function motionApp(file) {
var res = _libRequires.babel().transform(file.contents.toString(), babelOpts(file, _libConfig2['default'].app()));
return { res: res, file: file };
}
var babelCoreRequire = /require\(\'(babel\-runtime\/core\-js\/[a-zA-Z0-9]+\/?[a-zA-Z0-9]*\/?[a-zA-Z0-9]*)\'\)/g;
var getBabelCoreRequires = function getBabelCoreRequires(src) {
return _libGetMatches2['default'](src, babelCoreRequire, 1);
};
function motionFile(file) {
var track = {
imports: [],
isExported: false
};
var onImports = function onImports(imports) {
return track.imports.push(imports);
};
var onExports = function onExports(val) {
return track.isExported = val;
};
var res = _libRequires.babel().transform(file.contents.toString(), babelOpts(file, _libConfig2['default'].file({
log: _libFns.log,
onMeta: _libOnMeta2['default'],
writeStyle: _libWriteStyle2['default'],
onImports: onImports,
onExports: onExports
})));
var _res$metadata = res.metadata;
var usedHelpers = _res$metadata.usedHelpers;
var imports = _res$metadata.modules.imports;
var importedHelpers = usedHelpers && usedHelpers.map(function (name) {
return 'babel-runtime/helpers/' + name;
}) || [];
var importNames = imports.map(function (i) {
return i.source;
});
var meta = {
imports: [].concat(importNames, track.imports || [], importedHelpers || [], getBabelCoreRequires(res.code)),
isExported: track.isExported
};
_libFns.log.gulp('meta', meta);
return { res: res, meta: meta };
}
function babelStream(_ref) {
var transformer = _ref.transformer;
return _through22['default'].obj(function (file, enc, cb) {
if (file.isNull()) {
cb(null, file);
return;
}
try {
var _transformer = transformer(file);
var meta = _transformer.meta;
var res = _transformer.res;
file.babel = meta;
if (file.sourceMap && res.map) {
res.map.file = _replaceExt2['default'](res.map.file, '.js');
_vinylSourcemapsApply2['default'](file, res.map);
}
file.contents = new Buffer(res.code);
file.path = _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();
});
}