spinjs
Version:
<p align="center"><a href="#"><img width="150" src="https://rawgit.com/sysgears/jsapp/master/packages/spinjs/logo.svg"></a></p>
152 lines • 5.01 kB
JavaScript
;
var __assign = (this && this.__assign) || 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 fs = require("fs");
var path = require("path");
var createRequire_1 = require("./createRequire");
var upDirs_1 = require("./upDirs");
var getDeps = function (packageJsonPath, requireDep, deps) {
var pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
var pkgDeps = Object.keys(pkg.dependencies || {});
var result = __assign({}, deps);
for (var _i = 0, pkgDeps_1 = pkgDeps; _i < pkgDeps_1.length; _i++) {
var dep = pkgDeps_1[_i];
if (!dep.startsWith('.') && !result[dep]) {
var depPkg = void 0;
try {
depPkg = requireDep.resolve(dep + '/package.json');
}
catch (e) { }
if (depPkg) {
result[dep] = depPkg;
var subDeps = getDeps(depPkg, requireDep, result);
result = __assign({}, result, subDeps);
}
}
}
return result;
};
var entryExts = ['js', 'jsx', 'ts', 'tsx'];
var entryDirs = ['.', 'src'];
var entryCandidates = [];
var _loop_1 = function (dir) {
entryCandidates = entryCandidates.concat(entryExts.map(function (ext) { return './' + path.join(dir, 'index.' + ext); }));
};
for (var _i = 0, entryDirs_1 = entryDirs; _i < entryDirs_1.length; _i++) {
var dir = entryDirs_1[_i];
_loop_1(dir);
}
var isSpinApp = function (pkg) {
return (Object.keys(pkg.dependencies || {})
.concat(Object.keys(pkg.devDependencies || {}))
.indexOf('spinjs') >= 0 ||
(pkg.scripts && pkg.scripts.build && pkg.scripts.build.indexOf('spin build') >= 0));
};
exports.default = (function (pkg, pkgJsonPath) {
var _a, _b;
if (!isSpinApp(pkg)) {
return undefined;
}
var pkgPathList = upDirs_1.default(path.dirname(pkgJsonPath), 'package.json');
var deps = {};
for (var _i = 0, pkgPathList_1 = pkgPathList; _i < pkgPathList_1.length; _i++) {
var pkgPath = pkgPathList_1[_i];
if (fs.existsSync(pkgPath)) {
var pkgJson = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
var requireDep = createRequire_1.default(path.dirname(pkgPath));
deps = __assign({}, deps, getDeps(pkgPath, requireDep, {}), (pkgJson.devDependencies || {}));
}
}
var entry;
for (var _c = 0, entryCandidates_1 = entryCandidates; _c < entryCandidates_1.length; _c++) {
var entryPath = entryCandidates_1[_c];
if (fs.existsSync(path.join(path.dirname(pkgJsonPath), entryPath))) {
entry = entryPath;
break;
}
}
if (!entry) {
throw new Error('Cannot find entry file, tried: ' + entryCandidates);
}
var stack = [];
if (deps['apollo-server-express']) {
stack.push('server');
}
if (deps['react-native']) {
stack.push('android');
}
else if (deps['react-dom']) {
stack.push('web');
}
if (deps['babel-core']) {
stack.push('es6');
}
stack.push('js');
if (deps.typescript) {
stack.push('ts');
}
if (deps['apollo-server-express'] || deps['react-apollo'] || deps['apollo-boost'] || deps['apollo-link']) {
stack.push('apollo');
}
if (deps.react) {
stack.push('react');
}
if (deps['react-native']) {
stack.push('react-native');
}
if (deps['styled-components']) {
stack.push('styled-components');
}
if (deps['css-loader']) {
stack.push('css');
}
if (deps['sass-loader']) {
stack.push('sass');
}
if (deps['less-loader']) {
stack.push('less');
}
if (deps.webpack) {
stack.push('webpack');
}
var config;
var builderDefaults = {
entry: entry,
silent: true,
nodeDebugger: false
};
if (stack.indexOf('react-native') >= 0) {
var builderAndroid = __assign({ stack: stack }, builderDefaults);
var iosStack = stack.slice();
iosStack[stack.indexOf('android')] = 'ios';
var builderIOS = __assign({ stack: iosStack }, builderDefaults);
config = {
builders: (_a = {},
_a[pkg.name + '-android'] = builderAndroid,
_a[pkg.name + '-ios'] = builderIOS,
_a),
options: {
defines: {
__DEV__: process.env.NODE_ENV !== 'production'
}
}
};
}
else {
var builder = __assign({ stack: stack }, builderDefaults);
config = {
builders: (_b = {},
_b[pkg.name] = builder,
_b)
};
}
return config;
});
//# sourceMappingURL=inferConfig.js.map