spinjs
Version:
[](https://gitter.im/sysgears/spinjs?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [ || Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
Object.defineProperty(exports, "__esModule", { value: true });
var cluster = require("cluster");
var fs = require("fs");
var minilog = require("minilog");
var path = require("path");
var upDirs_1 = require("./upDirs");
var BuilderDiscoverer_1 = require("./BuilderDiscoverer");
var ConfigReader_1 = require("./ConfigReader");
var AngularPlugin_1 = require("./plugins/AngularPlugin");
var ApolloPlugin_1 = require("./plugins/ApolloPlugin");
var BabelPlugin_1 = require("./plugins/BabelPlugin");
var CssProcessorPlugin_1 = require("./plugins/CssProcessorPlugin");
var FlowRuntimePlugin_1 = require("./plugins/FlowRuntimePlugin");
var I18NextPlugin_1 = require("./plugins/I18NextPlugin");
var ReactHotLoaderPlugin_1 = require("./plugins/ReactHotLoaderPlugin");
var ReactNativePlugin_1 = require("./plugins/ReactNativePlugin");
var ReactNativeWebPlugin_1 = require("./plugins/ReactNativeWebPlugin");
var ReactPlugin_1 = require("./plugins/ReactPlugin");
var RestPlugin_1 = require("./plugins/RestPlugin");
var StyledComponentsPlugin_1 = require("./plugins/StyledComponentsPlugin");
var TCombPlugin_1 = require("./plugins/TCombPlugin");
var TypeScriptPlugin_1 = require("./plugins/TypeScriptPlugin");
var VuePlugin_1 = require("./plugins/VuePlugin");
var WebAssetsPlugin_1 = require("./plugins/WebAssetsPlugin");
var WebpackPlugin_1 = require("./plugins/WebpackPlugin");
var Spin_1 = require("./Spin");
var Stack_1 = require("./Stack");
var WEBPACK_OVERRIDES_NAME = 'webpack.overrides.js';
var spinLogger = minilog('spin');
var getProjectRoot = function (builder) {
var pkgPathList = upDirs_1.default(builder.require.cwd, 'package.json');
var projectRoot;
for (var _i = 0, pkgPathList_1 = pkgPathList; _i < pkgPathList_1.length; _i++) {
var pkg = pkgPathList_1[_i];
if (fs.existsSync(pkg)) {
try {
JSON.parse(fs.readFileSync(pkg, 'utf8'));
projectRoot = path.dirname(pkg);
}
catch (e) { }
}
}
return projectRoot;
};
var createBuilders = function (_a) {
var cwd = _a.cwd, cmd = _a.cmd, argv = _a.argv, builderName = _a.builderName, builderOverrides = _a.builderOverrides, genConfigOverrides = _a.genConfigOverrides;
var builders = {};
var plugins = [
new WebpackPlugin_1.default(),
new WebAssetsPlugin_1.default(),
new CssProcessorPlugin_1.default(),
new ApolloPlugin_1.default(),
new TypeScriptPlugin_1.default(),
new BabelPlugin_1.default(),
new ReactPlugin_1.default(),
new ReactHotLoaderPlugin_1.default(),
new TCombPlugin_1.default(),
new FlowRuntimePlugin_1.default(),
new ReactNativePlugin_1.default(),
new ReactNativeWebPlugin_1.default(),
new StyledComponentsPlugin_1.default(),
new AngularPlugin_1.default(),
new VuePlugin_1.default(),
new I18NextPlugin_1.default(),
new RestPlugin_1.default()
];
var spin = new Spin_1.default(cwd, cmd);
var role = cmd;
if (cmd === 'exp') {
role = 'build';
}
else if (cmd === 'start') {
role = 'watch';
}
var discoveredBuilders;
if (cluster.isMaster) {
var builderDiscoverer = new BuilderDiscoverer_1.default(spin, plugins, argv);
discoveredBuilders = builderDiscoverer.discover(builderOverrides);
}
else {
discoveredBuilders = new ConfigReader_1.default(spin, plugins).readConfig({
filePath: process.env.BUILDER_CONFIG_PATH,
builderOverrides: builderOverrides
});
}
if (!discoveredBuilders) {
throw new Error('Cannot find spinjs config');
}
if (cluster.isMaster && argv.verbose) {
spinLogger.log('SpinJS Config:\n', require('util').inspect(discoveredBuilders, false, null));
}
var _loop_1 = function (builderId) {
var builder = discoveredBuilders[builderId];
var stack = builder.stack;
if (builder.roles.indexOf(role) < 0 || (process.env.BUILDER_ID && builderId !== process.env.BUILDER_ID)) {
return "continue";
}
builder.enabled =
(builder.enabled !== false && !argv.d) ||
(builder.enabled !== false && argv.d && ![].concat(argv.d).some(function (regex) { return new RegExp(regex).test(builderId); })) ||
(builder.enabled === false && argv.e && [].concat(argv.e).some(function (regex) { return new RegExp(regex).test(builderId); })) ||
builder.name === builderName;
if (builder.enabled && (!cluster.isMaster || ['exp', 'test'].indexOf(cmd) >= 0)) {
builder.projectRoot = getProjectRoot(builder);
}
if (spin.dev && builder.webpackDll && !stack.hasAny('server') && !builderName) {
var dllBuilder = __assign({}, builder);
dllBuilder.name = builder.name + 'Dll';
dllBuilder.require = builder.require;
dllBuilder.parent = builder;
dllBuilder.stack = new (Stack_1.default.bind.apply(Stack_1.default, [void 0, dllBuilder.name].concat(dllBuilder.stack.technologies, ['dll'])))();
builders[builderId.split('[')[0] + "[" + builder.name + "Dll]"] = dllBuilder;
builder.child = dllBuilder;
}
builders[builderId] = builder;
};
for (var _i = 0, _b = Object.keys(discoveredBuilders); _i < _b.length; _i++) {
var builderId = _b[_i];
_loop_1(builderId);
}
var _loop_2 = function (builderId) {
var builder = builders[builderId];
if (!builder.enabled) {
return "continue";
}
var overridesConfig = builder.overridesConfig || WEBPACK_OVERRIDES_NAME;
var overrides = fs.existsSync(overridesConfig) ? builder.require('./' + overridesConfig) : {};
builder.depPlatforms = overrides.dependencyPlatforms || builder.depPlatforms || {};
builder.dllExcludes = builder.dllExcludes || [];
builder.plugins.forEach(function (plugin) { return plugin.configure(builder, spin); });
var strategy = {
entry: 'replace',
stats: 'replace'
};
if (overrides[builder.name]) {
builder.config = spin.mergeWithStrategy(strategy, builder.config, overrides[builder.name]);
}
builder.config = spin.mergeWithInStrategy(spin.createConfig(builder, 'webpack', builder.config), genConfigOverrides);
};
for (var _c = 0, _d = Object.keys(builders); _c < _d.length; _c++) {
var builderId = _d[_c];
_loop_2(builderId);
}
return { builders: builders, spin: spin };
};
exports.default = createBuilders;
//# sourceMappingURL=createBuilders.js.map