@socketsecurity/cli-with-sentry 0.14.94 → 0.14.95

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 (84) hide show
  1. package/dist/constants.js +3 -3
  2. package/dist/constants.js.map +1 -1
  3. package/dist/instrument-with-sentry.js +2 -2
  4. package/dist/instrument-with-sentry.js.map +1 -1
  5. package/dist/module-sync/cli.js +176 -156
  6. package/dist/module-sync/cli.js.map +1 -1
  7. package/dist/module-sync/shadow-bin.js +3 -14
  8. package/dist/module-sync/shadow-bin.js.map +1 -1
  9. package/dist/module-sync/shadow-npm-inject.js +68 -59
  10. package/dist/module-sync/shadow-npm-inject.js.map +1 -1
  11. package/dist/module-sync/shadow-npm-paths.js +16 -29
  12. package/dist/module-sync/shadow-npm-paths.js.map +1 -1
  13. package/dist/module-sync/vendor.d.ts +0 -0
  14. package/dist/module-sync/vendor.js +85829 -12598
  15. package/dist/module-sync/vendor.js.map +1 -1
  16. package/dist/require/cli.js +158 -137
  17. package/dist/require/cli.js.map +1 -1
  18. package/dist/require/shadow-bin.d.ts +5 -0
  19. package/dist/require/shadow-bin.js +108 -1
  20. package/dist/require/shadow-bin.js.map +1 -0
  21. package/dist/require/shadow-npm-inject.d.ts +1 -0
  22. package/dist/require/shadow-npm-inject.js +2335 -1
  23. package/dist/require/shadow-npm-inject.js.map +1 -0
  24. package/dist/require/shadow-npm-paths.d.ts +29 -0
  25. package/dist/require/shadow-npm-paths.js +454 -1
  26. package/dist/require/shadow-npm-paths.js.map +1 -0
  27. package/package.json +29 -29
  28. package/dist/blessed/lib/alias.js +0 -521
  29. package/dist/blessed/lib/blessed.js +0 -34
  30. package/dist/blessed/lib/colors.js +0 -492
  31. package/dist/blessed/lib/events.js +0 -197
  32. package/dist/blessed/lib/gpmclient.js +0 -247
  33. package/dist/blessed/lib/helpers.js +0 -172
  34. package/dist/blessed/lib/keys.js +0 -514
  35. package/dist/blessed/lib/program.js +0 -4532
  36. package/dist/blessed/lib/tput.js +0 -3113
  37. package/dist/blessed/lib/unicode.js +0 -914
  38. package/dist/blessed/lib/widget.js +0 -62
  39. package/dist/blessed/lib/widgets/ansiimage.js +0 -175
  40. package/dist/blessed/lib/widgets/bigtext.js +0 -172
  41. package/dist/blessed/lib/widgets/box.js +0 -36
  42. package/dist/blessed/lib/widgets/button.js +0 -64
  43. package/dist/blessed/lib/widgets/checkbox.js +0 -97
  44. package/dist/blessed/lib/widgets/element.js +0 -2873
  45. package/dist/blessed/lib/widgets/filemanager.js +0 -225
  46. package/dist/blessed/lib/widgets/form.js +0 -303
  47. package/dist/blessed/lib/widgets/image.js +0 -73
  48. package/dist/blessed/lib/widgets/input.js +0 -36
  49. package/dist/blessed/lib/widgets/layout.js +0 -251
  50. package/dist/blessed/lib/widgets/line.js +0 -61
  51. package/dist/blessed/lib/widgets/list.js +0 -654
  52. package/dist/blessed/lib/widgets/listbar.js +0 -454
  53. package/dist/blessed/lib/widgets/listtable.js +0 -267
  54. package/dist/blessed/lib/widgets/loading.js +0 -90
  55. package/dist/blessed/lib/widgets/log.js +0 -84
  56. package/dist/blessed/lib/widgets/message.js +0 -147
  57. package/dist/blessed/lib/widgets/node.js +0 -315
  58. package/dist/blessed/lib/widgets/overlayimage.js +0 -796
  59. package/dist/blessed/lib/widgets/progressbar.js +0 -168
  60. package/dist/blessed/lib/widgets/prompt.js +0 -129
  61. package/dist/blessed/lib/widgets/question.js +0 -131
  62. package/dist/blessed/lib/widgets/radiobutton.js +0 -64
  63. package/dist/blessed/lib/widgets/radioset.js +0 -38
  64. package/dist/blessed/lib/widgets/screen.js +0 -2487
  65. package/dist/blessed/lib/widgets/scrollablebox.js +0 -417
  66. package/dist/blessed/lib/widgets/scrollabletext.js +0 -37
  67. package/dist/blessed/lib/widgets/table.js +0 -385
  68. package/dist/blessed/lib/widgets/terminal.js +0 -454
  69. package/dist/blessed/lib/widgets/text.js +0 -37
  70. package/dist/blessed/lib/widgets/textarea.js +0 -378
  71. package/dist/blessed/lib/widgets/textbox.js +0 -81
  72. package/dist/blessed/lib/widgets/video.js +0 -132
  73. package/dist/blessed/usr/fonts/AUTHORS +0 -1
  74. package/dist/blessed/usr/fonts/LICENSE +0 -94
  75. package/dist/blessed/usr/fonts/README +0 -340
  76. package/dist/blessed/usr/fonts/ter-u14b.json +0 -17826
  77. package/dist/blessed/usr/fonts/ter-u14n.json +0 -17826
  78. package/dist/blessed/usr/linux +0 -0
  79. package/dist/blessed/usr/windows-ansi +0 -0
  80. package/dist/blessed/usr/xterm +0 -0
  81. package/dist/blessed/usr/xterm-256color +0 -0
  82. package/dist/blessed/usr/xterm.termcap +0 -243
  83. package/dist/blessed/usr/xterm.terminfo +0 -1977
  84. 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-with-sentry",
3
- "version": "0.14.94",
3
+ "version": "0.14.95",
4
4
  "description": "CLI tool for Socket.dev, includes Sentry error handling, otherwise identical to the regular `socket` package",
5
5
  "homepage": "https://github.com/SocketDev/socket-cli",
6
6
  "license": "MIT",
@@ -77,43 +77,17 @@
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
  "@sentry/node": "9.12.0",
86
81
  "@socketregistry/hyrious__bun.lockb": "1.0.17",
87
82
  "@socketregistry/indent-string": "1.0.12",
88
83
  "@socketregistry/is-interactive": "1.0.5",
89
84
  "@socketregistry/packageurl-js": "1.0.5",
90
- "@socketsecurity/config": "2.1.3",
91
85
  "@socketsecurity/registry": "1.0.143",
92
86
  "@socketsecurity/sdk": "1.4.28",
93
- "blessed": "0.1.81",
94
- "blessed-contrib": "4.11.0",
95
- "browserslist": "4.24.4",
96
- "chalk-table": "1.0.2",
97
- "cmd-shim": "7.0.0",
98
- "common-tags": "1.8.2",
99
- "fast-content-type-parse": "^2.0.0",
100
- "hpagent": "1.2.0",
101
- "ignore": "7.0.3",
102
- "meow": "13.2.0",
103
- "micromatch": "4.0.8",
104
- "npm-package-arg": "12.0.2",
105
- "open": "10.1.0",
106
- "pony-cause": "2.1.11",
107
- "semver": "7.7.1",
108
- "terminal-link": "2.1.1",
109
- "tiny-updater": "3.5.3",
110
- "tinyglobby": "0.2.12",
111
- "which": "5.0.0",
112
- "yaml": "2.7.1",
113
- "yargs-parser": "21.1.1",
114
- "yoctocolors-cjs": "2.1.2"
87
+ "blessed": "0.1.81"
115
88
  },
116
89
  "devDependencies": {
90
+ "@apideck/better-ajv-errors": "0.3.6",
117
91
  "@babel/core": "^7.26.10",
118
92
  "@babel/plugin-proposal-export-default-from": "^7.25.9",
119
93
  "@babel/plugin-syntax-dynamic-import": "^7.8.3",
@@ -127,12 +101,17 @@
127
101
  "@eslint/compat": "^1.2.8",
128
102
  "@eslint/js": "^9.24.0",
129
103
  "@octokit/openapi-types": "^25.0.0",
104
+ "@octokit/rest": "^21.1.1",
130
105
  "@octokit/types": "^14.0.0",
106
+ "@pnpm/lockfile.detect-dep-types": "^1001.0.7",
107
+ "@pnpm/lockfile.fs": "^1001.1.9",
108
+ "@pnpm/logger": "^1000.0.0",
131
109
  "@rollup/plugin-commonjs": "28.0.3",
132
110
  "@rollup/plugin-json": "^6.1.0",
133
111
  "@rollup/plugin-node-resolve": "^16.0.1",
134
112
  "@rollup/plugin-replace": "^6.0.2",
135
113
  "@rollup/pluginutils": "^5.1.4",
114
+ "@socketsecurity/config": "2.1.3",
136
115
  "@types/blessed": "0.1.25",
137
116
  "@types/cmd-shim": "^5.0.2",
138
117
  "@types/common-tags": "^1.8.4",
@@ -170,6 +149,27 @@
170
149
  "rollup-plugin-ts": "^3.4.5",
171
150
  "synp": "^1.9.14",
172
151
  "type-coverage": "^2.29.7",
152
+ "blessed-contrib": "4.11.0",
153
+ "browserslist": "4.24.4",
154
+ "chalk-table": "1.0.2",
155
+ "cmd-shim": "7.0.0",
156
+ "common-tags": "1.8.2",
157
+ "fast-content-type-parse": "^2.0.0",
158
+ "hpagent": "1.2.0",
159
+ "ignore": "7.0.3",
160
+ "meow": "13.2.0",
161
+ "micromatch": "4.0.8",
162
+ "npm-package-arg": "12.0.2",
163
+ "open": "10.1.0",
164
+ "pony-cause": "2.1.11",
165
+ "semver": "7.7.1",
166
+ "terminal-link": "2.1.1",
167
+ "tiny-updater": "3.5.3",
168
+ "tinyglobby": "0.2.12",
169
+ "which": "5.0.0",
170
+ "yaml": "2.7.1",
171
+ "yargs-parser": "21.1.1",
172
+ "yoctocolors-cjs": "2.1.2",
173
173
  "typescript": "5.4.5",
174
174
  "typescript-eslint": "^8.29.1",
175
175
  "unplugin-purge-polyfills": "^0.0.7",