each-package
Advanced tools
+12
-27
@@ -15,5 +15,5 @@ "use strict"; | ||
| var _path = /*#__PURE__*/ _interop_require_default(require("path")); | ||
| var _spawnterm = require("spawn-term"); | ||
| var _url = /*#__PURE__*/ _interop_require_default(require("url")); | ||
| var _indexts = /*#__PURE__*/ _interop_require_default(require("./index.js")); | ||
| var _loadSpawnTermts = /*#__PURE__*/ _interop_require_default(require("./lib/loadSpawnTerm.js")); | ||
| function _interop_require_default(obj) { | ||
@@ -101,31 +101,16 @@ return obj && obj.__esModule ? obj : { | ||
| if (!options.silent) { | ||
| // Load spawn-term to get figures/formatArguments for output formatting | ||
| (0, _loadSpawnTermts.default)(function(_loadErr, mod) { | ||
| var _ref = mod || { | ||
| createSession: undefined, | ||
| figures: { | ||
| tick: '✓', | ||
| cross: '✗' | ||
| }, | ||
| formatArguments: function(x) { | ||
| return x; | ||
| } | ||
| }, createSession = _ref.createSession, figures = _ref.figures, formatArguments = _ref.formatArguments; | ||
| if (!createSession) { | ||
| console.log('\n======================'); | ||
| results.forEach(function(res) { | ||
| console.log("".concat(res.error ? figures.cross : figures.tick, " ").concat(res.path).concat(res.error ? " Error: ".concat(res.error.message) : '')); | ||
| }); | ||
| console.log('\n----------------------'); | ||
| console.log("".concat(name, " ").concat(formatArguments(args))); | ||
| console.log("".concat(figures.tick, " ").concat(results.length - errors.length, " succeeded")); | ||
| if (errors.length) console.log("".concat(figures.cross, " ").concat(errors.length, " failed")); | ||
| } | ||
| (0, _exit.default)(err || errors.length ? ERROR_CODE : 0); | ||
| }); | ||
| } else { | ||
| (0, _exit.default)(err || errors.length ? ERROR_CODE : 0); | ||
| if (!_spawnterm.createSession) { | ||
| console.log('\n======================'); | ||
| results.forEach(function(res) { | ||
| console.log("".concat(res.error ? _spawnterm.figures.cross : _spawnterm.figures.tick, " ").concat(res.path).concat(res.error ? " Error: ".concat(res.error.message) : '')); | ||
| }); | ||
| console.log('\n----------------------'); | ||
| console.log("".concat(name, " ").concat((0, _spawnterm.formatArguments)(args))); | ||
| console.log("".concat(_spawnterm.figures.tick, " ").concat(results.length - errors.length, " succeeded")); | ||
| if (errors.length) console.log("".concat(_spawnterm.figures.cross, " ").concat(errors.length, " failed")); | ||
| } | ||
| } | ||
| (0, _exit.default)(err || errors.length ? ERROR_CODE : 0); | ||
| }); | ||
| }; | ||
| /* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; } |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["/Users/kevin/Dev/OpenSource/monorepo/each-package/src/cli.ts"],"sourcesContent":["import exit from 'exit';\nimport fs from 'fs';\nimport getopts from 'getopts-compat';\nimport path from 'path';\nimport url from 'url';\nimport run from './index.ts';\nimport loadSpawnTerm from './lib/loadSpawnTerm.ts';\n\nconst ERROR_CODE = 5;\nconst __dirname = path.dirname(typeof __filename !== 'undefined' ? __filename : url.fileURLToPath(import.meta.url));\n\nimport type { EachError, EachOptions, EachResult } from './types.ts';\n\nfunction getVersion(): string {\n const packagePath = path.resolve(__dirname, '..', '..', 'package.json');\n const packageJson = JSON.parse(fs.readFileSync(packagePath, 'utf8'));\n return packageJson.version;\n}\n\nfunction showHelp(name: string): void {\n const version = getVersion();\n console.log(`${name} v${version}`);\n console.log('');\n console.log(`Usage: ${name} [options] <command> [args...]\n\nRun commands in each package folder within a monorepo.\n\nOptions:\n -d, --depth <n> Maximum depth to search for packages (default: Infinity)\n -c, --concurrency <n> Number of packages to process in parallel (default: Infinity)\n -t, --topological Process packages in topological order based on dependencies\n -fd, --fail-dependents Skip packages whose dependencies failed (use with -t)\n -e, --expanded Use expanded terminal UI for output\n -s, --streaming Stream output as it happens\n -si, --silent Suppress output\n -p, --private Include private packages\n -i, --ignore <pattern> Ignore packages matching pattern (default: node_modules,.git)\n -r, --root Include the root package\n -I, --interactive Enable interactive mode (default: true)\n -v, --version Show version number\n -h, --help Show this help message\n\nExamples:\n ${name} npm install Run 'npm install' in each package\n ${name} -t npm test Run 'npm test' in topological order\n ${name} -c 4 npm build Run 'npm build' with concurrency of 4`);\n}\n\nexport default (argv: string[], name: string): undefined => {\n const options = getopts(argv, {\n alias: { depth: 'd', concurrency: 'c', topological: 't', failDependents: 'fd', expanded: 'e', streaming: 's', silent: 'si', private: 'p', ignore: 'i', root: 'r', interactive: 'I', version: 'v', help: 'h' },\n boolean: ['topological', 'failDependents', 'expanded', 'streaming', 'silent', 'private', 'root', 'interactive', 'version', 'help'],\n default: { depth: Infinity, concurrency: Infinity, interactive: true },\n stopEarly: true,\n });\n\n if (options.version) {\n console.log(getVersion());\n exit(0);\n return;\n }\n\n if (options.help) {\n showHelp(name);\n exit(0);\n return;\n }\n\n const args = options._;\n if (args.length === 0) {\n console.log(`Missing command. Example usage: ${name} [command]`);\n exit(ERROR_CODE);\n return;\n }\n\n options.stdio = 'inherit'; // pass through stdio\n run(args[0], args.slice(1), options as EachOptions, (err?: EachError, results?: EachResult[]): undefined => {\n if (err && !err.results) {\n console.log(err.message);\n exit(ERROR_CODE);\n return;\n }\n if (err) results = err.results;\n const errors = results.filter((result) => !!result.error);\n\n if (!options.silent) {\n // Load spawn-term to get figures/formatArguments for output formatting\n loadSpawnTerm((_loadErr, mod) => {\n const { createSession, figures, formatArguments } = mod || { createSession: undefined, figures: { tick: '✓', cross: '✗' }, formatArguments: (x: string[]) => x };\n if (!createSession) {\n console.log('\\n======================');\n results.forEach((res) => {\n console.log(`${res.error ? figures.cross : figures.tick} ${res.path}${res.error ? ` Error: ${res.error.message}` : ''}`);\n });\n console.log('\\n----------------------');\n console.log(`${name} ${formatArguments(args)}`);\n console.log(`${figures.tick} ${results.length - errors.length} succeeded`);\n if (errors.length) console.log(`${figures.cross} ${errors.length} failed`);\n }\n exit(err || errors.length ? ERROR_CODE : 0);\n });\n } else {\n exit(err || errors.length ? ERROR_CODE : 0);\n }\n });\n};\n"],"names":["ERROR_CODE","__dirname","path","dirname","__filename","url","fileURLToPath","getVersion","packagePath","resolve","packageJson","JSON","parse","fs","readFileSync","version","showHelp","name","console","log","argv","options","getopts","alias","depth","concurrency","topological","failDependents","expanded","streaming","silent","private","ignore","root","interactive","help","boolean","default","Infinity","stopEarly","exit","args","_","length","stdio","run","slice","err","results","message","errors","filter","result","error","loadSpawnTerm","_loadErr","mod","createSession","undefined","figures","tick","cross","formatArguments","x","forEach","res"],"mappings":";;;;+BAgDA;;;eAAA;;;2DAhDiB;yDACF;oEACK;2DACH;0DACD;8DACA;sEACU;;;;;;AAE1B,IAAMA,aAAa;AACnB,IAAMC,YAAYC,aAAI,CAACC,OAAO,CAAC,OAAOC,eAAe,cAAcA,aAAaC,YAAG,CAACC,aAAa,CAAC;AAIlG,SAASC;IACP,IAAMC,cAAcN,aAAI,CAACO,OAAO,CAACR,WAAW,MAAM,MAAM;IACxD,IAAMS,cAAcC,KAAKC,KAAK,CAACC,WAAE,CAACC,YAAY,CAACN,aAAa;IAC5D,OAAOE,YAAYK,OAAO;AAC5B;AAEA,SAASC,SAASC,IAAY;IAC5B,IAAMF,UAAUR;IAChBW,QAAQC,GAAG,CAAC,AAAC,GAAWJ,OAATE,MAAK,MAAY,OAARF;IACxBG,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG,CAAC,AAAC,UAoBXF,OApBoBA,MAAK,u8BAqBzBA,OADAA,MAAK,2DAELA,OADAA,MAAK,6DACA,OAALA,MAAK;AACT;IAEA,WAAe,SAACG,MAAgBH;IAC9B,IAAMI,UAAUC,IAAAA,sBAAO,EAACF,MAAM;QAC5BG,OAAO;YAAEC,OAAO;YAAKC,aAAa;YAAKC,aAAa;YAAKC,gBAAgB;YAAMC,UAAU;YAAKC,WAAW;YAAKC,QAAQ;YAAMC,SAAS;YAAKC,QAAQ;YAAKC,MAAM;YAAKC,aAAa;YAAKnB,SAAS;YAAKoB,MAAM;QAAI;QAC5MC,SAAS;YAAC;YAAe;YAAkB;YAAY;YAAa;YAAU;YAAW;YAAQ;YAAe;YAAW;SAAO;QAClIC,SAAS;YAAEb,OAAOc;YAAUb,aAAaa;YAAUJ,aAAa;QAAK;QACrEK,WAAW;IACb;IAEA,IAAIlB,QAAQN,OAAO,EAAE;QACnBG,QAAQC,GAAG,CAACZ;QACZiC,IAAAA,aAAI,EAAC;QACL;IACF;IAEA,IAAInB,QAAQc,IAAI,EAAE;QAChBnB,SAASC;QACTuB,IAAAA,aAAI,EAAC;QACL;IACF;IAEA,IAAMC,OAAOpB,QAAQqB,CAAC;IACtB,IAAID,KAAKE,MAAM,KAAK,GAAG;QACrBzB,QAAQC,GAAG,CAAC,AAAC,mCAAuC,OAALF,MAAK;QACpDuB,IAAAA,aAAI,EAACxC;QACL;IACF;IAEAqB,QAAQuB,KAAK,GAAG,WAAW,qBAAqB;IAChDC,IAAAA,gBAAG,EAACJ,IAAI,CAAC,EAAE,EAAEA,KAAKK,KAAK,CAAC,IAAIzB,SAAwB,SAAC0B,KAAiBC;QACpE,IAAID,OAAO,CAACA,IAAIC,OAAO,EAAE;YACvB9B,QAAQC,GAAG,CAAC4B,IAAIE,OAAO;YACvBT,IAAAA,aAAI,EAACxC;YACL;QACF;QACA,IAAI+C,KAAKC,UAAUD,IAAIC,OAAO;QAC9B,IAAME,SAASF,QAAQG,MAAM,CAAC,SAACC;mBAAW,CAAC,CAACA,OAAOC,KAAK;;QAExD,IAAI,CAAChC,QAAQS,MAAM,EAAE;YACnB,uEAAuE;YACvEwB,IAAAA,wBAAa,EAAC,SAACC,UAAUC;gBACvB,IAAoDA,OAAAA,OAAO;oBAAEC,eAAeC;oBAAWC,SAAS;wBAAEC,MAAM;wBAAKC,OAAO;oBAAI;oBAAGC,iBAAiB,SAACC;+BAAgBA;;gBAAE,GAAvJN,gBAA4CD,KAA5CC,eAAeE,UAA6BH,KAA7BG,SAASG,kBAAoBN,KAApBM;gBAChC,IAAI,CAACL,eAAe;oBAClBvC,QAAQC,GAAG,CAAC;oBACZ6B,QAAQgB,OAAO,CAAC,SAACC;wBACf/C,QAAQC,GAAG,CAAC,AAAC,GAA8C8C,OAA5CA,IAAIZ,KAAK,GAAGM,QAAQE,KAAK,GAAGF,QAAQC,IAAI,EAAC,KAAcK,OAAXA,IAAI/D,IAAI,EAAmD,OAAhD+D,IAAIZ,KAAK,GAAG,AAAC,WAA4B,OAAlBY,IAAIZ,KAAK,CAACJ,OAAO,IAAK;oBACrH;oBACA/B,QAAQC,GAAG,CAAC;oBACZD,QAAQC,GAAG,CAAC,AAAC,GAAU2C,OAAR7C,MAAK,KAAyB,OAAtB6C,gBAAgBrB;oBACvCvB,QAAQC,GAAG,CAAC,AAAC,GAAkB6B,OAAhBW,QAAQC,IAAI,EAAC,KAAkC,OAA/BZ,QAAQL,MAAM,GAAGO,OAAOP,MAAM,EAAC;oBAC9D,IAAIO,OAAOP,MAAM,EAAEzB,QAAQC,GAAG,CAAC,AAAC,GAAmB+B,OAAjBS,QAAQE,KAAK,EAAC,KAAiB,OAAdX,OAAOP,MAAM,EAAC;gBACnE;gBACAH,IAAAA,aAAI,EAACO,OAAOG,OAAOP,MAAM,GAAG3C,aAAa;YAC3C;QACF,OAAO;YACLwC,IAAAA,aAAI,EAACO,OAAOG,OAAOP,MAAM,GAAG3C,aAAa;QAC3C;IACF;AACF"} | ||
| {"version":3,"sources":["/Users/kevin/Dev/OpenSource/monorepo/each-package/src/cli.ts"],"sourcesContent":["import exit from 'exit';\nimport fs from 'fs';\nimport getopts from 'getopts-compat';\nimport path from 'path';\nimport { createSession, figures, formatArguments } from 'spawn-term';\nimport url from 'url';\nimport run from './index.ts';\n\nconst ERROR_CODE = 5;\nconst __dirname = path.dirname(typeof __filename !== 'undefined' ? __filename : url.fileURLToPath(import.meta.url));\n\nimport type { EachError, EachOptions, EachResult } from './types.ts';\n\nfunction getVersion(): string {\n const packagePath = path.resolve(__dirname, '..', '..', 'package.json');\n const packageJson = JSON.parse(fs.readFileSync(packagePath, 'utf8'));\n return packageJson.version;\n}\n\nfunction showHelp(name: string): void {\n const version = getVersion();\n console.log(`${name} v${version}`);\n console.log('');\n console.log(`Usage: ${name} [options] <command> [args...]\n\nRun commands in each package folder within a monorepo.\n\nOptions:\n -d, --depth <n> Maximum depth to search for packages (default: Infinity)\n -c, --concurrency <n> Number of packages to process in parallel (default: Infinity)\n -t, --topological Process packages in topological order based on dependencies\n -fd, --fail-dependents Skip packages whose dependencies failed (use with -t)\n -e, --expanded Use expanded terminal UI for output\n -s, --streaming Stream output as it happens\n -si, --silent Suppress output\n -p, --private Include private packages\n -i, --ignore <pattern> Ignore packages matching pattern (default: node_modules,.git)\n -r, --root Include the root package\n -I, --interactive Enable interactive mode (default: true)\n -v, --version Show version number\n -h, --help Show this help message\n\nExamples:\n ${name} npm install Run 'npm install' in each package\n ${name} -t npm test Run 'npm test' in topological order\n ${name} -c 4 npm build Run 'npm build' with concurrency of 4`);\n}\n\nexport default (argv: string[], name: string): undefined => {\n const options = getopts(argv, {\n alias: { depth: 'd', concurrency: 'c', topological: 't', failDependents: 'fd', expanded: 'e', streaming: 's', silent: 'si', private: 'p', ignore: 'i', root: 'r', interactive: 'I', version: 'v', help: 'h' },\n boolean: ['topological', 'failDependents', 'expanded', 'streaming', 'silent', 'private', 'root', 'interactive', 'version', 'help'],\n default: { depth: Infinity, concurrency: Infinity, interactive: true },\n stopEarly: true,\n });\n\n if (options.version) {\n console.log(getVersion());\n exit(0);\n return;\n }\n\n if (options.help) {\n showHelp(name);\n exit(0);\n return;\n }\n\n const args = options._;\n if (args.length === 0) {\n console.log(`Missing command. Example usage: ${name} [command]`);\n exit(ERROR_CODE);\n return;\n }\n\n options.stdio = 'inherit'; // pass through stdio\n run(args[0], args.slice(1), options as EachOptions, (err?: EachError, results?: EachResult[]): undefined => {\n if (err && !err.results) {\n console.log(err.message);\n exit(ERROR_CODE);\n return;\n }\n if (err) results = err.results;\n const errors = results.filter((result) => !!result.error);\n\n if (!options.silent) {\n if (!createSession) {\n console.log('\\n======================');\n results.forEach((res) => {\n console.log(`${res.error ? figures.cross : figures.tick} ${res.path}${res.error ? ` Error: ${res.error.message}` : ''}`);\n });\n console.log('\\n----------------------');\n console.log(`${name} ${formatArguments(args)}`);\n console.log(`${figures.tick} ${results.length - errors.length} succeeded`);\n if (errors.length) console.log(`${figures.cross} ${errors.length} failed`);\n }\n }\n exit(err || errors.length ? ERROR_CODE : 0);\n });\n};\n"],"names":["ERROR_CODE","__dirname","path","dirname","__filename","url","fileURLToPath","getVersion","packagePath","resolve","packageJson","JSON","parse","fs","readFileSync","version","showHelp","name","console","log","argv","options","getopts","alias","depth","concurrency","topological","failDependents","expanded","streaming","silent","private","ignore","root","interactive","help","boolean","default","Infinity","stopEarly","exit","args","_","length","stdio","run","slice","err","results","message","errors","filter","result","error","createSession","forEach","res","figures","cross","tick","formatArguments"],"mappings":"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"} |
+104
-109
@@ -14,4 +14,4 @@ "use strict"; | ||
| var _spawnstreaming = /*#__PURE__*/ _interop_require_default(require("spawn-streaming")); | ||
| var _spawnterm = require("spawn-term"); | ||
| var _topologicalscheduler = /*#__PURE__*/ _interop_require_default(require("topological-scheduler")); | ||
| var _loadSpawnTermts = /*#__PURE__*/ _interop_require_default(require("./lib/loadSpawnTerm.js")); | ||
| var _packageLayersts = /*#__PURE__*/ _interop_require_default(require("./lib/packageLayers.js")); | ||
@@ -76,116 +76,111 @@ function _define_property(obj, key, value) { | ||
| function worker(command, args, options, callback) { | ||
| // Load spawn-term lazily | ||
| (0, _loadSpawnTermts.default)(function(loadErr, mod) { | ||
| if (loadErr) return callback(loadErr); | ||
| var createSession = mod.createSession; | ||
| var depth = typeof options.depth === 'undefined' ? Infinity : options.depth; | ||
| if (depth !== Infinity) depth++; // depth is relative to first level of packages | ||
| var concurrency = typeof options.concurrency === 'undefined' ? 1 : options.concurrency; | ||
| (0, _packageLayersts.default)(options, function(err, result) { | ||
| if (err) return callback(err); | ||
| // Create session once for all processes (only when interactive is explicitly enabled, e.g. by CLI) | ||
| var interactive = !!options.interactive; | ||
| var quotedArgs = args.map(function(arg) { | ||
| return /\s/.test(arg) ? '"'.concat(arg, '"') : arg; | ||
| }); | ||
| var session = createSession && !options.streaming && interactive ? createSession({ | ||
| header: "".concat(process.cwd(), "> ").concat(command, " ").concat(quotedArgs.join(' ')), | ||
| showStatusBar: true, | ||
| interactive: interactive | ||
| }) : null; | ||
| // Show command header when not using terminal session (unless silent) | ||
| if (!session && !options.silent) { | ||
| console.log("$ ".concat(command, " ").concat(quotedArgs.join(' '))); | ||
| var depth = typeof options.depth === 'undefined' ? Infinity : options.depth; | ||
| if (depth !== Infinity) depth++; // depth is relative to first level of packages | ||
| var concurrency = typeof options.concurrency === 'undefined' ? 1 : options.concurrency; | ||
| (0, _packageLayersts.default)(options, function(err, result) { | ||
| if (err) return callback(err); | ||
| // Create session once for all processes (only when interactive is explicitly enabled, e.g. by CLI) | ||
| var interactive = !!options.interactive; | ||
| var quotedArgs = args.map(function(arg) { | ||
| return /\s/.test(arg) ? '"'.concat(arg, '"') : arg; | ||
| }); | ||
| var session = _spawnterm.createSession && !options.streaming && interactive ? (0, _spawnterm.createSession)({ | ||
| header: "".concat(process.cwd(), "> ").concat(command, " ").concat(quotedArgs.join(' ')), | ||
| showStatusBar: true, | ||
| interactive: interactive | ||
| }) : null; | ||
| // Show command header when not using terminal session (unless silent) | ||
| if (!session && !options.silent) { | ||
| console.log("$ ".concat(command, " ").concat(quotedArgs.join(' '))); | ||
| } | ||
| var results = []; | ||
| var finalize = function(err) { | ||
| if (err) err.results = results; | ||
| if (session) { | ||
| session.waitAndClose(function() { | ||
| err ? callback(err) : callback(null, results); | ||
| }); | ||
| } else { | ||
| err ? callback(err) : callback(null, results); | ||
| } | ||
| var results = []; | ||
| var finalize = function(err) { | ||
| if (err) err.results = results; | ||
| if (session) { | ||
| session.waitAndClose(function() { | ||
| err ? callback(err) : callback(null, results); | ||
| }); | ||
| } else { | ||
| err ? callback(err) : callback(null, results); | ||
| }; | ||
| // Non-topological mode: layers is PackageEntry[][] | ||
| if (Array.isArray(result)) { | ||
| var layers = result; | ||
| var processLayers = function(layers, done) { | ||
| if (layers.length === 0) { | ||
| done(); | ||
| return; | ||
| } | ||
| }; | ||
| // Non-topological mode: layers is PackageEntry[][] | ||
| if (Array.isArray(result)) { | ||
| var layers = result; | ||
| var processLayers = function(layers, done) { | ||
| if (layers.length === 0) { | ||
| done(); | ||
| return; | ||
| } | ||
| var layerEntries = layers.shift(); | ||
| var queue = new _queuecb.default(concurrency); | ||
| layerEntries.forEach(function(entry) { | ||
| queue.defer(function(cb) { | ||
| var spawnOptions = _object_spread_props(_object_spread({}, options), { | ||
| cwd: _path.default.dirname(entry.fullPath) | ||
| var layerEntries = layers.shift(); | ||
| var queue = new _queuecb.default(concurrency); | ||
| layerEntries.forEach(function(entry) { | ||
| queue.defer(function(cb) { | ||
| var spawnOptions = _object_spread_props(_object_spread({}, options), { | ||
| cwd: _path.default.dirname(entry.fullPath) | ||
| }); | ||
| var prefix = _path.default.dirname(entry.path); | ||
| var next = function(err, res) { | ||
| if (err && err.message.indexOf('ExperimentalWarning') >= 0) { | ||
| res = err; | ||
| err = null; | ||
| } | ||
| results.push({ | ||
| path: prefix, | ||
| command: command, | ||
| args: args, | ||
| error: err, | ||
| result: res | ||
| }); | ||
| var prefix = _path.default.dirname(entry.path); | ||
| var next = function(err, res) { | ||
| if (err && err.message.indexOf('ExperimentalWarning') >= 0) { | ||
| res = err; | ||
| err = null; | ||
| } | ||
| results.push({ | ||
| path: prefix, | ||
| command: command, | ||
| args: args, | ||
| error: err, | ||
| result: res | ||
| }); | ||
| cb(); | ||
| }; | ||
| if (session) session.spawn(command, args, spawnOptions, { | ||
| group: prefix, | ||
| expanded: options.expanded | ||
| }, next); | ||
| else (0, _spawnstreaming.default)(command, args, spawnOptions, { | ||
| prefix: prefix | ||
| }, next); | ||
| }); | ||
| cb(); | ||
| }; | ||
| if (session) session.spawn(command, args, spawnOptions, { | ||
| group: prefix, | ||
| expanded: options.expanded | ||
| }, next); | ||
| else (0, _spawnstreaming.default)(command, args, spawnOptions, { | ||
| prefix: prefix | ||
| }, next); | ||
| }); | ||
| queue.await(function(err) { | ||
| return err ? done(err) : processLayers(layers, done); | ||
| }); | ||
| }; | ||
| processLayers(layers, finalize); | ||
| return; | ||
| } | ||
| // Topological mode: use topological-scheduler | ||
| var graph = result; | ||
| (0, _topologicalscheduler.default)(graph, function(entry, _id, cb) { | ||
| var spawnOptions = _object_spread_props(_object_spread({}, options), { | ||
| cwd: _path.default.dirname(entry.fullPath) | ||
| }); | ||
| var prefix = _path.default.dirname(entry.path); | ||
| var next = function(err, res) { | ||
| if (err && err.message.indexOf('ExperimentalWarning') >= 0) { | ||
| res = err; | ||
| err = null; | ||
| } | ||
| results.push({ | ||
| path: prefix, | ||
| command: command, | ||
| args: args, | ||
| error: err, | ||
| result: res | ||
| }); | ||
| cb(err, res); | ||
| }; | ||
| if (session) session.spawn(command, args, spawnOptions, { | ||
| group: prefix, | ||
| expanded: options.expanded | ||
| }, next); | ||
| else (0, _spawnstreaming.default)(command, args, spawnOptions, { | ||
| prefix: prefix | ||
| }, next); | ||
| }, { | ||
| concurrency: concurrency, | ||
| failDependents: options.failDependents | ||
| }, function(err) { | ||
| finalize(err); | ||
| queue.await(function(err) { | ||
| return err ? done(err) : processLayers(layers, done); | ||
| }); | ||
| }; | ||
| processLayers(layers, finalize); | ||
| return; | ||
| } | ||
| // Topological mode: use topological-scheduler | ||
| var graph = result; | ||
| (0, _topologicalscheduler.default)(graph, function(entry, _id, cb) { | ||
| var spawnOptions = _object_spread_props(_object_spread({}, options), { | ||
| cwd: _path.default.dirname(entry.fullPath) | ||
| }); | ||
| var prefix = _path.default.dirname(entry.path); | ||
| var next = function(err, res) { | ||
| if (err && err.message.indexOf('ExperimentalWarning') >= 0) { | ||
| res = err; | ||
| err = null; | ||
| } | ||
| results.push({ | ||
| path: prefix, | ||
| command: command, | ||
| args: args, | ||
| error: err, | ||
| result: res | ||
| }); | ||
| cb(err, res); | ||
| }; | ||
| if (session) session.spawn(command, args, spawnOptions, { | ||
| group: prefix, | ||
| expanded: options.expanded | ||
| }, next); | ||
| else (0, _spawnstreaming.default)(command, args, spawnOptions, { | ||
| prefix: prefix | ||
| }, next); | ||
| }, { | ||
| concurrency: concurrency, | ||
| failDependents: options.failDependents | ||
| }, function(err) { | ||
| finalize(err); | ||
| }); | ||
@@ -192,0 +187,0 @@ }); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["/Users/kevin/Dev/OpenSource/monorepo/each-package/src/worker.ts"],"sourcesContent":["import type { SpawnResult } from 'cross-spawn-cb';\nimport path from 'path';\nimport Queue from 'queue-cb';\nimport spawnStreaming from 'spawn-streaming';\nimport schedule, { type DependencyGraph } from 'topological-scheduler';\nimport loadSpawnTerm from './lib/loadSpawnTerm.ts';\nimport packageLayers, { type PackageEntry } from './lib/packageLayers.ts';\n\nimport type { EachCallback, EachError, EachOptions, EachResult } from './types.ts';\n\nexport default function worker(command: string, args: string[], options: EachOptions, callback: EachCallback): undefined {\n // Load spawn-term lazily\n loadSpawnTerm((loadErr, mod) => {\n if (loadErr) return callback(loadErr);\n const createSession = mod.createSession;\n\n let depth = typeof options.depth === 'undefined' ? Infinity : options.depth;\n if (depth !== Infinity) depth++; // depth is relative to first level of packages\n const concurrency = typeof options.concurrency === 'undefined' ? 1 : options.concurrency;\n\n packageLayers(options, (err, result) => {\n if (err) return callback(err);\n\n // Create session once for all processes (only when interactive is explicitly enabled, e.g. by CLI)\n const interactive = !!options.interactive;\n const quotedArgs = args.map((arg) => (/\\s/.test(arg) ? `\"${arg}\"` : arg));\n const session = createSession && !options.streaming && interactive ? createSession({ header: `${process.cwd()}> ${command} ${quotedArgs.join(' ')}`, showStatusBar: true, interactive }) : null;\n\n // Show command header when not using terminal session (unless silent)\n if (!session && !options.silent) {\n console.log(`$ ${command} ${quotedArgs.join(' ')}`);\n }\n\n const results: EachResult[] = [];\n\n const finalize = (err?: Error): void => {\n if (err) (err as EachError).results = results;\n if (session) {\n session.waitAndClose(() => {\n err ? callback(err) : callback(null, results);\n });\n } else {\n err ? callback(err) : callback(null, results);\n }\n };\n\n // Non-topological mode: layers is PackageEntry[][]\n if (Array.isArray(result)) {\n const layers = result as PackageEntry[][];\n const processLayers = (layers: PackageEntry[][], done: (err?: Error) => void): void => {\n if (layers.length === 0) {\n done();\n return;\n }\n const layerEntries = layers.shift();\n\n const queue = new Queue(concurrency);\n layerEntries.forEach((entry) => {\n queue.defer((cb: () => void) => {\n const spawnOptions = { ...options, cwd: path.dirname(entry.fullPath) };\n const prefix = path.dirname(entry.path);\n\n const next = (err?: Error, res?: SpawnResult): undefined => {\n if (err && err.message.indexOf('ExperimentalWarning') >= 0) {\n res = err as unknown as SpawnResult;\n err = null;\n }\n\n results.push({ path: prefix, command, args, error: err, result: res });\n cb();\n };\n\n if (session) session.spawn(command, args, spawnOptions, { group: prefix, expanded: options.expanded }, next);\n else spawnStreaming(command, args, spawnOptions, { prefix }, next);\n });\n });\n\n queue.await((err: Error) => (err ? done(err) : processLayers(layers, done)));\n };\n\n processLayers(layers, finalize);\n return;\n }\n\n // Topological mode: use topological-scheduler\n const graph = result as DependencyGraph<PackageEntry>;\n\n schedule(\n graph,\n (entry, _id, cb) => {\n const spawnOptions = { ...options, cwd: path.dirname(entry.fullPath) };\n const prefix = path.dirname(entry.path);\n\n const next = (err?: Error, res?: SpawnResult): undefined => {\n if (err && err.message.indexOf('ExperimentalWarning') >= 0) {\n res = err as unknown as SpawnResult;\n err = null;\n }\n\n results.push({ path: prefix, command, args, error: err, result: res });\n cb(err, res);\n };\n\n if (session) session.spawn(command, args, spawnOptions, { group: prefix, expanded: options.expanded }, next);\n else spawnStreaming(command, args, spawnOptions, { prefix }, next);\n },\n { concurrency, failDependents: options.failDependents },\n (err) => {\n finalize(err);\n }\n );\n });\n });\n}\n"],"names":["worker","command","args","options","callback","loadSpawnTerm","loadErr","mod","createSession","depth","Infinity","concurrency","packageLayers","err","result","interactive","quotedArgs","map","arg","test","session","streaming","header","process","cwd","join","showStatusBar","silent","console","log","results","finalize","waitAndClose","Array","isArray","layers","processLayers","done","length","layerEntries","shift","queue","Queue","forEach","entry","defer","cb","spawnOptions","path","dirname","fullPath","prefix","next","res","message","indexOf","push","error","spawn","group","expanded","spawnStreaming","await","graph","schedule","_id","failDependents"],"mappings":"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"} | ||
| {"version":3,"sources":["/Users/kevin/Dev/OpenSource/monorepo/each-package/src/worker.ts"],"sourcesContent":["import type { SpawnResult } from 'cross-spawn-cb';\nimport path from 'path';\nimport Queue from 'queue-cb';\nimport spawnStreaming from 'spawn-streaming';\nimport { createSession } from 'spawn-term';\nimport schedule, { type DependencyGraph } from 'topological-scheduler';\nimport packageLayers, { type PackageEntry } from './lib/packageLayers.ts';\n\nimport type { EachCallback, EachError, EachOptions, EachResult } from './types.ts';\n\nexport default function worker(command: string, args: string[], options: EachOptions, callback: EachCallback): undefined {\n let depth = typeof options.depth === 'undefined' ? Infinity : options.depth;\n if (depth !== Infinity) depth++; // depth is relative to first level of packages\n const concurrency = typeof options.concurrency === 'undefined' ? 1 : options.concurrency;\n\n packageLayers(options, (err, result) => {\n if (err) return callback(err);\n\n // Create session once for all processes (only when interactive is explicitly enabled, e.g. by CLI)\n const interactive = !!options.interactive;\n const quotedArgs = args.map((arg) => (/\\s/.test(arg) ? `\"${arg}\"` : arg));\n const session = createSession && !options.streaming && interactive ? createSession({ header: `${process.cwd()}> ${command} ${quotedArgs.join(' ')}`, showStatusBar: true, interactive }) : null;\n\n // Show command header when not using terminal session (unless silent)\n if (!session && !options.silent) {\n console.log(`$ ${command} ${quotedArgs.join(' ')}`);\n }\n\n const results: EachResult[] = [];\n\n const finalize = (err?: Error): void => {\n if (err) (err as EachError).results = results;\n if (session) {\n session.waitAndClose(() => {\n err ? callback(err) : callback(null, results);\n });\n } else {\n err ? callback(err) : callback(null, results);\n }\n };\n\n // Non-topological mode: layers is PackageEntry[][]\n if (Array.isArray(result)) {\n const layers = result as PackageEntry[][];\n const processLayers = (layers: PackageEntry[][], done: (err?: Error) => void): void => {\n if (layers.length === 0) {\n done();\n return;\n }\n const layerEntries = layers.shift();\n\n const queue = new Queue(concurrency);\n layerEntries.forEach((entry) => {\n queue.defer((cb: () => void) => {\n const spawnOptions = { ...options, cwd: path.dirname(entry.fullPath) };\n const prefix = path.dirname(entry.path);\n\n const next = (err?: Error, res?: SpawnResult): undefined => {\n if (err && err.message.indexOf('ExperimentalWarning') >= 0) {\n res = err as unknown as SpawnResult;\n err = null;\n }\n\n results.push({ path: prefix, command, args, error: err, result: res });\n cb();\n };\n\n if (session) session.spawn(command, args, spawnOptions, { group: prefix, expanded: options.expanded }, next);\n else spawnStreaming(command, args, spawnOptions, { prefix }, next);\n });\n });\n\n queue.await((err: Error) => (err ? done(err) : processLayers(layers, done)));\n };\n\n processLayers(layers, finalize);\n return;\n }\n\n // Topological mode: use topological-scheduler\n const graph = result as DependencyGraph<PackageEntry>;\n\n schedule(\n graph,\n (entry, _id, cb) => {\n const spawnOptions = { ...options, cwd: path.dirname(entry.fullPath) };\n const prefix = path.dirname(entry.path);\n\n const next = (err?: Error, res?: SpawnResult): undefined => {\n if (err && err.message.indexOf('ExperimentalWarning') >= 0) {\n res = err as unknown as SpawnResult;\n err = null;\n }\n\n results.push({ path: prefix, command, args, error: err, result: res });\n cb(err, res);\n };\n\n if (session) session.spawn(command, args, spawnOptions, { group: prefix, expanded: options.expanded }, next);\n else spawnStreaming(command, args, spawnOptions, { prefix }, next);\n },\n { concurrency, failDependents: options.failDependents },\n (err) => {\n finalize(err);\n }\n );\n });\n}\n"],"names":["worker","command","args","options","callback","depth","Infinity","concurrency","packageLayers","err","result","interactive","quotedArgs","map","arg","test","session","createSession","streaming","header","process","cwd","join","showStatusBar","silent","console","log","results","finalize","waitAndClose","Array","isArray","layers","processLayers","done","length","layerEntries","shift","queue","Queue","forEach","entry","defer","cb","spawnOptions","path","dirname","fullPath","prefix","next","res","message","indexOf","push","error","spawn","group","expanded","spawnStreaming","await","graph","schedule","_id","failDependents"],"mappings":"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"} |
+12
-25
@@ -5,5 +5,5 @@ import exit from 'exit'; | ||
| import path from 'path'; | ||
| import { createSession, figures, formatArguments } from 'spawn-term'; | ||
| import url from 'url'; | ||
| import run from './index.js'; | ||
| import loadSpawnTerm from './lib/loadSpawnTerm.js'; | ||
| const ERROR_CODE = 5; | ||
@@ -106,28 +106,15 @@ const __dirname = path.dirname(typeof __filename !== 'undefined' ? __filename : url.fileURLToPath(import.meta.url)); | ||
| if (!options.silent) { | ||
| // Load spawn-term to get figures/formatArguments for output formatting | ||
| loadSpawnTerm((_loadErr, mod)=>{ | ||
| const { createSession, figures, formatArguments } = mod || { | ||
| createSession: undefined, | ||
| figures: { | ||
| tick: '✓', | ||
| cross: '✗' | ||
| }, | ||
| formatArguments: (x)=>x | ||
| }; | ||
| if (!createSession) { | ||
| console.log('\n======================'); | ||
| results.forEach((res)=>{ | ||
| console.log(`${res.error ? figures.cross : figures.tick} ${res.path}${res.error ? ` Error: ${res.error.message}` : ''}`); | ||
| }); | ||
| console.log('\n----------------------'); | ||
| console.log(`${name} ${formatArguments(args)}`); | ||
| console.log(`${figures.tick} ${results.length - errors.length} succeeded`); | ||
| if (errors.length) console.log(`${figures.cross} ${errors.length} failed`); | ||
| } | ||
| exit(err || errors.length ? ERROR_CODE : 0); | ||
| }); | ||
| } else { | ||
| exit(err || errors.length ? ERROR_CODE : 0); | ||
| if (!createSession) { | ||
| console.log('\n======================'); | ||
| results.forEach((res)=>{ | ||
| console.log(`${res.error ? figures.cross : figures.tick} ${res.path}${res.error ? ` Error: ${res.error.message}` : ''}`); | ||
| }); | ||
| console.log('\n----------------------'); | ||
| console.log(`${name} ${formatArguments(args)}`); | ||
| console.log(`${figures.tick} ${results.length - errors.length} succeeded`); | ||
| if (errors.length) console.log(`${figures.cross} ${errors.length} failed`); | ||
| } | ||
| } | ||
| exit(err || errors.length ? ERROR_CODE : 0); | ||
| }); | ||
| }); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["/Users/kevin/Dev/OpenSource/monorepo/each-package/src/cli.ts"],"sourcesContent":["import exit from 'exit';\nimport fs from 'fs';\nimport getopts from 'getopts-compat';\nimport path from 'path';\nimport url from 'url';\nimport run from './index.ts';\nimport loadSpawnTerm from './lib/loadSpawnTerm.ts';\n\nconst ERROR_CODE = 5;\nconst __dirname = path.dirname(typeof __filename !== 'undefined' ? __filename : url.fileURLToPath(import.meta.url));\n\nimport type { EachError, EachOptions, EachResult } from './types.ts';\n\nfunction getVersion(): string {\n const packagePath = path.resolve(__dirname, '..', '..', 'package.json');\n const packageJson = JSON.parse(fs.readFileSync(packagePath, 'utf8'));\n return packageJson.version;\n}\n\nfunction showHelp(name: string): void {\n const version = getVersion();\n console.log(`${name} v${version}`);\n console.log('');\n console.log(`Usage: ${name} [options] <command> [args...]\n\nRun commands in each package folder within a monorepo.\n\nOptions:\n -d, --depth <n> Maximum depth to search for packages (default: Infinity)\n -c, --concurrency <n> Number of packages to process in parallel (default: Infinity)\n -t, --topological Process packages in topological order based on dependencies\n -fd, --fail-dependents Skip packages whose dependencies failed (use with -t)\n -e, --expanded Use expanded terminal UI for output\n -s, --streaming Stream output as it happens\n -si, --silent Suppress output\n -p, --private Include private packages\n -i, --ignore <pattern> Ignore packages matching pattern (default: node_modules,.git)\n -r, --root Include the root package\n -I, --interactive Enable interactive mode (default: true)\n -v, --version Show version number\n -h, --help Show this help message\n\nExamples:\n ${name} npm install Run 'npm install' in each package\n ${name} -t npm test Run 'npm test' in topological order\n ${name} -c 4 npm build Run 'npm build' with concurrency of 4`);\n}\n\nexport default (argv: string[], name: string): undefined => {\n const options = getopts(argv, {\n alias: { depth: 'd', concurrency: 'c', topological: 't', failDependents: 'fd', expanded: 'e', streaming: 's', silent: 'si', private: 'p', ignore: 'i', root: 'r', interactive: 'I', version: 'v', help: 'h' },\n boolean: ['topological', 'failDependents', 'expanded', 'streaming', 'silent', 'private', 'root', 'interactive', 'version', 'help'],\n default: { depth: Infinity, concurrency: Infinity, interactive: true },\n stopEarly: true,\n });\n\n if (options.version) {\n console.log(getVersion());\n exit(0);\n return;\n }\n\n if (options.help) {\n showHelp(name);\n exit(0);\n return;\n }\n\n const args = options._;\n if (args.length === 0) {\n console.log(`Missing command. Example usage: ${name} [command]`);\n exit(ERROR_CODE);\n return;\n }\n\n options.stdio = 'inherit'; // pass through stdio\n run(args[0], args.slice(1), options as EachOptions, (err?: EachError, results?: EachResult[]): undefined => {\n if (err && !err.results) {\n console.log(err.message);\n exit(ERROR_CODE);\n return;\n }\n if (err) results = err.results;\n const errors = results.filter((result) => !!result.error);\n\n if (!options.silent) {\n // Load spawn-term to get figures/formatArguments for output formatting\n loadSpawnTerm((_loadErr, mod) => {\n const { createSession, figures, formatArguments } = mod || { createSession: undefined, figures: { tick: '✓', cross: '✗' }, formatArguments: (x: string[]) => x };\n if (!createSession) {\n console.log('\\n======================');\n results.forEach((res) => {\n console.log(`${res.error ? figures.cross : figures.tick} ${res.path}${res.error ? ` Error: ${res.error.message}` : ''}`);\n });\n console.log('\\n----------------------');\n console.log(`${name} ${formatArguments(args)}`);\n console.log(`${figures.tick} ${results.length - errors.length} succeeded`);\n if (errors.length) console.log(`${figures.cross} ${errors.length} failed`);\n }\n exit(err || errors.length ? ERROR_CODE : 0);\n });\n } else {\n exit(err || errors.length ? ERROR_CODE : 0);\n }\n });\n};\n"],"names":["exit","fs","getopts","path","url","run","loadSpawnTerm","ERROR_CODE","__dirname","dirname","__filename","fileURLToPath","getVersion","packagePath","resolve","packageJson","JSON","parse","readFileSync","version","showHelp","name","console","log","argv","options","alias","depth","concurrency","topological","failDependents","expanded","streaming","silent","private","ignore","root","interactive","help","boolean","default","Infinity","stopEarly","args","_","length","stdio","slice","err","results","message","errors","filter","result","error","_loadErr","mod","createSession","figures","formatArguments","undefined","tick","cross","x","forEach","res"],"mappings":"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"} | ||
| {"version":3,"sources":["/Users/kevin/Dev/OpenSource/monorepo/each-package/src/cli.ts"],"sourcesContent":["import exit from 'exit';\nimport fs from 'fs';\nimport getopts from 'getopts-compat';\nimport path from 'path';\nimport { createSession, figures, formatArguments } from 'spawn-term';\nimport url from 'url';\nimport run from './index.ts';\n\nconst ERROR_CODE = 5;\nconst __dirname = path.dirname(typeof __filename !== 'undefined' ? __filename : url.fileURLToPath(import.meta.url));\n\nimport type { EachError, EachOptions, EachResult } from './types.ts';\n\nfunction getVersion(): string {\n const packagePath = path.resolve(__dirname, '..', '..', 'package.json');\n const packageJson = JSON.parse(fs.readFileSync(packagePath, 'utf8'));\n return packageJson.version;\n}\n\nfunction showHelp(name: string): void {\n const version = getVersion();\n console.log(`${name} v${version}`);\n console.log('');\n console.log(`Usage: ${name} [options] <command> [args...]\n\nRun commands in each package folder within a monorepo.\n\nOptions:\n -d, --depth <n> Maximum depth to search for packages (default: Infinity)\n -c, --concurrency <n> Number of packages to process in parallel (default: Infinity)\n -t, --topological Process packages in topological order based on dependencies\n -fd, --fail-dependents Skip packages whose dependencies failed (use with -t)\n -e, --expanded Use expanded terminal UI for output\n -s, --streaming Stream output as it happens\n -si, --silent Suppress output\n -p, --private Include private packages\n -i, --ignore <pattern> Ignore packages matching pattern (default: node_modules,.git)\n -r, --root Include the root package\n -I, --interactive Enable interactive mode (default: true)\n -v, --version Show version number\n -h, --help Show this help message\n\nExamples:\n ${name} npm install Run 'npm install' in each package\n ${name} -t npm test Run 'npm test' in topological order\n ${name} -c 4 npm build Run 'npm build' with concurrency of 4`);\n}\n\nexport default (argv: string[], name: string): undefined => {\n const options = getopts(argv, {\n alias: { depth: 'd', concurrency: 'c', topological: 't', failDependents: 'fd', expanded: 'e', streaming: 's', silent: 'si', private: 'p', ignore: 'i', root: 'r', interactive: 'I', version: 'v', help: 'h' },\n boolean: ['topological', 'failDependents', 'expanded', 'streaming', 'silent', 'private', 'root', 'interactive', 'version', 'help'],\n default: { depth: Infinity, concurrency: Infinity, interactive: true },\n stopEarly: true,\n });\n\n if (options.version) {\n console.log(getVersion());\n exit(0);\n return;\n }\n\n if (options.help) {\n showHelp(name);\n exit(0);\n return;\n }\n\n const args = options._;\n if (args.length === 0) {\n console.log(`Missing command. Example usage: ${name} [command]`);\n exit(ERROR_CODE);\n return;\n }\n\n options.stdio = 'inherit'; // pass through stdio\n run(args[0], args.slice(1), options as EachOptions, (err?: EachError, results?: EachResult[]): undefined => {\n if (err && !err.results) {\n console.log(err.message);\n exit(ERROR_CODE);\n return;\n }\n if (err) results = err.results;\n const errors = results.filter((result) => !!result.error);\n\n if (!options.silent) {\n if (!createSession) {\n console.log('\\n======================');\n results.forEach((res) => {\n console.log(`${res.error ? figures.cross : figures.tick} ${res.path}${res.error ? ` Error: ${res.error.message}` : ''}`);\n });\n console.log('\\n----------------------');\n console.log(`${name} ${formatArguments(args)}`);\n console.log(`${figures.tick} ${results.length - errors.length} succeeded`);\n if (errors.length) console.log(`${figures.cross} ${errors.length} failed`);\n }\n }\n exit(err || errors.length ? ERROR_CODE : 0);\n });\n};\n"],"names":["exit","fs","getopts","path","createSession","figures","formatArguments","url","run","ERROR_CODE","__dirname","dirname","__filename","fileURLToPath","getVersion","packagePath","resolve","packageJson","JSON","parse","readFileSync","version","showHelp","name","console","log","argv","options","alias","depth","concurrency","topological","failDependents","expanded","streaming","silent","private","ignore","root","interactive","help","boolean","default","Infinity","stopEarly","args","_","length","stdio","slice","err","results","message","errors","filter","result","error","forEach","res","cross","tick"],"mappings":"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"} |
+104
-109
| import path from 'path'; | ||
| import Queue from 'queue-cb'; | ||
| import spawnStreaming from 'spawn-streaming'; | ||
| import { createSession } from 'spawn-term'; | ||
| import schedule from 'topological-scheduler'; | ||
| import loadSpawnTerm from './lib/loadSpawnTerm.js'; | ||
| import packageLayers from './lib/packageLayers.js'; | ||
| export default function worker(command, args, options, callback) { | ||
| // Load spawn-term lazily | ||
| loadSpawnTerm((loadErr, mod)=>{ | ||
| if (loadErr) return callback(loadErr); | ||
| const createSession = mod.createSession; | ||
| let depth = typeof options.depth === 'undefined' ? Infinity : options.depth; | ||
| if (depth !== Infinity) depth++; // depth is relative to first level of packages | ||
| const concurrency = typeof options.concurrency === 'undefined' ? 1 : options.concurrency; | ||
| packageLayers(options, (err, result)=>{ | ||
| if (err) return callback(err); | ||
| // Create session once for all processes (only when interactive is explicitly enabled, e.g. by CLI) | ||
| const interactive = !!options.interactive; | ||
| const quotedArgs = args.map((arg)=>/\s/.test(arg) ? `"${arg}"` : arg); | ||
| const session = createSession && !options.streaming && interactive ? createSession({ | ||
| header: `${process.cwd()}> ${command} ${quotedArgs.join(' ')}`, | ||
| showStatusBar: true, | ||
| interactive | ||
| }) : null; | ||
| // Show command header when not using terminal session (unless silent) | ||
| if (!session && !options.silent) { | ||
| console.log(`$ ${command} ${quotedArgs.join(' ')}`); | ||
| let depth = typeof options.depth === 'undefined' ? Infinity : options.depth; | ||
| if (depth !== Infinity) depth++; // depth is relative to first level of packages | ||
| const concurrency = typeof options.concurrency === 'undefined' ? 1 : options.concurrency; | ||
| packageLayers(options, (err, result)=>{ | ||
| if (err) return callback(err); | ||
| // Create session once for all processes (only when interactive is explicitly enabled, e.g. by CLI) | ||
| const interactive = !!options.interactive; | ||
| const quotedArgs = args.map((arg)=>/\s/.test(arg) ? `"${arg}"` : arg); | ||
| const session = createSession && !options.streaming && interactive ? createSession({ | ||
| header: `${process.cwd()}> ${command} ${quotedArgs.join(' ')}`, | ||
| showStatusBar: true, | ||
| interactive | ||
| }) : null; | ||
| // Show command header when not using terminal session (unless silent) | ||
| if (!session && !options.silent) { | ||
| console.log(`$ ${command} ${quotedArgs.join(' ')}`); | ||
| } | ||
| const results = []; | ||
| const finalize = (err)=>{ | ||
| if (err) err.results = results; | ||
| if (session) { | ||
| session.waitAndClose(()=>{ | ||
| err ? callback(err) : callback(null, results); | ||
| }); | ||
| } else { | ||
| err ? callback(err) : callback(null, results); | ||
| } | ||
| const results = []; | ||
| const finalize = (err)=>{ | ||
| if (err) err.results = results; | ||
| if (session) { | ||
| session.waitAndClose(()=>{ | ||
| err ? callback(err) : callback(null, results); | ||
| }; | ||
| // Non-topological mode: layers is PackageEntry[][] | ||
| if (Array.isArray(result)) { | ||
| const layers = result; | ||
| const processLayers = (layers, done)=>{ | ||
| if (layers.length === 0) { | ||
| done(); | ||
| return; | ||
| } | ||
| const layerEntries = layers.shift(); | ||
| const queue = new Queue(concurrency); | ||
| layerEntries.forEach((entry)=>{ | ||
| queue.defer((cb)=>{ | ||
| const spawnOptions = { | ||
| ...options, | ||
| cwd: path.dirname(entry.fullPath) | ||
| }; | ||
| const prefix = path.dirname(entry.path); | ||
| const next = (err, res)=>{ | ||
| if (err && err.message.indexOf('ExperimentalWarning') >= 0) { | ||
| res = err; | ||
| err = null; | ||
| } | ||
| results.push({ | ||
| path: prefix, | ||
| command, | ||
| args, | ||
| error: err, | ||
| result: res | ||
| }); | ||
| cb(); | ||
| }; | ||
| if (session) session.spawn(command, args, spawnOptions, { | ||
| group: prefix, | ||
| expanded: options.expanded | ||
| }, next); | ||
| else spawnStreaming(command, args, spawnOptions, { | ||
| prefix | ||
| }, next); | ||
| }); | ||
| } else { | ||
| err ? callback(err) : callback(null, results); | ||
| }); | ||
| queue.await((err)=>err ? done(err) : processLayers(layers, done)); | ||
| }; | ||
| processLayers(layers, finalize); | ||
| return; | ||
| } | ||
| // Topological mode: use topological-scheduler | ||
| const graph = result; | ||
| schedule(graph, (entry, _id, cb)=>{ | ||
| const spawnOptions = { | ||
| ...options, | ||
| cwd: path.dirname(entry.fullPath) | ||
| }; | ||
| const prefix = path.dirname(entry.path); | ||
| const next = (err, res)=>{ | ||
| if (err && err.message.indexOf('ExperimentalWarning') >= 0) { | ||
| res = err; | ||
| err = null; | ||
| } | ||
| results.push({ | ||
| path: prefix, | ||
| command, | ||
| args, | ||
| error: err, | ||
| result: res | ||
| }); | ||
| cb(err, res); | ||
| }; | ||
| // Non-topological mode: layers is PackageEntry[][] | ||
| if (Array.isArray(result)) { | ||
| const layers = result; | ||
| const processLayers = (layers, done)=>{ | ||
| if (layers.length === 0) { | ||
| done(); | ||
| return; | ||
| } | ||
| const layerEntries = layers.shift(); | ||
| const queue = new Queue(concurrency); | ||
| layerEntries.forEach((entry)=>{ | ||
| queue.defer((cb)=>{ | ||
| const spawnOptions = { | ||
| ...options, | ||
| cwd: path.dirname(entry.fullPath) | ||
| }; | ||
| const prefix = path.dirname(entry.path); | ||
| const next = (err, res)=>{ | ||
| if (err && err.message.indexOf('ExperimentalWarning') >= 0) { | ||
| res = err; | ||
| err = null; | ||
| } | ||
| results.push({ | ||
| path: prefix, | ||
| command, | ||
| args, | ||
| error: err, | ||
| result: res | ||
| }); | ||
| cb(); | ||
| }; | ||
| if (session) session.spawn(command, args, spawnOptions, { | ||
| group: prefix, | ||
| expanded: options.expanded | ||
| }, next); | ||
| else spawnStreaming(command, args, spawnOptions, { | ||
| prefix | ||
| }, next); | ||
| }); | ||
| }); | ||
| queue.await((err)=>err ? done(err) : processLayers(layers, done)); | ||
| }; | ||
| processLayers(layers, finalize); | ||
| return; | ||
| } | ||
| // Topological mode: use topological-scheduler | ||
| const graph = result; | ||
| schedule(graph, (entry, _id, cb)=>{ | ||
| const spawnOptions = { | ||
| ...options, | ||
| cwd: path.dirname(entry.fullPath) | ||
| }; | ||
| const prefix = path.dirname(entry.path); | ||
| const next = (err, res)=>{ | ||
| if (err && err.message.indexOf('ExperimentalWarning') >= 0) { | ||
| res = err; | ||
| err = null; | ||
| } | ||
| results.push({ | ||
| path: prefix, | ||
| command, | ||
| args, | ||
| error: err, | ||
| result: res | ||
| }); | ||
| cb(err, res); | ||
| }; | ||
| if (session) session.spawn(command, args, spawnOptions, { | ||
| group: prefix, | ||
| expanded: options.expanded | ||
| }, next); | ||
| else spawnStreaming(command, args, spawnOptions, { | ||
| prefix | ||
| }, next); | ||
| }, { | ||
| concurrency, | ||
| failDependents: options.failDependents | ||
| }, (err)=>{ | ||
| finalize(err); | ||
| }); | ||
| if (session) session.spawn(command, args, spawnOptions, { | ||
| group: prefix, | ||
| expanded: options.expanded | ||
| }, next); | ||
| else spawnStreaming(command, args, spawnOptions, { | ||
| prefix | ||
| }, next); | ||
| }, { | ||
| concurrency, | ||
| failDependents: options.failDependents | ||
| }, (err)=>{ | ||
| finalize(err); | ||
| }); | ||
| }); | ||
| } |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["/Users/kevin/Dev/OpenSource/monorepo/each-package/src/worker.ts"],"sourcesContent":["import type { SpawnResult } from 'cross-spawn-cb';\nimport path from 'path';\nimport Queue from 'queue-cb';\nimport spawnStreaming from 'spawn-streaming';\nimport schedule, { type DependencyGraph } from 'topological-scheduler';\nimport loadSpawnTerm from './lib/loadSpawnTerm.ts';\nimport packageLayers, { type PackageEntry } from './lib/packageLayers.ts';\n\nimport type { EachCallback, EachError, EachOptions, EachResult } from './types.ts';\n\nexport default function worker(command: string, args: string[], options: EachOptions, callback: EachCallback): undefined {\n // Load spawn-term lazily\n loadSpawnTerm((loadErr, mod) => {\n if (loadErr) return callback(loadErr);\n const createSession = mod.createSession;\n\n let depth = typeof options.depth === 'undefined' ? Infinity : options.depth;\n if (depth !== Infinity) depth++; // depth is relative to first level of packages\n const concurrency = typeof options.concurrency === 'undefined' ? 1 : options.concurrency;\n\n packageLayers(options, (err, result) => {\n if (err) return callback(err);\n\n // Create session once for all processes (only when interactive is explicitly enabled, e.g. by CLI)\n const interactive = !!options.interactive;\n const quotedArgs = args.map((arg) => (/\\s/.test(arg) ? `\"${arg}\"` : arg));\n const session = createSession && !options.streaming && interactive ? createSession({ header: `${process.cwd()}> ${command} ${quotedArgs.join(' ')}`, showStatusBar: true, interactive }) : null;\n\n // Show command header when not using terminal session (unless silent)\n if (!session && !options.silent) {\n console.log(`$ ${command} ${quotedArgs.join(' ')}`);\n }\n\n const results: EachResult[] = [];\n\n const finalize = (err?: Error): void => {\n if (err) (err as EachError).results = results;\n if (session) {\n session.waitAndClose(() => {\n err ? callback(err) : callback(null, results);\n });\n } else {\n err ? callback(err) : callback(null, results);\n }\n };\n\n // Non-topological mode: layers is PackageEntry[][]\n if (Array.isArray(result)) {\n const layers = result as PackageEntry[][];\n const processLayers = (layers: PackageEntry[][], done: (err?: Error) => void): void => {\n if (layers.length === 0) {\n done();\n return;\n }\n const layerEntries = layers.shift();\n\n const queue = new Queue(concurrency);\n layerEntries.forEach((entry) => {\n queue.defer((cb: () => void) => {\n const spawnOptions = { ...options, cwd: path.dirname(entry.fullPath) };\n const prefix = path.dirname(entry.path);\n\n const next = (err?: Error, res?: SpawnResult): undefined => {\n if (err && err.message.indexOf('ExperimentalWarning') >= 0) {\n res = err as unknown as SpawnResult;\n err = null;\n }\n\n results.push({ path: prefix, command, args, error: err, result: res });\n cb();\n };\n\n if (session) session.spawn(command, args, spawnOptions, { group: prefix, expanded: options.expanded }, next);\n else spawnStreaming(command, args, spawnOptions, { prefix }, next);\n });\n });\n\n queue.await((err: Error) => (err ? done(err) : processLayers(layers, done)));\n };\n\n processLayers(layers, finalize);\n return;\n }\n\n // Topological mode: use topological-scheduler\n const graph = result as DependencyGraph<PackageEntry>;\n\n schedule(\n graph,\n (entry, _id, cb) => {\n const spawnOptions = { ...options, cwd: path.dirname(entry.fullPath) };\n const prefix = path.dirname(entry.path);\n\n const next = (err?: Error, res?: SpawnResult): undefined => {\n if (err && err.message.indexOf('ExperimentalWarning') >= 0) {\n res = err as unknown as SpawnResult;\n err = null;\n }\n\n results.push({ path: prefix, command, args, error: err, result: res });\n cb(err, res);\n };\n\n if (session) session.spawn(command, args, spawnOptions, { group: prefix, expanded: options.expanded }, next);\n else spawnStreaming(command, args, spawnOptions, { prefix }, next);\n },\n { concurrency, failDependents: options.failDependents },\n (err) => {\n finalize(err);\n }\n );\n });\n });\n}\n"],"names":["path","Queue","spawnStreaming","schedule","loadSpawnTerm","packageLayers","worker","command","args","options","callback","loadErr","mod","createSession","depth","Infinity","concurrency","err","result","interactive","quotedArgs","map","arg","test","session","streaming","header","process","cwd","join","showStatusBar","silent","console","log","results","finalize","waitAndClose","Array","isArray","layers","processLayers","done","length","layerEntries","shift","queue","forEach","entry","defer","cb","spawnOptions","dirname","fullPath","prefix","next","res","message","indexOf","push","error","spawn","group","expanded","await","graph","_id","failDependents"],"mappings":"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"} | ||
| {"version":3,"sources":["/Users/kevin/Dev/OpenSource/monorepo/each-package/src/worker.ts"],"sourcesContent":["import type { SpawnResult } from 'cross-spawn-cb';\nimport path from 'path';\nimport Queue from 'queue-cb';\nimport spawnStreaming from 'spawn-streaming';\nimport { createSession } from 'spawn-term';\nimport schedule, { type DependencyGraph } from 'topological-scheduler';\nimport packageLayers, { type PackageEntry } from './lib/packageLayers.ts';\n\nimport type { EachCallback, EachError, EachOptions, EachResult } from './types.ts';\n\nexport default function worker(command: string, args: string[], options: EachOptions, callback: EachCallback): undefined {\n let depth = typeof options.depth === 'undefined' ? Infinity : options.depth;\n if (depth !== Infinity) depth++; // depth is relative to first level of packages\n const concurrency = typeof options.concurrency === 'undefined' ? 1 : options.concurrency;\n\n packageLayers(options, (err, result) => {\n if (err) return callback(err);\n\n // Create session once for all processes (only when interactive is explicitly enabled, e.g. by CLI)\n const interactive = !!options.interactive;\n const quotedArgs = args.map((arg) => (/\\s/.test(arg) ? `\"${arg}\"` : arg));\n const session = createSession && !options.streaming && interactive ? createSession({ header: `${process.cwd()}> ${command} ${quotedArgs.join(' ')}`, showStatusBar: true, interactive }) : null;\n\n // Show command header when not using terminal session (unless silent)\n if (!session && !options.silent) {\n console.log(`$ ${command} ${quotedArgs.join(' ')}`);\n }\n\n const results: EachResult[] = [];\n\n const finalize = (err?: Error): void => {\n if (err) (err as EachError).results = results;\n if (session) {\n session.waitAndClose(() => {\n err ? callback(err) : callback(null, results);\n });\n } else {\n err ? callback(err) : callback(null, results);\n }\n };\n\n // Non-topological mode: layers is PackageEntry[][]\n if (Array.isArray(result)) {\n const layers = result as PackageEntry[][];\n const processLayers = (layers: PackageEntry[][], done: (err?: Error) => void): void => {\n if (layers.length === 0) {\n done();\n return;\n }\n const layerEntries = layers.shift();\n\n const queue = new Queue(concurrency);\n layerEntries.forEach((entry) => {\n queue.defer((cb: () => void) => {\n const spawnOptions = { ...options, cwd: path.dirname(entry.fullPath) };\n const prefix = path.dirname(entry.path);\n\n const next = (err?: Error, res?: SpawnResult): undefined => {\n if (err && err.message.indexOf('ExperimentalWarning') >= 0) {\n res = err as unknown as SpawnResult;\n err = null;\n }\n\n results.push({ path: prefix, command, args, error: err, result: res });\n cb();\n };\n\n if (session) session.spawn(command, args, spawnOptions, { group: prefix, expanded: options.expanded }, next);\n else spawnStreaming(command, args, spawnOptions, { prefix }, next);\n });\n });\n\n queue.await((err: Error) => (err ? done(err) : processLayers(layers, done)));\n };\n\n processLayers(layers, finalize);\n return;\n }\n\n // Topological mode: use topological-scheduler\n const graph = result as DependencyGraph<PackageEntry>;\n\n schedule(\n graph,\n (entry, _id, cb) => {\n const spawnOptions = { ...options, cwd: path.dirname(entry.fullPath) };\n const prefix = path.dirname(entry.path);\n\n const next = (err?: Error, res?: SpawnResult): undefined => {\n if (err && err.message.indexOf('ExperimentalWarning') >= 0) {\n res = err as unknown as SpawnResult;\n err = null;\n }\n\n results.push({ path: prefix, command, args, error: err, result: res });\n cb(err, res);\n };\n\n if (session) session.spawn(command, args, spawnOptions, { group: prefix, expanded: options.expanded }, next);\n else spawnStreaming(command, args, spawnOptions, { prefix }, next);\n },\n { concurrency, failDependents: options.failDependents },\n (err) => {\n finalize(err);\n }\n );\n });\n}\n"],"names":["path","Queue","spawnStreaming","createSession","schedule","packageLayers","worker","command","args","options","callback","depth","Infinity","concurrency","err","result","interactive","quotedArgs","map","arg","test","session","streaming","header","process","cwd","join","showStatusBar","silent","console","log","results","finalize","waitAndClose","Array","isArray","layers","processLayers","done","length","layerEntries","shift","queue","forEach","entry","defer","cb","spawnOptions","dirname","fullPath","prefix","next","res","message","indexOf","push","error","spawn","group","expanded","await","graph","_id","failDependents"],"mappings":"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"} |
+4
-4
| { | ||
| "name": "each-package", | ||
| "version": "1.4.8", | ||
| "version": "1.4.9", | ||
| "description": "Run commands in each package folder starting with cwd skipping node_modules folders", | ||
@@ -47,6 +47,6 @@ "keywords": [ | ||
| "getopts-compat": "^2.2.6", | ||
| "install-module-linked": "^1.3.10", | ||
| "queue-cb": "^1.6.1", | ||
| "remove-bom-buffer": "^3.0.0", | ||
| "spawn-streaming": "^1.1.13", | ||
| "spawn-term": "^3.3.2", | ||
| "test-match": "^1.1.1", | ||
@@ -58,6 +58,6 @@ "topological-scheduler": "^0.1.0", | ||
| "@types/mocha": "^10.0.10", | ||
| "@types/node": "^24.10.2", | ||
| "@types/node": "^25.0.0", | ||
| "cr": "^0.1.0", | ||
| "is-version": "^1.0.7", | ||
| "node-version-use": "^1.9.9", | ||
| "node-version-use": "^2.0.0", | ||
| "pinkie-promise": "^2.0.1", | ||
@@ -64,0 +64,0 @@ "ts-dev-stack": "^1.21.2", |
| type CreateSessionFn = ((options?: { | ||
| header?: string; | ||
| showStatusBar?: boolean; | ||
| interactive?: boolean; | ||
| }) => { | ||
| spawn: (command: string, args: string[], options: unknown, termOptions: unknown, callback: (err?: Error, res?: unknown) => void) => void; | ||
| close: () => void; | ||
| waitAndClose: (callback?: () => void) => void; | ||
| }) | undefined; | ||
| interface SpawnTermModule { | ||
| createSession: CreateSessionFn; | ||
| figures: { | ||
| tick: string; | ||
| cross: string; | ||
| }; | ||
| formatArguments: (args: string[]) => string[]; | ||
| } | ||
| export default function loadSpawnTerm(callback: (err: Error | null, result: SpawnTermModule) => void): void; | ||
| export {}; |
| type CreateSessionFn = ((options?: { | ||
| header?: string; | ||
| showStatusBar?: boolean; | ||
| interactive?: boolean; | ||
| }) => { | ||
| spawn: (command: string, args: string[], options: unknown, termOptions: unknown, callback: (err?: Error, res?: unknown) => void) => void; | ||
| close: () => void; | ||
| waitAndClose: (callback?: () => void) => void; | ||
| }) | undefined; | ||
| interface SpawnTermModule { | ||
| createSession: CreateSessionFn; | ||
| figures: { | ||
| tick: string; | ||
| cross: string; | ||
| }; | ||
| formatArguments: (args: string[]) => string[]; | ||
| } | ||
| export default function loadSpawnTerm(callback: (err: Error | null, result: SpawnTermModule) => void): void; | ||
| export {}; |
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { | ||
| value: true | ||
| }); | ||
| Object.defineProperty(exports, "default", { | ||
| enumerable: true, | ||
| get: function() { | ||
| return loadSpawnTerm; | ||
| } | ||
| }); | ||
| var _installmodulelinked = /*#__PURE__*/ _interop_require_default(require("install-module-linked")); | ||
| var _path = /*#__PURE__*/ _interop_require_default(require("path")); | ||
| var _url = /*#__PURE__*/ _interop_require_default(require("url")); | ||
| function _interop_require_default(obj) { | ||
| return obj && obj.__esModule ? obj : { | ||
| default: obj | ||
| }; | ||
| } | ||
| function _getRequireWildcardCache(nodeInterop) { | ||
| if (typeof WeakMap !== "function") return null; | ||
| var cacheBabelInterop = new WeakMap(); | ||
| var cacheNodeInterop = new WeakMap(); | ||
| return (_getRequireWildcardCache = function(nodeInterop) { | ||
| return nodeInterop ? cacheNodeInterop : cacheBabelInterop; | ||
| })(nodeInterop); | ||
| } | ||
| function _interop_require_wildcard(obj, nodeInterop) { | ||
| if (!nodeInterop && obj && obj.__esModule) { | ||
| return obj; | ||
| } | ||
| if (obj === null || typeof obj !== "object" && typeof obj !== "function") { | ||
| return { | ||
| default: obj | ||
| }; | ||
| } | ||
| var cache = _getRequireWildcardCache(nodeInterop); | ||
| if (cache && cache.has(obj)) { | ||
| return cache.get(obj); | ||
| } | ||
| var newObj = { | ||
| __proto__: null | ||
| }; | ||
| var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; | ||
| for(var key in obj){ | ||
| if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { | ||
| var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; | ||
| if (desc && (desc.get || desc.set)) { | ||
| Object.defineProperty(newObj, key, desc); | ||
| } else { | ||
| newObj[key] = obj[key]; | ||
| } | ||
| } | ||
| } | ||
| newObj.default = obj; | ||
| if (cache) { | ||
| cache.set(obj, newObj); | ||
| } | ||
| return newObj; | ||
| } | ||
| var _dirname = _path.default.dirname(typeof __dirname !== 'undefined' ? __dirname : _url.default.fileURLToPath(require("url").pathToFileURL(__filename).toString())); | ||
| var nodeModules = _path.default.join(_dirname, '..', '..', '..', 'node_modules'); | ||
| var moduleName = 'spawn-term'; | ||
| var cached; | ||
| function loadModule(moduleName, callback) { | ||
| if (typeof require === 'undefined') { | ||
| Promise.resolve(moduleName).then(function(p) { | ||
| return /*#__PURE__*/ _interop_require_wildcard(require(p)); | ||
| }).then(function(mod) { | ||
| var _mod_createSession, _mod_figures, _mod_formatArguments; | ||
| callback(null, { | ||
| createSession: (_mod_createSession = mod === null || mod === void 0 ? void 0 : mod.createSession) !== null && _mod_createSession !== void 0 ? _mod_createSession : undefined, | ||
| figures: (_mod_figures = mod === null || mod === void 0 ? void 0 : mod.figures) !== null && _mod_figures !== void 0 ? _mod_figures : { | ||
| tick: '✓', | ||
| cross: '✗' | ||
| }, | ||
| formatArguments: (_mod_formatArguments = mod === null || mod === void 0 ? void 0 : mod.formatArguments) !== null && _mod_formatArguments !== void 0 ? _mod_formatArguments : function(args) { | ||
| return args; | ||
| } | ||
| }); | ||
| }).catch(callback); | ||
| } else { | ||
| try { | ||
| callback(null, require(moduleName)); | ||
| } catch (err) { | ||
| callback(err, null); | ||
| } | ||
| } | ||
| } | ||
| function loadSpawnTerm(callback) { | ||
| if (cached !== undefined) { | ||
| callback(null, cached); | ||
| return; | ||
| } | ||
| (0, _installmodulelinked.default)(moduleName, nodeModules, {}, function(err) { | ||
| if (err) return callback(err, null); | ||
| loadModule(moduleName, function(err, _cached) { | ||
| if (err) return callback(err, null); | ||
| cached = _cached; | ||
| callback(null, cached); | ||
| }); | ||
| }); | ||
| } | ||
| /* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; } |
| {"version":3,"sources":["/Users/kevin/Dev/OpenSource/monorepo/each-package/src/lib/loadSpawnTerm.ts"],"sourcesContent":["import installModule from 'install-module-linked';\nimport path from 'path';\nimport url from 'url';\n\nconst _dirname = path.dirname(typeof __dirname !== 'undefined' ? __dirname : url.fileURLToPath(import.meta.url));\nconst nodeModules = path.join(_dirname, '..', '..', '..', 'node_modules');\nconst moduleName = 'spawn-term';\n\ntype CreateSessionFn =\n | ((options?: { header?: string; showStatusBar?: boolean; interactive?: boolean }) => {\n spawn: (command: string, args: string[], options: unknown, termOptions: unknown, callback: (err?: Error, res?: unknown) => void) => void;\n close: () => void;\n waitAndClose: (callback?: () => void) => void;\n })\n | undefined;\n\ninterface SpawnTermModule {\n createSession: CreateSessionFn;\n figures: { tick: string; cross: string };\n formatArguments: (args: string[]) => string[];\n}\n\nlet cached: SpawnTermModule | undefined;\n\nfunction loadModule(moduleName, callback) {\n if (typeof require === 'undefined') {\n import(moduleName)\n .then((mod) => {\n callback(null, {\n createSession: mod?.createSession ?? undefined,\n figures: mod?.figures ?? { tick: '✓', cross: '✗' },\n formatArguments: mod?.formatArguments ?? ((args: string[]) => args),\n });\n })\n .catch(callback);\n } else {\n try {\n callback(null, require(moduleName));\n } catch (err) {\n callback(err, null);\n }\n }\n}\n\nexport default function loadSpawnTerm(callback: (err: Error | null, result: SpawnTermModule) => void): void {\n if (cached !== undefined) {\n callback(null, cached);\n return;\n }\n installModule(moduleName, nodeModules, {}, (err) => {\n if (err) return callback(err, null);\n loadModule(moduleName, (err, _cached: SpawnTermModule) => {\n if (err) return callback(err, null);\n cached = _cached;\n callback(null, cached);\n });\n });\n}\n"],"names":["loadSpawnTerm","_dirname","path","dirname","__dirname","url","fileURLToPath","nodeModules","join","moduleName","cached","loadModule","callback","require","then","mod","createSession","undefined","figures","tick","cross","formatArguments","args","catch","err","installModule","_cached"],"mappings":";;;;+BA4CA;;;eAAwBA;;;0EA5CE;2DACT;0DACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEhB,IAAMC,WAAWC,aAAI,CAACC,OAAO,CAAC,OAAOC,cAAc,cAAcA,YAAYC,YAAG,CAACC,aAAa,CAAC;AAC/F,IAAMC,cAAcL,aAAI,CAACM,IAAI,CAACP,UAAU,MAAM,MAAM,MAAM;AAC1D,IAAMQ,aAAa;AAgBnB,IAAIC;AAEJ,SAASC,WAAWF,UAAU,EAAEG,QAAQ;IACtC,IAAI,OAAOC,YAAY,aAAa;QAClC,gBAAOJ;2DAAP;WACGK,IAAI,CAAC,SAACC;gBAEYA,oBACNA,cACQA;YAHnBH,SAAS,MAAM;gBACbI,eAAeD,CAAAA,qBAAAA,gBAAAA,0BAAAA,IAAKC,aAAa,cAAlBD,gCAAAA,qBAAsBE;gBACrCC,SAASH,CAAAA,eAAAA,gBAAAA,0BAAAA,IAAKG,OAAO,cAAZH,0BAAAA,eAAgB;oBAAEI,MAAM;oBAAKC,OAAO;gBAAI;gBACjDC,iBAAiBN,CAAAA,uBAAAA,gBAAAA,0BAAAA,IAAKM,eAAe,cAApBN,kCAAAA,uBAAyB,SAACO;2BAAmBA;;YAChE;QACF,GACCC,KAAK,CAACX;IACX,OAAO;QACL,IAAI;YACFA,SAAS,MAAMC,QAAQJ;QACzB,EAAE,OAAOe,KAAK;YACZZ,SAASY,KAAK;QAChB;IACF;AACF;AAEe,SAASxB,cAAcY,QAA8D;IAClG,IAAIF,WAAWO,WAAW;QACxBL,SAAS,MAAMF;QACf;IACF;IACAe,IAAAA,4BAAa,EAAChB,YAAYF,aAAa,CAAC,GAAG,SAACiB;QAC1C,IAAIA,KAAK,OAAOZ,SAASY,KAAK;QAC9Bb,WAAWF,YAAY,SAACe,KAAKE;YAC3B,IAAIF,KAAK,OAAOZ,SAASY,KAAK;YAC9Bd,SAASgB;YACTd,SAAS,MAAMF;QACjB;IACF;AACF"} |
| type CreateSessionFn = ((options?: { | ||
| header?: string; | ||
| showStatusBar?: boolean; | ||
| interactive?: boolean; | ||
| }) => { | ||
| spawn: (command: string, args: string[], options: unknown, termOptions: unknown, callback: (err?: Error, res?: unknown) => void) => void; | ||
| close: () => void; | ||
| waitAndClose: (callback?: () => void) => void; | ||
| }) | undefined; | ||
| interface SpawnTermModule { | ||
| createSession: CreateSessionFn; | ||
| figures: { | ||
| tick: string; | ||
| cross: string; | ||
| }; | ||
| formatArguments: (args: string[]) => string[]; | ||
| } | ||
| export default function loadSpawnTerm(callback: (err: Error | null, result: SpawnTermModule) => void): void; | ||
| export {}; |
| import installModule from 'install-module-linked'; | ||
| import path from 'path'; | ||
| import url from 'url'; | ||
| const _dirname = path.dirname(typeof __dirname !== 'undefined' ? __dirname : url.fileURLToPath(import.meta.url)); | ||
| const nodeModules = path.join(_dirname, '..', '..', '..', 'node_modules'); | ||
| const moduleName = 'spawn-term'; | ||
| let cached; | ||
| function loadModule(moduleName, callback) { | ||
| if (typeof require === 'undefined') { | ||
| import(moduleName).then((mod)=>{ | ||
| var _mod_createSession, _mod_figures, _mod_formatArguments; | ||
| callback(null, { | ||
| createSession: (_mod_createSession = mod === null || mod === void 0 ? void 0 : mod.createSession) !== null && _mod_createSession !== void 0 ? _mod_createSession : undefined, | ||
| figures: (_mod_figures = mod === null || mod === void 0 ? void 0 : mod.figures) !== null && _mod_figures !== void 0 ? _mod_figures : { | ||
| tick: '✓', | ||
| cross: '✗' | ||
| }, | ||
| formatArguments: (_mod_formatArguments = mod === null || mod === void 0 ? void 0 : mod.formatArguments) !== null && _mod_formatArguments !== void 0 ? _mod_formatArguments : (args)=>args | ||
| }); | ||
| }).catch(callback); | ||
| } else { | ||
| try { | ||
| callback(null, require(moduleName)); | ||
| } catch (err) { | ||
| callback(err, null); | ||
| } | ||
| } | ||
| } | ||
| export default function loadSpawnTerm(callback) { | ||
| if (cached !== undefined) { | ||
| callback(null, cached); | ||
| return; | ||
| } | ||
| installModule(moduleName, nodeModules, {}, (err)=>{ | ||
| if (err) return callback(err, null); | ||
| loadModule(moduleName, (err, _cached)=>{ | ||
| if (err) return callback(err, null); | ||
| cached = _cached; | ||
| callback(null, cached); | ||
| }); | ||
| }); | ||
| } |
| {"version":3,"sources":["/Users/kevin/Dev/OpenSource/monorepo/each-package/src/lib/loadSpawnTerm.ts"],"sourcesContent":["import installModule from 'install-module-linked';\nimport path from 'path';\nimport url from 'url';\n\nconst _dirname = path.dirname(typeof __dirname !== 'undefined' ? __dirname : url.fileURLToPath(import.meta.url));\nconst nodeModules = path.join(_dirname, '..', '..', '..', 'node_modules');\nconst moduleName = 'spawn-term';\n\ntype CreateSessionFn =\n | ((options?: { header?: string; showStatusBar?: boolean; interactive?: boolean }) => {\n spawn: (command: string, args: string[], options: unknown, termOptions: unknown, callback: (err?: Error, res?: unknown) => void) => void;\n close: () => void;\n waitAndClose: (callback?: () => void) => void;\n })\n | undefined;\n\ninterface SpawnTermModule {\n createSession: CreateSessionFn;\n figures: { tick: string; cross: string };\n formatArguments: (args: string[]) => string[];\n}\n\nlet cached: SpawnTermModule | undefined;\n\nfunction loadModule(moduleName, callback) {\n if (typeof require === 'undefined') {\n import(moduleName)\n .then((mod) => {\n callback(null, {\n createSession: mod?.createSession ?? undefined,\n figures: mod?.figures ?? { tick: '✓', cross: '✗' },\n formatArguments: mod?.formatArguments ?? ((args: string[]) => args),\n });\n })\n .catch(callback);\n } else {\n try {\n callback(null, require(moduleName));\n } catch (err) {\n callback(err, null);\n }\n }\n}\n\nexport default function loadSpawnTerm(callback: (err: Error | null, result: SpawnTermModule) => void): void {\n if (cached !== undefined) {\n callback(null, cached);\n return;\n }\n installModule(moduleName, nodeModules, {}, (err) => {\n if (err) return callback(err, null);\n loadModule(moduleName, (err, _cached: SpawnTermModule) => {\n if (err) return callback(err, null);\n cached = _cached;\n callback(null, cached);\n });\n });\n}\n"],"names":["installModule","path","url","_dirname","dirname","__dirname","fileURLToPath","nodeModules","join","moduleName","cached","loadModule","callback","require","then","mod","createSession","undefined","figures","tick","cross","formatArguments","args","catch","err","loadSpawnTerm","_cached"],"mappings":"AAAA,OAAOA,mBAAmB,wBAAwB;AAClD,OAAOC,UAAU,OAAO;AACxB,OAAOC,SAAS,MAAM;AAEtB,MAAMC,WAAWF,KAAKG,OAAO,CAAC,OAAOC,cAAc,cAAcA,YAAYH,IAAII,aAAa,CAAC,YAAYJ,GAAG;AAC9G,MAAMK,cAAcN,KAAKO,IAAI,CAACL,UAAU,MAAM,MAAM,MAAM;AAC1D,MAAMM,aAAa;AAgBnB,IAAIC;AAEJ,SAASC,WAAWF,UAAU,EAAEG,QAAQ;IACtC,IAAI,OAAOC,YAAY,aAAa;QAClC,MAAM,CAACJ,YACJK,IAAI,CAAC,CAACC;gBAEYA,oBACNA,cACQA;YAHnBH,SAAS,MAAM;gBACbI,eAAeD,CAAAA,qBAAAA,gBAAAA,0BAAAA,IAAKC,aAAa,cAAlBD,gCAAAA,qBAAsBE;gBACrCC,SAASH,CAAAA,eAAAA,gBAAAA,0BAAAA,IAAKG,OAAO,cAAZH,0BAAAA,eAAgB;oBAAEI,MAAM;oBAAKC,OAAO;gBAAI;gBACjDC,iBAAiBN,CAAAA,uBAAAA,gBAAAA,0BAAAA,IAAKM,eAAe,cAApBN,kCAAAA,uBAAyB,CAACO,OAAmBA;YAChE;QACF,GACCC,KAAK,CAACX;IACX,OAAO;QACL,IAAI;YACFA,SAAS,MAAMC,QAAQJ;QACzB,EAAE,OAAOe,KAAK;YACZZ,SAASY,KAAK;QAChB;IACF;AACF;AAEA,eAAe,SAASC,cAAcb,QAA8D;IAClG,IAAIF,WAAWO,WAAW;QACxBL,SAAS,MAAMF;QACf;IACF;IACAV,cAAcS,YAAYF,aAAa,CAAC,GAAG,CAACiB;QAC1C,IAAIA,KAAK,OAAOZ,SAASY,KAAK;QAC9Bb,WAAWF,YAAY,CAACe,KAAKE;YAC3B,IAAIF,KAAK,OAAOZ,SAASY,KAAK;YAC9Bd,SAASgB;YACTd,SAAS,MAAMF;QACjB;IACF;AACF"} |
Uses eval
Supply chain riskPackage uses dynamic code execution (e.g., eval()), which is a dangerous practice. This can prevent the code from running in certain environments and increases the risk that the code may contain exploits or malicious behavior.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 2 instances in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
Uses eval
Supply chain riskPackage uses dynamic code execution (e.g., eval()), which is a dangerous practice. This can prevent the code from running in certain environments and increases the risk that the code may contain exploits or malicious behavior.
Found 1 instance in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 2 instances in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
10
-23.08%99076
-16.53%41
-14.58%995
-18.11%+ Added
+ Added
- Removed