Comparing version 0.4.178 to 0.4.179
@@ -27,18 +27,2 @@ "use strict"; | ||
var Stack_1 = require("./Stack"); | ||
var upDirs_1 = require("./upDirs"); | ||
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 ConfigReader = (function () { | ||
@@ -105,2 +89,3 @@ function ConfigReader(spin, plugins) { | ||
builder.id = builderId; | ||
builder.configPath = filePath; | ||
builders[builderId] = builder; | ||
@@ -113,3 +98,2 @@ builder.buildDir = builder.backendBuildDir || builder.frontendBuildDir ? undefined : builder.buildDir || 'build'; | ||
builder.minify = typeof builder.minify !== 'undefined' ? builder.minify : true; | ||
builder.projectRoot = getProjectRoot(builder); | ||
builder.cache = | ||
@@ -116,0 +100,0 @@ typeof builder.cache === 'string' && builder.cache !== 'auto' |
@@ -14,3 +14,6 @@ "use strict"; | ||
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"); | ||
@@ -36,2 +39,17 @@ var ApolloPlugin_1 = require("./plugins/ApolloPlugin"); | ||
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 createConfig = function (cwd, cmd, argv, builderName) { | ||
@@ -58,3 +76,2 @@ var builders = {}; | ||
var spin = new Spin_1.default(cwd, cmd); | ||
var builderDiscoverer = new BuilderDiscoverer_1.default(spin, plugins, argv); | ||
var role = cmd; | ||
@@ -67,3 +84,10 @@ if (cmd === 'exp') { | ||
} | ||
var discoveredBuilders = builderDiscoverer.discover(); | ||
var discoveredBuilders; | ||
if (cluster.isMaster) { | ||
var builderDiscoverer = new BuilderDiscoverer_1.default(spin, plugins, argv); | ||
discoveredBuilders = builderDiscoverer.discover(); | ||
} | ||
else { | ||
discoveredBuilders = new ConfigReader_1.default(spin, plugins).readConfig(process.env.BUILDER_CONFIG_PATH); | ||
} | ||
if (!discoveredBuilders) { | ||
@@ -78,3 +102,3 @@ throw new Error('Cannot find spinjs config'); | ||
var stack = builder.stack; | ||
if (builder.roles.indexOf(role) < 0) { | ||
if (builder.roles.indexOf(role) < 0 || (process.env.BUILDER_ID && builderId !== process.env.BUILDER_ID)) { | ||
return "continue"; | ||
@@ -87,2 +111,5 @@ } | ||
builder.name === builderName; | ||
if (builder.enabled && !cluster.isMaster) { | ||
builder.projectRoot = getProjectRoot(builder); | ||
} | ||
if (spin.dev && builder.webpackDll && !stack.hasAny('server') && !builderName) { | ||
@@ -89,0 +116,0 @@ var dllBuilder = __assign({}, builder); |
@@ -1134,3 +1134,2 @@ "use strict"; | ||
var workerBuilders = {}; | ||
var potentialWorkerCount = 0; | ||
for (var _i = 0, _a = Object.keys(builders); _i < _a.length; _i++) { | ||
@@ -1142,5 +1141,2 @@ var id = _a[_i]; | ||
} | ||
if (builder.cluster !== false) { | ||
potentialWorkerCount++; | ||
} | ||
} | ||
@@ -1153,4 +1149,8 @@ for (var _b = 0, _c = Object.keys(builders); _b < _c.length; _b++) { | ||
} | ||
if (potentialWorkerCount > 1 && !builder.cluster) { | ||
var worker = cluster.fork({ BUILDER_ID: id, EXPO_PORTS: JSON.stringify(expoPorts) }); | ||
if (!builder.cluster) { | ||
var worker = cluster.fork({ | ||
BUILDER_ID: id, | ||
BUILDER_CONFIG_PATH: builder.configPath, | ||
EXPO_PORTS: JSON.stringify(expoPorts) | ||
}); | ||
workerBuilders[worker.process.pid] = builder; | ||
@@ -1157,0 +1157,0 @@ } |
@@ -14,2 +14,3 @@ "use strict"; | ||
var JSRuleFinder_1 = require("./shared/JSRuleFinder"); | ||
var JSRuleFinder_2 = require("./shared/JSRuleFinder"); | ||
var UPFinder_1 = require("./shared/UPFinder"); | ||
@@ -49,3 +50,3 @@ var babelRegisterDone = false; | ||
var babelrc = new UPFinder_1.default(builder).find(['.babelrc.native', 'babel.config.js']); | ||
var jsRuleFinder_1 = new JSRuleFinder_1.default(builder); | ||
var jsRuleFinder_1 = new JSRuleFinder_2.default(builder); | ||
var jsRule = jsRuleFinder_1.findAndCreateJSRule(); | ||
@@ -68,3 +69,3 @@ var cacheDirectory = builder.cache === false || (builder.cache === 'auto' && !spin.dev) | ||
.slice(0, -1)), | ||
exclude: /node_modules[\\\/](?!react-native.*|@module|@expo|expo|lottie-react-native|haul|pretty-format|react-navigation|antd-mobile-rn)$/, | ||
exclude: JSRuleFinder_1.excludeProjectModules(builder.projectRoot, /(react-native.*|@expo|expo|lottie-react-native|haul|pretty-format|react-navigation|antd-mobile-rn)/), | ||
use: { | ||
@@ -71,0 +72,0 @@ loader: builder.require.probe('heroku-babel-loader') ? 'heroku-babel-loader' : 'babel-loader', |
import { Builder } from '../../Builder'; | ||
export declare const excludeProjectModules: (projectRoot: string, includeNodeModulesRegexp?: RegExp) => (modulePath: any) => boolean; | ||
export default class JSRuleFinder { | ||
@@ -3,0 +4,0 @@ builder: Builder; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
var fs = require("fs"); | ||
var path = require("path"); | ||
var projectPackages = {}; | ||
var projectModules = {}; | ||
exports.excludeProjectModules = function (projectRoot, includeNodeModulesRegexp) { return function (modulePath) { | ||
var idx = modulePath.indexOf(path.sep + 'node_modules' + path.sep); | ||
if (idx >= 0) { | ||
if (includeNodeModulesRegexp && includeNodeModulesRegexp.test(modulePath)) { | ||
return false; | ||
} | ||
if (!projectModules[modulePath]) { | ||
var pkgPathStart = modulePath[idx + 14] !== '@' ? idx + 14 : modulePath.indexOf(path.sep, idx + 14) + 1; | ||
var pkgPathEnd = modulePath.indexOf(path.sep, pkgPathStart); | ||
if (pkgPathEnd < 0) { | ||
pkgPathEnd = modulePath.length; | ||
} | ||
var pkgPath = modulePath.substr(0, pkgPathEnd); | ||
if (!projectPackages[pkgPath]) { | ||
try { | ||
projectPackages[pkgPath] = | ||
fs.lstatSync(pkgPath).isSymbolicLink() && fs.realpathSync(pkgPath).indexOf(projectRoot) === 0; | ||
} | ||
catch (e) { | ||
projectPackages[pkgPath] = false; | ||
} | ||
} | ||
projectModules[modulePath] = projectPackages[pkgPath]; | ||
} | ||
return !projectModules[modulePath]; | ||
} | ||
else { | ||
return false; | ||
} | ||
}; }; | ||
var JSRuleFinder = (function () { | ||
@@ -27,3 +61,3 @@ function JSRuleFinder(builder) { | ||
} | ||
this.jsRule = { test: /\.js$/, exclude: /node_modules[\\\/](?!@module)/ }; | ||
this.jsRule = { test: /\.js$/, exclude: exports.excludeProjectModules(this.builder.projectRoot) }; | ||
this.builder.config.module.rules = this.builder.config.module.rules.concat(this.jsRule); | ||
@@ -55,3 +89,3 @@ return this.jsRule; | ||
} | ||
this.tsRule = { test: /\.ts$/, exclude: /node_modules[\\\/](?!@module)/ }; | ||
this.tsRule = { test: /\.ts$/, exclude: exports.excludeProjectModules(this.builder.projectRoot) }; | ||
this.builder.config.module.rules = this.builder.config.module.rules.concat(this.tsRule); | ||
@@ -58,0 +92,0 @@ return this.tsRule; |
{ | ||
"name": "spinjs", | ||
"version": "0.4.178", | ||
"version": "0.4.179", | ||
"main": "lib/index.js", | ||
@@ -5,0 +5,0 @@ "scripts": { |
@@ -6,7 +6,6 @@ import * as fs from 'fs'; | ||
import { Builder, Builders } from './Builder'; | ||
import { Builders } from './Builder'; | ||
import { ConfigPlugin } from './ConfigPlugin'; | ||
import ConfigReader from './ConfigReader'; | ||
import Spin from './Spin'; | ||
import Stack from './Stack'; | ||
@@ -13,0 +12,0 @@ export default class BuilderDiscoverer { |
@@ -5,3 +5,3 @@ import * as fs from 'fs'; | ||
import { Builder, Builders } from './Builder'; | ||
import { Builders } from './Builder'; | ||
import { ConfigPlugin } from './ConfigPlugin'; | ||
@@ -13,18 +13,3 @@ import createRequire from './createRequire'; | ||
import Stack from './Stack'; | ||
import upDirs from './upDirs'; | ||
const getProjectRoot = (builder: Builder) => { | ||
const pkgPathList = upDirs(builder.require.cwd, 'package.json'); | ||
let projectRoot; | ||
for (const pkg of pkgPathList) { | ||
if (fs.existsSync(pkg)) { | ||
try { | ||
JSON.parse(fs.readFileSync(pkg, 'utf8')); | ||
projectRoot = path.dirname(pkg); | ||
} catch (e) {} | ||
} | ||
} | ||
return projectRoot; | ||
}; | ||
export default class ConfigReader { | ||
@@ -94,2 +79,3 @@ private spin: Spin; | ||
builder.id = builderId; | ||
builder.configPath = filePath; | ||
builders[builderId] = builder; | ||
@@ -103,3 +89,2 @@ // TODO: remove backendBuildDir, frontendBuildDir in 0.5.x | ||
builder.minify = typeof builder.minify !== 'undefined' ? builder.minify : true; | ||
builder.projectRoot = getProjectRoot(builder); | ||
builder.cache = | ||
@@ -106,0 +91,0 @@ typeof builder.cache === 'string' && builder.cache !== 'auto' |
import * as cluster from 'cluster'; | ||
import * as fs from 'fs'; | ||
import * as minilog from 'minilog'; | ||
import * as path from 'path'; | ||
import upDirs from './upDirs'; | ||
@@ -8,2 +10,3 @@ import { Builder } from './Builder'; | ||
import { ConfigPlugin } from './ConfigPlugin'; | ||
import ConfigReader from './ConfigReader'; | ||
import AngularPlugin from './plugins/AngularPlugin'; | ||
@@ -32,2 +35,28 @@ import ApolloPlugin from './plugins/ApolloPlugin'; | ||
const getProjectRoot = (builder: Builder): string => { | ||
const pkgPathList = upDirs(builder.require.cwd, 'package.json'); | ||
let projectRoot; | ||
for (const pkg of pkgPathList) { | ||
if (fs.existsSync(pkg)) { | ||
try { | ||
JSON.parse(fs.readFileSync(pkg, 'utf8')); | ||
projectRoot = path.dirname(pkg); | ||
} catch (e) {} | ||
} | ||
} | ||
return projectRoot; | ||
}; | ||
// const getAppModuleRegexp = (projectRoot: string): string => { | ||
// const regexp = ''; | ||
// const files = fs.readdirSync(projectRoot); | ||
// files.forEach(file => { | ||
// if (file === 'node_modules') { | ||
// // searchInside(); | ||
// } | ||
// console.log(file, fs.statSync(file).isDirectory()); | ||
// }); | ||
// return regexp; | ||
// }; | ||
const createConfig = (cwd: string, cmd: string, argv: any, builderName?: string) => { | ||
@@ -55,3 +84,2 @@ const builders = {}; | ||
const spin = new Spin(cwd, cmd); | ||
const builderDiscoverer = new BuilderDiscoverer(spin, plugins, argv); | ||
let role = cmd; | ||
@@ -64,3 +92,10 @@ if (cmd === 'exp') { | ||
const discoveredBuilders = builderDiscoverer.discover(); | ||
let discoveredBuilders; | ||
if (cluster.isMaster) { | ||
const builderDiscoverer = new BuilderDiscoverer(spin, plugins, argv); | ||
discoveredBuilders = builderDiscoverer.discover(); | ||
} else { | ||
discoveredBuilders = new ConfigReader(spin, plugins).readConfig(process.env.BUILDER_CONFIG_PATH); | ||
} | ||
if (!discoveredBuilders) { | ||
@@ -76,3 +111,3 @@ throw new Error('Cannot find spinjs config'); | ||
const stack = builder.stack; | ||
if (builder.roles.indexOf(role) < 0) { | ||
if (builder.roles.indexOf(role) < 0 || (process.env.BUILDER_ID && builderId !== process.env.BUILDER_ID)) { | ||
continue; | ||
@@ -87,2 +122,7 @@ } | ||
if (builder.enabled && !cluster.isMaster) { | ||
builder.projectRoot = getProjectRoot(builder); | ||
// builder.appModuleRegexp = getAppModuleRegexp(builder.projectRoot); | ||
} | ||
if (spin.dev && builder.webpackDll && !stack.hasAny('server') && !builderName) { | ||
@@ -89,0 +129,0 @@ const dllBuilder: Builder = { ...builder }; |
@@ -1115,3 +1115,2 @@ import { exec, spawn } from 'child_process'; | ||
let potentialWorkerCount = 0; | ||
for (const id of Object.keys(builders)) { | ||
@@ -1122,5 +1121,2 @@ const builder = builders[id]; | ||
} | ||
if (builder.cluster !== false) { | ||
potentialWorkerCount++; | ||
} | ||
} | ||
@@ -1134,4 +1130,8 @@ | ||
if (potentialWorkerCount > 1 && !builder.cluster) { | ||
const worker = cluster.fork({ BUILDER_ID: id, EXPO_PORTS: JSON.stringify(expoPorts) }); | ||
if (!builder.cluster) { | ||
const worker = cluster.fork({ | ||
BUILDER_ID: id, | ||
BUILDER_CONFIG_PATH: builder.configPath, | ||
EXPO_PORTS: JSON.stringify(expoPorts) | ||
}); | ||
workerBuilders[worker.process.pid] = builder; | ||
@@ -1138,0 +1138,0 @@ } else { |
@@ -7,2 +7,3 @@ import * as fs from 'fs'; | ||
import Spin from '../Spin'; | ||
import { excludeProjectModules } from './shared/JSRuleFinder'; | ||
import JSRuleFinder from './shared/JSRuleFinder'; | ||
@@ -79,3 +80,6 @@ import UPFinder from './shared/UPFinder'; | ||
), | ||
exclude: /node_modules[\\\/](?!react-native.*|@module|@expo|expo|lottie-react-native|haul|pretty-format|react-navigation|antd-mobile-rn)$/, | ||
exclude: excludeProjectModules( | ||
builder.projectRoot, | ||
/(react-native.*|@expo|expo|lottie-react-native|haul|pretty-format|react-navigation|antd-mobile-rn)/ | ||
), | ||
use: { | ||
@@ -82,0 +86,0 @@ loader: builder.require.probe('heroku-babel-loader') ? 'heroku-babel-loader' : 'babel-loader', |
@@ -0,3 +1,37 @@ | ||
import * as fs from 'fs'; | ||
import * as path from 'path'; | ||
import { Builder } from '../../Builder'; | ||
const projectPackages = {}; | ||
const projectModules = {}; | ||
export const excludeProjectModules = (projectRoot: string, includeNodeModulesRegexp?: RegExp) => modulePath => { | ||
const idx = modulePath.indexOf(path.sep + 'node_modules' + path.sep); | ||
if (idx >= 0) { | ||
if (includeNodeModulesRegexp && includeNodeModulesRegexp.test(modulePath)) { | ||
return false; | ||
} | ||
if (!projectModules[modulePath]) { | ||
const pkgPathStart = modulePath[idx + 14] !== '@' ? idx + 14 : modulePath.indexOf(path.sep, idx + 14) + 1; | ||
let pkgPathEnd = modulePath.indexOf(path.sep, pkgPathStart); | ||
if (pkgPathEnd < 0) { | ||
pkgPathEnd = modulePath.length; | ||
} | ||
const pkgPath = modulePath.substr(0, pkgPathEnd); | ||
if (!projectPackages[pkgPath]) { | ||
try { | ||
projectPackages[pkgPath] = | ||
fs.lstatSync(pkgPath).isSymbolicLink() && fs.realpathSync(pkgPath).indexOf(projectRoot) === 0; | ||
} catch (e) { | ||
projectPackages[pkgPath] = false; | ||
} | ||
} | ||
projectModules[modulePath] = projectPackages[pkgPath]; | ||
} | ||
return !projectModules[modulePath]; | ||
} else { | ||
return false; | ||
} | ||
}; | ||
export default class JSRuleFinder { | ||
@@ -34,3 +68,3 @@ public builder: Builder; | ||
} | ||
this.jsRule = { test: /\.js$/, exclude: /node_modules[\\\/](?!@module)/ }; | ||
this.jsRule = { test: /\.js$/, exclude: excludeProjectModules(this.builder.projectRoot) }; | ||
this.builder.config.module.rules = this.builder.config.module.rules.concat(this.jsRule); | ||
@@ -65,3 +99,3 @@ return this.jsRule; | ||
} | ||
this.tsRule = { test: /\.ts$/, exclude: /node_modules[\\\/](?!@module)/ }; | ||
this.tsRule = { test: /\.ts$/, exclude: excludeProjectModules(this.builder.projectRoot) }; | ||
this.builder.config.module.rules = this.builder.config.module.rules.concat(this.tsRule); | ||
@@ -68,0 +102,0 @@ return this.tsRule; |
@@ -7,3 +7,2 @@ import * as humps from 'humps'; | ||
import { Builder } from '../Builder'; | ||
import BuilderDiscoverer from '../BuilderDiscoverer'; | ||
import { ConfigPlugin } from '../ConfigPlugin'; | ||
@@ -10,0 +9,0 @@ import Spin from '../Spin'; |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
474112
7952
29