@pnpm/exec.commands 1001.0.15 → 1100.0.1

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 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
- authConfig: opts.rawConfig,
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
- const { cacheLink, cacheExists, cachedDir } = findCache({
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
- await symlinkDir(cachedDir, cacheLink, { overwrite: true });
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 (error) {
143
- // EBUSY/EEXIST/EPERM means that there is another dlx process running in parallel that has acquired the cache link first.
144
- // EPERM can happen on Windows when another process has the symlink open while this process tries to unlink it.
145
- // The link created by the other process is just as up-to-date as the link the current process was attempting
146
- // to create. Therefore, instead of re-attempting to create the current link again, it is just as good to let
147
- // the other link stay. The current process should yield.
148
- if (!util.types.isNativeError(error) || !('code' in error) || (error.code !== 'EBUSY' && error.code !== 'EEXIST' && error.code !== 'EPERM')) {
149
- throw error;
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<Config, 'selectedProjectsGraph'>> & {
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' | 'cliOptions' | 'dir' | 'extraBinPaths' | 'extraEnv' | 'lockfileDir' | 'modulesDir' | 'nodeOptions' | 'pnpmHomeDir' | 'rawConfig' | 'recursive' | 'reporterHidePrefix' | 'userAgent' | 'verifyDepsBeforeRun' | 'workspaceDir'> & CheckDepsStatusOptions;
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
- // Mac/Linux
315
- if (process.platform === 'linux' || process.platform === 'darwin') {
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 { value: path } = prependDirsToPath(prependPaths);
321
- return !which.sync(command, {
322
- nothrow: true,
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' | 'cliOptions' | 'verifyDepsBeforeRun' | 'dir' | 'enablePrePostScripts' | 'engineStrict' | 'extraBinPaths' | 'extraEnv' | 'nodeOptions' | 'pnpmHomeDir' | 'reporter' | 'scriptShell' | 'scriptsPrependNodePath' | 'shellEmulator' | 'syncInjectedDepsAfterScripts' | 'userAgent'> & (({
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<Config, 'allProjects' | 'selectedProjectsGraph' | 'workspaceDir'>>) | ({
29
+ } & Partial<Pick<ConfigContext, 'allProjects' | 'selectedProjectsGraph'> & Pick<Config, 'workspaceDir'>>) | ({
30
30
  recursive: true;
31
- } & Required<Pick<Config, 'allProjects' | 'selectedProjectsGraph' | 'workspaceDir'>>)) & {
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
- const specifiedScripts = getSpecifiedScripts(manifest.scripts ?? {}, scriptName);
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
  }
@@ -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' | 'rawConfig' | 'requiredScripts' | 'rootProjectManifest' | 'scriptsPrependNodePath' | 'scriptShell' | 'shellEmulator' | 'stream' | 'syncInjectedDepsAfterScripts' | 'workspaceDir'> & Required<Pick<Config, 'allProjects' | 'selectedProjectsGraph' | 'workspaceDir' | 'dir'>> & Partial<Pick<Config, 'extraBinPaths' | 'extraEnv' | 'bail' | 'reporter' | 'reverse' | 'sort' | 'workspaceConcurrency'>> & {
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;
@@ -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
- rawConfig: opts.rawConfig,
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": "1001.0.15",
3
+ "version": "1100.0.1",
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.1",
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": "^7.0.0",
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/catalogs.resolver": "1000.0.5",
42
- "@pnpm/cli.command": "1000.0.0",
43
- "@pnpm/bins.resolver": "1000.0.11",
44
- "@pnpm/config.version-policy": "1000.0.0",
45
- "@pnpm/cli.utils": "1001.2.8",
46
- "@pnpm/cli.common-cli-options-help": "1000.0.1",
47
- "@pnpm/config.reader": "1004.4.2",
48
- "@pnpm/crypto.hash": "1000.2.1",
49
- "@pnpm/core-loggers": "1001.0.4",
50
- "@pnpm/deps.status": "1003.0.15",
51
- "@pnpm/engine.runtime.commands": "1000.0.0-0",
52
- "@pnpm/error": "1000.0.5",
53
- "@pnpm/exec.lifecycle": "1001.0.25",
54
- "@pnpm/installing.client": "1001.1.4",
55
- "@pnpm/exec.pnpm-cli-runner": "1000.0.1",
56
- "@pnpm/resolving.parse-wanted-dependency": "1001.0.0",
57
- "@pnpm/pkg-manifest.reader": "1000.1.2",
58
- "@pnpm/shell.path": "1000.0.0",
59
- "@pnpm/installing.commands": "1004.6.10",
60
- "@pnpm/store.path": "1000.0.5",
61
- "@pnpm/types": "1000.9.0",
62
- "@pnpm/workspace.injected-deps-syncer": "1000.0.17",
63
- "@pnpm/workspace.projects-sorter": "1000.0.11",
64
- "@pnpm/workspace.project-manifest-reader": "1001.1.4"
41
+ "@pnpm/bins.resolver": "1100.0.1",
42
+ "@pnpm/cli.utils": "1100.0.1",
43
+ "@pnpm/cli.command": "1100.0.0",
44
+ "@pnpm/catalogs.resolver": "1100.0.0",
45
+ "@pnpm/cli.common-cli-options-help": "1100.0.0",
46
+ "@pnpm/config.version-policy": "1100.0.1",
47
+ "@pnpm/config.reader": "1100.0.1",
48
+ "@pnpm/deps.status": "1100.0.1",
49
+ "@pnpm/engine.runtime.commands": "1100.0.1",
50
+ "@pnpm/error": "1100.0.0",
51
+ "@pnpm/core-loggers": "1100.0.1",
52
+ "@pnpm/exec.lifecycle": "1100.0.1",
53
+ "@pnpm/crypto.hash": "1100.0.0",
54
+ "@pnpm/exec.pnpm-cli-runner": "1100.0.0",
55
+ "@pnpm/installing.client": "1100.0.1",
56
+ "@pnpm/installing.commands": "1100.0.1",
57
+ "@pnpm/pkg-manifest.reader": "1100.0.1",
58
+ "@pnpm/resolving.parse-wanted-dependency": "1100.0.0",
59
+ "@pnpm/types": "1101.0.0",
60
+ "@pnpm/workspace.injected-deps-syncer": "1100.0.1",
61
+ "@pnpm/store.path": "1100.0.0",
62
+ "@pnpm/workspace.project-manifest-reader": "1100.0.1",
63
+ "@pnpm/workspace.projects-sorter": "1100.0.1",
64
+ "@pnpm/shell.path": "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.5",
71
- "@pnpm/registry-mock": "5.2.4",
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.29.12",
74
- "@types/which": "^2.0.2",
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": "1001.0.15",
78
- "@pnpm/logger": "1001.0.1",
79
- "@pnpm/prepare": "1000.0.4",
80
- "@pnpm/workspace.projects-filter": "1000.0.43",
81
- "@pnpm/test-ipc-server": "1000.0.0",
82
- "@pnpm/engine.runtime.system-node-version": "1000.0.11"
77
+ "@pnpm/engine.runtime.system-node-version": "1100.0.1",
78
+ "@pnpm/exec.commands": "1100.0.1",
79
+ "@pnpm/logger": "1100.0.0",
80
+ "@pnpm/testing.command-defaults": "1100.0.0",
81
+ "@pnpm/workspace.projects-filter": "1100.0.1",
82
+ "@pnpm/test-ipc-server": "1100.0.0",
83
+ "@pnpm/prepare": "1100.0.1"
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
- "_test": "cross-env NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules --disable-warning=ExperimentalWarning --disable-warning=DEP0169\" jest",
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 && pnpm run lint --fix"
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
  }