@socketsecurity/cli-with-sentry 0.14.59 → 0.14.61
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.
- package/bin/cli.js +5 -5
- package/dist/constants.d.ts +12 -13
- package/dist/constants.js +29 -37
- package/dist/constants.js.map +1 -1
- package/dist/instrument-with-sentry.js +5 -5
- package/dist/instrument-with-sentry.js.map +1 -1
- package/dist/module-sync/cli.js +197 -152
- package/dist/module-sync/cli.js.map +1 -1
- package/dist/module-sync/shadow-bin.d.ts +1 -1
- package/dist/module-sync/shadow-bin.js +16 -11
- package/dist/module-sync/shadow-bin.js.map +1 -1
- package/dist/module-sync/shadow-npm-inject.js +51 -19
- package/dist/module-sync/shadow-npm-inject.js.map +1 -1
- package/dist/module-sync/shadow-npm-paths.js +16 -12
- package/dist/module-sync/shadow-npm-paths.js.map +1 -1
- package/dist/require/cli.js +197 -152
- package/dist/require/cli.js.map +1 -1
- package/dist/require/vendor.js +90 -5
- package/dist/require/vendor.js.map +1 -1
- package/package.json +18 -18
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare function shadowBin(binName: 'npm' | 'npx', args?: string[]
|
|
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)
|
|
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
|
|
67
|
-
...(
|
|
71
|
+
// Lazily access true.
|
|
72
|
+
...(['--require',
|
|
68
73
|
// Lazily access constants.distInstrumentWithSentryPath.
|
|
69
|
-
constants.distInstrumentWithSentryPath]
|
|
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
|
|
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
|
|
78
|
-
|
|
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]:
|
|
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=
|
|
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 {
|
|
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(
|
|
121
|
+
async function safeReadFile(filepath, options) {
|
|
113
122
|
try {
|
|
114
|
-
return await fs.promises.readFile(
|
|
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(
|
|
133
|
+
function safeReadFileSync(filepath, options) {
|
|
119
134
|
try {
|
|
120
|
-
return fs.readFileSync(
|
|
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
|
|
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
|
|
204
|
+
let yml = safeReadFileSync(ymlPath);
|
|
185
205
|
if (yml === undefined) {
|
|
186
206
|
ymlPath = path.join(dir, 'socket.yaml');
|
|
187
|
-
yml = safeReadFileSync(ymlPath
|
|
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
|
-
|
|
278
|
-
|
|
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.61",
|
|
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$
|
|
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$
|
|
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$
|
|
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
|
|
1924
|
-
|
|
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
|
-
|
|
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=
|
|
2041
|
+
//# debugId=c70e3a7b-6bac-4f16-808f-210cbd4abf84
|
|
2010
2042
|
//# sourceMappingURL=shadow-npm-inject.js.map
|