@socketsecurity/cli 0.14.94 → 0.14.96

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/dist/constants.js +3 -3
  2. package/dist/constants.js.map +1 -1
  3. package/dist/module-sync/cli.js +178 -159
  4. package/dist/module-sync/cli.js.map +1 -1
  5. package/dist/module-sync/shadow-bin.js +3 -14
  6. package/dist/module-sync/shadow-bin.js.map +1 -1
  7. package/dist/module-sync/shadow-npm-inject.js +68 -59
  8. package/dist/module-sync/shadow-npm-inject.js.map +1 -1
  9. package/dist/module-sync/shadow-npm-paths.js +16 -29
  10. package/dist/module-sync/shadow-npm-paths.js.map +1 -1
  11. package/dist/module-sync/vendor.d.ts +0 -0
  12. package/dist/module-sync/vendor.js +85829 -12598
  13. package/dist/module-sync/vendor.js.map +1 -1
  14. package/dist/require/cli.js +160 -140
  15. package/dist/require/cli.js.map +1 -1
  16. package/dist/require/shadow-bin.d.ts +5 -0
  17. package/dist/require/shadow-bin.js +104 -1
  18. package/dist/require/shadow-bin.js.map +1 -0
  19. package/dist/require/shadow-npm-inject.d.ts +1 -0
  20. package/dist/require/shadow-npm-inject.js +2335 -1
  21. package/dist/require/shadow-npm-inject.js.map +1 -0
  22. package/dist/require/shadow-npm-paths.d.ts +29 -0
  23. package/dist/require/shadow-npm-paths.js +454 -1
  24. package/dist/require/shadow-npm-paths.js.map +1 -0
  25. package/package.json +29 -29
  26. package/dist/blessed/lib/alias.js +0 -521
  27. package/dist/blessed/lib/blessed.js +0 -34
  28. package/dist/blessed/lib/colors.js +0 -492
  29. package/dist/blessed/lib/events.js +0 -197
  30. package/dist/blessed/lib/gpmclient.js +0 -247
  31. package/dist/blessed/lib/helpers.js +0 -172
  32. package/dist/blessed/lib/keys.js +0 -514
  33. package/dist/blessed/lib/program.js +0 -4532
  34. package/dist/blessed/lib/tput.js +0 -3113
  35. package/dist/blessed/lib/unicode.js +0 -914
  36. package/dist/blessed/lib/widget.js +0 -62
  37. package/dist/blessed/lib/widgets/ansiimage.js +0 -175
  38. package/dist/blessed/lib/widgets/bigtext.js +0 -172
  39. package/dist/blessed/lib/widgets/box.js +0 -36
  40. package/dist/blessed/lib/widgets/button.js +0 -64
  41. package/dist/blessed/lib/widgets/checkbox.js +0 -97
  42. package/dist/blessed/lib/widgets/element.js +0 -2873
  43. package/dist/blessed/lib/widgets/filemanager.js +0 -225
  44. package/dist/blessed/lib/widgets/form.js +0 -303
  45. package/dist/blessed/lib/widgets/image.js +0 -73
  46. package/dist/blessed/lib/widgets/input.js +0 -36
  47. package/dist/blessed/lib/widgets/layout.js +0 -251
  48. package/dist/blessed/lib/widgets/line.js +0 -61
  49. package/dist/blessed/lib/widgets/list.js +0 -654
  50. package/dist/blessed/lib/widgets/listbar.js +0 -454
  51. package/dist/blessed/lib/widgets/listtable.js +0 -267
  52. package/dist/blessed/lib/widgets/loading.js +0 -90
  53. package/dist/blessed/lib/widgets/log.js +0 -84
  54. package/dist/blessed/lib/widgets/message.js +0 -147
  55. package/dist/blessed/lib/widgets/node.js +0 -315
  56. package/dist/blessed/lib/widgets/overlayimage.js +0 -796
  57. package/dist/blessed/lib/widgets/progressbar.js +0 -168
  58. package/dist/blessed/lib/widgets/prompt.js +0 -129
  59. package/dist/blessed/lib/widgets/question.js +0 -131
  60. package/dist/blessed/lib/widgets/radiobutton.js +0 -64
  61. package/dist/blessed/lib/widgets/radioset.js +0 -38
  62. package/dist/blessed/lib/widgets/screen.js +0 -2487
  63. package/dist/blessed/lib/widgets/scrollablebox.js +0 -417
  64. package/dist/blessed/lib/widgets/scrollabletext.js +0 -37
  65. package/dist/blessed/lib/widgets/table.js +0 -385
  66. package/dist/blessed/lib/widgets/terminal.js +0 -454
  67. package/dist/blessed/lib/widgets/text.js +0 -37
  68. package/dist/blessed/lib/widgets/textarea.js +0 -378
  69. package/dist/blessed/lib/widgets/textbox.js +0 -81
  70. package/dist/blessed/lib/widgets/video.js +0 -132
  71. package/dist/blessed/usr/fonts/AUTHORS +0 -1
  72. package/dist/blessed/usr/fonts/LICENSE +0 -94
  73. package/dist/blessed/usr/fonts/README +0 -340
  74. package/dist/blessed/usr/fonts/ter-u14b.json +0 -17826
  75. package/dist/blessed/usr/fonts/ter-u14n.json +0 -17826
  76. package/dist/blessed/usr/linux +0 -0
  77. package/dist/blessed/usr/windows-ansi +0 -0
  78. package/dist/blessed/usr/xterm +0 -0
  79. package/dist/blessed/usr/xterm-256color +0 -0
  80. package/dist/blessed/usr/xterm.termcap +0 -243
  81. package/dist/blessed/usr/xterm.terminfo +0 -1977
  82. package/dist/blessed/vendor/tng.js +0 -1878
@@ -1,3 +1,456 @@
1
1
  'use strict'
2
2
 
3
- module.exports = require('../module-sync/shadow-npm-paths.js')
3
+ const require$$0 = require('node:fs')
4
+ const Module = require('node:module')
5
+ const path = require('node:path')
6
+ const process = require('node:process')
7
+ const logger = require('@socketsecurity/registry/lib/logger')
8
+ const path$1 = require('@socketsecurity/registry/lib/path')
9
+ const constants = require('./constants.js')
10
+ const vendor = require('./vendor.js')
11
+ const debug = require('@socketsecurity/registry/lib/debug')
12
+ const npm = require('@socketsecurity/registry/lib/npm')
13
+ const words = require('@socketsecurity/registry/lib/words')
14
+
15
+ const ignoredDirs = [
16
+ // Taken from ignore-by-default:
17
+ // https://github.com/novemberborn/ignore-by-default/blob/v2.1.0/index.js
18
+ '.git',
19
+ // Git repository files, see <https://git-scm.com/>
20
+ '.log',
21
+ // Log files emitted by tools such as `tsserver`, see <https://github.com/Microsoft/TypeScript/wiki/Standalone-Server-%28tsserver%29>
22
+ '.nyc_output',
23
+ // Temporary directory where nyc stores coverage data, see <https://github.com/bcoe/nyc>
24
+ '.sass-cache',
25
+ // Cache folder for node-sass, see <https://github.com/sass/node-sass>
26
+ '.yarn',
27
+ // Where node modules are installed when using Yarn, see <https://yarnpkg.com/>
28
+ 'bower_components',
29
+ // Where Bower packages are installed, see <http://bower.io/>
30
+ 'coverage',
31
+ // Standard output directory for code coverage reports, see <https://github.com/gotwarlost/istanbul>
32
+ 'node_modules',
33
+ // Where Node modules are installed, see <https://nodejs.org/>
34
+ // Taken from globby:
35
+ // https://github.com/sindresorhus/globby/blob/v14.0.2/ignore.js#L11-L16
36
+ 'flow-typed'
37
+ ]
38
+ const ignoredDirPatterns = ignoredDirs.map(i => `**/${i}`)
39
+ function directoryPatterns() {
40
+ return [...ignoredDirPatterns]
41
+ }
42
+
43
+ const { NODE_MODULES: NODE_MODULES$1, NPM: NPM$1, shadowBinPath } = constants
44
+ async function filterGlobResultToSupportedFiles(entries, supportedFiles) {
45
+ const patterns = ['golang', NPM$1, 'maven', 'pypi', 'gem', 'nuget'].reduce(
46
+ (r, n) => {
47
+ const supported = supportedFiles[n]
48
+ r.push(
49
+ ...(supported
50
+ ? Object.values(supported).map(p => `**/${p.pattern}`)
51
+ : [])
52
+ )
53
+ return r
54
+ },
55
+ []
56
+ )
57
+ return entries.filter(p => vendor.micromatchExports.some(p, patterns))
58
+ }
59
+ async function globWithGitIgnore(patterns, options) {
60
+ const {
61
+ cwd = process.cwd(),
62
+ socketConfig,
63
+ ...additionalOptions
64
+ } = {
65
+ __proto__: null,
66
+ ...options
67
+ }
68
+ const projectIgnorePaths = socketConfig?.projectIgnorePaths
69
+ const ignoreFiles = await vendor.distExports.glob(['**/.gitignore'], {
70
+ absolute: true,
71
+ cwd,
72
+ expandDirectories: true
73
+ })
74
+ const ignores = [
75
+ ...directoryPatterns(),
76
+ ...(Array.isArray(projectIgnorePaths)
77
+ ? ignoreFileLinesToGlobPatterns(
78
+ projectIgnorePaths,
79
+ path.join(cwd, '.gitignore'),
80
+ cwd
81
+ )
82
+ : []),
83
+ ...(
84
+ await Promise.all(
85
+ ignoreFiles.map(async filepath =>
86
+ ignoreFileToGlobPatterns(
87
+ await require$$0.promises.readFile(filepath, 'utf8'),
88
+ filepath,
89
+ cwd
90
+ )
91
+ )
92
+ )
93
+ ).flat()
94
+ ]
95
+ const hasNegatedPattern = ignores.some(p => p.charCodeAt(0) === 33 /*'!'*/)
96
+ const globOptions = {
97
+ absolute: true,
98
+ cwd,
99
+ expandDirectories: false,
100
+ ignore: hasNegatedPattern ? [] : ignores,
101
+ ...additionalOptions
102
+ }
103
+ const result = await vendor.distExports.glob(patterns, globOptions)
104
+ if (!hasNegatedPattern) {
105
+ return result
106
+ }
107
+ const { absolute } = globOptions
108
+
109
+ // Note: the input files must be INSIDE the cwd. If you get strange looking
110
+ // relative path errors here, most likely your path is outside the given cwd.
111
+ const filtered = vendor
112
+ .ignoreExports()
113
+ .add(ignores)
114
+ .filter(absolute ? result.map(p => path.relative(cwd, p)) : result)
115
+ return absolute ? filtered.map(p => path.resolve(cwd, p)) : filtered
116
+ }
117
+ function ignoreFileLinesToGlobPatterns(lines, filepath, cwd) {
118
+ const base = path.relative(cwd, path.dirname(filepath)).replace(/\\/g, '/')
119
+ const patterns = []
120
+ for (let i = 0, { length } = lines; i < length; i += 1) {
121
+ const pattern = lines[i].trim()
122
+ if (pattern.length > 0 && pattern.charCodeAt(0) !== 35 /*'#'*/) {
123
+ patterns.push(
124
+ ignorePatternToMinimatch(
125
+ pattern.length && pattern.charCodeAt(0) === 33 /*'!'*/
126
+ ? `!${path.posix.join(base, pattern.slice(1))}`
127
+ : path.posix.join(base, pattern)
128
+ )
129
+ )
130
+ }
131
+ }
132
+ return patterns
133
+ }
134
+ function ignoreFileToGlobPatterns(content, filepath, cwd) {
135
+ return ignoreFileLinesToGlobPatterns(content.split(/\r?\n/), filepath, cwd)
136
+ }
137
+
138
+ // Based on `@eslint/compat` convertIgnorePatternToMinimatch.
139
+ // Apache v2.0 licensed
140
+ // Copyright Nicholas C. Zakas
141
+ // https://github.com/eslint/rewrite/blob/compat-v1.2.1/packages/compat/src/ignore-file.js#L28
142
+ function ignorePatternToMinimatch(pattern) {
143
+ const isNegated = pattern.startsWith('!')
144
+ const negatedPrefix = isNegated ? '!' : ''
145
+ const patternToTest = (isNegated ? pattern.slice(1) : pattern).trimEnd()
146
+ // Special cases.
147
+ if (
148
+ patternToTest === '' ||
149
+ patternToTest === '**' ||
150
+ patternToTest === '/**' ||
151
+ patternToTest === '**'
152
+ ) {
153
+ return `${negatedPrefix}${patternToTest}`
154
+ }
155
+ const firstIndexOfSlash = patternToTest.indexOf('/')
156
+ const matchEverywherePrefix =
157
+ firstIndexOfSlash === -1 || firstIndexOfSlash === patternToTest.length - 1
158
+ ? '**/'
159
+ : ''
160
+ const patternWithoutLeadingSlash =
161
+ firstIndexOfSlash === 0 ? patternToTest.slice(1) : patternToTest
162
+ // Escape `{` and `(` because in gitignore patterns they are just
163
+ // literal characters without any specific syntactic meaning,
164
+ // while in minimatch patterns they can form brace expansion or extglob syntax.
165
+ //
166
+ // For example, gitignore pattern `src/{a,b}.js` ignores file `src/{a,b}.js`.
167
+ // But, the same minimatch pattern `src/{a,b}.js` ignores files `src/a.js` and `src/b.js`.
168
+ // Minimatch pattern `src/\{a,b}.js` is equivalent to gitignore pattern `src/{a,b}.js`.
169
+ const escapedPatternWithoutLeadingSlash =
170
+ patternWithoutLeadingSlash.replaceAll(
171
+ /(?=((?:\\.|[^{(])*))\1([{(])/guy,
172
+ '$1\\$2'
173
+ )
174
+ const matchInsideSuffix = patternToTest.endsWith('/**') ? '/*' : ''
175
+ return `${negatedPrefix}${matchEverywherePrefix}${escapedPatternWithoutLeadingSlash}${matchInsideSuffix}`
176
+ }
177
+ function pathsToPatterns(paths) {
178
+ // TODO: Does not support `~/` paths.
179
+ return paths.map(p => (p === '.' || p === './' ? '**/*' : p))
180
+ }
181
+ function findBinPathDetailsSync(binName) {
182
+ const binPaths =
183
+ vendor.libExports$1.sync(binName, {
184
+ all: true,
185
+ nothrow: true
186
+ }) ?? []
187
+ let shadowIndex = -1
188
+ let theBinPath
189
+ for (let i = 0, { length } = binPaths; i < length; i += 1) {
190
+ const binPath = binPaths[i]
191
+ // Skip our bin directory if it's in the front.
192
+ if (path.dirname(binPath) === shadowBinPath) {
193
+ shadowIndex = i
194
+ } else {
195
+ theBinPath = npm.resolveBinPath(binPath)
196
+ break
197
+ }
198
+ }
199
+ return {
200
+ name: binName,
201
+ path: theBinPath,
202
+ shadowed: shadowIndex !== -1
203
+ }
204
+ }
205
+ function findNpmPathSync(npmBinPath) {
206
+ // Lazily access constants.WIN32.
207
+ const { WIN32 } = constants
208
+ let thePath = npmBinPath
209
+ while (true) {
210
+ const libNmNpmPath = path.join(thePath, 'lib', NODE_MODULES$1, NPM$1)
211
+ // mise puts its npm bin in a path like:
212
+ // /Users/SomeUsername/.local/share/mise/installs/node/vX.X.X/bin/npm.
213
+ // HOWEVER, the location of the npm install is:
214
+ // /Users/SomeUsername/.local/share/mise/installs/node/vX.X.X/lib/node_modules/npm.
215
+ if (
216
+ // Use existsSync here because statsSync, even with { throwIfNoEntry: false },
217
+ // will throw an ENOTDIR error for paths like ./a-file-that-exists/a-directory-that-does-not.
218
+ // See https://github.com/nodejs/node/issues/56993.
219
+ require$$0.existsSync(libNmNpmPath) &&
220
+ require$$0
221
+ .statSync(libNmNpmPath, {
222
+ throwIfNoEntry: false
223
+ })
224
+ ?.isDirectory()
225
+ ) {
226
+ thePath = path.join(libNmNpmPath, NPM$1)
227
+ }
228
+ const nmPath = path.join(thePath, NODE_MODULES$1)
229
+ if (
230
+ // npm bin paths may look like:
231
+ // /usr/local/share/npm/bin/npm
232
+ // /Users/SomeUsername/.nvm/versions/node/vX.X.X/bin/npm
233
+ // C:\Users\SomeUsername\AppData\Roaming\npm\bin\npm.cmd
234
+ // OR
235
+ // C:\Program Files\nodejs\npm.cmd
236
+ //
237
+ // In practically all cases the npm path contains a node_modules folder:
238
+ // /usr/local/share/npm/bin/npm/node_modules
239
+ // C:\Program Files\nodejs\node_modules
240
+ require$$0.existsSync(nmPath) &&
241
+ require$$0
242
+ .statSync(nmPath, {
243
+ throwIfNoEntry: false
244
+ })
245
+ ?.isDirectory() &&
246
+ // Optimistically look for the default location.
247
+ (path.basename(thePath) === NPM$1 ||
248
+ // Chocolatey installs npm bins in the same directory as node bins.
249
+ (WIN32 && require$$0.existsSync(path.join(thePath, `${NPM$1}.cmd`))))
250
+ ) {
251
+ return thePath
252
+ }
253
+ const parent = path.dirname(thePath)
254
+ if (parent === thePath) {
255
+ return undefined
256
+ }
257
+ thePath = parent
258
+ }
259
+ }
260
+ async function getPackageFilesForScan(cwd, inputPaths, supportedFiles, config) {
261
+ debug.debugLog(
262
+ `getPackageFilesForScan: resolving ${inputPaths.length} paths:\n`,
263
+ inputPaths
264
+ )
265
+
266
+ // Lazily access constants.spinner.
267
+ const { spinner } = constants
268
+ const patterns = pathsToPatterns(inputPaths)
269
+ spinner.start('Searching for local files to include in scan...')
270
+ const entries = await globWithGitIgnore(patterns, {
271
+ cwd,
272
+ socketConfig: config
273
+ })
274
+ if (debug.isDebug()) {
275
+ spinner.stop()
276
+ debug.debugLog(
277
+ `Resolved ${inputPaths.length} paths to ${entries.length} local paths:\n`,
278
+ entries
279
+ )
280
+ spinner.start('Searching for files now...')
281
+ } else {
282
+ spinner.start(
283
+ `Resolved ${inputPaths.length} paths to ${entries.length} local paths, searching for files now...`
284
+ )
285
+ }
286
+ const packageFiles = await filterGlobResultToSupportedFiles(
287
+ entries,
288
+ supportedFiles
289
+ )
290
+ spinner.successAndStop(
291
+ `Found ${packageFiles.length} local ${words.pluralize('file', packageFiles.length)}`
292
+ )
293
+ debug.debugLog('Absolute paths:\n', packageFiles)
294
+ return packageFiles
295
+ }
296
+
297
+ const { NODE_MODULES, NPM, NPX, SOCKET_CLI_ISSUES_URL } = constants
298
+ function exitWithBinPathError(binName) {
299
+ logger.logger.fail(
300
+ `Socket unable to locate ${binName}; ensure it is available in the PATH environment variable`
301
+ )
302
+ // The exit code 127 indicates that the command or binary being executed
303
+ // could not be found.
304
+ // eslint-disable-next-line n/no-process-exit
305
+ process.exit(127)
306
+ }
307
+ let _npmBinPathDetails
308
+ function getNpmBinPathDetails() {
309
+ if (_npmBinPathDetails === undefined) {
310
+ _npmBinPathDetails = findBinPathDetailsSync(NPM)
311
+ }
312
+ return _npmBinPathDetails
313
+ }
314
+ let _npxBinPathDetails
315
+ function getNpxBinPathDetails() {
316
+ if (_npxBinPathDetails === undefined) {
317
+ _npxBinPathDetails = findBinPathDetailsSync(NPX)
318
+ }
319
+ return _npxBinPathDetails
320
+ }
321
+ let _npmBinPath
322
+ function getNpmBinPath() {
323
+ if (_npmBinPath === undefined) {
324
+ _npmBinPath = getNpmBinPathDetails().path
325
+ if (!_npmBinPath) {
326
+ exitWithBinPathError(NPM)
327
+ }
328
+ }
329
+ return _npmBinPath
330
+ }
331
+ function isNpmBinPathShadowed() {
332
+ return getNpmBinPathDetails().shadowed
333
+ }
334
+ let _npxBinPath
335
+ function getNpxBinPath() {
336
+ if (_npxBinPath === undefined) {
337
+ _npxBinPath = getNpxBinPathDetails().path
338
+ if (!_npxBinPath) {
339
+ exitWithBinPathError(NPX)
340
+ }
341
+ }
342
+ return _npxBinPath
343
+ }
344
+ function isNpxBinPathShadowed() {
345
+ return getNpxBinPathDetails().shadowed
346
+ }
347
+ let _npmPath
348
+ function getNpmPath() {
349
+ if (_npmPath === undefined) {
350
+ const npmBinPath = getNpmBinPath()
351
+ _npmPath = npmBinPath ? findNpmPathSync(npmBinPath) : undefined
352
+ if (!_npmPath) {
353
+ let message = 'Unable to find npm CLI install directory.'
354
+ if (npmBinPath) {
355
+ message += `\nSearched parent directories of ${path.dirname(npmBinPath)}.`
356
+ }
357
+ message += `\n\nThis is may be a bug with socket-npm related to changes to the npm CLI.\nPlease report to ${SOCKET_CLI_ISSUES_URL}.`
358
+ logger.logger.fail(message)
359
+ // The exit code 127 indicates that the command or binary being executed
360
+ // could not be found.
361
+ // eslint-disable-next-line n/no-process-exit
362
+ process.exit(127)
363
+ }
364
+ }
365
+ return _npmPath
366
+ }
367
+ let _npmRequire
368
+ function getNpmRequire() {
369
+ if (_npmRequire === undefined) {
370
+ const npmPath = getNpmPath()
371
+ const npmNmPath = path.join(npmPath, NODE_MODULES, NPM)
372
+ _npmRequire = Module.createRequire(
373
+ path.join(
374
+ require$$0.existsSync(npmNmPath) ? npmNmPath : npmPath,
375
+ '<dummy-basename>'
376
+ )
377
+ )
378
+ }
379
+ return _npmRequire
380
+ }
381
+ let _arboristPkgPath
382
+ function getArboristPackagePath() {
383
+ if (_arboristPkgPath === undefined) {
384
+ const pkgName = '@npmcli/arborist'
385
+ const mainPathWithForwardSlashes = path$1.normalizePath(
386
+ getNpmRequire().resolve(pkgName)
387
+ )
388
+ const arboristPkgPathWithForwardSlashes = mainPathWithForwardSlashes.slice(
389
+ 0,
390
+ mainPathWithForwardSlashes.lastIndexOf(pkgName) + pkgName.length
391
+ )
392
+ // Lazily access constants.WIN32.
393
+ _arboristPkgPath = constants.WIN32
394
+ ? path.normalize(arboristPkgPathWithForwardSlashes)
395
+ : arboristPkgPathWithForwardSlashes
396
+ }
397
+ return _arboristPkgPath
398
+ }
399
+ let _arboristClassPath
400
+ function getArboristClassPath() {
401
+ if (_arboristClassPath === undefined) {
402
+ _arboristClassPath = path.join(
403
+ getArboristPackagePath(),
404
+ 'lib/arborist/index.js'
405
+ )
406
+ }
407
+ return _arboristClassPath
408
+ }
409
+ let _arboristDepValidPath
410
+ function getArboristDepValidPath() {
411
+ if (_arboristDepValidPath === undefined) {
412
+ _arboristDepValidPath = path.join(
413
+ getArboristPackagePath(),
414
+ 'lib/dep-valid.js'
415
+ )
416
+ }
417
+ return _arboristDepValidPath
418
+ }
419
+ let _arboristEdgeClassPath
420
+ function getArboristEdgeClassPath() {
421
+ if (_arboristEdgeClassPath === undefined) {
422
+ _arboristEdgeClassPath = path.join(getArboristPackagePath(), 'lib/edge.js')
423
+ }
424
+ return _arboristEdgeClassPath
425
+ }
426
+ let _arboristNodeClassPath
427
+ function getArboristNodeClassPath() {
428
+ if (_arboristNodeClassPath === undefined) {
429
+ _arboristNodeClassPath = path.join(getArboristPackagePath(), 'lib/node.js')
430
+ }
431
+ return _arboristNodeClassPath
432
+ }
433
+ let _arboristOverrideSetClassPath
434
+ function getArboristOverrideSetClassPath() {
435
+ if (_arboristOverrideSetClassPath === undefined) {
436
+ _arboristOverrideSetClassPath = path.join(
437
+ getArboristPackagePath(),
438
+ 'lib/override-set.js'
439
+ )
440
+ }
441
+ return _arboristOverrideSetClassPath
442
+ }
443
+
444
+ exports.getArboristClassPath = getArboristClassPath
445
+ exports.getArboristDepValidPath = getArboristDepValidPath
446
+ exports.getArboristEdgeClassPath = getArboristEdgeClassPath
447
+ exports.getArboristNodeClassPath = getArboristNodeClassPath
448
+ exports.getArboristOverrideSetClassPath = getArboristOverrideSetClassPath
449
+ exports.getNpmBinPath = getNpmBinPath
450
+ exports.getNpmRequire = getNpmRequire
451
+ exports.getNpxBinPath = getNpxBinPath
452
+ exports.getPackageFilesForScan = getPackageFilesForScan
453
+ exports.isNpmBinPathShadowed = isNpmBinPathShadowed
454
+ exports.isNpxBinPathShadowed = isNpxBinPathShadowed
455
+ //# debugId=94de2f72-f785-4ee7-85de-932aaba92a8e
456
+ //# sourceMappingURL=shadow-npm-paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shadow-npm-paths.js","sources":["../../src/utils/ignore-by-default.ts","../../src/utils/path-resolve.ts","../../src/shadow/npm/paths.ts"],"sourcesContent":["const ignoredDirs = [\n // Taken from ignore-by-default:\n // https://github.com/novemberborn/ignore-by-default/blob/v2.1.0/index.js\n '.git', // Git repository files, see <https://git-scm.com/>\n '.log', // Log files emitted by tools such as `tsserver`, see <https://github.com/Microsoft/TypeScript/wiki/Standalone-Server-%28tsserver%29>\n '.nyc_output', // Temporary directory where nyc stores coverage data, see <https://github.com/bcoe/nyc>\n '.sass-cache', // Cache folder for node-sass, see <https://github.com/sass/node-sass>\n '.yarn', // Where node modules are installed when using Yarn, see <https://yarnpkg.com/>\n 'bower_components', // Where Bower packages are installed, see <http://bower.io/>\n 'coverage', // Standard output directory for code coverage reports, see <https://github.com/gotwarlost/istanbul>\n 'node_modules', // Where Node modules are installed, see <https://nodejs.org/>\n // Taken from globby:\n // https://github.com/sindresorhus/globby/blob/v14.0.2/ignore.js#L11-L16\n 'flow-typed'\n] as const\n\nconst ignoredDirPatterns = ignoredDirs.map(i => `**/${i}`)\n\nexport function directoryPatterns() {\n return [...ignoredDirPatterns]\n}\n","import { existsSync, promises as fs, statSync } from 'node:fs'\nimport path from 'node:path'\nimport process from 'node:process'\n\nimport ignore from 'ignore'\nimport micromatch from 'micromatch'\nimport { glob as tinyGlob } from 'tinyglobby'\nimport which from 'which'\n\nimport { debugLog, isDebug } from '@socketsecurity/registry/lib/debug'\nimport { resolveBinPath } from '@socketsecurity/registry/lib/npm'\nimport { pluralize } from '@socketsecurity/registry/lib/words'\n\nimport { directoryPatterns } from './ignore-by-default'\nimport constants from '../constants'\n\nimport type { SocketYml } from '@socketsecurity/config'\nimport type { SocketSdkReturnType } from '@socketsecurity/sdk'\nimport type { GlobOptions } from 'tinyglobby'\n\ntype GlobWithGitIgnoreOptions = GlobOptions & {\n socketConfig?: SocketYml | undefined\n}\n\nconst { NODE_MODULES, NPM, shadowBinPath } = constants\n\nasync function filterGlobResultToSupportedFiles(\n entries: string[],\n supportedFiles: SocketSdkReturnType<'getReportSupportedFiles'>['data']\n): Promise<string[]> {\n const patterns = ['golang', NPM, 'maven', 'pypi', 'gem', 'nuget'].reduce(\n (r: string[], n: string) => {\n const supported = supportedFiles[n]\n r.push(\n ...(supported\n ? Object.values(supported).map(p => `**/${p.pattern}`)\n : [])\n )\n return r\n },\n []\n )\n return entries.filter(p => micromatch.some(p, patterns))\n}\n\nasync function globWithGitIgnore(\n patterns: string[],\n options: GlobWithGitIgnoreOptions\n) {\n const {\n cwd = process.cwd(),\n socketConfig,\n ...additionalOptions\n } = { __proto__: null, ...options } as GlobWithGitIgnoreOptions\n const projectIgnorePaths = socketConfig?.projectIgnorePaths\n const ignoreFiles = await tinyGlob(['**/.gitignore'], {\n absolute: true,\n cwd,\n expandDirectories: true\n })\n const ignores = [\n ...directoryPatterns(),\n ...(Array.isArray(projectIgnorePaths)\n ? ignoreFileLinesToGlobPatterns(\n projectIgnorePaths,\n path.join(cwd, '.gitignore'),\n cwd\n )\n : []),\n ...(\n await Promise.all(\n ignoreFiles.map(async filepath =>\n ignoreFileToGlobPatterns(\n await fs.readFile(filepath, 'utf8'),\n filepath,\n cwd\n )\n )\n )\n ).flat()\n ]\n const hasNegatedPattern = ignores.some(p => p.charCodeAt(0) === 33 /*'!'*/)\n const globOptions = {\n absolute: true,\n cwd,\n expandDirectories: false,\n ignore: hasNegatedPattern ? [] : ignores,\n ...additionalOptions\n }\n const result = await tinyGlob(patterns, globOptions)\n if (!hasNegatedPattern) {\n return result\n }\n const { absolute } = globOptions\n\n // Note: the input files must be INSIDE the cwd. If you get strange looking\n // relative path errors here, most likely your path is outside the given cwd.\n const filtered = ignore()\n .add(ignores)\n .filter(absolute ? result.map(p => path.relative(cwd, p)) : result)\n return absolute ? filtered.map(p => path.resolve(cwd, p)) : filtered\n}\n\nfunction ignoreFileLinesToGlobPatterns(\n lines: string[],\n filepath: string,\n cwd: string\n): string[] {\n const base = path.relative(cwd, path.dirname(filepath)).replace(/\\\\/g, '/')\n const patterns = []\n for (let i = 0, { length } = lines; i < length; i += 1) {\n const pattern = lines[i]!.trim()\n if (pattern.length > 0 && pattern.charCodeAt(0) !== 35 /*'#'*/) {\n patterns.push(\n ignorePatternToMinimatch(\n pattern.length && pattern.charCodeAt(0) === 33 /*'!'*/\n ? `!${path.posix.join(base, pattern.slice(1))}`\n : path.posix.join(base, pattern)\n )\n )\n }\n }\n return patterns\n}\n\nfunction ignoreFileToGlobPatterns(\n content: string,\n filepath: string,\n cwd: string\n): string[] {\n return ignoreFileLinesToGlobPatterns(content.split(/\\r?\\n/), filepath, cwd)\n}\n\n// Based on `@eslint/compat` convertIgnorePatternToMinimatch.\n// Apache v2.0 licensed\n// Copyright Nicholas C. Zakas\n// https://github.com/eslint/rewrite/blob/compat-v1.2.1/packages/compat/src/ignore-file.js#L28\nfunction ignorePatternToMinimatch(pattern: string): string {\n const isNegated = pattern.startsWith('!')\n const negatedPrefix = isNegated ? '!' : ''\n const patternToTest = (isNegated ? pattern.slice(1) : pattern).trimEnd()\n // Special cases.\n if (\n patternToTest === '' ||\n patternToTest === '**' ||\n patternToTest === '/**' ||\n patternToTest === '**'\n ) {\n return `${negatedPrefix}${patternToTest}`\n }\n const firstIndexOfSlash = patternToTest.indexOf('/')\n const matchEverywherePrefix =\n firstIndexOfSlash === -1 || firstIndexOfSlash === patternToTest.length - 1\n ? '**/'\n : ''\n const patternWithoutLeadingSlash =\n firstIndexOfSlash === 0 ? patternToTest.slice(1) : patternToTest\n // Escape `{` and `(` because in gitignore patterns they are just\n // literal characters without any specific syntactic meaning,\n // while in minimatch patterns they can form brace expansion or extglob syntax.\n //\n // For example, gitignore pattern `src/{a,b}.js` ignores file `src/{a,b}.js`.\n // But, the same minimatch pattern `src/{a,b}.js` ignores files `src/a.js` and `src/b.js`.\n // Minimatch pattern `src/\\{a,b}.js` is equivalent to gitignore pattern `src/{a,b}.js`.\n const escapedPatternWithoutLeadingSlash =\n patternWithoutLeadingSlash.replaceAll(\n /(?=((?:\\\\.|[^{(])*))\\1([{(])/guy,\n '$1\\\\$2'\n )\n const matchInsideSuffix = patternToTest.endsWith('/**') ? '/*' : ''\n return `${negatedPrefix}${matchEverywherePrefix}${escapedPatternWithoutLeadingSlash}${matchInsideSuffix}`\n}\n\nfunction pathsToPatterns(paths: string[] | readonly string[]): string[] {\n // TODO: Does not support `~/` paths.\n return paths.map(p => (p === '.' || p === './' ? '**/*' : p))\n}\n\nexport function findBinPathDetailsSync(binName: string): {\n name: string\n path: string | undefined\n shadowed: boolean\n} {\n const binPaths =\n which.sync(binName, {\n all: true,\n nothrow: true\n }) ?? []\n let shadowIndex = -1\n let theBinPath: string | undefined\n for (let i = 0, { length } = binPaths; i < length; i += 1) {\n const binPath = binPaths[i]!\n // Skip our bin directory if it's in the front.\n if (path.dirname(binPath) === shadowBinPath) {\n shadowIndex = i\n } else {\n theBinPath = resolveBinPath(binPath)\n break\n }\n }\n return { name: binName, path: theBinPath, shadowed: shadowIndex !== -1 }\n}\n\nexport function findNpmPathSync(npmBinPath: string): string | undefined {\n // Lazily access constants.WIN32.\n const { WIN32 } = constants\n let thePath = npmBinPath\n while (true) {\n const libNmNpmPath = path.join(thePath, 'lib', NODE_MODULES, NPM)\n // mise puts its npm bin in a path like:\n // /Users/SomeUsername/.local/share/mise/installs/node/vX.X.X/bin/npm.\n // HOWEVER, the location of the npm install is:\n // /Users/SomeUsername/.local/share/mise/installs/node/vX.X.X/lib/node_modules/npm.\n if (\n // Use existsSync here because statsSync, even with { throwIfNoEntry: false },\n // will throw an ENOTDIR error for paths like ./a-file-that-exists/a-directory-that-does-not.\n // See https://github.com/nodejs/node/issues/56993.\n existsSync(libNmNpmPath) &&\n statSync(libNmNpmPath, { throwIfNoEntry: false })?.isDirectory()\n ) {\n thePath = path.join(libNmNpmPath, NPM)\n }\n const nmPath = path.join(thePath, NODE_MODULES)\n if (\n // npm bin paths may look like:\n // /usr/local/share/npm/bin/npm\n // /Users/SomeUsername/.nvm/versions/node/vX.X.X/bin/npm\n // C:\\Users\\SomeUsername\\AppData\\Roaming\\npm\\bin\\npm.cmd\n // OR\n // C:\\Program Files\\nodejs\\npm.cmd\n //\n // In practically all cases the npm path contains a node_modules folder:\n // /usr/local/share/npm/bin/npm/node_modules\n // C:\\Program Files\\nodejs\\node_modules\n existsSync(nmPath) &&\n statSync(nmPath, { throwIfNoEntry: false })?.isDirectory() &&\n // Optimistically look for the default location.\n (path.basename(thePath) === NPM ||\n // Chocolatey installs npm bins in the same directory as node bins.\n (WIN32 && existsSync(path.join(thePath, `${NPM}.cmd`))))\n ) {\n return thePath\n }\n const parent = path.dirname(thePath)\n if (parent === thePath) {\n return undefined\n }\n thePath = parent\n }\n}\n\nexport async function getPackageFilesForScan(\n cwd: string,\n inputPaths: string[],\n supportedFiles: SocketSdkReturnType<'getReportSupportedFiles'>['data'],\n config?: SocketYml | undefined\n): Promise<string[]> {\n debugLog(\n `getPackageFilesForScan: resolving ${inputPaths.length} paths:\\n`,\n inputPaths\n )\n\n // Lazily access constants.spinner.\n const { spinner } = constants\n\n const patterns = pathsToPatterns(inputPaths)\n\n spinner.start('Searching for local files to include in scan...')\n\n const entries = await globWithGitIgnore(patterns, {\n cwd,\n socketConfig: config\n })\n\n if (isDebug()) {\n spinner.stop()\n debugLog(\n `Resolved ${inputPaths.length} paths to ${entries.length} local paths:\\n`,\n entries\n )\n spinner.start('Searching for files now...')\n } else {\n spinner.start(\n `Resolved ${inputPaths.length} paths to ${entries.length} local paths, searching for files now...`\n )\n }\n\n const packageFiles = await filterGlobResultToSupportedFiles(\n entries,\n supportedFiles\n )\n\n spinner.successAndStop(\n `Found ${packageFiles.length} local ${pluralize('file', packageFiles.length)}`\n )\n debugLog('Absolute paths:\\n', packageFiles)\n\n return packageFiles\n}\n","import { existsSync } from 'node:fs'\nimport Module from 'node:module'\nimport path from 'node:path'\nimport process from 'node:process'\n\nimport { logger } from '@socketsecurity/registry/lib/logger'\nimport { normalizePath } from '@socketsecurity/registry/lib/path'\n\nimport constants from '../../constants'\nimport {\n findBinPathDetailsSync,\n findNpmPathSync\n} from '../../utils/path-resolve'\n\nconst { NODE_MODULES, NPM, NPX, SOCKET_CLI_ISSUES_URL } = constants\n\nfunction exitWithBinPathError(binName: string): never {\n logger.fail(\n `Socket unable to locate ${binName}; ensure it is available in the PATH environment variable`\n )\n // The exit code 127 indicates that the command or binary being executed\n // could not be found.\n // eslint-disable-next-line n/no-process-exit\n process.exit(127)\n}\n\nlet _npmBinPathDetails: ReturnType<typeof findBinPathDetailsSync> | undefined\nfunction getNpmBinPathDetails(): ReturnType<typeof findBinPathDetailsSync> {\n if (_npmBinPathDetails === undefined) {\n _npmBinPathDetails = findBinPathDetailsSync(NPM)\n }\n return _npmBinPathDetails\n}\n\nlet _npxBinPathDetails: ReturnType<typeof findBinPathDetailsSync> | undefined\nfunction getNpxBinPathDetails(): ReturnType<typeof findBinPathDetailsSync> {\n if (_npxBinPathDetails === undefined) {\n _npxBinPathDetails = findBinPathDetailsSync(NPX)\n }\n return _npxBinPathDetails\n}\n\nlet _npmBinPath: string | undefined\nexport function getNpmBinPath(): string {\n if (_npmBinPath === undefined) {\n _npmBinPath = getNpmBinPathDetails().path\n if (!_npmBinPath) {\n exitWithBinPathError(NPM)\n }\n }\n return _npmBinPath\n}\n\nexport function isNpmBinPathShadowed() {\n return getNpmBinPathDetails().shadowed\n}\n\nlet _npxBinPath: string | undefined\nexport function getNpxBinPath(): string {\n if (_npxBinPath === undefined) {\n _npxBinPath = getNpxBinPathDetails().path\n if (!_npxBinPath) {\n exitWithBinPathError(NPX)\n }\n }\n return _npxBinPath\n}\n\nexport function isNpxBinPathShadowed() {\n return getNpxBinPathDetails().shadowed\n}\n\nlet _npmPath: string | undefined\nexport function getNpmPath() {\n if (_npmPath === undefined) {\n const npmBinPath = getNpmBinPath()\n _npmPath = npmBinPath ? findNpmPathSync(npmBinPath) : undefined\n if (!_npmPath) {\n let message = 'Unable to find npm CLI install directory.'\n if (npmBinPath) {\n message += `\\nSearched parent directories of ${path.dirname(npmBinPath)}.`\n }\n message += `\\n\\nThis is may be a bug with socket-npm related to changes to the npm CLI.\\nPlease report to ${SOCKET_CLI_ISSUES_URL}.`\n logger.fail(message)\n // The exit code 127 indicates that the command or binary being executed\n // could not be found.\n // eslint-disable-next-line n/no-process-exit\n process.exit(127)\n }\n }\n return _npmPath\n}\n\nlet _npmRequire: NodeJS.Require | undefined\nexport function getNpmRequire(): NodeJS.Require {\n if (_npmRequire === undefined) {\n const npmPath = getNpmPath()\n const npmNmPath = path.join(npmPath, NODE_MODULES, NPM)\n _npmRequire = Module.createRequire(\n path.join(existsSync(npmNmPath) ? npmNmPath : npmPath, '<dummy-basename>')\n )\n }\n return _npmRequire\n}\n\nlet _arboristPkgPath: string | undefined\nexport function getArboristPackagePath() {\n if (_arboristPkgPath === undefined) {\n const pkgName = '@npmcli/arborist'\n const mainPathWithForwardSlashes = normalizePath(\n getNpmRequire().resolve(pkgName)\n )\n const arboristPkgPathWithForwardSlashes = mainPathWithForwardSlashes.slice(\n 0,\n mainPathWithForwardSlashes.lastIndexOf(pkgName) + pkgName.length\n )\n // Lazily access constants.WIN32.\n _arboristPkgPath = constants.WIN32\n ? path.normalize(arboristPkgPathWithForwardSlashes)\n : arboristPkgPathWithForwardSlashes\n }\n return _arboristPkgPath\n}\n\nlet _arboristClassPath: string | undefined\nexport function getArboristClassPath() {\n if (_arboristClassPath === undefined) {\n _arboristClassPath = path.join(\n getArboristPackagePath(),\n 'lib/arborist/index.js'\n )\n }\n return _arboristClassPath\n}\n\nlet _arboristDepValidPath: string | undefined\nexport function getArboristDepValidPath() {\n if (_arboristDepValidPath === undefined) {\n _arboristDepValidPath = path.join(\n getArboristPackagePath(),\n 'lib/dep-valid.js'\n )\n }\n return _arboristDepValidPath\n}\n\nlet _arboristEdgeClassPath: string | undefined\nexport function getArboristEdgeClassPath() {\n if (_arboristEdgeClassPath === undefined) {\n _arboristEdgeClassPath = path.join(getArboristPackagePath(), 'lib/edge.js')\n }\n return _arboristEdgeClassPath\n}\n\nlet _arboristNodeClassPath: string | undefined\nexport function getArboristNodeClassPath() {\n if (_arboristNodeClassPath === undefined) {\n _arboristNodeClassPath = path.join(getArboristPackagePath(), 'lib/node.js')\n }\n return _arboristNodeClassPath\n}\n\nlet _arboristOverrideSetClassPath: string | undefined\nexport function getArboristOverrideSetClassPath() {\n if (_arboristOverrideSetClassPath === undefined) {\n _arboristOverrideSetClassPath = path.join(\n getArboristPackagePath(),\n 'lib/override-set.js'\n )\n }\n return _arboristOverrideSetClassPath\n}\n"],"names":["shadowBinPath","cwd","__proto__","absolute","expandDirectories","ignore","length","all","nothrow","shadowIndex","theBinPath","name","path","WIN32","existsSync","throwIfNoEntry","thePath","spinner","socketConfig","debugLog","SOCKET_CLI_ISSUES_URL","logger","process","_npmBinPathDetails","_npxBinPathDetails","_npmBinPath","_npxBinPath","_arboristPkgPath"],"mappings":";;;;;;;;;;;;;;AAAA;AACE;AACA;AACA;AAAQ;AACR;AAAQ;AACR;AAAe;AACf;AAAe;AACf;AAAS;AACT;AAAoB;AACpB;AAAY;AACZ;AAAgB;AAChB;AACA;AACA;AAGF;AAEO;;AAEP;;ACIA;;;AAA2BA;AAAc;AAEzC;;AAMM;;AAMA;;AAIJ;AACF;AAEA;;AAKIC;;;AAGF;AAAMC;;;AACN;;AAEEC;;AAEAC;AACF;AACA;AAqBA;AACA;AACED;;AAEAC;AACAC;;;;;AAKA;AACF;;AACQF;AAAS;;AAEjB;AACA;AACA;AAGA;AACF;AAEA;;;AAOE;AAAkBG;;;AAEhB;;AAQA;AACF;AACA;AACF;AAEA;AAKE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACE;AACA;AACA;AACA;AACA;AAME;AACF;AACA;AACA;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAQF;AAEA;AACE;AACA;AACF;AAEO;AAKL;AAEIC;AACAC;;;AAGJ;AACA;AAAkBF;;AAChB;AACA;;AAEEG;AACF;AACEC;AACA;AACF;AACF;;AACSC;AAAeC;;;AAC1B;AAEO;AACL;;AACQC;AAAM;;AAEd;AACE;AACA;AACA;AACA;AACA;AACA;AACE;AACA;AACA;AACAC;AACyBC;AAAsB;;AAGjD;;AAEA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACAD;AACmBC;AAAsB;AACzC;AACCH;AACC;AACCC;AAEH;AACF;AACA;;AAEE;AACF;AACAG;AACF;AACF;AAEO;;;AAWL;;AACQC;AAAQ;AAEhB;AAEAA;AAEA;;AAEEC;AACF;;;AAIEC;AAIAF;AACF;AACEA;AAGF;;AAOAA;AAGAE;AAEA;AACF;;AC5RA;;;;AAAgCC;AAAsB;AAEtD;AACEC;AAGA;AACA;AACA;AACAC;AACF;AAEA;AACA;;AAEIC;AACF;AACA;AACF;AAEA;AACA;;AAEIC;AACF;AACA;AACF;AAEA;AACO;;AAEHC;;;AAGA;AACF;AACA;AACF;AAEO;AACL;AACF;AAEA;AACO;;AAEHC;;;AAGA;AACF;AACA;AACF;AAEO;AACL;AACF;AAEA;AACO;;AAEH;;;;AAIE;;AAEA;;AAEAL;AACA;AACA;AACA;AACAC;AACF;AACF;AACA;AACF;AAEA;AACO;;AAEH;;;AAKF;AACA;AACF;AAEA;AACO;;;AAGH;AAGA;AAIA;AACAK;AAGF;AACA;AACF;AAEA;AACO;;;AAML;AACA;AACF;AAEA;AACO;;;AAML;AACA;AACF;AAEA;AACO;;;AAGL;AACA;AACF;AAEA;AACO;;;AAGL;AACA;AACF;AAEA;AACO;;;AAML;AACA;AACF;;;;;;;;;;;;","debugId":"94de2f72-f785-4ee7-85de-932aaba92a8e"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@socketsecurity/cli",
3
- "version": "0.14.94",
3
+ "version": "0.14.96",
4
4
  "description": "CLI tool for Socket.dev",
5
5
  "homepage": "https://github.com/SocketDev/socket-cli",
6
6
  "license": "MIT",
@@ -77,42 +77,16 @@
77
77
  "update:deps": "npx --yes npm-check-updates"
78
78
  },
79
79
  "dependencies": {
80
- "@apideck/better-ajv-errors": "0.3.6",
81
- "@octokit/rest": "^21.1.1",
82
- "@pnpm/lockfile.detect-dep-types": "^1001.0.7",
83
- "@pnpm/lockfile.fs": "^1001.1.9",
84
- "@pnpm/logger": "^1000.0.0",
85
80
  "@socketregistry/hyrious__bun.lockb": "1.0.17",
86
81
  "@socketregistry/indent-string": "1.0.12",
87
82
  "@socketregistry/is-interactive": "1.0.5",
88
83
  "@socketregistry/packageurl-js": "1.0.5",
89
- "@socketsecurity/config": "2.1.3",
90
84
  "@socketsecurity/registry": "1.0.143",
91
85
  "@socketsecurity/sdk": "1.4.28",
92
- "blessed": "0.1.81",
93
- "blessed-contrib": "4.11.0",
94
- "browserslist": "4.24.4",
95
- "chalk-table": "1.0.2",
96
- "cmd-shim": "7.0.0",
97
- "common-tags": "1.8.2",
98
- "fast-content-type-parse": "^2.0.0",
99
- "hpagent": "1.2.0",
100
- "ignore": "7.0.3",
101
- "meow": "13.2.0",
102
- "micromatch": "4.0.8",
103
- "npm-package-arg": "12.0.2",
104
- "open": "10.1.0",
105
- "pony-cause": "2.1.11",
106
- "semver": "7.7.1",
107
- "terminal-link": "2.1.1",
108
- "tiny-updater": "3.5.3",
109
- "tinyglobby": "0.2.12",
110
- "which": "5.0.0",
111
- "yaml": "2.7.1",
112
- "yargs-parser": "21.1.1",
113
- "yoctocolors-cjs": "2.1.2"
86
+ "blessed": "0.1.81"
114
87
  },
115
88
  "devDependencies": {
89
+ "@apideck/better-ajv-errors": "0.3.6",
116
90
  "@babel/core": "^7.26.10",
117
91
  "@babel/plugin-proposal-export-default-from": "^7.25.9",
118
92
  "@babel/plugin-syntax-dynamic-import": "^7.8.3",
@@ -126,12 +100,17 @@
126
100
  "@eslint/compat": "^1.2.8",
127
101
  "@eslint/js": "^9.24.0",
128
102
  "@octokit/openapi-types": "^25.0.0",
103
+ "@octokit/rest": "^21.1.1",
129
104
  "@octokit/types": "^14.0.0",
105
+ "@pnpm/lockfile.detect-dep-types": "^1001.0.7",
106
+ "@pnpm/lockfile.fs": "^1001.1.9",
107
+ "@pnpm/logger": "^1000.0.0",
130
108
  "@rollup/plugin-commonjs": "28.0.3",
131
109
  "@rollup/plugin-json": "^6.1.0",
132
110
  "@rollup/plugin-node-resolve": "^16.0.1",
133
111
  "@rollup/plugin-replace": "^6.0.2",
134
112
  "@rollup/pluginutils": "^5.1.4",
113
+ "@socketsecurity/config": "2.1.3",
135
114
  "@types/blessed": "0.1.25",
136
115
  "@types/cmd-shim": "^5.0.2",
137
116
  "@types/common-tags": "^1.8.4",
@@ -169,6 +148,27 @@
169
148
  "rollup-plugin-ts": "^3.4.5",
170
149
  "synp": "^1.9.14",
171
150
  "type-coverage": "^2.29.7",
151
+ "blessed-contrib": "4.11.0",
152
+ "browserslist": "4.24.4",
153
+ "chalk-table": "1.0.2",
154
+ "cmd-shim": "7.0.0",
155
+ "common-tags": "1.8.2",
156
+ "fast-content-type-parse": "^2.0.0",
157
+ "hpagent": "1.2.0",
158
+ "ignore": "7.0.3",
159
+ "meow": "13.2.0",
160
+ "micromatch": "4.0.8",
161
+ "npm-package-arg": "12.0.2",
162
+ "open": "10.1.0",
163
+ "pony-cause": "2.1.11",
164
+ "semver": "7.7.1",
165
+ "terminal-link": "2.1.1",
166
+ "tiny-updater": "3.5.3",
167
+ "tinyglobby": "0.2.12",
168
+ "which": "5.0.0",
169
+ "yaml": "2.7.1",
170
+ "yargs-parser": "21.1.1",
171
+ "yoctocolors-cjs": "2.1.2",
172
172
  "typescript": "5.4.5",
173
173
  "typescript-eslint": "^8.29.1",
174
174
  "unplugin-purge-polyfills": "^0.0.7",