Jordan Klassen dc1f40540d Upgrade to lodash 4 (#3315)
* Upgrade to lodash 4

* Fix incorrect require in babel-runtime/scripts

* Replace cloneDeep with cloneDeepWith where applicable
2016-05-13 17:15:14 -04:00

134 lines
3.9 KiB
JavaScript

var outputFile = require("output-file-sync");
var each = require("lodash/each");
var fs = require("fs");
var _ = require("lodash");
var coreDefinitions = require("babel-plugin-transform-runtime").definitions;
var paths = ["is-iterable", "get-iterator"];
each(coreDefinitions.builtins, function (path) {
paths.push(path);
});
each(coreDefinitions.methods, function (props) {
each(props, function (path) {
paths.push(path);
});
});
each(paths, function (path) {
writeFile("core-js/" + path + ".js", defaultify('require("core-js/library/fn/' + path + '")'));
});
// Should be removed in the next major release:
var legacy = {
"string/pad-left": "string/pad-start",
"string/pad-right": "string/pad-end"
};
each(legacy, function (value, key) {
writeFile("core-js/" + key + ".js", defaultify('require("core-js/library/fn/' + value + '")'));
});
var template = require("babel-template");
var helpers = require("babel-helpers");
var babel = require("../../babel-core");
var util = require("../../babel-core/lib/util");
var t = require("../../babel-types");
function relative(filename) {
return __dirname + "/../" + filename;
}
function readFile(filename, shouldDefaultify) {
var file = fs.readFileSync(require.resolve(filename), "utf8");
if (shouldDefaultify) {
file += "\n" + defaultify("module.exports") + "\n";
}
return file;
}
function defaultify(name) {
return 'module.exports = { "default": ' + name + ', __esModule: true };';
}
function writeRootFile(filename, content) {
filename = relative(filename);
//console.log(filename);
outputFile(filename, content);
}
function writeFile(filename, content) {
return writeRootFile(filename, content);
}
var transformOpts = {
presets: [
require("../../babel-preset-es2015")
],
plugins: [
require("../../babel-plugin-transform-runtime"),
[require("../../babel-plugin-transform-es2015-modules-commonjs"), {loose: true, strict: false}]
]
};
function buildRuntimeRewritePlugin(relativePath, helperName) {
return {
pre: function (file){
var original = file.get("helperGenerator");
file.set("helperGenerator", function(name){
// make sure that helpers won't insert circular references to themselves
if (name === helperName) return;
return original(name);
});
},
visitor: {
CallExpression: function(path){
if (!path.get("callee").isIdentifier({name: "require"}) ||
path.get("arguments").length !== 1 ||
!path.get("arguments")[0].isStringLiteral()) return;
// replace any reference to babel-runtime with a relative path
path.get("arguments")[0].node.value = path.get("arguments")[0].node.value
.replace(/^babel-runtime/, relativePath);
}
}
};
}
function selfContainify(path, code) {
return babel.transform(code, {
presets: transformOpts.presets,
plugins: transformOpts.plugins.concat([buildRuntimeRewritePlugin(path, null)])
}).code;
}
function buildHelper(helperName) {
var tree = t.program([
t.exportDefaultDeclaration(helpers.get(helperName))
]);
return babel.transformFromAst(tree, null, {
presets: transformOpts.presets,
plugins: transformOpts.plugins.concat([buildRuntimeRewritePlugin("..", helperName)])
}).code;
}
each(helpers.list, function (helperName) {
writeFile("helpers/" + helperName + ".js", buildHelper(helperName));
// compat
var helperAlias = _.kebabCase(helperName);
var content = "module.exports = require(\"./" + helperName + ".js\");";
writeFile("helpers/_" + helperAlias + ".js", content);
if (helperAlias !== helperName) writeFile("helpers/" + helperAlias + ".js", content);
});
writeFile("regenerator/index.js", readFile("../../babel-regenerator-runtime/runtime-module", true));
writeFile("regenerator/runtime.js", selfContainify("..", readFile("../../babel-regenerator-runtime/runtime")));