@pnpm/exec.commands 1001.0.15 → 1100.0.0
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/lib/dlx.js +42 -29
- package/lib/exec.d.ts +3 -3
- package/lib/exec.js +12 -11
- package/lib/hiddenScripts.d.ts +6 -0
- package/lib/hiddenScripts.js +28 -0
- package/lib/run.d.ts +4 -4
- package/lib/run.js +8 -2
- package/lib/runRecursive.d.ts +2 -2
- package/lib/runRecursive.js +5 -1
- package/package.json +41 -40
package/lib/dlx.js
CHANGED
|
@@ -17,7 +17,7 @@ import { lexCompare } from '@pnpm/util.lex-comparator';
|
|
|
17
17
|
import { safeExeca as execa } from 'execa';
|
|
18
18
|
import { pick } from 'ramda';
|
|
19
19
|
import { renderHelp } from 'render-help';
|
|
20
|
-
import symlinkDir from 'symlink-dir';
|
|
20
|
+
import { symlinkDir } from 'symlink-dir';
|
|
21
21
|
import { makeEnv } from './makeEnv.js';
|
|
22
22
|
export const skipPackageManagerCheck = true;
|
|
23
23
|
export const commandNames = ['dlx'];
|
|
@@ -73,14 +73,14 @@ export async function handler(opts, [command, ...args]) {
|
|
|
73
73
|
}
|
|
74
74
|
const pkgs = opts.package ?? [command];
|
|
75
75
|
const fullMetadata = ((opts.resolutionMode === 'time-based' ||
|
|
76
|
-
Boolean(opts.minimumReleaseAge) ||
|
|
77
76
|
opts.trustPolicy === 'no-downgrade') && !opts.registrySupportsTimeField);
|
|
78
77
|
const catalogResolver = resolveFromCatalog.bind(null, opts.catalogs ?? {});
|
|
79
78
|
const { resolve } = createResolver({
|
|
80
79
|
...opts,
|
|
81
|
-
|
|
80
|
+
configByUri: opts.configByUri,
|
|
82
81
|
fullMetadata,
|
|
83
82
|
filterMetadata: fullMetadata,
|
|
83
|
+
strictPublishedByCheck: Boolean(opts.minimumReleaseAge) && opts.minimumReleaseAgeStrict === true,
|
|
84
84
|
retry: {
|
|
85
85
|
factor: opts.fetchRetryFactor,
|
|
86
86
|
maxTimeout: opts.fetchRetryMaxtimeout,
|
|
@@ -111,7 +111,7 @@ export async function handler(opts, [command, ...args]) {
|
|
|
111
111
|
});
|
|
112
112
|
return resolved.id;
|
|
113
113
|
}));
|
|
114
|
-
|
|
114
|
+
let { cacheLink, cacheExists, cachedDir } = findCache({
|
|
115
115
|
packages: resolvedPkgs,
|
|
116
116
|
dlxCacheMaxAge: opts.dlxCacheMaxAge,
|
|
117
117
|
cacheDir: opts.cacheDir,
|
|
@@ -120,34 +120,47 @@ export async function handler(opts, [command, ...args]) {
|
|
|
120
120
|
supportedArchitectures: opts.supportedArchitectures,
|
|
121
121
|
});
|
|
122
122
|
if (!cacheExists) {
|
|
123
|
-
fs.mkdirSync(cachedDir, { recursive: true });
|
|
124
|
-
await add.handler({
|
|
125
|
-
...opts,
|
|
126
|
-
enableGlobalVirtualStore: opts.enableGlobalVirtualStore ?? true,
|
|
127
|
-
bin: path.join(cachedDir, 'node_modules/.bin'),
|
|
128
|
-
dir: cachedDir,
|
|
129
|
-
lockfileDir: cachedDir,
|
|
130
|
-
allowBuilds: Object.fromEntries([...resolvedPkgAliases, ...(opts.allowBuild ?? [])].map(pkg => [pkg, true])),
|
|
131
|
-
rootProjectManifestDir: cachedDir,
|
|
132
|
-
saveProd: true, // dlx will be looking for the package in the "dependencies" field!
|
|
133
|
-
saveDev: false,
|
|
134
|
-
saveOptional: false,
|
|
135
|
-
savePeer: false,
|
|
136
|
-
symlink: true,
|
|
137
|
-
workspaceDir: undefined,
|
|
138
|
-
}, resolvedPkgs);
|
|
139
123
|
try {
|
|
140
|
-
|
|
124
|
+
fs.mkdirSync(cachedDir, { recursive: true });
|
|
125
|
+
await add.handler({
|
|
126
|
+
...opts,
|
|
127
|
+
enableGlobalVirtualStore: opts.enableGlobalVirtualStore ?? true,
|
|
128
|
+
bin: path.join(cachedDir, 'node_modules/.bin'),
|
|
129
|
+
dir: cachedDir,
|
|
130
|
+
lockfileDir: cachedDir,
|
|
131
|
+
allowBuilds: Object.fromEntries([...resolvedPkgAliases, ...(opts.allowBuild ?? [])].map(pkg => [pkg, true])),
|
|
132
|
+
rootProjectManifestDir: cachedDir,
|
|
133
|
+
saveProd: true, // dlx will be looking for the package in the "dependencies" field!
|
|
134
|
+
saveDev: false,
|
|
135
|
+
saveOptional: false,
|
|
136
|
+
savePeer: false,
|
|
137
|
+
symlink: true,
|
|
138
|
+
workspaceDir: undefined,
|
|
139
|
+
}, resolvedPkgs);
|
|
140
|
+
try {
|
|
141
|
+
await symlinkDir(cachedDir, cacheLink, { overwrite: true });
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
// EBUSY/EEXIST/EPERM means that there is another dlx process running in parallel that has acquired the cache link first.
|
|
145
|
+
// EPERM can happen on Windows when another process has the symlink open while this process tries to unlink it.
|
|
146
|
+
// The link created by the other process is just as up-to-date as the link the current process was attempting
|
|
147
|
+
// to create. Therefore, instead of re-attempting to create the current link again, it is just as good to let
|
|
148
|
+
// the other link stay. The current process should yield.
|
|
149
|
+
if (!util.types.isNativeError(error) || !('code' in error) || (error.code !== 'EBUSY' && error.code !== 'EEXIST' && error.code !== 'EPERM')) {
|
|
150
|
+
throw error;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
141
153
|
}
|
|
142
|
-
catch (
|
|
143
|
-
//
|
|
144
|
-
//
|
|
145
|
-
//
|
|
146
|
-
//
|
|
147
|
-
|
|
148
|
-
if (
|
|
149
|
-
throw
|
|
154
|
+
catch (err) {
|
|
155
|
+
// When parallel dlx processes install the same package, the shared global
|
|
156
|
+
// virtual store can cause spurious failures (e.g. ENOENT from concurrent
|
|
157
|
+
// directory swaps). If another process completed the cache in the meantime,
|
|
158
|
+
// use that instead of failing.
|
|
159
|
+
const completedDir = getValidCacheDir(cacheLink, opts.dlxCacheMaxAge);
|
|
160
|
+
if (completedDir == null) {
|
|
161
|
+
throw err;
|
|
150
162
|
}
|
|
163
|
+
cachedDir = completedDir;
|
|
151
164
|
}
|
|
152
165
|
}
|
|
153
166
|
const binsDir = path.join(cachedDir, 'node_modules/.bin');
|
package/lib/exec.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type RecursiveSummary } from '@pnpm/cli.utils';
|
|
2
|
-
import { type Config } from '@pnpm/config.reader';
|
|
2
|
+
import { type Config, type ConfigContext } from '@pnpm/config.reader';
|
|
3
3
|
import type { CheckDepsStatusOptions } from '@pnpm/deps.status';
|
|
4
4
|
import type { ProjectRootDir, ProjectsGraph } from '@pnpm/types';
|
|
5
5
|
export declare const shorthands: Record<string, string | string[]>;
|
|
@@ -18,7 +18,7 @@ export declare function writeRecursiveSummary(opts: {
|
|
|
18
18
|
}): Promise<void>;
|
|
19
19
|
export declare function createEmptyRecursiveSummary(chunks: string[][]): RecursiveSummary;
|
|
20
20
|
export declare function getExecutionDuration(start: [number, number]): number;
|
|
21
|
-
export type ExecOpts = Required<Pick<
|
|
21
|
+
export type ExecOpts = Required<Pick<ConfigContext, 'selectedProjectsGraph'>> & {
|
|
22
22
|
bail?: boolean;
|
|
23
23
|
unsafePerm?: boolean;
|
|
24
24
|
reverse?: boolean;
|
|
@@ -28,7 +28,7 @@ export type ExecOpts = Required<Pick<Config, 'selectedProjectsGraph'>> & {
|
|
|
28
28
|
resumeFrom?: string;
|
|
29
29
|
reportSummary?: boolean;
|
|
30
30
|
implicitlyFellbackFromRun?: boolean;
|
|
31
|
-
} & Pick<Config, 'bin' | '
|
|
31
|
+
} & Pick<Config, 'bin' | 'dir' | 'extraBinPaths' | 'extraEnv' | 'lockfileDir' | 'modulesDir' | 'nodeOptions' | 'pnpmHomeDir' | 'recursive' | 'reporterHidePrefix' | 'userAgent' | 'verifyDepsBeforeRun' | 'workspaceDir'> & Pick<ConfigContext, 'cliOptions'> & CheckDepsStatusOptions;
|
|
32
32
|
export declare function handler(opts: ExecOpts, params: string[]): Promise<{
|
|
33
33
|
exitCode: number;
|
|
34
34
|
}>;
|
package/lib/exec.js
CHANGED
|
@@ -231,7 +231,7 @@ export async function handler(opts, params) {
|
|
|
231
231
|
result[prefix].duration = getExecutionDuration(startTime);
|
|
232
232
|
}
|
|
233
233
|
catch (err) { // eslint-disable-line
|
|
234
|
-
if (isErrorCommandNotFound(params[0], err, prependPaths)) {
|
|
234
|
+
if (isErrorCommandNotFound(params[0], err, prefix, prependPaths)) {
|
|
235
235
|
err.message = `Command "${params[0]}" not found`;
|
|
236
236
|
err.hint = await createExecCommandNotFoundHint(params[0], {
|
|
237
237
|
implicitlyFellbackFromRun: opts.implicitlyFellbackFromRun ?? false,
|
|
@@ -310,18 +310,19 @@ async function createExecCommandNotFoundHint(programName, opts) {
|
|
|
310
310
|
}
|
|
311
311
|
return undefined;
|
|
312
312
|
}
|
|
313
|
-
function isErrorCommandNotFound(command, error, prependPaths) {
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
return error.originalMessage === `spawn ${command} ENOENT`;
|
|
313
|
+
function isErrorCommandNotFound(command, error, prefix, prependPaths) {
|
|
314
|
+
if (error.originalMessage === `spawn ${command} ENOENT`) {
|
|
315
|
+
return true;
|
|
317
316
|
}
|
|
318
|
-
// Windows
|
|
317
|
+
// On Windows, execa 9.x uses cross-spawn only for command parsing (not spawning),
|
|
318
|
+
// so cross-spawn's ENOENT hook never fires. Non-existent commands get wrapped as
|
|
319
|
+
// `cmd.exe /c <command>` which exits with code 1 instead of emitting ENOENT.
|
|
320
|
+
// Fall back to checking if the command exists in PATH, resolving relative paths
|
|
321
|
+
// against the exec prefix to correctly handle --filter contexts.
|
|
319
322
|
if (process.platform === 'win32') {
|
|
320
|
-
const
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
path,
|
|
324
|
-
});
|
|
323
|
+
const absolutePrependPaths = prependPaths.map(p => path.resolve(prefix, p));
|
|
324
|
+
const { value: searchPath } = prependDirsToPath(absolutePrependPaths);
|
|
325
|
+
return !which.sync(command, { nothrow: true, path: searchPath });
|
|
325
326
|
}
|
|
326
327
|
return false;
|
|
327
328
|
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filters out hidden scripts (starting with '.') when called outside a lifecycle.
|
|
3
|
+
* Throws if the user explicitly requested a hidden script by exact name,
|
|
4
|
+
* or if all matched scripts are hidden.
|
|
5
|
+
*/
|
|
6
|
+
export declare function throwOrFilterHiddenScripts(specifiedScripts: string[], scriptName: string): string[];
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { PnpmError } from '@pnpm/error';
|
|
2
|
+
/**
|
|
3
|
+
* Filters out hidden scripts (starting with '.') when called outside a lifecycle.
|
|
4
|
+
* Throws if the user explicitly requested a hidden script by exact name,
|
|
5
|
+
* or if all matched scripts are hidden.
|
|
6
|
+
*/
|
|
7
|
+
export function throwOrFilterHiddenScripts(specifiedScripts, scriptName) {
|
|
8
|
+
if (specifiedScripts.length === 0)
|
|
9
|
+
return specifiedScripts;
|
|
10
|
+
const hidden = specifiedScripts.filter((s) => s.startsWith('.'));
|
|
11
|
+
if (hidden.length === 0)
|
|
12
|
+
return specifiedScripts;
|
|
13
|
+
// Exact name request for a hidden script
|
|
14
|
+
if (scriptName.startsWith('.')) {
|
|
15
|
+
throw new PnpmError('HIDDEN_SCRIPT', `Script "${scriptName}" is hidden and cannot be run directly`, {
|
|
16
|
+
hint: 'Scripts starting with "." are hidden and can only be called from other scripts.',
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
// Regex/glob matched both visible and hidden — filter out hidden
|
|
20
|
+
const visible = specifiedScripts.filter((s) => !s.startsWith('.'));
|
|
21
|
+
if (visible.length > 0)
|
|
22
|
+
return visible;
|
|
23
|
+
// Only hidden scripts matched
|
|
24
|
+
throw new PnpmError('HIDDEN_SCRIPT', `All matched scripts are hidden and cannot be run directly: ${hidden.join(', ')}`, {
|
|
25
|
+
hint: 'Scripts starting with "." are hidden and can only be called from other scripts.',
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=hiddenScripts.js.map
|
package/lib/run.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { CompletionFunc } from '@pnpm/cli.command';
|
|
2
|
-
import { type Config } from '@pnpm/config.reader';
|
|
2
|
+
import { type Config, type ConfigContext } from '@pnpm/config.reader';
|
|
3
3
|
import type { CheckDepsStatusOptions } from '@pnpm/deps.status';
|
|
4
4
|
import { type RunLifecycleHookOptions } from '@pnpm/exec.lifecycle';
|
|
5
5
|
import type { ProjectManifest } from '@pnpm/types';
|
|
@@ -24,11 +24,11 @@ export declare const commandNames: string[];
|
|
|
24
24
|
export declare function help(): string;
|
|
25
25
|
export type RunOpts = Omit<RecursiveRunOpts, 'allProjects' | 'selectedProjectsGraph' | 'workspaceDir'> & {
|
|
26
26
|
recursive?: boolean;
|
|
27
|
-
} & Pick<Config, 'bin' | '
|
|
27
|
+
} & Pick<Config, 'bin' | 'verifyDepsBeforeRun' | 'dir' | 'enablePrePostScripts' | 'engineStrict' | 'extraBinPaths' | 'extraEnv' | 'nodeOptions' | 'pnpmHomeDir' | 'reporter' | 'scriptShell' | 'scriptsPrependNodePath' | 'shellEmulator' | 'syncInjectedDepsAfterScripts' | 'userAgent'> & Pick<ConfigContext, 'cliOptions'> & (({
|
|
28
28
|
recursive?: false;
|
|
29
|
-
} & Partial<Pick<
|
|
29
|
+
} & Partial<Pick<ConfigContext, 'allProjects' | 'selectedProjectsGraph'> & Pick<Config, 'workspaceDir'>>) | ({
|
|
30
30
|
recursive: true;
|
|
31
|
-
} & Required<Pick<
|
|
31
|
+
} & Required<Pick<ConfigContext, 'allProjects' | 'selectedProjectsGraph'> & Pick<Config, 'workspaceDir'>>)) & {
|
|
32
32
|
argv?: {
|
|
33
33
|
original: string[];
|
|
34
34
|
};
|
package/lib/run.js
CHANGED
|
@@ -12,6 +12,7 @@ import { renderHelp } from 'render-help';
|
|
|
12
12
|
import { buildCommandNotFoundHint } from './buildCommandNotFoundHint.js';
|
|
13
13
|
import { handler as exec } from './exec.js';
|
|
14
14
|
import { existsInDir } from './existsInDir.js';
|
|
15
|
+
import { throwOrFilterHiddenScripts } from './hiddenScripts.js';
|
|
15
16
|
import { runDepsStatusCheck } from './runDepsStatusCheck.js';
|
|
16
17
|
import { getSpecifiedScripts as getSpecifiedScriptWithoutStartCommand, runRecursive } from './runRecursive.js';
|
|
17
18
|
export const IF_PRESENT_OPTION = {
|
|
@@ -152,7 +153,10 @@ export async function handler(opts, params) {
|
|
|
152
153
|
: undefined;
|
|
153
154
|
return printProjectCommands(manifest, rootManifest ?? undefined);
|
|
154
155
|
}
|
|
155
|
-
|
|
156
|
+
let specifiedScripts = getSpecifiedScripts(manifest.scripts ?? {}, scriptName);
|
|
157
|
+
if (!process.env.npm_lifecycle_event) {
|
|
158
|
+
specifiedScripts = throwOrFilterHiddenScripts(specifiedScripts, scriptName);
|
|
159
|
+
}
|
|
156
160
|
if (specifiedScripts.length < 1) {
|
|
157
161
|
if (opts.ifPresent)
|
|
158
162
|
return;
|
|
@@ -196,7 +200,6 @@ so you may run "pnpm -w run ${scriptName}"`,
|
|
|
196
200
|
extraBinPaths: opts.extraBinPaths,
|
|
197
201
|
extraEnv: opts.extraEnv,
|
|
198
202
|
pkgRoot: dir,
|
|
199
|
-
rawConfig: opts.rawConfig,
|
|
200
203
|
rootModulesDir: await realpathMissing(path.join(dir, 'node_modules')),
|
|
201
204
|
scriptsPrependNodePath: opts.scriptsPrependNodePath,
|
|
202
205
|
scriptShell: opts.scriptShell,
|
|
@@ -204,6 +207,7 @@ so you may run "pnpm -w run ${scriptName}"`,
|
|
|
204
207
|
shellEmulator: opts.shellEmulator,
|
|
205
208
|
stdio: (specifiedScripts.length > 1 && concurrency > 1) ? 'pipe' : 'inherit',
|
|
206
209
|
unsafePerm: true, // when running scripts explicitly, assume that they're trusted.
|
|
210
|
+
userAgent: opts.userAgent,
|
|
207
211
|
};
|
|
208
212
|
const existsPnp = existsInDir.bind(null, '.pnp.cjs');
|
|
209
213
|
const pnpPath = (opts.workspaceDir && existsPnp(opts.workspaceDir)) ?? existsPnp(dir);
|
|
@@ -267,6 +271,8 @@ function printProjectCommands(manifest, rootManifest) {
|
|
|
267
271
|
const lifecycleScripts = [];
|
|
268
272
|
const otherScripts = [];
|
|
269
273
|
for (const [scriptName, script] of Object.entries(manifest.scripts ?? {})) {
|
|
274
|
+
if (scriptName.startsWith('.'))
|
|
275
|
+
continue;
|
|
270
276
|
if (ALL_LIFECYCLE_SCRIPTS.has(scriptName)) {
|
|
271
277
|
lifecycleScripts.push([scriptName, script]);
|
|
272
278
|
}
|
package/lib/runRecursive.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { type Config } from '@pnpm/config.reader';
|
|
1
|
+
import { type Config, type ConfigContext } from '@pnpm/config.reader';
|
|
2
2
|
import type { PackageScripts } from '@pnpm/types';
|
|
3
|
-
export type RecursiveRunOpts = Pick<Config, 'bin' | 'enablePrePostScripts' | 'unsafePerm' | 'pnpmHomeDir' | '
|
|
3
|
+
export type RecursiveRunOpts = Pick<Config, 'bin' | 'enablePrePostScripts' | 'unsafePerm' | 'pnpmHomeDir' | 'requiredScripts' | 'userAgent' | 'scriptsPrependNodePath' | 'scriptShell' | 'shellEmulator' | 'stream' | 'syncInjectedDepsAfterScripts' | 'workspaceDir'> & Pick<ConfigContext, 'rootProjectManifest'> & Required<Pick<ConfigContext, 'allProjects' | 'selectedProjectsGraph'> & Pick<Config, 'workspaceDir' | 'dir'>> & Partial<Pick<Config, 'extraBinPaths' | 'extraEnv' | 'bail' | 'reporter' | 'reverse' | 'sort' | 'workspaceConcurrency'>> & {
|
|
4
4
|
ifPresent?: boolean;
|
|
5
5
|
resumeFrom?: string;
|
|
6
6
|
reportSummary?: boolean;
|
package/lib/runRecursive.js
CHANGED
|
@@ -11,6 +11,7 @@ import pLimit from 'p-limit';
|
|
|
11
11
|
import { realpathMissing } from 'realpath-missing';
|
|
12
12
|
import { createEmptyRecursiveSummary, getExecutionDuration, getResumedPackageChunks, writeRecursiveSummary } from './exec.js';
|
|
13
13
|
import { existsInDir } from './existsInDir.js';
|
|
14
|
+
import { throwOrFilterHiddenScripts } from './hiddenScripts.js';
|
|
14
15
|
import { tryBuildRegExpFromCommand } from './regexpCommand.js';
|
|
15
16
|
import { runScript } from './run.js';
|
|
16
17
|
export async function runRecursive(params, opts) {
|
|
@@ -67,6 +68,9 @@ export async function runRecursive(params, opts) {
|
|
|
67
68
|
process.env.PNPM_SCRIPT_SRC_DIR === prefix) {
|
|
68
69
|
return;
|
|
69
70
|
}
|
|
71
|
+
if (!process.env.npm_lifecycle_event) {
|
|
72
|
+
throwOrFilterHiddenScripts([scriptName], scriptName);
|
|
73
|
+
}
|
|
70
74
|
result[prefix].status = 'running';
|
|
71
75
|
const startTime = process.hrtime();
|
|
72
76
|
hasCommand++;
|
|
@@ -76,7 +80,7 @@ export async function runRecursive(params, opts) {
|
|
|
76
80
|
extraBinPaths: opts.extraBinPaths,
|
|
77
81
|
extraEnv: opts.extraEnv,
|
|
78
82
|
pkgRoot: prefix,
|
|
79
|
-
|
|
83
|
+
userAgent: opts.userAgent,
|
|
80
84
|
rootModulesDir: await realpathMissing(path.join(prefix, 'node_modules')),
|
|
81
85
|
scriptsPrependNodePath: opts.scriptsPrependNodePath,
|
|
82
86
|
scriptShell: opts.scriptShell,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pnpm/exec.commands",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "1100.0.0",
|
|
4
4
|
"description": "Commands for running scripts",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"pnpm",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"!*.map"
|
|
26
26
|
],
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@pnpm/log.group": "3.0.
|
|
28
|
+
"@pnpm/log.group": "3.0.2",
|
|
29
29
|
"@pnpm/util.lex-comparator": "^3.0.2",
|
|
30
30
|
"@zkochan/rimraf": "^4.0.0",
|
|
31
31
|
"didyoumean2": "^7.0.4",
|
|
@@ -35,51 +35,52 @@
|
|
|
35
35
|
"ramda": "npm:@pnpm/ramda@0.28.1",
|
|
36
36
|
"realpath-missing": "^2.0.0",
|
|
37
37
|
"render-help": "^2.0.0",
|
|
38
|
-
"symlink-dir": "^
|
|
38
|
+
"symlink-dir": "^10.0.1",
|
|
39
39
|
"which": "npm:@pnpm/which@^3.0.1",
|
|
40
40
|
"write-json-file": "^7.0.0",
|
|
41
|
-
"@pnpm/
|
|
42
|
-
"@pnpm/
|
|
43
|
-
"@pnpm/
|
|
44
|
-
"@pnpm/
|
|
45
|
-
"@pnpm/cli.
|
|
46
|
-
"@pnpm/
|
|
47
|
-
"@pnpm/config.
|
|
48
|
-
"@pnpm/crypto.hash": "
|
|
49
|
-
"@pnpm/
|
|
50
|
-
"@pnpm/
|
|
51
|
-
"@pnpm/
|
|
52
|
-
"@pnpm/error": "
|
|
53
|
-
"@pnpm/exec.lifecycle": "
|
|
54
|
-
"@pnpm/installing.client": "
|
|
55
|
-
"@pnpm/exec.pnpm-cli-runner": "
|
|
56
|
-
"@pnpm/
|
|
57
|
-
"@pnpm/
|
|
58
|
-
"@pnpm/
|
|
59
|
-
"@pnpm/
|
|
60
|
-
"@pnpm/
|
|
61
|
-
"@pnpm/types": "
|
|
62
|
-
"@pnpm/workspace.injected-deps-syncer": "
|
|
63
|
-
"@pnpm/workspace.
|
|
64
|
-
"@pnpm/workspace.
|
|
41
|
+
"@pnpm/bins.resolver": "1100.0.0",
|
|
42
|
+
"@pnpm/catalogs.resolver": "1100.0.0",
|
|
43
|
+
"@pnpm/cli.command": "1100.0.0",
|
|
44
|
+
"@pnpm/cli.utils": "1100.0.0",
|
|
45
|
+
"@pnpm/cli.common-cli-options-help": "1100.0.0",
|
|
46
|
+
"@pnpm/config.reader": "1100.0.0",
|
|
47
|
+
"@pnpm/config.version-policy": "1100.0.0",
|
|
48
|
+
"@pnpm/crypto.hash": "1100.0.0",
|
|
49
|
+
"@pnpm/engine.runtime.commands": "1100.0.0",
|
|
50
|
+
"@pnpm/core-loggers": "1100.0.0",
|
|
51
|
+
"@pnpm/deps.status": "1100.0.0",
|
|
52
|
+
"@pnpm/error": "1100.0.0",
|
|
53
|
+
"@pnpm/exec.lifecycle": "1100.0.0",
|
|
54
|
+
"@pnpm/installing.client": "1100.0.0",
|
|
55
|
+
"@pnpm/exec.pnpm-cli-runner": "1100.0.0",
|
|
56
|
+
"@pnpm/pkg-manifest.reader": "1100.0.0",
|
|
57
|
+
"@pnpm/store.path": "1100.0.0",
|
|
58
|
+
"@pnpm/installing.commands": "1100.0.0",
|
|
59
|
+
"@pnpm/shell.path": "1100.0.0",
|
|
60
|
+
"@pnpm/resolving.parse-wanted-dependency": "1100.0.0",
|
|
61
|
+
"@pnpm/types": "1100.0.0",
|
|
62
|
+
"@pnpm/workspace.injected-deps-syncer": "1100.0.0",
|
|
63
|
+
"@pnpm/workspace.project-manifest-reader": "1100.0.0",
|
|
64
|
+
"@pnpm/workspace.projects-sorter": "1100.0.0"
|
|
65
65
|
},
|
|
66
66
|
"peerDependencies": {
|
|
67
67
|
"@pnpm/logger": ">=1001.0.0 <1002.0.0"
|
|
68
68
|
},
|
|
69
69
|
"devDependencies": {
|
|
70
|
-
"@jest/globals": "30.0
|
|
71
|
-
"@pnpm/registry-mock": "
|
|
70
|
+
"@jest/globals": "30.3.0",
|
|
71
|
+
"@pnpm/registry-mock": "6.0.0",
|
|
72
72
|
"@types/is-windows": "^1.0.2",
|
|
73
|
-
"@types/ramda": "0.
|
|
74
|
-
"@types/which": "^
|
|
73
|
+
"@types/ramda": "0.31.1",
|
|
74
|
+
"@types/which": "^3.0.4",
|
|
75
75
|
"is-windows": "^1.0.2",
|
|
76
76
|
"write-yaml-file": "^6.0.0",
|
|
77
|
-
"@pnpm/exec.commands": "
|
|
78
|
-
"@pnpm/logger": "
|
|
79
|
-
"@pnpm/
|
|
80
|
-
"@pnpm/
|
|
81
|
-
"@pnpm/test-ipc-server": "
|
|
82
|
-
"@pnpm/
|
|
77
|
+
"@pnpm/exec.commands": "1100.0.0",
|
|
78
|
+
"@pnpm/logger": "1100.0.0",
|
|
79
|
+
"@pnpm/engine.runtime.system-node-version": "1100.0.0",
|
|
80
|
+
"@pnpm/prepare": "1100.0.0",
|
|
81
|
+
"@pnpm/test-ipc-server": "1100.0.0",
|
|
82
|
+
"@pnpm/testing.command-defaults": "1100.0.0",
|
|
83
|
+
"@pnpm/workspace.projects-filter": "1100.0.0"
|
|
83
84
|
},
|
|
84
85
|
"engines": {
|
|
85
86
|
"node": ">=22.13"
|
|
@@ -89,9 +90,9 @@
|
|
|
89
90
|
},
|
|
90
91
|
"scripts": {
|
|
91
92
|
"lint": "eslint \"src/**/*.ts\" \"test/**/*.ts\"",
|
|
92
|
-
"
|
|
93
|
-
"test": "pnpm run compile && pnpm run _test",
|
|
93
|
+
"test": "pn compile && pn --filter=pnpm compile && pn .test",
|
|
94
94
|
"start": "tsgo --watch",
|
|
95
|
-
"compile": "tsgo --build &&
|
|
95
|
+
"compile": "tsgo --build && pn lint --fix",
|
|
96
|
+
".test": "cross-env NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules --disable-warning=ExperimentalWarning --disable-warning=DEP0169\" jest"
|
|
96
97
|
}
|
|
97
98
|
}
|