@socketsecurity/cli-with-sentry 0.14.59 → 0.14.60

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,2 +1,2 @@
1
- declare function shadowBin(binName: 'npm' | 'npx', args?: string[], level?: number): Promise<void>;
1
+ declare function shadowBin(binName: 'npm' | 'npx', args?: string[]): Promise<void>;
2
2
  export { shadowBin as default };
@@ -10,6 +10,7 @@ function _socketInterop(e) {
10
10
  }
11
11
 
12
12
  var process = require('node:process');
13
+ var debug = require('@socketsecurity/registry/lib/debug');
13
14
  var npm = require('@socketsecurity/registry/lib/npm');
14
15
  var spawn = require('@socketsecurity/registry/lib/spawn');
15
16
  var path = require('node:path');
@@ -48,14 +49,18 @@ async function installLinks(realBinPath, binName) {
48
49
 
49
50
  const {
50
51
  SOCKET_CLI_SAFE_WRAPPER,
51
- SOCKET_CLI_SENTRY_BUILD,
52
52
  SOCKET_IPC_HANDSHAKE
53
53
  } = constants;
54
- async function shadowBin(binName, args = process.argv.slice(2), level = 1) {
54
+ async function shadowBin(binName, args = process.argv.slice(2)) {
55
55
  process.exitCode = 1;
56
+ const useDebug = debug.isDebug();
56
57
  const terminatorPos = args.indexOf('--');
57
58
  const binArgs = (terminatorPos === -1 ? args : args.slice(0, terminatorPos)).filter(a => !npm.isProgressFlag(a));
58
59
  const otherArgs = terminatorPos === -1 ? [] : args.slice(terminatorPos);
60
+ const isSilent = !useDebug && !binArgs.some(npm.isLoglevelFlag);
61
+ // The default value of loglevel is "notice". We default to "error" which is
62
+ // two levels quieter.
63
+ const logLevelArgs = isSilent ? ['--loglevel', 'error'] : [];
59
64
  const spawnPromise = spawn.spawn(
60
65
  // Lazily access constants.execPath.
61
66
  constants.execPath, [
@@ -63,19 +68,19 @@ async function shadowBin(binName, args = process.argv.slice(2), level = 1) {
63
68
  ...constants.nodeHardenFlags,
64
69
  // Lazily access constants.nodeNoWarningsFlags.
65
70
  ...constants.nodeNoWarningsFlags,
66
- // Lazily access constants.ENV[SOCKET_CLI_SENTRY_BUILD].
67
- ...(constants.ENV[SOCKET_CLI_SENTRY_BUILD] ? ['--require',
71
+ // Lazily access true.
72
+ ...(['--require',
68
73
  // Lazily access constants.distInstrumentWithSentryPath.
69
- constants.distInstrumentWithSentryPath] : []), '--require',
74
+ constants.distInstrumentWithSentryPath] ), '--require',
70
75
  // Lazily access constants.distShadowNpmInjectPath.
71
76
  constants.distShadowNpmInjectPath,
72
77
  // Lazily access constants.shadowBinPath.
73
78
  await installLinks(constants.shadowBinPath, binName),
74
- // Add `--no-progress` and `--loglevel=error` flags to fix input being
75
- // swallowed by the npm spinner.
79
+ // Add '--no-progress' to fix input being swallowed by the npm spinner.
76
80
  '--no-progress',
77
- // Add the '--loglevel=error' flag if a loglevel flag is not provided.
78
- ...(binArgs.some(npm.isLoglevelFlag) ? [] : ['--loglevel', 'error']), ...binArgs, ...otherArgs], {
81
+ // Add '--loglevel=error' if a loglevel flag is not provided and the
82
+ // SOCKET_CLI_DEBUG environment variable is not truthy.
83
+ ...logLevelArgs, ...binArgs, ...otherArgs], {
79
84
  // 'inherit' + 'ipc'
80
85
  stdio: [0, 1, 2, 'ipc']
81
86
  });
@@ -89,12 +94,12 @@ async function shadowBin(binName, args = process.argv.slice(2), level = 1) {
89
94
  });
90
95
  spawnPromise.process.send({
91
96
  [SOCKET_IPC_HANDSHAKE]: {
92
- [SOCKET_CLI_SAFE_WRAPPER]: level
97
+ [SOCKET_CLI_SAFE_WRAPPER]: binName
93
98
  }
94
99
  });
95
100
  await spawnPromise;
96
101
  }
97
102
 
98
103
  module.exports = shadowBin;
99
- //# debugId=ee6e1727-ba87-4d1b-89c3-a573fd8401bd
104
+ //# debugId=bf8f79ac-a63c-41a9-b162-f90694b830f6
100
105
  //# sourceMappingURL=shadow-bin.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"shadow-bin.js","sources":["../../src/shadow/npm/link.ts","../../src/shadow/npm/bin.ts"],"sourcesContent":["import path from 'node:path'\nimport process from 'node:process'\n\nimport cmdShim from 'cmd-shim'\n\nimport {\n getNpmBinPath,\n getNpxBinPath,\n isNpmBinPathShadowed,\n isNpxBinPathShadowed\n} from './paths'\nimport constants from '../../constants'\n\nconst { CLI, NPX } = constants\n\nexport async function installLinks(\n realBinPath: string,\n binName: 'npm' | 'npx'\n): Promise<string> {\n const isNpx = binName === NPX\n // Find package manager being shadowed by this process.\n const binPath = isNpx ? getNpxBinPath() : getNpmBinPath()\n // Lazily access constants.WIN32.\n const { WIN32 } = constants\n // TODO: Is this early exit needed?\n if (WIN32 && binPath) {\n return binPath\n }\n const shadowed = isNpx ? isNpxBinPathShadowed() : isNpmBinPathShadowed()\n // Move our bin directory to front of PATH so its found first.\n if (!shadowed) {\n if (WIN32) {\n await cmdShim(\n // Lazily access constants.rootDistPath.\n path.join(constants.rootDistPath, `${binName}-${CLI}.js`),\n path.join(realBinPath, binName)\n )\n }\n process.env['PATH'] =\n `${realBinPath}${path.delimiter}${process.env['PATH']}`\n }\n return binPath\n}\n","import process from 'node:process'\n\nimport {\n isLoglevelFlag,\n isProgressFlag\n} from '@socketsecurity/registry/lib/npm'\nimport { spawn } from '@socketsecurity/registry/lib/spawn'\n\nimport { installLinks } from './link'\nimport constants from '../../constants'\n\nconst {\n SOCKET_CLI_SAFE_WRAPPER,\n SOCKET_CLI_SENTRY_BUILD,\n SOCKET_IPC_HANDSHAKE\n} = constants\n\nexport default async function shadowBin(\n binName: 'npm' | 'npx',\n args = process.argv.slice(2),\n level = 1\n) {\n process.exitCode = 1\n const terminatorPos = args.indexOf('--')\n const binArgs = (\n terminatorPos === -1 ? args : args.slice(0, terminatorPos)\n ).filter(a => !isProgressFlag(a))\n const otherArgs = terminatorPos === -1 ? [] : args.slice(terminatorPos)\n const spawnPromise = spawn(\n // Lazily access constants.execPath.\n constants.execPath,\n [\n // Lazily access constants.nodeHardenFlags.\n ...constants.nodeHardenFlags,\n // Lazily access constants.nodeNoWarningsFlags.\n ...constants.nodeNoWarningsFlags,\n // Lazily access constants.ENV[SOCKET_CLI_SENTRY_BUILD].\n ...(constants.ENV[SOCKET_CLI_SENTRY_BUILD]\n ? [\n '--require',\n // Lazily access constants.distInstrumentWithSentryPath.\n constants.distInstrumentWithSentryPath\n ]\n : []),\n '--require',\n // Lazily access constants.distShadowNpmInjectPath.\n constants.distShadowNpmInjectPath,\n // Lazily access constants.shadowBinPath.\n await installLinks(constants.shadowBinPath, binName),\n // Add `--no-progress` and `--loglevel=error` flags to fix input being\n // swallowed by the npm spinner.\n '--no-progress',\n // Add the '--loglevel=error' flag if a loglevel flag is not provided.\n ...(binArgs.some(isLoglevelFlag) ? [] : ['--loglevel', 'error']),\n ...binArgs,\n ...otherArgs\n ],\n {\n // 'inherit' + 'ipc'\n stdio: [0, 1, 2, 'ipc']\n }\n )\n // See https://nodejs.org/api/all.html#all_child_process_event-exit.\n spawnPromise.process.on('exit', (code, signalName) => {\n if (signalName) {\n process.kill(process.pid, signalName)\n } else if (code !== null) {\n process.exit(code)\n }\n })\n spawnPromise.process.send({\n [SOCKET_IPC_HANDSHAKE]: {\n [SOCKET_CLI_SAFE_WRAPPER]: level\n }\n })\n await spawnPromise\n}\n"],"names":["NPX","WIN32","process","SOCKET_IPC_HANDSHAKE","constants","spawnPromise"],"mappings":";;;;;;;;;;;;;;;;;;;AAaA;;AAAaA;AAAI;AAEV;AAIL;AACA;;AAEA;;AACQC;AAAM;AACd;;AAEE;AACF;;AAEA;;AAEE;AACE;AACE;;AAIJ;AACAC;AAEF;AACA;AACF;;AC/BA;;;AAGEC;AACF;AAEe;;AAMb;AACA;AAGA;;AAEE;;AAGE;;AAEA;;AAEA;;AAIM;AACAC;AAIN;AACAA;AACA;AACA;AACA;AACA;;AAEA;;AAMA;;AAEF;AAEF;;AAEE;;AAEA;AACEF;AACF;AACF;AACAG;AACE;AACE;AACF;AACF;AACA;AACF;;","debugId":"ee6e1727-ba87-4d1b-89c3-a573fd8401bd"}
1
+ {"version":3,"file":"shadow-bin.js","sources":["../../src/shadow/npm/link.ts","../../src/shadow/npm/bin.ts"],"sourcesContent":["import path from 'node:path'\nimport process from 'node:process'\n\nimport cmdShim from 'cmd-shim'\n\nimport {\n getNpmBinPath,\n getNpxBinPath,\n isNpmBinPathShadowed,\n isNpxBinPathShadowed\n} from './paths'\nimport constants from '../../constants'\n\nconst { CLI, NPX } = constants\n\nexport async function installLinks(\n realBinPath: string,\n binName: 'npm' | 'npx'\n): Promise<string> {\n const isNpx = binName === NPX\n // Find package manager being shadowed by this process.\n const binPath = isNpx ? getNpxBinPath() : getNpmBinPath()\n // Lazily access constants.WIN32.\n const { WIN32 } = constants\n // TODO: Is this early exit needed?\n if (WIN32 && binPath) {\n return binPath\n }\n const shadowed = isNpx ? isNpxBinPathShadowed() : isNpmBinPathShadowed()\n // Move our bin directory to front of PATH so its found first.\n if (!shadowed) {\n if (WIN32) {\n await cmdShim(\n // Lazily access constants.rootDistPath.\n path.join(constants.rootDistPath, `${binName}-${CLI}.js`),\n path.join(realBinPath, binName)\n )\n }\n process.env['PATH'] =\n `${realBinPath}${path.delimiter}${process.env['PATH']}`\n }\n return binPath\n}\n","import process from 'node:process'\n\nimport { isDebug } from '@socketsecurity/registry/lib/debug'\nimport {\n isLoglevelFlag,\n isProgressFlag\n} from '@socketsecurity/registry/lib/npm'\nimport { spawn } from '@socketsecurity/registry/lib/spawn'\n\nimport { installLinks } from './link'\nimport constants from '../../constants'\n\nconst { SOCKET_CLI_SAFE_WRAPPER, SOCKET_IPC_HANDSHAKE } = constants\n\nexport default async function shadowBin(\n binName: 'npm' | 'npx',\n args = process.argv.slice(2)\n) {\n process.exitCode = 1\n const useDebug = isDebug()\n const terminatorPos = args.indexOf('--')\n const binArgs = (\n terminatorPos === -1 ? args : args.slice(0, terminatorPos)\n ).filter(a => !isProgressFlag(a))\n const otherArgs = terminatorPos === -1 ? [] : args.slice(terminatorPos)\n const isSilent = !useDebug && !binArgs.some(isLoglevelFlag)\n // The default value of loglevel is \"notice\". We default to \"error\" which is\n // two levels quieter.\n const logLevelArgs = isSilent ? ['--loglevel', 'error'] : []\n const spawnPromise = spawn(\n // Lazily access constants.execPath.\n constants.execPath,\n [\n // Lazily access constants.nodeHardenFlags.\n ...constants.nodeHardenFlags,\n // Lazily access constants.nodeNoWarningsFlags.\n ...constants.nodeNoWarningsFlags,\n // Lazily access process.env['INLINED_SOCKET_CLI_SENTRY_BUILD'].\n ...(process.env['INLINED_SOCKET_CLI_SENTRY_BUILD']\n ? [\n '--require',\n // Lazily access constants.distInstrumentWithSentryPath.\n constants.distInstrumentWithSentryPath\n ]\n : []),\n '--require',\n // Lazily access constants.distShadowNpmInjectPath.\n constants.distShadowNpmInjectPath,\n // Lazily access constants.shadowBinPath.\n await installLinks(constants.shadowBinPath, binName),\n // Add '--no-progress' to fix input being swallowed by the npm spinner.\n '--no-progress',\n // Add '--loglevel=error' if a loglevel flag is not provided and the\n // SOCKET_CLI_DEBUG environment variable is not truthy.\n ...logLevelArgs,\n ...binArgs,\n ...otherArgs\n ],\n {\n // 'inherit' + 'ipc'\n stdio: [0, 1, 2, 'ipc']\n }\n )\n // See https://nodejs.org/api/all.html#all_child_process_event-exit.\n spawnPromise.process.on('exit', (code, signalName) => {\n if (signalName) {\n process.kill(process.pid, signalName)\n } else if (code !== null) {\n process.exit(code)\n }\n })\n spawnPromise.process.send({\n [SOCKET_IPC_HANDSHAKE]: {\n [SOCKET_CLI_SAFE_WRAPPER]: binName\n }\n })\n await spawnPromise\n}\n"],"names":["NPX","WIN32","process","SOCKET_IPC_HANDSHAKE","constants","spawnPromise"],"mappings":";;;;;;;;;;;;;;;;;;;;AAaA;;AAAaA;AAAI;AAEV;AAIL;AACA;;AAEA;;AACQC;AAAM;AACd;;AAEE;AACF;;AAEA;;AAEE;AACE;AACE;;AAIJ;AACAC;AAEF;AACA;AACF;;AC9BA;;AAAiCC;AAAqB;AAEvC;;AAKb;AACA;AACA;AAGA;;AAEA;AACA;;;AAGE;;AAGE;;AAEA;;AAEA;;AAIM;AACAC;AAIN;AACAA;AACA;AACA;AACA;;AAEA;AACA;;AAMA;;AAEF;AAEF;;AAEE;;AAEA;AACEF;AACF;AACF;AACAG;AACE;AACE;AACF;AACF;AACA;AACF;;","debugId":"bf8f79ac-a63c-41a9-b162-f90694b830f6"}
@@ -74,8 +74,12 @@ function isErrnoException(value) {
74
74
  return value.code !== undefined;
75
75
  }
76
76
 
77
+ const {
78
+ abortSignal: abortSignal$2
79
+ } = constants;
77
80
  async function findUp(name, {
78
- cwd = process$1.cwd()
81
+ cwd = process$1.cwd(),
82
+ signal = abortSignal$2
79
83
  }) {
80
84
  let dir = path.resolve(cwd);
81
85
  const {
@@ -84,6 +88,9 @@ async function findUp(name, {
84
88
  const names = [name].flat();
85
89
  while (dir && dir !== root) {
86
90
  for (const name of names) {
91
+ if (signal?.aborted) {
92
+ return undefined;
93
+ }
87
94
  const filePath = path.join(dir, name);
88
95
  try {
89
96
  // eslint-disable-next-line no-await-in-loop
@@ -99,25 +106,38 @@ async function findUp(name, {
99
106
  }
100
107
  async function readFileBinary(filepath, options) {
101
108
  return await fs.promises.readFile(filepath, {
109
+ signal: abortSignal$2,
102
110
  ...options,
103
111
  encoding: 'binary'
104
112
  });
105
113
  }
106
114
  async function readFileUtf8(filepath, options) {
107
115
  return await fs.promises.readFile(filepath, {
116
+ signal: abortSignal$2,
108
117
  ...options,
109
118
  encoding: 'utf8'
110
119
  });
111
120
  }
112
- async function safeReadFile(...args) {
121
+ async function safeReadFile(filepath, options) {
113
122
  try {
114
- return await fs.promises.readFile(...args);
123
+ return await fs.promises.readFile(filepath, {
124
+ encoding: 'utf8',
125
+ signal: abortSignal$2,
126
+ ...(typeof options === 'string' ? {
127
+ encoding: options
128
+ } : options)
129
+ });
115
130
  } catch {}
116
131
  return undefined;
117
132
  }
118
- function safeReadFileSync(...args) {
133
+ function safeReadFileSync(filepath, options) {
119
134
  try {
120
- return fs.readFileSync(...args);
135
+ return fs.readFileSync(filepath, {
136
+ encoding: 'utf8',
137
+ ...(typeof options === 'string' ? {
138
+ encoding: options
139
+ } : options)
140
+ });
121
141
  } catch {}
122
142
  return undefined;
123
143
  }
@@ -130,7 +150,7 @@ function getSettings() {
130
150
  _settings = {};
131
151
  const settingsPath = getSettingsPath();
132
152
  if (settingsPath) {
133
- const raw = safeReadFileSync(settingsPath, 'utf8');
153
+ const raw = safeReadFileSync(settingsPath);
134
154
  if (raw) {
135
155
  try {
136
156
  Object.assign(_settings, JSON.parse(Buffer.from(raw, 'base64').toString()));
@@ -181,10 +201,10 @@ function findSocketYmlSync() {
181
201
  let dir = process$1.cwd();
182
202
  while (dir !== prevDir) {
183
203
  let ymlPath = path.join(dir, 'socket.yml');
184
- let yml = safeReadFileSync(ymlPath, 'utf8');
204
+ let yml = safeReadFileSync(ymlPath);
185
205
  if (yml === undefined) {
186
206
  ymlPath = path.join(dir, 'socket.yaml');
187
- yml = safeReadFileSync(ymlPath, 'utf8');
207
+ yml = safeReadFileSync(ymlPath);
188
208
  }
189
209
  if (typeof yml === 'string') {
190
210
  try {
@@ -274,8 +294,14 @@ async function setupSdk(apiToken = getDefaultToken(), apiBaseUrl = getDefaultApi
274
294
  })
275
295
  } : undefined,
276
296
  baseUrl: apiBaseUrl,
277
- // Lazily access constants.rootPkgJsonPath.
278
- userAgent: sdk.createUserAgentFromPkgJson(require(constants.rootPkgJsonPath))
297
+ userAgent: sdk.createUserAgentFromPkgJson({
298
+ // The '@rollup/plugin-replace' will replace "process.env['INLINED_SOCKET_CLI_NAME']".
299
+ name: "@socketsecurity/cli",
300
+ // The '@rollup/plugin-replace' will replace "process.env['INLINED_SOCKET_CLI_VERSION']".
301
+ version: "0.14.60",
302
+ // The '@rollup/plugin-replace' will replace "process.env['INLINED_SOCKET_CLI_HOMEPAGE']".
303
+ homepage: "https://github.com/SocketDev/socket-cli"
304
+ })
279
305
  });
280
306
  }
281
307
 
@@ -1452,7 +1478,7 @@ function getTranslations() {
1452
1478
 
1453
1479
  const {
1454
1480
  CVE_ALERT_PROPS_FIRST_PATCHED_VERSION_IDENTIFIER,
1455
- NPM: NPM$1
1481
+ NPM: NPM$2
1456
1482
  } = constants;
1457
1483
  const format = new ColorOrMarkdown(false);
1458
1484
  async function addArtifactToAlertsMap(artifact, alertsByPkgId, options) {
@@ -1568,7 +1594,7 @@ function getCveInfoByAlertsMap(alertsMap, options) {
1568
1594
  const purlObj = packageurlJs.PackageURL.fromString(`pkg:npm/${pkgId}`);
1569
1595
  const name = packages.resolvePackageName(purlObj);
1570
1596
  for (const alert of alerts) {
1571
- if (!isArtifactAlertCveFixable(alert.raw) || exclude.upgrade && registry.getManifestData(NPM$1, name)) {
1597
+ if (!isArtifactAlertCveFixable(alert.raw) || exclude.upgrade && registry.getManifestData(NPM$2, name)) {
1572
1598
  continue;
1573
1599
  }
1574
1600
  if (!infoByPkg) {
@@ -1616,7 +1642,7 @@ function logAlertsMap(alertsMap, options) {
1616
1642
  // TODO: emoji seems to mis-align terminals sometimes
1617
1643
  lines.add(` ${title}${maybeAttributes}${maybeDesc}`);
1618
1644
  }
1619
- output.write(`(socket) ${format.hyperlink(pkgId, getSocketDevPackageOverviewUrl(NPM$1, packages.resolvePackageName(purlObj), purlObj.version))} contains risks:\n`);
1645
+ output.write(`(socket) ${format.hyperlink(pkgId, getSocketDevPackageOverviewUrl(NPM$2, packages.resolvePackageName(purlObj), purlObj.version))} contains risks:\n`);
1620
1646
  for (const line of lines) {
1621
1647
  output.write(`${line}\n`);
1622
1648
  }
@@ -1625,7 +1651,7 @@ function logAlertsMap(alertsMap, options) {
1625
1651
 
1626
1652
  const {
1627
1653
  LOOP_SENTINEL,
1628
- NPM,
1654
+ NPM: NPM$1,
1629
1655
  NPM_REGISTRY_URL
1630
1656
  } = constants;
1631
1657
  function getDetailsFromDiff(diff_, options) {
@@ -1717,7 +1743,7 @@ function getUrlOrigin(input) {
1717
1743
  return '';
1718
1744
  }
1719
1745
  function findBestPatchVersion(node, availableVersions, vulnerableVersionRange, _firstPatchedVersionIdentifier) {
1720
- const manifestData = registry.getManifestData(NPM, node.name);
1746
+ const manifestData = registry.getManifestData(NPM$1, node.name);
1721
1747
  let eligibleVersions;
1722
1748
  if (manifestData && manifestData.name === manifestData.package) {
1723
1749
  const major = semver.major(manifestData.version);
@@ -1868,6 +1894,8 @@ function updateNode(node, packument, vulnerableVersionRange, firstPatchedVersion
1868
1894
  }
1869
1895
 
1870
1896
  const {
1897
+ NPM,
1898
+ NPX,
1871
1899
  SOCKET_CLI_SAFE_WRAPPER,
1872
1900
  kInternalsSymbol,
1873
1901
  [kInternalsSymbol]: {
@@ -1920,10 +1948,13 @@ class SafeArborist extends Arborist {
1920
1948
  __proto__: null,
1921
1949
  ...(args.length ? args[0] : undefined)
1922
1950
  };
1923
- const level = options.dryRun ? 0 : await getIPC(SOCKET_CLI_SAFE_WRAPPER);
1924
- if (!level) {
1951
+ const safeWrapperName = options.dryRun ? undefined : await getIPC(SOCKET_CLI_SAFE_WRAPPER);
1952
+ const isSafeNpm = safeWrapperName === NPM;
1953
+ const isSafeNpx = safeWrapperName === NPX;
1954
+ if (!safeWrapperName || isSafeNpx && options['yes']) {
1925
1955
  return await this[kRiskyReify](...args);
1926
1956
  }
1957
+
1927
1958
  // Lazily access constants.spinner.
1928
1959
  const {
1929
1960
  spinner
@@ -1938,7 +1969,8 @@ class SafeArborist extends Arborist {
1938
1969
  const alertsMap = await getAlertsMapFromArborist(this, {
1939
1970
  spinner,
1940
1971
  include: {
1941
- unfixable: level < 2
1972
+ existing: isSafeNpx,
1973
+ unfixable: isSafeNpm
1942
1974
  }
1943
1975
  });
1944
1976
  if (alertsMap.size) {
@@ -2006,5 +2038,5 @@ exports.safeReadFile = safeReadFile;
2006
2038
  exports.setupSdk = setupSdk;
2007
2039
  exports.updateNode = updateNode;
2008
2040
  exports.updateSetting = updateSetting;
2009
- //# debugId=1b6e4e80-401e-49a9-9b56-3f777bfba08f
2041
+ //# debugId=afbd2a97-a4dc-4824-88de-5e8258203e75
2010
2042
  //# sourceMappingURL=shadow-npm-inject.js.map