@pnpm/plugin-commands-setup 1.1.36 → 1.1.39
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/BadHomeDirError.d.ts +7 -0
- package/lib/BadHomeDirError.js +16 -0
- package/lib/BadHomeDirError.js.map +1 -0
- package/lib/setup.d.ts +4 -1
- package/lib/setup.js +70 -21
- package/lib/setup.js.map +1 -1
- package/lib/setupOnWindows.d.ts +3 -1
- package/lib/setupOnWindows.js +71 -43
- package/lib/setupOnWindows.js.map +1 -1
- package/package.json +8 -5
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.BadHomeDirError = void 0;
|
|
7
|
+
const error_1 = __importDefault(require("@pnpm/error"));
|
|
8
|
+
class BadHomeDirError extends error_1.default {
|
|
9
|
+
constructor({ wantedDir, currentDir }) {
|
|
10
|
+
super('DIFFERENT_HOME_DIR_IS_SET', `Currently 'PNPM_HOME' is set to '${currentDir}'`, {
|
|
11
|
+
hint: 'If you want to override the existing PNPM_HOME env variable, use the --force option',
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.BadHomeDirError = BadHomeDirError;
|
|
16
|
+
//# sourceMappingURL=BadHomeDirError.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BadHomeDirError.js","sourceRoot":"","sources":["../src/BadHomeDirError.ts"],"names":[],"mappings":";;;;;;AAAA,wDAAmC;AAEnC,MAAa,eAAgB,SAAQ,eAAS;IAC5C,YAAa,EAAE,SAAS,EAAE,UAAU,EAA6C;QAC/E,KAAK,CAAC,2BAA2B,EAAE,oCAAoC,UAAU,GAAG,EAAE;YACpF,IAAI,EAAE,qFAAqF;SAC5F,CAAC,CAAA;IACJ,CAAC;CACF;AAND,0CAMC"}
|
package/lib/setup.d.ts
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
export declare const rcOptionsTypes: () => {};
|
|
2
|
-
export declare const cliOptionsTypes: () => {
|
|
2
|
+
export declare const cliOptionsTypes: () => {
|
|
3
|
+
force: BooleanConstructor;
|
|
4
|
+
};
|
|
3
5
|
export declare const shorthands: {};
|
|
4
6
|
export declare const commandNames: string[];
|
|
5
7
|
export declare function help(): string;
|
|
6
8
|
export declare function handler(opts: {
|
|
9
|
+
force?: boolean;
|
|
7
10
|
pnpmHomeDir: string;
|
|
8
11
|
}): Promise<string>;
|
package/lib/setup.js
CHANGED
|
@@ -11,16 +11,30 @@ const cli_utils_1 = require("@pnpm/cli-utils");
|
|
|
11
11
|
const logger_1 = __importDefault(require("@pnpm/logger"));
|
|
12
12
|
const render_help_1 = __importDefault(require("render-help"));
|
|
13
13
|
const setupOnWindows_1 = require("./setupOnWindows");
|
|
14
|
+
const BadHomeDirError_1 = require("./BadHomeDirError");
|
|
14
15
|
const rcOptionsTypes = () => ({});
|
|
15
16
|
exports.rcOptionsTypes = rcOptionsTypes;
|
|
16
|
-
const cliOptionsTypes = () => ({
|
|
17
|
+
const cliOptionsTypes = () => ({
|
|
18
|
+
force: Boolean,
|
|
19
|
+
});
|
|
17
20
|
exports.cliOptionsTypes = cliOptionsTypes;
|
|
18
21
|
exports.shorthands = {};
|
|
19
22
|
exports.commandNames = ['setup'];
|
|
20
23
|
function help() {
|
|
21
24
|
return (0, render_help_1.default)({
|
|
22
25
|
description: 'Sets up pnpm',
|
|
23
|
-
descriptionLists: [
|
|
26
|
+
descriptionLists: [
|
|
27
|
+
{
|
|
28
|
+
title: 'Options',
|
|
29
|
+
list: [
|
|
30
|
+
{
|
|
31
|
+
description: 'Override the PNPM_HOME env variable in case it already exists',
|
|
32
|
+
name: '--force',
|
|
33
|
+
shortAlias: '-f',
|
|
34
|
+
},
|
|
35
|
+
],
|
|
36
|
+
},
|
|
37
|
+
],
|
|
24
38
|
url: (0, cli_utils_1.docsUrl)('setup'),
|
|
25
39
|
usages: ['pnpm setup'],
|
|
26
40
|
});
|
|
@@ -47,65 +61,100 @@ function copyCli(currentLocation, targetDir) {
|
|
|
47
61
|
fs_1.default.copyFileSync(currentLocation, newExecPath);
|
|
48
62
|
}
|
|
49
63
|
async function handler(opts) {
|
|
50
|
-
|
|
64
|
+
var _a;
|
|
65
|
+
const currentShell = detectCurrentShell();
|
|
51
66
|
const execPath = getExecPath();
|
|
52
67
|
if (execPath.match(/\.[cm]?js$/) == null) {
|
|
53
68
|
copyCli(execPath, opts.pnpmHomeDir);
|
|
54
69
|
}
|
|
55
|
-
const updateOutput = await updateShell(currentShell, opts.pnpmHomeDir);
|
|
70
|
+
const updateOutput = await updateShell(currentShell, opts.pnpmHomeDir, { force: (_a = opts.force) !== null && _a !== void 0 ? _a : false });
|
|
56
71
|
return `${updateOutput}
|
|
57
72
|
|
|
58
73
|
Setup complete. Open a new terminal to start using pnpm.`;
|
|
59
74
|
}
|
|
60
75
|
exports.handler = handler;
|
|
61
|
-
|
|
76
|
+
function detectCurrentShell() {
|
|
77
|
+
if (process.env.ZSH_VERSION)
|
|
78
|
+
return 'zsh';
|
|
79
|
+
if (process.env.BASH_VERSION)
|
|
80
|
+
return 'bash';
|
|
81
|
+
if (process.env.FISH_VERSION)
|
|
82
|
+
return 'fish';
|
|
83
|
+
return typeof process.env.SHELL === 'string' ? path_1.default.basename(process.env.SHELL) : null;
|
|
84
|
+
}
|
|
85
|
+
async function updateShell(currentShell, pnpmHomeDir, opts) {
|
|
62
86
|
switch (currentShell) {
|
|
63
87
|
case 'bash': {
|
|
64
88
|
const configFile = path_1.default.join(os_1.default.homedir(), '.bashrc');
|
|
65
|
-
return setupShell(configFile, pnpmHomeDir);
|
|
89
|
+
return setupShell(configFile, pnpmHomeDir, opts);
|
|
66
90
|
}
|
|
67
91
|
case 'zsh': {
|
|
68
92
|
const configFile = path_1.default.join(os_1.default.homedir(), '.zshrc');
|
|
69
|
-
return setupShell(configFile, pnpmHomeDir);
|
|
93
|
+
return setupShell(configFile, pnpmHomeDir, opts);
|
|
70
94
|
}
|
|
71
95
|
case 'fish': {
|
|
72
|
-
return setupFishShell(pnpmHomeDir);
|
|
96
|
+
return setupFishShell(pnpmHomeDir, opts);
|
|
73
97
|
}
|
|
74
98
|
}
|
|
75
99
|
if (process.platform === 'win32') {
|
|
76
|
-
return (0, setupOnWindows_1.setupWindowsEnvironmentPath)(pnpmHomeDir);
|
|
100
|
+
return (0, setupOnWindows_1.setupWindowsEnvironmentPath)(pnpmHomeDir, opts);
|
|
77
101
|
}
|
|
78
102
|
return 'Could not infer shell type.';
|
|
79
103
|
}
|
|
80
|
-
async function setupShell(configFile, pnpmHomeDir) {
|
|
81
|
-
const content =
|
|
104
|
+
async function setupShell(configFile, pnpmHomeDir, opts) {
|
|
105
|
+
const content = `# pnpm
|
|
106
|
+
export PNPM_HOME="${pnpmHomeDir}"
|
|
82
107
|
export PATH="$PNPM_HOME:$PATH"
|
|
108
|
+
# pnpm end
|
|
83
109
|
`;
|
|
84
110
|
if (!fs_1.default.existsSync(configFile)) {
|
|
85
111
|
await fs_1.default.promises.writeFile(configFile, content, 'utf8');
|
|
86
112
|
return `Created ${configFile}`;
|
|
87
113
|
}
|
|
88
114
|
const configContent = await fs_1.default.promises.readFile(configFile, 'utf8');
|
|
89
|
-
if (configContent.includes('PNPM_HOME')) {
|
|
90
|
-
|
|
115
|
+
if (!configContent.includes('PNPM_HOME')) {
|
|
116
|
+
await fs_1.default.promises.appendFile(configFile, `\n${content}`, 'utf8');
|
|
117
|
+
return `Updated ${configFile}`;
|
|
118
|
+
}
|
|
119
|
+
const match = configContent.match(/export PNPM_HOME="(.*)"/);
|
|
120
|
+
if (match && match[1] !== pnpmHomeDir) {
|
|
121
|
+
if (!opts.force) {
|
|
122
|
+
throw new BadHomeDirError_1.BadHomeDirError({ currentDir: match[1], wantedDir: pnpmHomeDir });
|
|
123
|
+
}
|
|
124
|
+
const newConfigContent = replaceSection(configContent, content);
|
|
125
|
+
await fs_1.default.promises.writeFile(configFile, newConfigContent, 'utf8');
|
|
126
|
+
return `Updated ${configFile}`;
|
|
91
127
|
}
|
|
92
|
-
|
|
93
|
-
return `Updated ${configFile}`;
|
|
128
|
+
return `PNPM_HOME is already in ${configFile}`;
|
|
94
129
|
}
|
|
95
|
-
async function setupFishShell(pnpmHomeDir) {
|
|
130
|
+
async function setupFishShell(pnpmHomeDir, opts) {
|
|
96
131
|
const configFile = path_1.default.join(os_1.default.homedir(), '.config/fish/config.fish');
|
|
97
|
-
const content =
|
|
132
|
+
const content = `# pnpm
|
|
133
|
+
set -gx PNPM_HOME "${pnpmHomeDir}"
|
|
98
134
|
set -gx PATH "$PNPM_HOME" $PATH
|
|
135
|
+
# pnpm end
|
|
99
136
|
`;
|
|
100
137
|
if (!fs_1.default.existsSync(configFile)) {
|
|
101
138
|
await fs_1.default.promises.writeFile(configFile, content, 'utf8');
|
|
102
139
|
return `Created ${configFile}`;
|
|
103
140
|
}
|
|
104
141
|
const configContent = await fs_1.default.promises.readFile(configFile, 'utf8');
|
|
105
|
-
if (configContent.includes('PNPM_HOME')) {
|
|
106
|
-
|
|
142
|
+
if (!configContent.includes('PNPM_HOME')) {
|
|
143
|
+
await fs_1.default.promises.appendFile(configFile, `\n${content}`, 'utf8');
|
|
144
|
+
return `Updated ${configFile}`;
|
|
107
145
|
}
|
|
108
|
-
|
|
109
|
-
|
|
146
|
+
const match = configContent.match(/set -gx PNPM_HOME "(.*)"/);
|
|
147
|
+
if (match && match[1] !== pnpmHomeDir) {
|
|
148
|
+
if (!opts.force) {
|
|
149
|
+
throw new BadHomeDirError_1.BadHomeDirError({ currentDir: match[1], wantedDir: pnpmHomeDir });
|
|
150
|
+
}
|
|
151
|
+
const newConfigContent = replaceSection(configContent, content);
|
|
152
|
+
await fs_1.default.promises.writeFile(configFile, newConfigContent, 'utf8');
|
|
153
|
+
return `Updated ${configFile}`;
|
|
154
|
+
}
|
|
155
|
+
return `PNPM_HOME is already in ${configFile}`;
|
|
156
|
+
}
|
|
157
|
+
function replaceSection(originalContent, newSection) {
|
|
158
|
+
return originalContent.replace(/# pnpm[\s\S]*# pnpm end/g, newSection);
|
|
110
159
|
}
|
|
111
160
|
//# sourceMappingURL=setup.js.map
|
package/lib/setup.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAmB;AACnB,4CAAmB;AACnB,gDAAuB;AACvB,+CAAyC;AACzC,0DAAiC;AACjC,8DAAoC;AACpC,qDAA8D;
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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"}
|
package/lib/setupOnWindows.d.ts
CHANGED
package/lib/setupOnWindows.js
CHANGED
|
@@ -6,27 +6,66 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.setupWindowsEnvironmentPath = void 0;
|
|
7
7
|
const path_1 = require("path");
|
|
8
8
|
const execa_1 = __importDefault(require("execa"));
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const
|
|
9
|
+
const string_prototype_matchall_1 = __importDefault(require("string.prototype.matchall"));
|
|
10
|
+
const BadHomeDirError_1 = require("./BadHomeDirError");
|
|
11
|
+
const REG_KEY = 'HKEY_CURRENT_USER\\Environment';
|
|
12
|
+
function findEnvValuesInRegistry(regEntries, envVarName) {
|
|
13
|
+
const regexp = new RegExp(`^ {4}(?<name>${envVarName}) {4}(?<type>\\w+) {4}(?<data>.*)$`, 'gim');
|
|
14
|
+
return Array.from((0, string_prototype_matchall_1.default)(regEntries, regexp));
|
|
15
|
+
}
|
|
16
|
+
function setEnvVarInRegistry(envVarName, envVarValue) {
|
|
17
|
+
// `windowsHide` in `execa` is true by default, which will cause `chcp` to have no effect.
|
|
18
|
+
return (0, execa_1.default)('reg', ['add', REG_KEY, '/v', envVarName, '/t', 'REG_EXPAND_SZ', '/d', envVarValue, '/f'], { windowsHide: false });
|
|
19
|
+
}
|
|
20
|
+
function pathIncludesDir(pathValue, dir) {
|
|
21
|
+
const dirPath = path_1.win32.parse(path_1.win32.normalize(dir));
|
|
22
|
+
return pathValue
|
|
23
|
+
.split(path_1.win32.delimiter)
|
|
24
|
+
.map(p => path_1.win32.normalize(p))
|
|
25
|
+
.map(p => path_1.win32.parse(p))
|
|
26
|
+
.map(p => `${p.dir}${path_1.win32.sep}${p.base}`.toUpperCase())
|
|
27
|
+
.filter(p => p !== '')
|
|
28
|
+
.includes(`${dirPath.dir}${path_1.win32.sep}${dirPath.base}`.toUpperCase());
|
|
29
|
+
}
|
|
30
|
+
async function setupWindowsEnvironmentPath(pnpmHomeDir, opts) {
|
|
31
|
+
var _a;
|
|
32
|
+
// Use `chcp` to make `reg` use utf8 encoding for output.
|
|
33
|
+
// Otherwise, the non-ascii characters in the environment variables will become garbled characters.
|
|
34
|
+
const chcpResult = await (0, execa_1.default)('chcp');
|
|
35
|
+
const cpMatch = (_a = /\d+/.exec(chcpResult.stdout)) !== null && _a !== void 0 ? _a : [];
|
|
36
|
+
const cpBak = parseInt(cpMatch[0]);
|
|
37
|
+
if (chcpResult.failed || !(cpBak > 0)) {
|
|
38
|
+
return `exec chcp failed: ${cpBak}, ${chcpResult.stderr}`;
|
|
39
|
+
}
|
|
40
|
+
await (0, execa_1.default)('chcp', ['65001']);
|
|
41
|
+
try {
|
|
42
|
+
return await _setupWindowsEnvironmentPath(path_1.win32.normalize(pnpmHomeDir), opts);
|
|
43
|
+
}
|
|
44
|
+
finally {
|
|
45
|
+
await (0, execa_1.default)('chcp', [cpBak.toString()]);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
exports.setupWindowsEnvironmentPath = setupWindowsEnvironmentPath;
|
|
49
|
+
async function _setupWindowsEnvironmentPath(pnpmHomeDir, opts) {
|
|
50
|
+
var _a;
|
|
51
|
+
const queryResult = await (0, execa_1.default)('reg', ['query', REG_KEY], { windowsHide: false });
|
|
14
52
|
if (queryResult.failed) {
|
|
15
53
|
return 'Win32 registry environment values could not be retrieved';
|
|
16
54
|
}
|
|
17
55
|
const queryOutput = queryResult.stdout;
|
|
18
|
-
const pathValueMatch =
|
|
19
|
-
const homeValueMatch =
|
|
56
|
+
const pathValueMatch = findEnvValuesInRegistry(queryOutput, 'PATH');
|
|
57
|
+
const homeValueMatch = findEnvValuesInRegistry(queryOutput, 'PNPM_HOME');
|
|
20
58
|
let commitNeeded = false;
|
|
21
|
-
let homeDir = pnpmHomeDir;
|
|
22
59
|
const logger = [];
|
|
23
|
-
if (homeValueMatch.length === 1) {
|
|
24
|
-
|
|
25
|
-
|
|
60
|
+
if (homeValueMatch.length === 1 && !opts.force) {
|
|
61
|
+
const currentHomeDir = homeValueMatch[0].groups.data;
|
|
62
|
+
if (currentHomeDir !== pnpmHomeDir) {
|
|
63
|
+
throw new BadHomeDirError_1.BadHomeDirError({ currentDir: currentHomeDir, wantedDir: pnpmHomeDir });
|
|
64
|
+
}
|
|
26
65
|
}
|
|
27
66
|
else {
|
|
28
|
-
logger.push(`Setting 'PNPM_HOME' to value '${
|
|
29
|
-
const addResult = await (
|
|
67
|
+
logger.push(`Setting 'PNPM_HOME' to value '${pnpmHomeDir}'`);
|
|
68
|
+
const addResult = await setEnvVarInRegistry('PNPM_HOME', pnpmHomeDir);
|
|
30
69
|
if (addResult.failed) {
|
|
31
70
|
logger.push(`\t${addResult.stderr}`);
|
|
32
71
|
}
|
|
@@ -35,42 +74,31 @@ async function setupWindowsEnvironmentPath(pnpmHomeDir) {
|
|
|
35
74
|
logger.push(`\t${addResult.stdout}`);
|
|
36
75
|
}
|
|
37
76
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
77
|
+
const pathData = (_a = pathValueMatch[0]) === null || _a === void 0 ? void 0 : _a.groups.data;
|
|
78
|
+
if (pathData === undefined) {
|
|
79
|
+
logger.push('Current PATH is not set. No changes to this environment variable are applied');
|
|
80
|
+
}
|
|
81
|
+
else if (pathData == null || pathData.trim() === '') {
|
|
82
|
+
logger.push('Current PATH is empty. No changes to this environment variable are applied');
|
|
83
|
+
}
|
|
84
|
+
else if (pathIncludesDir(pathData, pnpmHomeDir)) {
|
|
85
|
+
logger.push('PATH already contains PNPM_HOME');
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
logger.push('Updating PATH');
|
|
89
|
+
const newPathValue = `${pnpmHomeDir}${path_1.win32.delimiter}${pathData}`;
|
|
90
|
+
const addResult = await setEnvVarInRegistry(pathValueMatch[0].groups.name, newPathValue);
|
|
91
|
+
if (addResult.failed) {
|
|
92
|
+
logger.push(`\t${addResult.stderr}`);
|
|
42
93
|
}
|
|
43
94
|
else {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
.split(path_1.win32.delimiter)
|
|
47
|
-
.map(p => path_1.win32.normalize(p))
|
|
48
|
-
.map(p => path_1.win32.parse(p))
|
|
49
|
-
.map(p => `${p.dir}${path_1.win32.sep}${p.base}`.toUpperCase())
|
|
50
|
-
.filter(p => p !== '')
|
|
51
|
-
.includes(`${homeDirPath.dir}${path_1.win32.sep}${homeDirPath.base}`.toUpperCase())) {
|
|
52
|
-
logger.push('PATH already contains PNPM_HOME');
|
|
53
|
-
}
|
|
54
|
-
else {
|
|
55
|
-
logger.push('Updating PATH');
|
|
56
|
-
const addResult = await (0, execa_1.default)('reg', ['add', regKey, '/v', pathValueMatch[0].groups.name, '/t', 'REG_EXPAND_SZ', '/d', `${homeDir}${path_1.win32.delimiter}${pathData}`, '/f']);
|
|
57
|
-
if (addResult.failed) {
|
|
58
|
-
logger.push(`\t${addResult.stderr}`);
|
|
59
|
-
}
|
|
60
|
-
else {
|
|
61
|
-
commitNeeded = true;
|
|
62
|
-
logger.push(`\t${addResult.stdout}`);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
95
|
+
commitNeeded = true;
|
|
96
|
+
logger.push(`\t${addResult.stdout}`);
|
|
65
97
|
}
|
|
66
98
|
}
|
|
67
|
-
else {
|
|
68
|
-
logger.push('Current PATH is not set. No changes to this environment variable are applied');
|
|
69
|
-
}
|
|
70
99
|
if (commitNeeded) {
|
|
71
|
-
await (0, execa_1.default)('setx', ['PNPM_HOME',
|
|
100
|
+
await (0, execa_1.default)('setx', ['PNPM_HOME', pnpmHomeDir]);
|
|
72
101
|
}
|
|
73
102
|
return logger.join('\n');
|
|
74
103
|
}
|
|
75
|
-
exports.setupWindowsEnvironmentPath = setupWindowsEnvironmentPath;
|
|
76
104
|
//# sourceMappingURL=setupOnWindows.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setupOnWindows.js","sourceRoot":"","sources":["../src/setupOnWindows.ts"],"names":[],"mappings":";;;;;;AAAA,+BAAoC;AACpC,kDAAyB;
|
|
1
|
+
{"version":3,"file":"setupOnWindows.js","sourceRoot":"","sources":["../src/setupOnWindows.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pnpm/plugin-commands-setup",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.39",
|
|
4
4
|
"description": "pnpm commands for setting up pnpm",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"types": "lib/index.d.ts",
|
|
@@ -23,9 +23,11 @@
|
|
|
23
23
|
},
|
|
24
24
|
"homepage": "https://github.com/pnpm/pnpm/blob/main/packages/plugin-commands-setup#readme",
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@pnpm/cli-utils": "0.6.
|
|
26
|
+
"@pnpm/cli-utils": "0.6.53",
|
|
27
|
+
"@pnpm/error": "2.1.0",
|
|
27
28
|
"execa": "npm:safe-execa@^0.1.1",
|
|
28
|
-
"render-help": "^1.0.1"
|
|
29
|
+
"render-help": "^1.0.1",
|
|
30
|
+
"string.prototype.matchall": "^4.0.7"
|
|
29
31
|
},
|
|
30
32
|
"funding": "https://opencollective.com/pnpm",
|
|
31
33
|
"peerDependencies": {
|
|
@@ -33,8 +35,9 @@
|
|
|
33
35
|
},
|
|
34
36
|
"devDependencies": {
|
|
35
37
|
"@pnpm/logger": "^4.0.0",
|
|
36
|
-
"@pnpm/plugin-commands-setup": "1.1.
|
|
37
|
-
"@pnpm/prepare": "0.0.
|
|
38
|
+
"@pnpm/plugin-commands-setup": "1.1.39",
|
|
39
|
+
"@pnpm/prepare": "0.0.37",
|
|
40
|
+
"@types/string.prototype.matchall": "^4.0.1"
|
|
38
41
|
},
|
|
39
42
|
"scripts": {
|
|
40
43
|
"lint": "eslint src/**/*.ts test/**/*.ts",
|