each-package
Advanced tools
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["/Users/kevin/Dev/OpenSource/monorepo/each-package/src/lib/packageLayers.ts"],"sourcesContent":["import fs from 'fs';\nimport Iterator, { type Entry } from 'fs-iterator';\nimport path from 'path';\nimport removeBOM from 'remove-bom-buffer';\nimport match from 'test-match';\nimport Graph, { type DependencyGraph } from 'topological-sort-group';\n\nexport interface PackageEntry extends Entry {\n package: { name: string; dependencies: object; optionalDependencies: object };\n}\n\nimport type { EachOptions } from '../types.ts';\n\nexport type Callback = (err?: Error, result?: PackageEntry[][] | DependencyGraph<PackageEntry>) => undefined;\n\nconst defaultIgnores = 'node_modules,.git';\n\nexport default function packageLayers(options: EachOptions, callback: Callback): 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\n const cwd = options.cwd || process.cwd();\n\n const ignores = options.ignore ? options.ignore : defaultIgnores;\n const matcher = match({ exclude: ignores });\n\n const iterator = new Iterator(cwd as string, {\n filter: function filter(entry) {\n if (entry.stats.isDirectory() || entry.realStats?.isDirectory()) return entry.basename[0] !== '.' && matcher(entry.basename);\n if (entry.stats.isFile()) {\n // Only include package.json files\n if (entry.basename !== 'package.json') return false;\n // Exclude root package.json unless --root flag is set\n if (!options.root && entry.path === 'package.json') return false;\n return true;\n }\n return false;\n },\n depth,\n lstat: true,\n });\n const entries: PackageEntry[] = [];\n iterator.forEach(\n (entry: PackageEntry, cb): undefined => {\n if (!entry.stats.isFile()) {\n cb();\n return;\n }\n fs.readFile(entry.fullPath, 'utf8', (err, contents) => {\n if (err) return cb(err);\n try {\n const pkg = JSON.parse(removeBOM(contents));\n if (pkg.private && !options.private) return cb();\n if (pkg.name === undefined) return cb(); // skip packages without names\n entry.package = pkg;\n entries.push(entry);\n cb();\n } catch (_err) {\n console.log(`Failed to parse JSON for ${entry.path}`);\n cb();\n }\n });\n },\n { concurrency: Infinity, callbacks: true },\n (err) => {\n if (err) return callback(err);\n\n // full graph at one layer, sorted by relative path\n if (!options.topological) {\n const sorted = entries.sort((a, b) => path.dirname(a.path).localeCompare(path.dirname(b.path))) as PackageEntry[];\n return callback(null, [sorted]);\n }\n\n // Build nodes map\n const nodes: Record<string, PackageEntry> = {};\n const dependencies: Record<string, string[]> = {};\n for (var i = 0; i < entries.length; i++) {\n var entry = entries[i];\n nodes[entry.package.name] = entry;\n dependencies[entry.package.name] = [];\n }\n\n // Build dependencies from package.json dependencies and optionalDependencies\n for (var j = 0; j < entries.length; j++) {\n var e = entries[j];\n var deps = { ...(e.package.dependencies || {}), ...(e.package.optionalDependencies || {}) };\n for (var name in deps) {\n if (nodes[name]) {\n // This package depends on another package in the graph\n dependencies[e.package.name].push(name);\n }\n }\n }\n\n // Use Graph for cycle detection\n const graph = Graph.from<PackageEntry>({ nodes, dependencies });\n const { cycles, duplicates } = graph.sort();\n\n if (cycles && cycles.length) {\n cycles.forEach((c) => {\n console.log(`Skipping cycle: ${c.join(' -> ')}`);\n });\n }\n if (duplicates && duplicates.length) {\n duplicates.forEach((d) => {\n console.log(`Skipping duplicates: ${JSON.stringify(d.values.map((x) => x.path))}`);\n });\n }\n\n // Remove cyclic packages from the graph\n if (cycles && cycles.length) {\n const cyclicPackages: Record<string, boolean> = {};\n for (var ci = 0; ci < cycles.length; ci++) {\n var c = cycles[ci];\n for (var cj = 0; cj < c.length; cj++) {\n cyclicPackages[String(c[cj])] = true;\n }\n }\n for (var cyclicName in cyclicPackages) {\n delete nodes[cyclicName];\n delete dependencies[cyclicName];\n }\n // Remove references to cyclic packages from dependencies\n for (var key in dependencies) {\n var depList = dependencies[key];\n for (var di = depList.length - 1; di >= 0; di--) {\n if (cyclicPackages[depList[di]]) depList.splice(di, 1);\n }\n }\n }\n\n return callback(null, { nodes, dependencies });\n }\n );\n}\n"],"names":["packageLayers","defaultIgnores","options","callback","depth","Infinity","cwd","process","ignores","ignore","matcher","match","exclude","iterator","Iterator","filter","entry","stats","isDirectory","realStats","basename","isFile","root","path","lstat","entries","forEach","cb","fs","readFile","fullPath","err","contents","pkg","JSON","parse","removeBOM","private","name","undefined","package","push","_err","console","log","concurrency","callbacks","topological","sorted","sort","a","b","dirname","localeCompare","nodes","dependencies","i","length","j","e","deps","optionalDependencies","graph","Graph","from","cycles","duplicates","c","join","d","stringify","values","map","x","cyclicPackages","ci","cj","String","cyclicName","key","depList","di","splice"],"mappings":"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"} | ||
| {"version":3,"sources":["/Users/kevin/Dev/OpenSource/monorepo/each-package/src/lib/packageLayers.ts"],"sourcesContent":["import fs from 'fs';\nimport Iterator, { type Entry } from 'fs-iterator';\nimport path from 'path';\nimport removeBOM from 'remove-bom-buffer';\nimport match from 'test-match';\nimport Graph, { type DependencyGraph } from 'topological-sort-group';\n\nexport interface PackageEntry extends Entry {\n package: { name: string; dependencies: object; optionalDependencies: object };\n}\n\nimport type { EachOptions } from '../types.ts';\n\nexport type Callback = (err?: Error, result?: PackageEntry[][] | DependencyGraph<PackageEntry>) => undefined;\n\nconst defaultIgnores = 'node_modules,.git';\n\nexport default function packageLayers(options: EachOptions, callback: Callback): 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\n const cwd = options.cwd || process.cwd();\n\n const ignores = options.ignore ? options.ignore : defaultIgnores;\n const matcher = match({ exclude: ignores });\n\n const iterator = new Iterator(cwd as string, {\n filter: function filter(entry) {\n if (entry.stats.isDirectory() || entry.realStats?.isDirectory()) return entry.basename[0] !== '.' && matcher(entry.basename);\n if (entry.stats.isFile()) {\n // Only include package.json files\n if (entry.basename !== 'package.json') return false;\n // Exclude root package.json unless --root flag is set\n if (!options.root && entry.path === 'package.json') return false;\n return true;\n }\n return false;\n },\n depth,\n lstat: true,\n });\n const entries: PackageEntry[] = [];\n iterator.forEach(\n (entry: PackageEntry, cb): undefined => {\n if (!entry.stats.isFile()) {\n cb();\n return;\n }\n fs.readFile(entry.fullPath, 'utf8', (err, contents) => {\n if (err) return cb(err);\n try {\n const pkg = JSON.parse(removeBOM(contents));\n if (pkg.private && !options.private) return cb();\n if (pkg.name === undefined) return cb(); // skip packages without names\n entry.package = pkg;\n entries.push(entry);\n cb();\n } catch (_err) {\n console.log(`Failed to parse JSON for ${entry.path}`);\n cb();\n }\n });\n },\n { concurrency: Infinity, callbacks: true },\n (err) => {\n if (err) return callback(err);\n\n // full graph at one layer, sorted by relative path\n if (!options.topological) {\n const sorted = entries.sort((a, b) => path.dirname(a.path).localeCompare(path.dirname(b.path))) as PackageEntry[];\n return callback(null, [sorted]);\n }\n\n // Build nodes map\n const nodes: Record<string, PackageEntry> = {};\n const dependencies: Record<string, string[]> = {};\n for (let i = 0; i < entries.length; i++) {\n const entry = entries[i];\n nodes[entry.package.name] = entry;\n dependencies[entry.package.name] = [];\n }\n\n // Build dependencies from package.json dependencies and optionalDependencies\n for (let j = 0; j < entries.length; j++) {\n const e = entries[j];\n const deps = { ...(e.package.dependencies || {}), ...(e.package.optionalDependencies || {}) };\n for (const name in deps) {\n if (nodes[name]) {\n // This package depends on another package in the graph\n dependencies[e.package.name].push(name);\n }\n }\n }\n\n // Use Graph for cycle detection\n const graph = Graph.from<PackageEntry>({ nodes, dependencies });\n const { cycles, duplicates } = graph.sort();\n\n if (cycles && cycles.length) {\n cycles.forEach((c) => {\n console.log(`Skipping cycle: ${c.join(' -> ')}`);\n });\n }\n if (duplicates && duplicates.length) {\n duplicates.forEach((d) => {\n console.log(`Skipping duplicates: ${JSON.stringify(d.values.map((x) => x.path))}`);\n });\n }\n\n // Remove cyclic packages from the graph\n if (cycles && cycles.length) {\n const cyclicPackages: Record<string, boolean> = {};\n for (let ci = 0; ci < cycles.length; ci++) {\n const c = cycles[ci];\n for (let cj = 0; cj < c.length; cj++) {\n cyclicPackages[String(c[cj])] = true;\n }\n }\n for (const cyclicName in cyclicPackages) {\n delete nodes[cyclicName];\n delete dependencies[cyclicName];\n }\n // Remove references to cyclic packages from dependencies\n for (const key in dependencies) {\n const depList = dependencies[key];\n for (let di = depList.length - 1; di >= 0; di--) {\n if (cyclicPackages[depList[di]]) depList.splice(di, 1);\n }\n }\n }\n\n return callback(null, { nodes, dependencies });\n }\n );\n}\n"],"names":["packageLayers","defaultIgnores","options","callback","depth","Infinity","cwd","process","ignores","ignore","matcher","match","exclude","iterator","Iterator","filter","entry","stats","isDirectory","realStats","basename","isFile","root","path","lstat","entries","forEach","cb","fs","readFile","fullPath","err","contents","pkg","JSON","parse","removeBOM","private","name","undefined","package","push","_err","console","log","concurrency","callbacks","topological","sorted","sort","a","b","dirname","localeCompare","nodes","dependencies","i","length","j","e","deps","optionalDependencies","graph","Graph","from","cycles","duplicates","c","join","d","stringify","values","map","x","cyclicPackages","ci","cj","String","cyclicName","key","depList","di","splice"],"mappings":"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"} |
@@ -67,4 +67,4 @@ import fs from 'fs'; | ||
| const dependencies = {}; | ||
| for(var i = 0; i < entries.length; i++){ | ||
| var entry = entries[i]; | ||
| for(let i = 0; i < entries.length; i++){ | ||
| const entry = entries[i]; | ||
| nodes[entry.package.name] = entry; | ||
@@ -74,9 +74,9 @@ dependencies[entry.package.name] = []; | ||
| // Build dependencies from package.json dependencies and optionalDependencies | ||
| for(var j = 0; j < entries.length; j++){ | ||
| var e = entries[j]; | ||
| var deps = { | ||
| for(let j = 0; j < entries.length; j++){ | ||
| const e = entries[j]; | ||
| const deps = { | ||
| ...e.package.dependencies || {}, | ||
| ...e.package.optionalDependencies || {} | ||
| }; | ||
| for(var name in deps){ | ||
| for(const name in deps){ | ||
| if (nodes[name]) { | ||
@@ -107,9 +107,9 @@ // This package depends on another package in the graph | ||
| const cyclicPackages = {}; | ||
| for(var ci = 0; ci < cycles.length; ci++){ | ||
| var c = cycles[ci]; | ||
| for(var cj = 0; cj < c.length; cj++){ | ||
| for(let ci = 0; ci < cycles.length; ci++){ | ||
| const c = cycles[ci]; | ||
| for(let cj = 0; cj < c.length; cj++){ | ||
| cyclicPackages[String(c[cj])] = true; | ||
| } | ||
| } | ||
| for(var cyclicName in cyclicPackages){ | ||
| for(const cyclicName in cyclicPackages){ | ||
| delete nodes[cyclicName]; | ||
@@ -119,5 +119,5 @@ delete dependencies[cyclicName]; | ||
| // Remove references to cyclic packages from dependencies | ||
| for(var key in dependencies){ | ||
| var depList = dependencies[key]; | ||
| for(var di = depList.length - 1; di >= 0; di--){ | ||
| for(const key in dependencies){ | ||
| const depList = dependencies[key]; | ||
| for(let di = depList.length - 1; di >= 0; di--){ | ||
| if (cyclicPackages[depList[di]]) depList.splice(di, 1); | ||
@@ -124,0 +124,0 @@ } |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["/Users/kevin/Dev/OpenSource/monorepo/each-package/src/lib/packageLayers.ts"],"sourcesContent":["import fs from 'fs';\nimport Iterator, { type Entry } from 'fs-iterator';\nimport path from 'path';\nimport removeBOM from 'remove-bom-buffer';\nimport match from 'test-match';\nimport Graph, { type DependencyGraph } from 'topological-sort-group';\n\nexport interface PackageEntry extends Entry {\n package: { name: string; dependencies: object; optionalDependencies: object };\n}\n\nimport type { EachOptions } from '../types.ts';\n\nexport type Callback = (err?: Error, result?: PackageEntry[][] | DependencyGraph<PackageEntry>) => undefined;\n\nconst defaultIgnores = 'node_modules,.git';\n\nexport default function packageLayers(options: EachOptions, callback: Callback): 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\n const cwd = options.cwd || process.cwd();\n\n const ignores = options.ignore ? options.ignore : defaultIgnores;\n const matcher = match({ exclude: ignores });\n\n const iterator = new Iterator(cwd as string, {\n filter: function filter(entry) {\n if (entry.stats.isDirectory() || entry.realStats?.isDirectory()) return entry.basename[0] !== '.' && matcher(entry.basename);\n if (entry.stats.isFile()) {\n // Only include package.json files\n if (entry.basename !== 'package.json') return false;\n // Exclude root package.json unless --root flag is set\n if (!options.root && entry.path === 'package.json') return false;\n return true;\n }\n return false;\n },\n depth,\n lstat: true,\n });\n const entries: PackageEntry[] = [];\n iterator.forEach(\n (entry: PackageEntry, cb): undefined => {\n if (!entry.stats.isFile()) {\n cb();\n return;\n }\n fs.readFile(entry.fullPath, 'utf8', (err, contents) => {\n if (err) return cb(err);\n try {\n const pkg = JSON.parse(removeBOM(contents));\n if (pkg.private && !options.private) return cb();\n if (pkg.name === undefined) return cb(); // skip packages without names\n entry.package = pkg;\n entries.push(entry);\n cb();\n } catch (_err) {\n console.log(`Failed to parse JSON for ${entry.path}`);\n cb();\n }\n });\n },\n { concurrency: Infinity, callbacks: true },\n (err) => {\n if (err) return callback(err);\n\n // full graph at one layer, sorted by relative path\n if (!options.topological) {\n const sorted = entries.sort((a, b) => path.dirname(a.path).localeCompare(path.dirname(b.path))) as PackageEntry[];\n return callback(null, [sorted]);\n }\n\n // Build nodes map\n const nodes: Record<string, PackageEntry> = {};\n const dependencies: Record<string, string[]> = {};\n for (var i = 0; i < entries.length; i++) {\n var entry = entries[i];\n nodes[entry.package.name] = entry;\n dependencies[entry.package.name] = [];\n }\n\n // Build dependencies from package.json dependencies and optionalDependencies\n for (var j = 0; j < entries.length; j++) {\n var e = entries[j];\n var deps = { ...(e.package.dependencies || {}), ...(e.package.optionalDependencies || {}) };\n for (var name in deps) {\n if (nodes[name]) {\n // This package depends on another package in the graph\n dependencies[e.package.name].push(name);\n }\n }\n }\n\n // Use Graph for cycle detection\n const graph = Graph.from<PackageEntry>({ nodes, dependencies });\n const { cycles, duplicates } = graph.sort();\n\n if (cycles && cycles.length) {\n cycles.forEach((c) => {\n console.log(`Skipping cycle: ${c.join(' -> ')}`);\n });\n }\n if (duplicates && duplicates.length) {\n duplicates.forEach((d) => {\n console.log(`Skipping duplicates: ${JSON.stringify(d.values.map((x) => x.path))}`);\n });\n }\n\n // Remove cyclic packages from the graph\n if (cycles && cycles.length) {\n const cyclicPackages: Record<string, boolean> = {};\n for (var ci = 0; ci < cycles.length; ci++) {\n var c = cycles[ci];\n for (var cj = 0; cj < c.length; cj++) {\n cyclicPackages[String(c[cj])] = true;\n }\n }\n for (var cyclicName in cyclicPackages) {\n delete nodes[cyclicName];\n delete dependencies[cyclicName];\n }\n // Remove references to cyclic packages from dependencies\n for (var key in dependencies) {\n var depList = dependencies[key];\n for (var di = depList.length - 1; di >= 0; di--) {\n if (cyclicPackages[depList[di]]) depList.splice(di, 1);\n }\n }\n }\n\n return callback(null, { nodes, dependencies });\n }\n );\n}\n"],"names":["fs","Iterator","path","removeBOM","match","Graph","defaultIgnores","packageLayers","options","callback","depth","Infinity","cwd","process","ignores","ignore","matcher","exclude","iterator","filter","entry","stats","isDirectory","realStats","basename","isFile","root","lstat","entries","forEach","cb","readFile","fullPath","err","contents","pkg","JSON","parse","private","name","undefined","package","push","_err","console","log","concurrency","callbacks","topological","sorted","sort","a","b","dirname","localeCompare","nodes","dependencies","i","length","j","e","deps","optionalDependencies","graph","from","cycles","duplicates","c","join","d","stringify","values","map","x","cyclicPackages","ci","cj","String","cyclicName","key","depList","di","splice"],"mappings":"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"} | ||
| {"version":3,"sources":["/Users/kevin/Dev/OpenSource/monorepo/each-package/src/lib/packageLayers.ts"],"sourcesContent":["import fs from 'fs';\nimport Iterator, { type Entry } from 'fs-iterator';\nimport path from 'path';\nimport removeBOM from 'remove-bom-buffer';\nimport match from 'test-match';\nimport Graph, { type DependencyGraph } from 'topological-sort-group';\n\nexport interface PackageEntry extends Entry {\n package: { name: string; dependencies: object; optionalDependencies: object };\n}\n\nimport type { EachOptions } from '../types.ts';\n\nexport type Callback = (err?: Error, result?: PackageEntry[][] | DependencyGraph<PackageEntry>) => undefined;\n\nconst defaultIgnores = 'node_modules,.git';\n\nexport default function packageLayers(options: EachOptions, callback: Callback): 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\n const cwd = options.cwd || process.cwd();\n\n const ignores = options.ignore ? options.ignore : defaultIgnores;\n const matcher = match({ exclude: ignores });\n\n const iterator = new Iterator(cwd as string, {\n filter: function filter(entry) {\n if (entry.stats.isDirectory() || entry.realStats?.isDirectory()) return entry.basename[0] !== '.' && matcher(entry.basename);\n if (entry.stats.isFile()) {\n // Only include package.json files\n if (entry.basename !== 'package.json') return false;\n // Exclude root package.json unless --root flag is set\n if (!options.root && entry.path === 'package.json') return false;\n return true;\n }\n return false;\n },\n depth,\n lstat: true,\n });\n const entries: PackageEntry[] = [];\n iterator.forEach(\n (entry: PackageEntry, cb): undefined => {\n if (!entry.stats.isFile()) {\n cb();\n return;\n }\n fs.readFile(entry.fullPath, 'utf8', (err, contents) => {\n if (err) return cb(err);\n try {\n const pkg = JSON.parse(removeBOM(contents));\n if (pkg.private && !options.private) return cb();\n if (pkg.name === undefined) return cb(); // skip packages without names\n entry.package = pkg;\n entries.push(entry);\n cb();\n } catch (_err) {\n console.log(`Failed to parse JSON for ${entry.path}`);\n cb();\n }\n });\n },\n { concurrency: Infinity, callbacks: true },\n (err) => {\n if (err) return callback(err);\n\n // full graph at one layer, sorted by relative path\n if (!options.topological) {\n const sorted = entries.sort((a, b) => path.dirname(a.path).localeCompare(path.dirname(b.path))) as PackageEntry[];\n return callback(null, [sorted]);\n }\n\n // Build nodes map\n const nodes: Record<string, PackageEntry> = {};\n const dependencies: Record<string, string[]> = {};\n for (let i = 0; i < entries.length; i++) {\n const entry = entries[i];\n nodes[entry.package.name] = entry;\n dependencies[entry.package.name] = [];\n }\n\n // Build dependencies from package.json dependencies and optionalDependencies\n for (let j = 0; j < entries.length; j++) {\n const e = entries[j];\n const deps = { ...(e.package.dependencies || {}), ...(e.package.optionalDependencies || {}) };\n for (const name in deps) {\n if (nodes[name]) {\n // This package depends on another package in the graph\n dependencies[e.package.name].push(name);\n }\n }\n }\n\n // Use Graph for cycle detection\n const graph = Graph.from<PackageEntry>({ nodes, dependencies });\n const { cycles, duplicates } = graph.sort();\n\n if (cycles && cycles.length) {\n cycles.forEach((c) => {\n console.log(`Skipping cycle: ${c.join(' -> ')}`);\n });\n }\n if (duplicates && duplicates.length) {\n duplicates.forEach((d) => {\n console.log(`Skipping duplicates: ${JSON.stringify(d.values.map((x) => x.path))}`);\n });\n }\n\n // Remove cyclic packages from the graph\n if (cycles && cycles.length) {\n const cyclicPackages: Record<string, boolean> = {};\n for (let ci = 0; ci < cycles.length; ci++) {\n const c = cycles[ci];\n for (let cj = 0; cj < c.length; cj++) {\n cyclicPackages[String(c[cj])] = true;\n }\n }\n for (const cyclicName in cyclicPackages) {\n delete nodes[cyclicName];\n delete dependencies[cyclicName];\n }\n // Remove references to cyclic packages from dependencies\n for (const key in dependencies) {\n const depList = dependencies[key];\n for (let di = depList.length - 1; di >= 0; di--) {\n if (cyclicPackages[depList[di]]) depList.splice(di, 1);\n }\n }\n }\n\n return callback(null, { nodes, dependencies });\n }\n );\n}\n"],"names":["fs","Iterator","path","removeBOM","match","Graph","defaultIgnores","packageLayers","options","callback","depth","Infinity","cwd","process","ignores","ignore","matcher","exclude","iterator","filter","entry","stats","isDirectory","realStats","basename","isFile","root","lstat","entries","forEach","cb","readFile","fullPath","err","contents","pkg","JSON","parse","private","name","undefined","package","push","_err","console","log","concurrency","callbacks","topological","sorted","sort","a","b","dirname","localeCompare","nodes","dependencies","i","length","j","e","deps","optionalDependencies","graph","from","cycles","duplicates","c","join","d","stringify","values","map","x","cyclicPackages","ci","cj","String","cyclicName","key","depList","di","splice"],"mappings":"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"} |
+8
-8
| { | ||
| "name": "each-package", | ||
| "version": "1.4.10", | ||
| "version": "1.4.11", | ||
| "description": "Run commands in each package folder starting with cwd skipping node_modules folders", | ||
@@ -43,4 +43,4 @@ "keywords": [ | ||
| "dependencies": { | ||
| "cross-spawn-cb": "^2.4.10", | ||
| "exit-compat": "^1.0.0", | ||
| "cross-spawn-cb": "^2.4.12", | ||
| "exit-compat": "^1.0.1", | ||
| "fs-iterator": "^6.1.10", | ||
@@ -52,3 +52,3 @@ "getopts-compat": "^2.2.6", | ||
| "spawn-term": "^3.3.2", | ||
| "test-match": "^1.1.1", | ||
| "test-match": "^1.1.2", | ||
| "topological-scheduler": "^0.1.0", | ||
@@ -59,9 +59,9 @@ "topological-sort-group": "^4.0.0" | ||
| "@types/mocha": "^10.0.10", | ||
| "@types/node": "^25.0.0", | ||
| "@types/node": "^25.0.1", | ||
| "cr": "^0.1.0", | ||
| "is-version": "^1.0.7", | ||
| "node-version-use": "^2.1.0", | ||
| "node-version-use": "^2.1.5", | ||
| "pinkie-promise": "^2.0.1", | ||
| "ts-dev-stack": "^1.21.2", | ||
| "tsds-config": "^0.2.0" | ||
| "ts-dev-stack": "^1.21.3", | ||
| "tsds-config": "^0.2.1" | ||
| }, | ||
@@ -68,0 +68,0 @@ "engines": { |
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
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
99201
0.05%Updated
Updated
Updated