@pnpm/cli.commands 1000.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/LICENSE +22 -0
- package/lib/completion/complete.d.ts +16 -0
- package/lib/completion/complete.js +70 -0
- package/lib/completion/completionServer.d.ts +12 -0
- package/lib/completion/completionServer.js +36 -0
- package/lib/completion/generateCompletion.d.ts +11 -0
- package/lib/completion/generateCompletion.js +25 -0
- package/lib/completion/getOptionType.d.ts +12 -0
- package/lib/completion/getOptionType.js +46 -0
- package/lib/completion/getShell.d.ts +3 -0
- package/lib/completion/getShell.js +22 -0
- package/lib/completion/optionTypesToCompletions.d.ts +2 -0
- package/lib/completion/optionTypesToCompletions.js +14 -0
- package/lib/doctor/doctor.d.ts +7 -0
- package/lib/doctor/doctor.js +27 -0
- package/lib/doctor/index.d.ts +2 -0
- package/lib/doctor/index.js +3 -0
- package/lib/index.d.ts +3 -0
- package/lib/index.js +4 -0
- package/package.json +62 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
The MIT License (MIT)
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2015-2016 Rico Sta. Cruz and other contributors
|
|
4
|
+
Copyright (c) 2016-2026 Zoltan Kochan and other contributors
|
|
5
|
+
|
|
6
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
7
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
8
|
+
in the Software without restriction, including without limitation the rights
|
|
9
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
10
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
11
|
+
furnished to do so, subject to the following conditions:
|
|
12
|
+
|
|
13
|
+
The above copyright notice and this permission notice shall be included in all
|
|
14
|
+
copies or substantial portions of the Software.
|
|
15
|
+
|
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
17
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
18
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
19
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
20
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
21
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
22
|
+
SOFTWARE.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { CompletionFunc } from '@pnpm/cli.command';
|
|
2
|
+
import type { CompletionItem } from '@pnpm/tabtab';
|
|
3
|
+
export declare function complete(ctx: {
|
|
4
|
+
cliOptionsTypesByCommandName: Record<string, () => Record<string, unknown>>;
|
|
5
|
+
completionByCommandName: Record<string, CompletionFunc>;
|
|
6
|
+
initialCompletion: () => CompletionItem[];
|
|
7
|
+
shorthandsByCommandName: Record<string, Record<string, string | string[]>>;
|
|
8
|
+
universalOptionsTypes: Record<string, unknown>;
|
|
9
|
+
universalShorthands: Record<string, string>;
|
|
10
|
+
}, input: {
|
|
11
|
+
params: string[];
|
|
12
|
+
cmd: string | null;
|
|
13
|
+
currentTypedWordType: 'option' | 'value' | null;
|
|
14
|
+
lastOption: string | null;
|
|
15
|
+
options: Record<string, unknown>;
|
|
16
|
+
}): Promise<CompletionItem[]>;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { findWorkspaceProjects } from '@pnpm/workspace.projects-reader';
|
|
2
|
+
import { findWorkspaceDir } from '@pnpm/workspace.root-finder';
|
|
3
|
+
import { readWorkspaceManifest } from '@pnpm/workspace.workspace-manifest-reader';
|
|
4
|
+
import { getOptionCompletions } from './getOptionType.js';
|
|
5
|
+
import { optionTypesToCompletions } from './optionTypesToCompletions.js';
|
|
6
|
+
export async function complete(ctx, input) {
|
|
7
|
+
if (input.options.version)
|
|
8
|
+
return [];
|
|
9
|
+
const optionTypes = {
|
|
10
|
+
...ctx.universalOptionsTypes,
|
|
11
|
+
...((input.cmd && ctx.cliOptionsTypesByCommandName[input.cmd]?.()) ?? {}),
|
|
12
|
+
};
|
|
13
|
+
// Autocompleting option values
|
|
14
|
+
if (input.currentTypedWordType !== 'option') {
|
|
15
|
+
if (input.lastOption === '--filter') {
|
|
16
|
+
const workspaceDir = await findWorkspaceDir(process.cwd()) ?? process.cwd();
|
|
17
|
+
const workspaceManifest = await readWorkspaceManifest(workspaceDir);
|
|
18
|
+
const allProjects = await findWorkspaceProjects(workspaceDir, {
|
|
19
|
+
patterns: workspaceManifest?.packages,
|
|
20
|
+
supportedArchitectures: {
|
|
21
|
+
os: ['current'],
|
|
22
|
+
cpu: ['current'],
|
|
23
|
+
libc: ['current'],
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
return allProjects
|
|
27
|
+
.map(({ manifest }) => ({ name: manifest.name }))
|
|
28
|
+
.filter((item) => !!item.name);
|
|
29
|
+
}
|
|
30
|
+
else if (input.lastOption) {
|
|
31
|
+
const optionCompletions = getOptionCompletions(optionTypes, // eslint-disable-line
|
|
32
|
+
{
|
|
33
|
+
...ctx.universalShorthands,
|
|
34
|
+
...(input.cmd ? ctx.shorthandsByCommandName[input.cmd] : {}),
|
|
35
|
+
}, input.lastOption);
|
|
36
|
+
if (optionCompletions !== undefined) {
|
|
37
|
+
return optionCompletions.map((name) => ({ name }));
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
let completions = [];
|
|
42
|
+
if (input.currentTypedWordType !== 'option') {
|
|
43
|
+
if (!input.cmd || input.currentTypedWordType === 'value' && !ctx.completionByCommandName[input.cmd]) {
|
|
44
|
+
completions = ctx.initialCompletion();
|
|
45
|
+
}
|
|
46
|
+
else if (ctx.completionByCommandName[input.cmd]) {
|
|
47
|
+
try {
|
|
48
|
+
completions = await ctx.completionByCommandName[input.cmd](input.options, input.params);
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
// Ignore
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
if (input.currentTypedWordType === 'value') {
|
|
56
|
+
return completions;
|
|
57
|
+
}
|
|
58
|
+
if (!input.cmd) {
|
|
59
|
+
return [
|
|
60
|
+
...completions,
|
|
61
|
+
...optionTypesToCompletions(optionTypes),
|
|
62
|
+
{ name: '--version' },
|
|
63
|
+
];
|
|
64
|
+
}
|
|
65
|
+
return [
|
|
66
|
+
...completions,
|
|
67
|
+
...optionTypesToCompletions(optionTypes), // eslint-disable-line
|
|
68
|
+
];
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=complete.js.map
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { CompletionFunc } from '@pnpm/cli.command';
|
|
2
|
+
import type { ParsedCliArgs } from '@pnpm/cli.parse-cli-args';
|
|
3
|
+
import { type CompletionItem } from '@pnpm/tabtab';
|
|
4
|
+
export declare function createCompletionServer(opts: {
|
|
5
|
+
cliOptionsTypesByCommandName: Record<string, () => Record<string, unknown>>;
|
|
6
|
+
completionByCommandName: Record<string, CompletionFunc>;
|
|
7
|
+
initialCompletion: () => CompletionItem[];
|
|
8
|
+
shorthandsByCommandName: Record<string, Record<string, string | string[]>>;
|
|
9
|
+
parseCliArgs: (args: string[]) => Promise<ParsedCliArgs>;
|
|
10
|
+
universalOptionsTypes: Record<string, unknown>;
|
|
11
|
+
universalShorthands: Record<string, string>;
|
|
12
|
+
}): () => Promise<void>;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { getShellFromEnv } from '@pnpm/tabtab';
|
|
2
|
+
import tabtab from '@pnpm/tabtab';
|
|
3
|
+
import { split as splitCmd } from 'split-cmd/index.modern.mjs';
|
|
4
|
+
import { complete } from './complete.js';
|
|
5
|
+
import { currentTypedWordType, getLastOption, } from './getOptionType.js';
|
|
6
|
+
export function createCompletionServer(opts) {
|
|
7
|
+
return async () => {
|
|
8
|
+
const shell = getShellFromEnv(process.env);
|
|
9
|
+
const env = tabtab.parseEnv(process.env);
|
|
10
|
+
if (!env.complete)
|
|
11
|
+
return;
|
|
12
|
+
const inputArgv = splitCmd(stripPartialWord(env)).slice(1);
|
|
13
|
+
// We cannot autocomplete what a user types after "pnpm test --"
|
|
14
|
+
if (inputArgv.includes('--'))
|
|
15
|
+
return;
|
|
16
|
+
const { params, options, cmd } = await opts.parseCliArgs(inputArgv);
|
|
17
|
+
tabtab.log(await complete(opts, {
|
|
18
|
+
cmd,
|
|
19
|
+
currentTypedWordType: currentTypedWordType(env),
|
|
20
|
+
lastOption: getLastOption(env),
|
|
21
|
+
options,
|
|
22
|
+
params,
|
|
23
|
+
}), shell);
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Returns the portion of the command line that consists of fully typed words,
|
|
28
|
+
*/
|
|
29
|
+
function stripPartialWord(env) {
|
|
30
|
+
if (env.lastPartial.length > 0) {
|
|
31
|
+
// stripping any word the user is currently typing.
|
|
32
|
+
return env.partial.slice(0, -env.lastPartial.length);
|
|
33
|
+
}
|
|
34
|
+
return env.partial;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=completionServer.js.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare const commandNames: string[];
|
|
2
|
+
export declare const skipPackageManagerCheck = true;
|
|
3
|
+
export declare const rcOptionsTypes: () => Record<string, unknown>;
|
|
4
|
+
export declare const cliOptionsTypes: () => Record<string, unknown>;
|
|
5
|
+
export declare function help(): string;
|
|
6
|
+
export interface Context {
|
|
7
|
+
readonly log: (output: string) => void;
|
|
8
|
+
}
|
|
9
|
+
export type CompletionGenerator = (_opts: unknown, params: string[]) => Promise<void>;
|
|
10
|
+
export declare function createCompletionGenerator(ctx: Context): CompletionGenerator;
|
|
11
|
+
export declare const handler: CompletionGenerator;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { getCompletionScript, SUPPORTED_SHELLS } from '@pnpm/tabtab';
|
|
2
|
+
import { renderHelp } from 'render-help';
|
|
3
|
+
import { getShellFromParams } from './getShell.js';
|
|
4
|
+
export const commandNames = ['completion'];
|
|
5
|
+
export const skipPackageManagerCheck = true;
|
|
6
|
+
export const rcOptionsTypes = () => ({});
|
|
7
|
+
export const cliOptionsTypes = () => ({});
|
|
8
|
+
export function help() {
|
|
9
|
+
return renderHelp({
|
|
10
|
+
description: 'Print shell completion code to stdout',
|
|
11
|
+
url: 'https://pnpm.io/completion',
|
|
12
|
+
usages: SUPPORTED_SHELLS.map(shell => `pnpm completion ${shell}`),
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
export function createCompletionGenerator(ctx) {
|
|
16
|
+
return async function handler(_opts, params) {
|
|
17
|
+
const shell = getShellFromParams(params);
|
|
18
|
+
const output = await getCompletionScript({ name: 'pnpm', completer: 'pnpm', shell });
|
|
19
|
+
ctx.log(output);
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export const handler = createCompletionGenerator({
|
|
23
|
+
log: console.log,
|
|
24
|
+
});
|
|
25
|
+
//# sourceMappingURL=generateCompletion.js.map
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface CompletionCtx {
|
|
2
|
+
last: string;
|
|
3
|
+
lastPartial: string;
|
|
4
|
+
line: string;
|
|
5
|
+
partial: string;
|
|
6
|
+
point: number;
|
|
7
|
+
prev: string;
|
|
8
|
+
words: number;
|
|
9
|
+
}
|
|
10
|
+
export declare function getOptionCompletions(optionTypes: Record<string, unknown>, shorthands: Record<string, string | string[]>, option: string): string[] | undefined;
|
|
11
|
+
export declare function getLastOption(completionCtx: CompletionCtx): string | null;
|
|
12
|
+
export declare function currentTypedWordType(completionCtx: CompletionCtx): 'option' | 'value' | null;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import nopt from '@pnpm/nopt';
|
|
2
|
+
import { omit } from 'ramda';
|
|
3
|
+
export function getOptionCompletions(optionTypes, shorthands, option) {
|
|
4
|
+
const optionType = getOptionType(optionTypes, shorthands, option);
|
|
5
|
+
return optionTypeToCompletion(optionType);
|
|
6
|
+
}
|
|
7
|
+
function optionTypeToCompletion(optionType) {
|
|
8
|
+
switch (optionType) {
|
|
9
|
+
// In this case the option is complete
|
|
10
|
+
case undefined:
|
|
11
|
+
case Boolean: return undefined;
|
|
12
|
+
// In this case, anything may be the option value
|
|
13
|
+
case String:
|
|
14
|
+
case Number: return [];
|
|
15
|
+
}
|
|
16
|
+
if (!Array.isArray(optionType))
|
|
17
|
+
return [];
|
|
18
|
+
if (optionType.length === 1) {
|
|
19
|
+
return optionTypeToCompletion(optionType);
|
|
20
|
+
}
|
|
21
|
+
return optionType.filter((ot) => typeof ot === 'string');
|
|
22
|
+
}
|
|
23
|
+
function getOptionType(optionTypes, shorthands, option) {
|
|
24
|
+
const allBools = Object.fromEntries(Object.keys(optionTypes).map((optionName) => [optionName, Boolean]));
|
|
25
|
+
const result = omit(['argv'], nopt(allBools, shorthands, [option], 0));
|
|
26
|
+
return optionTypes[Object.entries(result)[0]?.[0]];
|
|
27
|
+
}
|
|
28
|
+
export function getLastOption(completionCtx) {
|
|
29
|
+
if (isOption(completionCtx.prev))
|
|
30
|
+
return completionCtx.prev;
|
|
31
|
+
if (completionCtx.lastPartial === '' || completionCtx.words <= 1)
|
|
32
|
+
return null;
|
|
33
|
+
const words = completionCtx.line.slice(0, completionCtx.point).trim().split(/\s+/);
|
|
34
|
+
const lastWord = words[words.length - 2];
|
|
35
|
+
return isOption(lastWord) ? lastWord : null;
|
|
36
|
+
}
|
|
37
|
+
function isOption(word) {
|
|
38
|
+
return word.startsWith('--') && word.length >= 3 ||
|
|
39
|
+
word[0] === '-' && word.length >= 2;
|
|
40
|
+
}
|
|
41
|
+
export function currentTypedWordType(completionCtx) {
|
|
42
|
+
if (completionCtx.partial.endsWith(' '))
|
|
43
|
+
return null;
|
|
44
|
+
return completionCtx.lastPartial[0] === '-' ? 'option' : 'value';
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=getOptionType.js.map
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { PnpmError } from '@pnpm/error';
|
|
2
|
+
import { isShellSupported, SUPPORTED_SHELLS } from '@pnpm/tabtab';
|
|
3
|
+
export function getShellFromString(shell) {
|
|
4
|
+
shell = shell?.trim();
|
|
5
|
+
if (!shell) {
|
|
6
|
+
throw new PnpmError('MISSING_SHELL_NAME', '`pnpm completion` requires a shell name');
|
|
7
|
+
}
|
|
8
|
+
if (!isShellSupported(shell)) {
|
|
9
|
+
throw new PnpmError('UNSUPPORTED_SHELL', `'${shell}' is not supported`, {
|
|
10
|
+
hint: `Supported shells are: ${SUPPORTED_SHELLS.join(', ')}`,
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
return shell;
|
|
14
|
+
}
|
|
15
|
+
export function getShellFromParams(params) {
|
|
16
|
+
const [shell, ...rest] = params;
|
|
17
|
+
if (rest.length) {
|
|
18
|
+
throw new PnpmError('REDUNDANT_PARAMETERS', `The ${rest.length} parameters after shell is not necessary`);
|
|
19
|
+
}
|
|
20
|
+
return getShellFromString(shell);
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=getShell.js.map
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export function optionTypesToCompletions(optionTypes) {
|
|
2
|
+
const completions = [];
|
|
3
|
+
for (const [name, typeObj] of Object.entries(optionTypes)) {
|
|
4
|
+
if (typeObj === Boolean) {
|
|
5
|
+
completions.push({ name: `--${name}` });
|
|
6
|
+
completions.push({ name: `--no-${name}` });
|
|
7
|
+
}
|
|
8
|
+
else {
|
|
9
|
+
completions.push({ name: `--${name}` });
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
return completions;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=optionTypesToCompletions.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Config } from '@pnpm/config.reader';
|
|
2
|
+
export declare const rcOptionsTypes: typeof cliOptionsTypes;
|
|
3
|
+
export declare function cliOptionsTypes(): Record<string, unknown>;
|
|
4
|
+
export declare const shorthands: {};
|
|
5
|
+
export declare const commandNames: string[];
|
|
6
|
+
export declare function help(): string;
|
|
7
|
+
export declare function handler(opts: Pick<Config, 'failedToLoadBuiltInConfig'>): Promise<void>;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { docsUrl } from '@pnpm/cli.utils';
|
|
2
|
+
import { logger } from '@pnpm/logger';
|
|
3
|
+
import { renderHelp } from 'render-help';
|
|
4
|
+
export const rcOptionsTypes = cliOptionsTypes;
|
|
5
|
+
export function cliOptionsTypes() {
|
|
6
|
+
return {};
|
|
7
|
+
}
|
|
8
|
+
export const shorthands = {};
|
|
9
|
+
export const commandNames = ['doctor'];
|
|
10
|
+
export function help() {
|
|
11
|
+
return renderHelp({
|
|
12
|
+
description: 'Checks for known common issues.',
|
|
13
|
+
url: docsUrl('doctor'),
|
|
14
|
+
usages: ['pnpm doctor [options]'],
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
export async function handler(opts) {
|
|
18
|
+
const { failedToLoadBuiltInConfig } = opts;
|
|
19
|
+
if (failedToLoadBuiltInConfig) {
|
|
20
|
+
// If true, means loading npm builtin config failed. Then there may have a prefix error, related: https://github.com/pnpm/pnpm/issues/5404
|
|
21
|
+
logger.warn({
|
|
22
|
+
message: 'Load npm builtin configs failed. If the prefix builtin config does not work, you can use "pnpm config list" to show builtin configs. And then use "pnpm config --global set <key> <value>" to migrate configs from builtin to global.',
|
|
23
|
+
prefix: process.cwd(),
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=doctor.js.map
|
package/lib/index.d.ts
ADDED
package/lib/index.js
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@pnpm/cli.commands",
|
|
3
|
+
"version": "1000.0.0",
|
|
4
|
+
"description": "Commands for pnpm CLI",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"pnpm",
|
|
7
|
+
"pnpm11"
|
|
8
|
+
],
|
|
9
|
+
"license": "MIT",
|
|
10
|
+
"funding": "https://opencollective.com/pnpm",
|
|
11
|
+
"repository": "https://github.com/pnpm/pnpm/tree/main/cli/commands",
|
|
12
|
+
"homepage": "https://github.com/pnpm/pnpm/tree/main/cli/commands#readme",
|
|
13
|
+
"bugs": {
|
|
14
|
+
"url": "https://github.com/pnpm/pnpm/issues"
|
|
15
|
+
},
|
|
16
|
+
"type": "module",
|
|
17
|
+
"main": "lib/index.js",
|
|
18
|
+
"types": "lib/index.d.ts",
|
|
19
|
+
"exports": {
|
|
20
|
+
".": "./lib/index.js"
|
|
21
|
+
},
|
|
22
|
+
"files": [
|
|
23
|
+
"lib",
|
|
24
|
+
"!*.map"
|
|
25
|
+
],
|
|
26
|
+
"dependencies": {
|
|
27
|
+
"@pnpm/nopt": "^0.3.1",
|
|
28
|
+
"@pnpm/tabtab": "^0.5.4",
|
|
29
|
+
"ramda": "npm:@pnpm/ramda@0.28.1",
|
|
30
|
+
"render-help": "^2.0.0",
|
|
31
|
+
"split-cmd": "^1.1.0",
|
|
32
|
+
"@pnpm/cli.command": "^1000.0.0",
|
|
33
|
+
"@pnpm/cli.utils": "^1001.2.8",
|
|
34
|
+
"@pnpm/error": "^1000.0.5",
|
|
35
|
+
"@pnpm/config.reader": "1004.4.2",
|
|
36
|
+
"@pnpm/cli.parse-cli-args": "^1000.1.4",
|
|
37
|
+
"@pnpm/workspace.root-finder": "^1000.1.3",
|
|
38
|
+
"@pnpm/workspace.projects-reader": "^1000.0.43",
|
|
39
|
+
"@pnpm/workspace.workspace-manifest-reader": "^1000.2.5"
|
|
40
|
+
},
|
|
41
|
+
"peerDependencies": {
|
|
42
|
+
"@pnpm/logger": ">=1001.0.0 <1002.0.0"
|
|
43
|
+
},
|
|
44
|
+
"devDependencies": {
|
|
45
|
+
"@jest/globals": "30.0.5",
|
|
46
|
+
"@types/ramda": "0.29.12",
|
|
47
|
+
"@pnpm/cli.commands": "1000.0.0",
|
|
48
|
+
"@pnpm/logger": "1001.0.1"
|
|
49
|
+
},
|
|
50
|
+
"engines": {
|
|
51
|
+
"node": ">=22.13"
|
|
52
|
+
},
|
|
53
|
+
"jest": {
|
|
54
|
+
"preset": "@pnpm/jest-config"
|
|
55
|
+
},
|
|
56
|
+
"scripts": {
|
|
57
|
+
"lint": "eslint \"src/**/*.ts\" \"test/**/*.ts\"",
|
|
58
|
+
"_test": "cross-env NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules --disable-warning=ExperimentalWarning --disable-warning=DEP0169\" jest",
|
|
59
|
+
"test": "pnpm run compile && pnpm run _test",
|
|
60
|
+
"compile": "tsgo --build && pnpm run lint --fix"
|
|
61
|
+
}
|
|
62
|
+
}
|