forked from daren.hsu/line_push
26 lines
858 B
JavaScript
26 lines
858 B
JavaScript
'use strict';
|
|
|
|
var UNNAMED = /(^|;|\s+)import\s*['"]([^'"]+)['"](?=($|;|\s))/gi;
|
|
var NAMED = /(^|[;\s]+)?import\s*(\*\s*as)?\s*(\w*?)\s*,?\s*(?:\{([\s\S]*?)\})?\s*from\s*['"]([^'"]+)['"];?/gi;
|
|
|
|
function destruct(keys, target) {
|
|
var out=[];
|
|
while (keys.length) out.push(keys.shift().trim().replace(/ as /g, ':'));
|
|
return 'const { ' + out.join(', ') + ' } = ' + target + ';';
|
|
}
|
|
|
|
function generate(keys, dep, base, fn) {
|
|
dep = fn + "('" + dep + "')";
|
|
if (keys.length && !base) return destruct(keys, dep);
|
|
return 'const ' + base + ' = ' + dep + ';' + (keys.length ? '\n' + destruct(keys, base) : '');
|
|
}
|
|
|
|
module.exports = function (str, fn) {
|
|
fn = fn || 'require';
|
|
return str
|
|
.replace(UNNAMED, "$1" + fn + "('$2')")
|
|
.replace(NAMED, function (x, y, z, base, req, dep) {
|
|
return (y || '') + generate(req ? req.split(',') : [], dep, base, fn);
|
|
});
|
|
}
|