@socketsecurity/cli 0.14.25 → 0.14.27

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.
@@ -5,7 +5,7 @@ declare const logSymbols: {
5
5
  warning: string;
6
6
  error: string;
7
7
  };
8
- declare class ChalkOrMarkdown {
8
+ declare class ColorOrMarkdown {
9
9
  useMarkdown: boolean;
10
10
  constructor(useMarkdown: boolean);
11
11
  header(text: string, level?: number): string;
@@ -20,4 +20,4 @@ declare class ChalkOrMarkdown {
20
20
  indent(text: string, level?: number): string;
21
21
  json(value: unknown): string;
22
22
  }
23
- export { logSymbols, ChalkOrMarkdown };
23
+ export { logSymbols, ColorOrMarkdown };
@@ -3,12 +3,13 @@
3
3
  var vendor = require('./vendor.js');
4
4
  var require$$0 = require('node:fs');
5
5
  var require$$1$1 = require('node:path');
6
- var require$$2 = require('node:events');
7
- var require$$4 = require('node:https');
6
+ var require$$1$3 = require('node:events');
7
+ var require$$3$3 = require('node:https');
8
8
  var require$$3 = require('node:readline');
9
9
  var require$$5 = require('node:stream');
10
- var require$$8 = require('node:timers/promises');
10
+ var require$$7$1 = require('node:timers/promises');
11
11
  var require$$5$1 = require('npm-package-arg');
12
+ var require$$3$2 = require('@socketregistry/yocto-spinner');
12
13
  var require$$3$1 = require('semver');
13
14
  var require$$6$1 = require('@socketsecurity/config');
14
15
  var require$$7 = require('@socketsecurity/registry/lib/objects');
@@ -64,12 +65,11 @@ function createNonStandardTTYServer() {
64
65
  conn.push(lineBuff.slice(eolIndex + 1));
65
66
  const {
66
67
  capabilities: {
67
- colorLevel: ipcColorLevel,
68
68
  input: hasInput,
69
69
  output: hasOutput
70
70
  },
71
71
  ipc_version: remote_ipc_version
72
- } = JSON.parse(lineBuff.slice(0, eolIndex).toString('utf-8'));
72
+ } = JSON.parse(lineBuff.subarray(0, eolIndex).toString('utf-8'));
73
73
  lineBuff = null;
74
74
  captured = true;
75
75
  if (remote_ipc_version !== _package.version) {
@@ -91,7 +91,7 @@ function createNonStandardTTYServer() {
91
91
  _nodeReadline$1.clearLine(this, dir, callback);
92
92
  };
93
93
  }
94
- mutexFn(ipcColorLevel, hasInput ? input : undefined, hasOutput ? output : undefined).then(resolve, reject).finally(() => {
94
+ mutexFn(hasInput ? input : undefined, hasOutput ? output : undefined).then(resolve, reject).finally(() => {
95
95
  conn.unref();
96
96
  conn.end();
97
97
  input?.end();
@@ -107,7 +107,7 @@ function createNonStandardTTYServer() {
107
107
  }
108
108
  };
109
109
  }
110
- function createIPCServer(colorLevel, captureState, npmlog) {
110
+ function createIPCServer(captureState, npmlog) {
111
111
  const input = process.stdin;
112
112
  const output = process.stderr;
113
113
  return new Promise((resolve, reject) => {
@@ -134,8 +134,7 @@ function createIPCServer(colorLevel, captureState, npmlog) {
134
134
  ipc_version: _package.version,
135
135
  capabilities: {
136
136
  input: Boolean(input),
137
- output: true,
138
- colorLevel
137
+ output: true
139
138
  }
140
139
  })}\n`);
141
140
  conn.on('data', data => {
@@ -163,7 +162,7 @@ function createIPCServer(colorLevel, captureState, npmlog) {
163
162
  resolve(server);
164
163
  });
165
164
  }
166
- function createStandardTTYServer(colorLevel, isInteractive, npmlog) {
165
+ function createStandardTTYServer(isInteractive, npmlog) {
167
166
  const captureState = {
168
167
  captured: false,
169
168
  nextCapture: () => {
@@ -181,7 +180,7 @@ function createStandardTTYServer(colorLevel, isInteractive, npmlog) {
181
180
  const output = process.stderr;
182
181
  let ipcServerPromise;
183
182
  if (input) {
184
- ipcServerPromise = createIPCServer(colorLevel, captureState, npmlog);
183
+ ipcServerPromise = createIPCServer(captureState, npmlog);
185
184
  }
186
185
  return {
187
186
  async captureTTY(mutexFn) {
@@ -204,7 +203,7 @@ function createStandardTTYServer(colorLevel, isInteractive, npmlog) {
204
203
  if (wasProgressEnabled) {
205
204
  npmlog.disableProgress();
206
205
  }
207
- return await mutexFn(colorLevel, input, output);
206
+ return await mutexFn(input, output);
208
207
  } finally {
209
208
  if (wasProgressEnabled) {
210
209
  npmlog.enableProgress();
@@ -224,8 +223,8 @@ function tryUnlinkSync(filepath) {
224
223
  }
225
224
  }
226
225
  }
227
- function createTTYServer(colorLevel, isInteractive, npmlog) {
228
- return !isInteractive && TTY_IPC ? createNonStandardTTYServer() : createStandardTTYServer(colorLevel, isInteractive, npmlog);
226
+ function createTTYServer(isInteractive, npmlog) {
227
+ return !isInteractive && TTY_IPC ? createNonStandardTTYServer() : createStandardTTYServer(isInteractive, npmlog);
229
228
  }
230
229
 
231
230
  var issueRules = {};
@@ -376,30 +375,28 @@ function createIssueUXLookup(settings) {
376
375
  };
377
376
  }
378
377
 
379
- var _interopRequireWildcard = vendor.interopRequireWildcard.default;
380
378
  var _interopRequireDefault = vendor.interopRequireDefault.default;
381
379
  Object.defineProperty(arborist, "__esModule", {
382
380
  value: true
383
381
  });
384
382
  arborist.SafeArborist = void 0;
385
383
  arborist.installSafeArborist = installSafeArborist;
386
- var _nodeEvents = require$$2;
384
+ var _nodeEvents = require$$1$3;
387
385
  var _nodeFs$1 = require$$0;
388
- var _nodeHttps = require$$4;
386
+ var _nodeHttps = require$$3$3;
389
387
  var _nodePath$1 = require$$1$1;
390
388
  var _nodeReadline = require$$3;
391
389
  var _nodeStream = require$$5;
392
- var _promises = require$$8;
393
- var _chalk = _interopRequireDefault(vendor.source);
390
+ var _promises = require$$7$1;
394
391
  var _isInteractive = _interopRequireDefault(vendor.isInteractive);
395
392
  var _npmPackageArg = require$$5$1;
396
- var _ora = _interopRequireWildcard(vendor.ora);
393
+ var _yoctoSpinner = require$$3$2;
397
394
  var _semver = require$$3$1;
398
395
  var _config = require$$6$1;
399
396
  var _objects = require$$7;
400
397
  var _ttyServer = ttyServer$1;
401
398
  var _constants = sdk.constants;
402
- var _chalkMarkdown = sdk.chalkMarkdown;
399
+ var _colorOrMarkdown = sdk.colorOrMarkdown;
403
400
  var _issueRules = issueRules;
404
401
  var _misc = sdk.misc;
405
402
  var _pathResolve = pathResolve.pathResolve;
@@ -440,11 +437,12 @@ if (npmRootPath === undefined) {
440
437
  const LOOP_SENTINEL = 1_000_000;
441
438
  const NPM_REGISTRY_URL = 'https://registry.npmjs.org';
442
439
  const npmNmPath = _nodePath$1.join(npmRootPath, 'node_modules');
443
- const arboristClassPath = _nodePath$1.join(npmNmPath, '@npmcli/arborist/lib/arborist/index.js');
444
- const arboristDepValidPath = _nodePath$1.join(npmNmPath, '@npmcli/arborist/lib/dep-valid.js');
445
- const arboristEdgeClassPath = _nodePath$1.join(npmNmPath, '@npmcli/arborist/lib/edge.js');
446
- const arboristNodeClassPath = _nodePath$1.join(npmNmPath, '@npmcli/arborist/lib/node.js');
447
- const arboristOverrideSetClassPatch = _nodePath$1.join(npmNmPath, '@npmcli/arborist/lib/override-set.js');
440
+ const arboristPkgPath = _nodePath$1.join(npmNmPath, '@npmcli/arborist');
441
+ const arboristClassPath = _nodePath$1.join(arboristPkgPath, 'lib/arborist/index.js');
442
+ const arboristDepValidPath = _nodePath$1.join(arboristPkgPath, 'lib/dep-valid.js');
443
+ const arboristEdgeClassPath = _nodePath$1.join(arboristPkgPath, 'lib/edge.js');
444
+ const arboristNodeClassPath = _nodePath$1.join(arboristPkgPath, 'lib/node.js');
445
+ const arboristOverrideSetClassPatch = _nodePath$1.join(arboristPkgPath, 'lib/override-set.js');
448
446
  const log = tryRequire([_nodePath$1.join(npmNmPath, 'proc-log/lib/index.js'),
449
447
  // The proc-log DefinitelyTyped definition is incorrect. The type definition
450
448
  // is really that of its export log.
@@ -469,9 +467,9 @@ const Node = require(arboristNodeClassPath);
469
467
  const OverrideSet = require(arboristOverrideSetClassPatch);
470
468
  const kCtorArgs = Symbol('ctorArgs');
471
469
  const kRiskyReify = Symbol('riskyReify');
472
- const formatter = new _chalkMarkdown.ChalkOrMarkdown(false);
470
+ const formatter = new _colorOrMarkdown.ColorOrMarkdown(false);
473
471
  const pubToken = (0, _sdk.getDefaultKey)() ?? _sdk.FREE_API_KEY;
474
- const ttyServer = (0, _ttyServer.createTTYServer)(_chalk.default.level, (0, _isInteractive.default)({
472
+ const ttyServer = (0, _ttyServer.createTTYServer)((0, _isInteractive.default)({
475
473
  stream: process.stdin
476
474
  }), log);
477
475
  let _uxLookup;
@@ -523,6 +521,9 @@ async function* batchScan(pkgIds) {
523
521
  // Patch adding doOverrideSetsConflict is based on
524
522
  // https://github.com/npm/cli/pull/7025.
525
523
  function doOverrideSetsConflict(first, second) {
524
+ // If override sets contain one another then we can try to use the more specific
525
+ // one. However, if neither one is more specific, then we consider them to be
526
+ // in conflict.
526
527
  return findSpecificOverrideSet(first, second) === undefined;
527
528
  }
528
529
  function findSocketYmlSync() {
@@ -568,6 +569,7 @@ function findSpecificOverrideSet(first, second) {
568
569
  }
569
570
  overrideSet = overrideSet.parent;
570
571
  }
572
+ // The override sets are incomparable. Neither one contains the other.
571
573
  log.silly('Conflicting override sets', first, second);
572
574
  return undefined;
573
575
  }
@@ -581,18 +583,12 @@ async function packagesHaveRiskyIssues(safeArb, _registry, pkgs, output) {
581
583
  let result = false;
582
584
  let remaining = pkgs.length;
583
585
  if (!remaining) {
584
- (0, _ora.default)('').succeed('No changes detected');
586
+ _yoctoSpinner().success('No changes detected');
585
587
  return result;
586
588
  }
587
589
  const getText = () => `Looking up data for ${remaining} packages`;
588
- const spinner = (0, _ora.default)({
589
- color: 'cyan',
590
- stream: output,
591
- isEnabled: true,
592
- isSilent: false,
593
- hideCursor: true,
594
- discardStdin: true,
595
- spinner: _ora.spinners.dots
590
+ const spinner = _yoctoSpinner({
591
+ stream: output
596
592
  }).start(getText());
597
593
  try {
598
594
  for await (const pkgData of batchScan(pkgs.map(pkg => pkg.pkgid))) {
@@ -1436,8 +1432,7 @@ class SafeArborist extends Arborist {
1436
1432
  }
1437
1433
  let proceed = _constants.ENV.UPDATE_SOCKET_OVERRIDES_IN_PACKAGE_LOCK_FILE;
1438
1434
  if (!proceed) {
1439
- proceed = await ttyServer.captureTTY(async (colorLevel, input, output) => {
1440
- _chalk.default.level = colorLevel;
1435
+ proceed = await ttyServer.captureTTY(async (input, output) => {
1441
1436
  if (input && output) {
1442
1437
  const risky = await packagesHaveRiskyIssues(this, this['registry'], diff, output);
1443
1438
  if (!risky) {
@@ -1483,10 +1478,19 @@ class SafeArborist extends Arborist {
1483
1478
  }
1484
1479
  arborist.SafeArborist = SafeArborist;
1485
1480
  function installSafeArborist() {
1486
- require.cache[arboristClassPath].exports = SafeArborist;
1487
- require.cache[arboristEdgeClassPath].exports = SafeEdge;
1488
- require.cache[arboristNodeClassPath].exports = SafeNode;
1489
- require.cache[arboristOverrideSetClassPatch].exports = SafeOverrideSet;
1481
+ const cache = require.cache;
1482
+ cache[arboristClassPath] = {
1483
+ exports: SafeArborist
1484
+ };
1485
+ cache[arboristEdgeClassPath] = {
1486
+ exports: SafeEdge
1487
+ };
1488
+ cache[arboristNodeClassPath] = {
1489
+ exports: SafeNode
1490
+ };
1491
+ cache[arboristOverrideSetClassPatch] = {
1492
+ exports: SafeOverrideSet
1493
+ };
1490
1494
  }
1491
1495
  void (async () => {
1492
1496
  const remoteSettings = await (async () => {
package/dist/sdk.js CHANGED
@@ -2,13 +2,15 @@
2
2
 
3
3
  var require$$0 = require('@socketsecurity/registry/lib/env');
4
4
  var vendor = require('./vendor.js');
5
- var require$$1$2 = require('node:fs/promises');
6
- var require$$1$1 = require('node:path');
7
- var require$$1$3 = require('@inquirer/prompts');
5
+ var require$$1 = require('yoctocolors-cjs');
6
+ var require$$1$3 = require('node:fs/promises');
7
+ var require$$1$2 = require('node:path');
8
+ var require$$1$4 = require('@inquirer/prompts');
8
9
  var require$$4 = require('hpagent');
9
10
  var require$$6 = require('@socketsecurity/sdk');
10
11
  var require$$0$1 = require('node:fs');
11
- var require$$1 = require('node:os');
12
+ var require$$1$1 = require('node:os');
13
+ var require$$3 = require('@socketregistry/yocto-spinner');
12
14
 
13
15
  var errors = {};
14
16
 
@@ -39,36 +41,36 @@ constants.ENV = Object.freeze({
39
41
  UPDATE_SOCKET_OVERRIDES_IN_PACKAGE_LOCK_FILE: (0, _env.envAsBoolean)(process.env['UPDATE_SOCKET_OVERRIDES_IN_PACKAGE_LOCK_FILE'])
40
42
  });
41
43
 
42
- var chalkMarkdown = {};
44
+ var colorOrMarkdown = {};
43
45
 
44
- var _interopRequireDefault$2 = vendor.interopRequireDefault.default;
45
- Object.defineProperty(chalkMarkdown, "__esModule", {
46
+ var _interopRequireDefault$1 = vendor.interopRequireDefault.default;
47
+ Object.defineProperty(colorOrMarkdown, "__esModule", {
46
48
  value: true
47
49
  });
48
- chalkMarkdown.logSymbols = chalkMarkdown.ChalkOrMarkdown = void 0;
49
- var _chalk = _interopRequireDefault$2(vendor.source);
50
- var _isUnicodeSupported = _interopRequireDefault$2(vendor.isUnicodeSupported);
51
- var _terminalLink = _interopRequireDefault$2(vendor.terminalLink);
50
+ colorOrMarkdown.logSymbols = colorOrMarkdown.ColorOrMarkdown = void 0;
51
+ var _yoctocolorsCjs = require$$1;
52
+ var _isUnicodeSupported = _interopRequireDefault$1(vendor.isUnicodeSupported);
53
+ var _terminalLink = _interopRequireDefault$1(vendor.terminalLink);
52
54
  // From the 'log-symbols' module
53
55
  const unicodeLogSymbols = {
54
56
  __proto__: null,
55
- info: _chalk.default.blue('ℹ'),
56
- success: _chalk.default.green('✔'),
57
- warning: _chalk.default.yellow('⚠'),
58
- error: _chalk.default.red('✖')
57
+ info: _yoctocolorsCjs.blue('ℹ'),
58
+ success: _yoctocolorsCjs.green('✔'),
59
+ warning: _yoctocolorsCjs.yellow('⚠'),
60
+ error: _yoctocolorsCjs.red('✖')
59
61
  };
60
62
 
61
63
  // From the 'log-symbols' module
62
64
  const fallbackLogSymbols = {
63
65
  __proto__: null,
64
- info: _chalk.default.blue('i'),
65
- success: _chalk.default.green('√'),
66
- warning: _chalk.default.yellow('‼'),
67
- error: _chalk.default.red('×')
66
+ info: _yoctocolorsCjs.blue('i'),
67
+ success: _yoctocolorsCjs.green('√'),
68
+ warning: _yoctocolorsCjs.yellow('‼'),
69
+ error: _yoctocolorsCjs.red('×')
68
70
  };
69
71
 
70
72
  // From the 'log-symbols' module
71
- const logSymbols = chalkMarkdown.logSymbols = (0, _isUnicodeSupported.default)() ? unicodeLogSymbols : fallbackLogSymbols;
73
+ const logSymbols = colorOrMarkdown.logSymbols = (0, _isUnicodeSupported.default)() ? unicodeLogSymbols : fallbackLogSymbols;
72
74
  const markdownLogSymbols = {
73
75
  __proto__: null,
74
76
  info: ':information_source:',
@@ -76,18 +78,18 @@ const markdownLogSymbols = {
76
78
  success: ':white_check_mark:',
77
79
  warning: ':warning:'
78
80
  };
79
- class ChalkOrMarkdown {
81
+ class ColorOrMarkdown {
80
82
  constructor(useMarkdown) {
81
83
  this.useMarkdown = !!useMarkdown;
82
84
  }
83
85
  header(text, level = 1) {
84
- return this.useMarkdown ? `\n${''.padStart(level, '#')} ${text}\n` : _chalk.default.underline(`\n${level === 1 ? _chalk.default.bold(text) : text}\n`);
86
+ return this.useMarkdown ? `\n${''.padStart(level, '#')} ${text}\n` : _yoctocolorsCjs.underline(`\n${level === 1 ? _yoctocolorsCjs.bold(text) : text}\n`);
85
87
  }
86
88
  bold(text) {
87
- return this.useMarkdown ? `**${text}**` : _chalk.default.bold(`${text}`);
89
+ return this.useMarkdown ? `**${text}**` : _yoctocolorsCjs.bold(`${text}`);
88
90
  }
89
91
  italic(text) {
90
- return this.useMarkdown ? `_${text}_` : _chalk.default.italic(`${text}`);
92
+ return this.useMarkdown ? `_${text}_` : _yoctocolorsCjs.italic(`${text}`);
91
93
  }
92
94
  hyperlink(text, url, {
93
95
  fallback = true,
@@ -113,7 +115,7 @@ class ChalkOrMarkdown {
113
115
  return this.useMarkdown ? '```json\n' + JSON.stringify(value) + '\n```' : JSON.stringify(value);
114
116
  }
115
117
  }
116
- chalkMarkdown.ChalkOrMarkdown = ChalkOrMarkdown;
118
+ colorOrMarkdown.ColorOrMarkdown = ColorOrMarkdown;
117
119
 
118
120
  var misc = {};
119
121
 
@@ -123,9 +125,9 @@ Object.defineProperty(misc, "__esModule", {
123
125
  misc.createDebugLogger = createDebugLogger;
124
126
  misc.isErrnoException = isErrnoException;
125
127
  misc.stringJoinWithSeparateFinalSeparator = stringJoinWithSeparateFinalSeparator;
126
- var _chalkMarkdown = chalkMarkdown;
128
+ var _colorOrMarkdown = colorOrMarkdown;
127
129
  function createDebugLogger(printDebugLogs) {
128
- return printDebugLogs ? (...params) => console.error(_chalkMarkdown.logSymbols.info, ...params) : () => {};
130
+ return printDebugLogs ? (...params) => console.error(_colorOrMarkdown.logSymbols.info, ...params) : () => {};
129
131
  }
130
132
  function isErrnoException(value) {
131
133
  if (!(value instanceof Error)) {
@@ -146,16 +148,15 @@ var sdk = {};
146
148
 
147
149
  var settings$1 = {};
148
150
 
149
- var _interopRequireDefault$1 = vendor.interopRequireDefault.default;
150
151
  Object.defineProperty(settings$1, "__esModule", {
151
152
  value: true
152
153
  });
153
154
  settings$1.getSetting = getSetting;
154
155
  settings$1.updateSetting = updateSetting;
155
156
  var _nodeFs = require$$0$1;
156
- var _nodeOs = require$$1;
157
- var _nodePath$1 = require$$1$1;
158
- var _ora = _interopRequireDefault$1(vendor.ora);
157
+ var _nodeOs = require$$1$1;
158
+ var _nodePath$1 = require$$1$2;
159
+ var _yoctoSpinner = require$$3;
159
160
  let dataHome = process.platform === 'win32' ? process.env['LOCALAPPDATA'] : process.env['XDG_DATA_HOME'];
160
161
  if (!dataHome) {
161
162
  if (process.platform === 'win32') throw new Error('missing %LOCALAPPDATA%');
@@ -169,7 +170,7 @@ if ((0, _nodeFs.existsSync)(settingsPath)) {
169
170
  try {
170
171
  settings = JSON.parse(Buffer.from(raw, 'base64').toString());
171
172
  } catch {
172
- (0, _ora.default)(`Failed to parse settings at ${settingsPath}`).warn();
173
+ _yoctoSpinner().warning(`Failed to parse settings at ${settingsPath}`);
173
174
  }
174
175
  } else {
175
176
  (0, _nodeFs.mkdirSync)(_nodePath$1.dirname(settingsPath), {
@@ -198,9 +199,9 @@ Object.defineProperty(sdk, "__esModule", {
198
199
  sdk.FREE_API_KEY = void 0;
199
200
  sdk.getDefaultKey = getDefaultKey;
200
201
  sdk.setupSdk = setupSdk;
201
- var _promises = require$$1$2;
202
- var _nodePath = require$$1$1;
203
- var _prompts = require$$1$3;
202
+ var _promises = require$$1$3;
203
+ var _nodePath = require$$1$2;
204
+ var _prompts = require$$1$4;
204
205
  var _hpagent = require$$4;
205
206
  var _isInteractive = _interopRequireDefault(vendor.isInteractive);
206
207
  var _sdk = require$$6;
@@ -261,7 +262,7 @@ async function setupSdk(apiKey = getDefaultKey(), apiBaseUrl = getDefaultAPIBase
261
262
  return new _sdk.SocketSdk(apiKey || '', sdkOptions);
262
263
  }
263
264
 
264
- exports.chalkMarkdown = chalkMarkdown;
265
+ exports.colorOrMarkdown = colorOrMarkdown;
265
266
  exports.constants = constants;
266
267
  exports.errors = errors;
267
268
  exports.misc = misc;