@socketsecurity/cli-with-sentry 0.14.48 → 0.14.49

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.
@@ -1,16 +1,18 @@
1
1
  /// <reference types="npmcli__promise-spawn" />
2
2
  /// <reference types="node" />
3
3
  import spawn from '@npmcli/promise-spawn';
4
+ import { Spinner } from '@socketsecurity/registry/lib/spinner';
4
5
  declare function isAuditFlag(cmdArg: string): boolean;
5
6
  declare function isFundFlag(cmdArg: string): boolean;
6
7
  declare function isLoglevelFlag(cmdArg: string): boolean;
7
8
  declare function isProgressFlag(cmdArg: string): boolean;
8
9
  type SpawnOption = Exclude<Parameters<typeof spawn>[2], undefined>;
9
10
  type SafeNpmInstallOptions = SpawnOption & {
10
- args?: string[];
11
- ipc?: object;
11
+ args?: string[] | undefined;
12
+ ipc?: object | undefined;
13
+ spinner?: Spinner | undefined;
12
14
  };
13
- declare function safeNpmInstall(opts?: SafeNpmInstallOptions): Promise<{
15
+ declare function safeNpmInstall(options?: SafeNpmInstallOptions): Promise<{
14
16
  cmd: string;
15
17
  args: string[];
16
18
  code: number;
@@ -38,21 +38,27 @@ function isLoglevelFlag(cmdArg) {
38
38
  function isProgressFlag(cmdArg) {
39
39
  return progressFlags.has(cmdArg);
40
40
  }
41
- function safeNpmInstall(opts) {
41
+ function safeNpmInstall(options) {
42
42
  const {
43
43
  args = [],
44
44
  ipc,
45
+ spinner,
45
46
  ...spawnOptions
46
47
  } = {
47
48
  __proto__: null,
48
- ...opts
49
+ ...options
49
50
  };
50
51
  const terminatorPos = args.indexOf('--');
51
52
  const npmArgs = (terminatorPos === -1 ? args : args.slice(0, terminatorPos)).filter(a => !isAuditFlag(a) && !isFundFlag(a) && !isProgressFlag(a));
52
53
  const otherArgs = terminatorPos === -1 ? [] : args.slice(terminatorPos);
53
54
  const useIpc = objects.isObject(ipc);
54
55
  const useDebug = npmPaths.isDebug();
55
- const spawnPromise = spawn(
56
+ const isSilent = !useDebug && !npmArgs.some(isLoglevelFlag);
57
+ const isSpinning = spinner?.isSpinning ?? false;
58
+ if (!isSilent) {
59
+ spinner?.stop();
60
+ }
61
+ let spawnPromise = spawn(
56
62
  // Lazily access constants.execPath.
57
63
  constants.execPath, [
58
64
  // Lazily access constants.nodeNoWarningsFlags.
@@ -68,16 +74,16 @@ function safeNpmInstall(opts) {
68
74
  '--no-progress',
69
75
  // Add the '--silent' flag if a loglevel flag is not provided and the
70
76
  // SOCKET_CLI_DEBUG environment variable is not truthy.
71
- ...(useDebug || npmArgs.some(isLoglevelFlag) ? [] : ['--silent']), ...npmArgs, ...otherArgs], {
77
+ ...(isSilent ? ['--silent'] : []), ...npmArgs, ...otherArgs], {
72
78
  signal: abortSignal,
73
79
  // Set stdio to include 'ipc'.
74
80
  // See https://github.com/nodejs/node/blob/v23.6.0/lib/child_process.js#L161-L166
75
81
  // and https://github.com/nodejs/node/blob/v23.6.0/lib/internal/child_process.js#L238.
76
- stdio: useDebug ?
77
- // 'inherit'
78
- useIpc ? [0, 1, 2, 'ipc'] : 'inherit' :
82
+ stdio: isSilent ?
79
83
  // 'ignore'
80
- useIpc ? ['ignore', 'ignore', 'ignore', 'ipc'] : 'ignore',
84
+ useIpc ? ['ignore', 'ignore', 'ignore', 'ipc'] : 'ignore' :
85
+ // 'inherit'
86
+ useIpc ? [0, 1, 2, 'ipc'] : 'inherit',
81
87
  ...spawnOptions,
82
88
  env: {
83
89
  ...process.env,
@@ -89,11 +95,19 @@ function safeNpmInstall(opts) {
89
95
  [SOCKET_IPC_HANDSHAKE]: ipc
90
96
  });
91
97
  }
98
+ if (!isSilent && isSpinning) {
99
+ const oldSpawnPromise = spawnPromise;
100
+ spawnPromise = spawnPromise.finally(() => {
101
+ spinner?.start();
102
+ });
103
+ spawnPromise.process = oldSpawnPromise.process;
104
+ spawnPromise.stdin = spawnPromise.stdin;
105
+ }
92
106
  return spawnPromise;
93
107
  }
94
108
 
95
109
  exports.isLoglevelFlag = isLoglevelFlag;
96
110
  exports.isProgressFlag = isProgressFlag;
97
111
  exports.safeNpmInstall = safeNpmInstall;
98
- //# debugId=73c2e7c8-ac5f-4a8a-8343-be29aaec8a8a
112
+ //# debugId=e284aad0-2f5e-4bba-a5e4-010813e648a3
99
113
  //# sourceMappingURL=npm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"npm.js","sources":["../../src/utils/npm.ts"],"sourcesContent":["import process from 'node:process'\n\nimport spawn from '@npmcli/promise-spawn'\n\nimport { isObject } from '@socketsecurity/registry/lib/objects'\n\nimport { isDebug } from './debug'\nimport constants from '../constants'\nimport { getNpmBinPath } from '../shadow/npm-paths'\n\nconst { SOCKET_IPC_HANDSHAKE, abortSignal } = constants\n\nconst auditFlags = new Set(['--audit', '--no-audit'])\n\nconst fundFlags = new Set(['--fund', '--no-fund'])\n\n// https://docs.npmjs.com/cli/v11/using-npm/logging#aliases\nconst logFlags = new Set([\n '--loglevel',\n '-d',\n '--dd',\n '--ddd',\n '-q',\n '--quiet',\n '-s',\n '--silent'\n])\n\nconst progressFlags = new Set(['--progress', '--no-progress'])\n\nexport function isAuditFlag(cmdArg: string) {\n return auditFlags.has(cmdArg)\n}\n\nexport function isFundFlag(cmdArg: string) {\n return fundFlags.has(cmdArg)\n}\n\nexport function isLoglevelFlag(cmdArg: string) {\n // https://docs.npmjs.com/cli/v11/using-npm/logging#setting-log-levels\n return cmdArg.startsWith('--loglevel=') || logFlags.has(cmdArg)\n}\n\nexport function isProgressFlag(cmdArg: string) {\n return progressFlags.has(cmdArg)\n}\n\ntype SpawnOption = Exclude<Parameters<typeof spawn>[2], undefined>\n\ntype SafeNpmInstallOptions = SpawnOption & {\n args?: string[]\n ipc?: object\n}\n\nexport function safeNpmInstall(opts?: SafeNpmInstallOptions) {\n const { args = [], ipc, ...spawnOptions } = { __proto__: null, ...opts }\n const terminatorPos = args.indexOf('--')\n const npmArgs = (\n terminatorPos === -1 ? args : args.slice(0, terminatorPos)\n ).filter(a => !isAuditFlag(a) && !isFundFlag(a) && !isProgressFlag(a))\n const otherArgs = terminatorPos === -1 ? [] : args.slice(terminatorPos)\n const useIpc = isObject(ipc)\n const useDebug = isDebug()\n const spawnPromise = spawn(\n // Lazily access constants.execPath.\n constants.execPath,\n [\n // Lazily access constants.nodeNoWarningsFlags.\n ...constants.nodeNoWarningsFlags,\n '--require',\n // Lazily access constants.npmInjectionPath.\n constants.npmInjectionPath,\n getNpmBinPath(),\n 'install',\n // Even though the '--silent' flag is passed npm will still run through\n // code paths for 'audit' and 'fund' unless '--no-audit' and '--no-fund'\n // flags are passed.\n '--no-audit',\n '--no-fund',\n // Add `--no-progress` and `--silent` flags to fix input being swallowed\n // by the spinner when running the command with recent versions of npm.\n '--no-progress',\n // Add the '--silent' flag if a loglevel flag is not provided and the\n // SOCKET_CLI_DEBUG environment variable is not truthy.\n ...(useDebug || npmArgs.some(isLoglevelFlag) ? [] : ['--silent']),\n ...npmArgs,\n ...otherArgs\n ],\n {\n signal: abortSignal,\n // Set stdio to include 'ipc'.\n // See https://github.com/nodejs/node/blob/v23.6.0/lib/child_process.js#L161-L166\n // and https://github.com/nodejs/node/blob/v23.6.0/lib/internal/child_process.js#L238.\n stdio: useDebug\n ? // 'inherit'\n useIpc\n ? [0, 1, 2, 'ipc']\n : 'inherit'\n : // 'ignore'\n useIpc\n ? ['ignore', 'ignore', 'ignore', 'ipc']\n : 'ignore',\n ...spawnOptions,\n env: {\n ...process.env,\n ...spawnOptions.env\n }\n }\n )\n if (useIpc) {\n spawnPromise.process.send({ [SOCKET_IPC_HANDSHAKE]: ipc })\n }\n return spawnPromise\n}\n"],"names":["abortSignal","args","__proto__","constants","signal","stdio","env","spawnPromise"],"mappings":";;;;;;;;;;;;;;;;;AAUA;;AAA8BA;AAAY;AAE1C;AAEA;;AAEA;AACA;AAWA;AAEO;AACL;AACF;AAEO;AACL;AACF;AAEO;AACL;AACA;AACF;AAEO;AACL;AACF;AASO;;AACGC;;;AAAgC;AAAMC;;;AAC9C;AACA;AAGA;AACA;AACA;;AAEE;;AAGE;AACA;AAEA;AACAC;AAGA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;;AAMAC;AACA;AACA;AACA;AACAC;AACI;;AAIA;;AAIJ;AACAC;;AAEE;AACF;AACF;AAEF;AACEC;AAA4B;AAA4B;AAC1D;AACA;AACF;;;;","debugId":"73c2e7c8-ac5f-4a8a-8343-be29aaec8a8a"}
1
+ {"version":3,"file":"npm.js","sources":["../../src/utils/npm.ts"],"sourcesContent":["import process from 'node:process'\n\nimport spawn from '@npmcli/promise-spawn'\n\nimport { isObject } from '@socketsecurity/registry/lib/objects'\n\nimport { isDebug } from './debug'\nimport constants from '../constants'\nimport { getNpmBinPath } from '../shadow/npm-paths'\n\nimport type { Spinner } from '@socketsecurity/registry/lib/spinner'\n\nconst { SOCKET_IPC_HANDSHAKE, abortSignal } = constants\n\nconst auditFlags = new Set(['--audit', '--no-audit'])\n\nconst fundFlags = new Set(['--fund', '--no-fund'])\n\n// https://docs.npmjs.com/cli/v11/using-npm/logging#aliases\nconst logFlags = new Set([\n '--loglevel',\n '-d',\n '--dd',\n '--ddd',\n '-q',\n '--quiet',\n '-s',\n '--silent'\n])\n\nconst progressFlags = new Set(['--progress', '--no-progress'])\n\nexport function isAuditFlag(cmdArg: string) {\n return auditFlags.has(cmdArg)\n}\n\nexport function isFundFlag(cmdArg: string) {\n return fundFlags.has(cmdArg)\n}\n\nexport function isLoglevelFlag(cmdArg: string) {\n // https://docs.npmjs.com/cli/v11/using-npm/logging#setting-log-levels\n return cmdArg.startsWith('--loglevel=') || logFlags.has(cmdArg)\n}\n\nexport function isProgressFlag(cmdArg: string) {\n return progressFlags.has(cmdArg)\n}\n\ntype SpawnOption = Exclude<Parameters<typeof spawn>[2], undefined>\n\ntype SafeNpmInstallOptions = SpawnOption & {\n args?: string[] | undefined\n ipc?: object | undefined\n spinner?: Spinner | undefined\n}\n\nexport function safeNpmInstall(options?: SafeNpmInstallOptions) {\n const {\n args = [],\n ipc,\n spinner,\n ...spawnOptions\n } = <SafeNpmInstallOptions>{ __proto__: null, ...options }\n const terminatorPos = args.indexOf('--')\n const npmArgs = (\n terminatorPos === -1 ? args : args.slice(0, terminatorPos)\n ).filter(a => !isAuditFlag(a) && !isFundFlag(a) && !isProgressFlag(a))\n const otherArgs = terminatorPos === -1 ? [] : args.slice(terminatorPos)\n const useIpc = isObject(ipc)\n const useDebug = isDebug()\n const isSilent = !useDebug && !npmArgs.some(isLoglevelFlag)\n const isSpinning = spinner?.isSpinning ?? false\n if (!isSilent) {\n spinner?.stop()\n }\n let spawnPromise = spawn(\n // Lazily access constants.execPath.\n constants.execPath,\n [\n // Lazily access constants.nodeNoWarningsFlags.\n ...constants.nodeNoWarningsFlags,\n '--require',\n // Lazily access constants.npmInjectionPath.\n constants.npmInjectionPath,\n getNpmBinPath(),\n 'install',\n // Even though the '--silent' flag is passed npm will still run through\n // code paths for 'audit' and 'fund' unless '--no-audit' and '--no-fund'\n // flags are passed.\n '--no-audit',\n '--no-fund',\n // Add `--no-progress` and `--silent` flags to fix input being swallowed\n // by the spinner when running the command with recent versions of npm.\n '--no-progress',\n // Add the '--silent' flag if a loglevel flag is not provided and the\n // SOCKET_CLI_DEBUG environment variable is not truthy.\n ...(isSilent ? ['--silent'] : []),\n ...npmArgs,\n ...otherArgs\n ],\n {\n signal: abortSignal,\n // Set stdio to include 'ipc'.\n // See https://github.com/nodejs/node/blob/v23.6.0/lib/child_process.js#L161-L166\n // and https://github.com/nodejs/node/blob/v23.6.0/lib/internal/child_process.js#L238.\n stdio: isSilent\n ? // 'ignore'\n useIpc\n ? ['ignore', 'ignore', 'ignore', 'ipc']\n : 'ignore'\n : // 'inherit'\n useIpc\n ? [0, 1, 2, 'ipc']\n : 'inherit',\n ...spawnOptions,\n env: {\n ...process.env,\n ...spawnOptions.env\n }\n }\n )\n if (useIpc) {\n spawnPromise.process.send({ [SOCKET_IPC_HANDSHAKE]: ipc })\n }\n if (!isSilent && isSpinning) {\n const oldSpawnPromise = spawnPromise\n spawnPromise = <typeof oldSpawnPromise>spawnPromise.finally(() => {\n spinner?.start()\n })\n spawnPromise.process = oldSpawnPromise.process\n ;(spawnPromise as any).stdin = (spawnPromise as any).stdin\n }\n return spawnPromise\n}\n"],"names":["abortSignal","args","__proto__","constants","signal","stdio","env","spawnPromise"],"mappings":";;;;;;;;;;;;;;;;;AAYA;;AAA8BA;AAAY;AAE1C;AAEA;;AAEA;AACA;AAWA;AAEO;AACL;AACF;AAEO;AACL;AACF;AAEO;AACL;AACA;AACF;AAEO;AACL;AACF;AAUO;;AAEHC;;;;AAIF;AAA6BC;;;AAC7B;AACA;AAGA;AACA;AACA;;AAEA;;;AAGA;;AAEE;;AAGE;AACA;AAEA;AACAC;AAGA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AAKAC;AACA;AACA;AACA;AACAC;AACI;;AAIA;;AAIJ;AACAC;;AAEE;AACF;AACF;AAEF;AACEC;AAA4B;AAA4B;AAC1D;AACA;;AAEEA;;AAEA;AACAA;AACEA;AACJ;AACA;AACF;;;;","debugId":"e284aad0-2f5e-4bba-a5e4-010813e648a3"}