@pnpm/plugin-commands-setup 2.0.4 → 2.0.5
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 +69 -21
- package/lib/setup.js.map +1 -1
- package/lib/setupOnWindows.d.ts +3 -1
- package/lib/setupOnWindows.js +68 -43
- package/lib/setupOnWindows.js.map +1 -1
- package/package.json +4 -3
|
@@ -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,99 @@ function copyCli(currentLocation, targetDir) {
|
|
|
47
61
|
fs_1.default.copyFileSync(currentLocation, newExecPath);
|
|
48
62
|
}
|
|
49
63
|
async function handler(opts) {
|
|
50
|
-
const currentShell =
|
|
64
|
+
const currentShell = detectCurrentShell();
|
|
51
65
|
const execPath = getExecPath();
|
|
52
66
|
if (execPath.match(/\.[cm]?js$/) == null) {
|
|
53
67
|
copyCli(execPath, opts.pnpmHomeDir);
|
|
54
68
|
}
|
|
55
|
-
const updateOutput = await updateShell(currentShell, opts.pnpmHomeDir);
|
|
69
|
+
const updateOutput = await updateShell(currentShell, opts.pnpmHomeDir, { force: opts.force ?? false });
|
|
56
70
|
return `${updateOutput}
|
|
57
71
|
|
|
58
72
|
Setup complete. Open a new terminal to start using pnpm.`;
|
|
59
73
|
}
|
|
60
74
|
exports.handler = handler;
|
|
61
|
-
|
|
75
|
+
function detectCurrentShell() {
|
|
76
|
+
if (process.env.ZSH_VERSION)
|
|
77
|
+
return 'zsh';
|
|
78
|
+
if (process.env.BASH_VERSION)
|
|
79
|
+
return 'bash';
|
|
80
|
+
if (process.env.FISH_VERSION)
|
|
81
|
+
return 'fish';
|
|
82
|
+
return typeof process.env.SHELL === 'string' ? path_1.default.basename(process.env.SHELL) : null;
|
|
83
|
+
}
|
|
84
|
+
async function updateShell(currentShell, pnpmHomeDir, opts) {
|
|
62
85
|
switch (currentShell) {
|
|
63
86
|
case 'bash': {
|
|
64
87
|
const configFile = path_1.default.join(os_1.default.homedir(), '.bashrc');
|
|
65
|
-
return setupShell(configFile, pnpmHomeDir);
|
|
88
|
+
return setupShell(configFile, pnpmHomeDir, opts);
|
|
66
89
|
}
|
|
67
90
|
case 'zsh': {
|
|
68
91
|
const configFile = path_1.default.join(os_1.default.homedir(), '.zshrc');
|
|
69
|
-
return setupShell(configFile, pnpmHomeDir);
|
|
92
|
+
return setupShell(configFile, pnpmHomeDir, opts);
|
|
70
93
|
}
|
|
71
94
|
case 'fish': {
|
|
72
|
-
return setupFishShell(pnpmHomeDir);
|
|
95
|
+
return setupFishShell(pnpmHomeDir, opts);
|
|
73
96
|
}
|
|
74
97
|
}
|
|
75
98
|
if (process.platform === 'win32') {
|
|
76
|
-
return (0, setupOnWindows_1.setupWindowsEnvironmentPath)(pnpmHomeDir);
|
|
99
|
+
return (0, setupOnWindows_1.setupWindowsEnvironmentPath)(pnpmHomeDir, opts);
|
|
77
100
|
}
|
|
78
101
|
return 'Could not infer shell type.';
|
|
79
102
|
}
|
|
80
|
-
async function setupShell(configFile, pnpmHomeDir) {
|
|
81
|
-
const content =
|
|
103
|
+
async function setupShell(configFile, pnpmHomeDir, opts) {
|
|
104
|
+
const content = `# pnpm
|
|
105
|
+
export PNPM_HOME="${pnpmHomeDir}"
|
|
82
106
|
export PATH="$PNPM_HOME:$PATH"
|
|
107
|
+
# pnpm end
|
|
83
108
|
`;
|
|
84
109
|
if (!fs_1.default.existsSync(configFile)) {
|
|
85
110
|
await fs_1.default.promises.writeFile(configFile, content, 'utf8');
|
|
86
111
|
return `Created ${configFile}`;
|
|
87
112
|
}
|
|
88
113
|
const configContent = await fs_1.default.promises.readFile(configFile, 'utf8');
|
|
89
|
-
if (configContent.includes('PNPM_HOME')) {
|
|
90
|
-
|
|
114
|
+
if (!configContent.includes('PNPM_HOME')) {
|
|
115
|
+
await fs_1.default.promises.appendFile(configFile, `\n${content}`, 'utf8');
|
|
116
|
+
return `Updated ${configFile}`;
|
|
117
|
+
}
|
|
118
|
+
const match = configContent.match(/export PNPM_HOME="(.*)"/);
|
|
119
|
+
if (match && match[1] !== pnpmHomeDir) {
|
|
120
|
+
if (!opts.force) {
|
|
121
|
+
throw new BadHomeDirError_1.BadHomeDirError({ currentDir: match[1], wantedDir: pnpmHomeDir });
|
|
122
|
+
}
|
|
123
|
+
const newConfigContent = replaceSection(configContent, content);
|
|
124
|
+
await fs_1.default.promises.writeFile(configFile, newConfigContent, 'utf8');
|
|
125
|
+
return `Updated ${configFile}`;
|
|
91
126
|
}
|
|
92
|
-
|
|
93
|
-
return `Updated ${configFile}`;
|
|
127
|
+
return `PNPM_HOME is already in ${configFile}`;
|
|
94
128
|
}
|
|
95
|
-
async function setupFishShell(pnpmHomeDir) {
|
|
129
|
+
async function setupFishShell(pnpmHomeDir, opts) {
|
|
96
130
|
const configFile = path_1.default.join(os_1.default.homedir(), '.config/fish/config.fish');
|
|
97
|
-
const content =
|
|
131
|
+
const content = `# pnpm
|
|
132
|
+
set -gx PNPM_HOME "${pnpmHomeDir}"
|
|
98
133
|
set -gx PATH "$PNPM_HOME" $PATH
|
|
134
|
+
# pnpm end
|
|
99
135
|
`;
|
|
100
136
|
if (!fs_1.default.existsSync(configFile)) {
|
|
101
137
|
await fs_1.default.promises.writeFile(configFile, content, 'utf8');
|
|
102
138
|
return `Created ${configFile}`;
|
|
103
139
|
}
|
|
104
140
|
const configContent = await fs_1.default.promises.readFile(configFile, 'utf8');
|
|
105
|
-
if (configContent.includes('PNPM_HOME')) {
|
|
106
|
-
|
|
141
|
+
if (!configContent.includes('PNPM_HOME')) {
|
|
142
|
+
await fs_1.default.promises.appendFile(configFile, `\n${content}`, 'utf8');
|
|
143
|
+
return `Updated ${configFile}`;
|
|
107
144
|
}
|
|
108
|
-
|
|
109
|
-
|
|
145
|
+
const match = configContent.match(/set -gx PNPM_HOME "(.*)"/);
|
|
146
|
+
if (match && match[1] !== pnpmHomeDir) {
|
|
147
|
+
if (!opts.force) {
|
|
148
|
+
throw new BadHomeDirError_1.BadHomeDirError({ currentDir: match[1], wantedDir: pnpmHomeDir });
|
|
149
|
+
}
|
|
150
|
+
const newConfigContent = replaceSection(configContent, content);
|
|
151
|
+
await fs_1.default.promises.writeFile(configFile, newConfigContent, 'utf8');
|
|
152
|
+
return `Updated ${configFile}`;
|
|
153
|
+
}
|
|
154
|
+
return `PNPM_HOME is already in ${configFile}`;
|
|
155
|
+
}
|
|
156
|
+
function replaceSection(originalContent, newSection) {
|
|
157
|
+
return originalContent.replace(/# pnpm[\s\S]*# pnpm end/g, newSection);
|
|
110
158
|
}
|
|
111
159
|
//# 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":";;;;;;AAAA,4CAAmB;AACnB,4CAAmB;AACnB,gDAAuB;AACvB,+CAAyC;AACzC,0DAAiC;AACjC,8DAAoC;AACpC,qDAA8D;AAC9D,uDAAmD;AAE5C,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAA;AAA3B,QAAA,cAAc,kBAAa;AAEjC,MAAM,eAAe,GAAG,GAAG,EAAE,CAAC,CAAC;IACpC,KAAK,EAAE,OAAO;CACf,CAAC,CAAA;AAFW,QAAA,eAAe,mBAE1B;AAEW,QAAA,UAAU,GAAG,EAAE,CAAA;AAEf,QAAA,YAAY,GAAG,CAAC,OAAO,CAAC,CAAA;AAErC,SAAgB,IAAI;IAClB,OAAO,IAAA,qBAAU,EAAC;QAChB,WAAW,EAAE,cAAc;QAC3B,gBAAgB,EAAE;YAChB;gBACE,KAAK,EAAE,SAAS;gBAEhB,IAAI,EAAE;oBACJ;wBACE,WAAW,EAAE,+DAA+D;wBAC5E,IAAI,EAAE,SAAS;wBACf,UAAU,EAAE,IAAI;qBACjB;iBACF;aACF;SACF;QACD,GAAG,EAAE,IAAA,mBAAO,EAAC,OAAO,CAAC;QACrB,MAAM,EAAE,CAAC,YAAY,CAAC;KACvB,CAAC,CAAA;AACJ,CAAC;AAnBD,oBAmBC;AAED,SAAS,WAAW;IAClB,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE;QAC1B,4FAA4F;QAC5F,8EAA8E;QAC9E,4CAA4C;QAC5C,OAAO,OAAO,CAAC,QAAQ,CAAA;KACxB;IACD,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAA;AACvE,CAAC;AAED,SAAS,OAAO,CAAE,eAAuB,EAAE,SAAiB;IAC1D,MAAM,WAAW,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAA;IACxE,IAAI,cAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC,KAAK,EAAE;QAAE,OAAM;IAC9D,gBAAM,CAAC,IAAI,CAAC;QACV,OAAO,EAAE,yBAAyB,eAAe,OAAO,WAAW,EAAE;QACrE,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE;KACtB,CAAC,CAAA;IACF,YAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC5C,YAAE,CAAC,YAAY,CAAC,eAAe,EAAE,WAAW,CAAC,CAAA;AAC/C,CAAC;AAEM,KAAK,UAAU,OAAO,CAC3B,IAGC;IAED,MAAM,YAAY,GAAG,kBAAkB,EAAE,CAAA;IACzC,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAC9B,IAAI,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,IAAI,EAAE;QACxC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;KACpC;IACD,MAAM,YAAY,GAAG,MAAM,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,KAAK,EAAE,CAAC,CAAA;IACtG,OAAO,GAAG,YAAY;;yDAEiC,CAAA;AACzD,CAAC;AAfD,0BAeC;AAED,SAAS,kBAAkB;IACzB,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW;QAAE,OAAO,KAAK,CAAA;IACzC,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY;QAAE,OAAO,MAAM,CAAA;IAC3C,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY;QAAE,OAAO,MAAM,CAAA;IAC3C,OAAO,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;AACxF,CAAC;AAED,KAAK,UAAU,WAAW,CACxB,YAA2B,EAC3B,WAAmB,EACnB,IAAwB;IAExB,QAAQ,YAAY,EAAE;QACtB,KAAK,MAAM,CAAC,CAAC;YACX,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAA;YACrD,OAAO,UAAU,CAAC,UAAU,EAAE,WAAW,EAAE,IAAI,CAAC,CAAA;SACjD;QACD,KAAK,KAAK,CAAC,CAAC;YACV,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAA;YACpD,OAAO,UAAU,CAAC,UAAU,EAAE,WAAW,EAAE,IAAI,CAAC,CAAA;SACjD;QACD,KAAK,MAAM,CAAC,CAAC;YACX,OAAO,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;SACzC;KACA;IAED,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE;QAChC,OAAO,IAAA,4CAA2B,EAAC,WAAW,EAAE,IAAI,CAAC,CAAA;KACtD;IAED,OAAO,6BAA6B,CAAA;AACtC,CAAC;AAED,KAAK,UAAU,UAAU,CAAE,UAAkB,EAAE,WAAmB,EAAE,IAAwB;IAC1F,MAAM,OAAO,GAAG;oBACE,WAAW;;;CAG9B,CAAA;IACC,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;QAC9B,MAAM,YAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;QACxD,OAAO,WAAW,UAAU,EAAE,CAAA;KAC/B;IACD,MAAM,aAAa,GAAG,MAAM,YAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;IACpE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;QACxC,MAAM,YAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,UAAU,EAAE,KAAK,OAAO,EAAE,EAAE,MAAM,CAAC,CAAA;QAChE,OAAO,WAAW,UAAU,EAAE,CAAA;KAC/B;IACD,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAA;IAC5D,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,WAAW,EAAE;QACrC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACf,MAAM,IAAI,iCAAe,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,CAAA;SAC5E;QACD,MAAM,gBAAgB,GAAG,cAAc,CAAC,aAAa,EAAE,OAAO,CAAC,CAAA;QAC/D,MAAM,YAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAA;QACjE,OAAO,WAAW,UAAU,EAAE,CAAA;KAC/B;IACD,OAAO,2BAA2B,UAAU,EAAE,CAAA;AAChD,CAAC;AAED,KAAK,UAAU,cAAc,CAAE,WAAmB,EAAE,IAAwB;IAC1E,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,OAAO,EAAE,EAAE,0BAA0B,CAAC,CAAA;IACtE,MAAM,OAAO,GAAG;qBACG,WAAW;;;CAG/B,CAAA;IACC,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;QAC9B,MAAM,YAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;QACxD,OAAO,WAAW,UAAU,EAAE,CAAA;KAC/B;IACD,MAAM,aAAa,GAAG,MAAM,YAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;IACpE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;QACxC,MAAM,YAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,UAAU,EAAE,KAAK,OAAO,EAAE,EAAE,MAAM,CAAC,CAAA;QAChE,OAAO,WAAW,UAAU,EAAE,CAAA;KAC/B;IACD,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAA;IAC7D,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,WAAW,EAAE;QACrC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACf,MAAM,IAAI,iCAAe,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,CAAA;SAC5E;QACD,MAAM,gBAAgB,GAAG,cAAc,CAAC,aAAa,EAAE,OAAO,CAAC,CAAA;QAC/D,MAAM,YAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAA;QACjE,OAAO,WAAW,UAAU,EAAE,CAAA;KAC/B;IACD,OAAO,2BAA2B,UAAU,EAAE,CAAA;AAChD,CAAC;AAED,SAAS,cAAc,CAAE,eAAuB,EAAE,UAAkB;IAClE,OAAO,eAAe,CAAC,OAAO,CAAC,0BAA0B,EAAE,UAAU,CAAC,CAAA;AACxE,CAAC"}
|
package/lib/setupOnWindows.d.ts
CHANGED
package/lib/setupOnWindows.js
CHANGED
|
@@ -6,27 +6,63 @@ 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
|
-
const
|
|
13
|
-
|
|
9
|
+
const BadHomeDirError_1 = require("./BadHomeDirError");
|
|
10
|
+
const REG_KEY = 'HKEY_CURRENT_USER\\Environment';
|
|
11
|
+
function findEnvValuesInRegistry(regEntries, envVarName) {
|
|
12
|
+
const regexp = new RegExp(`^ {4}(?<name>${envVarName}) {4}(?<type>\\w+) {4}(?<data>.*)$`, 'gim');
|
|
13
|
+
return Array.from(regEntries.matchAll(regexp));
|
|
14
|
+
}
|
|
15
|
+
function setEnvVarInRegistry(envVarName, envVarValue) {
|
|
16
|
+
// `windowsHide` in `execa` is true by default, which will cause `chcp` to have no effect.
|
|
17
|
+
return (0, execa_1.default)('reg', ['add', REG_KEY, '/v', envVarName, '/t', 'REG_EXPAND_SZ', '/d', envVarValue, '/f'], { windowsHide: false });
|
|
18
|
+
}
|
|
19
|
+
function pathIncludesDir(pathValue, dir) {
|
|
20
|
+
const dirPath = path_1.win32.parse(path_1.win32.normalize(dir));
|
|
21
|
+
return pathValue
|
|
22
|
+
.split(path_1.win32.delimiter)
|
|
23
|
+
.map(p => path_1.win32.normalize(p))
|
|
24
|
+
.map(p => path_1.win32.parse(p))
|
|
25
|
+
.map(p => `${p.dir}${path_1.win32.sep}${p.base}`.toUpperCase())
|
|
26
|
+
.filter(p => p !== '')
|
|
27
|
+
.includes(`${dirPath.dir}${path_1.win32.sep}${dirPath.base}`.toUpperCase());
|
|
28
|
+
}
|
|
29
|
+
async function setupWindowsEnvironmentPath(pnpmHomeDir, opts) {
|
|
30
|
+
// Use `chcp` to make `reg` use utf8 encoding for output.
|
|
31
|
+
// Otherwise, the non-ascii characters in the environment variables will become garbled characters.
|
|
32
|
+
const chcpResult = await (0, execa_1.default)('chcp');
|
|
33
|
+
const cpMatch = /\d+/.exec(chcpResult.stdout) ?? [];
|
|
34
|
+
const cpBak = parseInt(cpMatch[0]);
|
|
35
|
+
if (chcpResult.failed || !(cpBak > 0)) {
|
|
36
|
+
return `exec chcp failed: ${cpBak}, ${chcpResult.stderr}`;
|
|
37
|
+
}
|
|
38
|
+
await (0, execa_1.default)('chcp', ['65001']);
|
|
39
|
+
try {
|
|
40
|
+
return await _setupWindowsEnvironmentPath(path_1.win32.normalize(pnpmHomeDir), opts);
|
|
41
|
+
}
|
|
42
|
+
finally {
|
|
43
|
+
await (0, execa_1.default)('chcp', [cpBak.toString()]);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
exports.setupWindowsEnvironmentPath = setupWindowsEnvironmentPath;
|
|
47
|
+
async function _setupWindowsEnvironmentPath(pnpmHomeDir, opts) {
|
|
48
|
+
const queryResult = await (0, execa_1.default)('reg', ['query', REG_KEY], { windowsHide: false });
|
|
14
49
|
if (queryResult.failed) {
|
|
15
50
|
return 'Win32 registry environment values could not be retrieved';
|
|
16
51
|
}
|
|
17
52
|
const queryOutput = queryResult.stdout;
|
|
18
|
-
const pathValueMatch =
|
|
19
|
-
const homeValueMatch =
|
|
53
|
+
const pathValueMatch = findEnvValuesInRegistry(queryOutput, 'PATH');
|
|
54
|
+
const homeValueMatch = findEnvValuesInRegistry(queryOutput, 'PNPM_HOME');
|
|
20
55
|
let commitNeeded = false;
|
|
21
|
-
let homeDir = pnpmHomeDir;
|
|
22
56
|
const logger = [];
|
|
23
|
-
if (homeValueMatch.length === 1) {
|
|
24
|
-
|
|
25
|
-
|
|
57
|
+
if (homeValueMatch.length === 1 && !opts.force) {
|
|
58
|
+
const currentHomeDir = homeValueMatch[0].groups.data;
|
|
59
|
+
if (currentHomeDir !== pnpmHomeDir) {
|
|
60
|
+
throw new BadHomeDirError_1.BadHomeDirError({ currentDir: currentHomeDir, wantedDir: pnpmHomeDir });
|
|
61
|
+
}
|
|
26
62
|
}
|
|
27
63
|
else {
|
|
28
|
-
logger.push(`Setting 'PNPM_HOME' to value '${
|
|
29
|
-
const addResult = await (
|
|
64
|
+
logger.push(`Setting 'PNPM_HOME' to value '${pnpmHomeDir}'`);
|
|
65
|
+
const addResult = await setEnvVarInRegistry('PNPM_HOME', pnpmHomeDir);
|
|
30
66
|
if (addResult.failed) {
|
|
31
67
|
logger.push(`\t${addResult.stderr}`);
|
|
32
68
|
}
|
|
@@ -35,42 +71,31 @@ async function setupWindowsEnvironmentPath(pnpmHomeDir) {
|
|
|
35
71
|
logger.push(`\t${addResult.stdout}`);
|
|
36
72
|
}
|
|
37
73
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
74
|
+
const pathData = pathValueMatch[0]?.groups.data;
|
|
75
|
+
if (pathData === undefined) {
|
|
76
|
+
logger.push('Current PATH is not set. No changes to this environment variable are applied');
|
|
77
|
+
}
|
|
78
|
+
else if (pathData == null || pathData.trim() === '') {
|
|
79
|
+
logger.push('Current PATH is empty. No changes to this environment variable are applied');
|
|
80
|
+
}
|
|
81
|
+
else if (pathIncludesDir(pathData, pnpmHomeDir) || pathData.split(path_1.win32.delimiter).includes('%PNPM_HOME%')) {
|
|
82
|
+
logger.push('PATH already contains PNPM_HOME');
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
logger.push('Updating PATH');
|
|
86
|
+
const newPathValue = `%PNPM_HOME%${path_1.win32.delimiter}${pathData}`;
|
|
87
|
+
const addResult = await setEnvVarInRegistry(pathValueMatch[0].groups.name, newPathValue);
|
|
88
|
+
if (addResult.failed) {
|
|
89
|
+
logger.push(`\t${addResult.stderr}`);
|
|
42
90
|
}
|
|
43
91
|
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
|
-
}
|
|
92
|
+
commitNeeded = true;
|
|
93
|
+
logger.push(`\t${addResult.stdout}`);
|
|
65
94
|
}
|
|
66
95
|
}
|
|
67
|
-
else {
|
|
68
|
-
logger.push('Current PATH is not set. No changes to this environment variable are applied');
|
|
69
|
-
}
|
|
70
96
|
if (commitNeeded) {
|
|
71
|
-
await (0, execa_1.default)('setx', ['PNPM_HOME',
|
|
97
|
+
await (0, execa_1.default)('setx', ['PNPM_HOME', pnpmHomeDir]);
|
|
72
98
|
}
|
|
73
99
|
return logger.join('\n');
|
|
74
100
|
}
|
|
75
|
-
exports.setupWindowsEnvironmentPath = setupWindowsEnvironmentPath;
|
|
76
101
|
//# 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": "2.0.
|
|
3
|
+
"version": "2.0.5",
|
|
4
4
|
"description": "pnpm commands for setting up pnpm",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"types": "lib/index.d.ts",
|
|
@@ -23,7 +23,8 @@
|
|
|
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.7.
|
|
26
|
+
"@pnpm/cli-utils": "0.7.5",
|
|
27
|
+
"@pnpm/error": "3.0.1",
|
|
27
28
|
"execa": "npm:safe-execa@^0.1.1",
|
|
28
29
|
"render-help": "^1.0.1"
|
|
29
30
|
},
|
|
@@ -33,7 +34,7 @@
|
|
|
33
34
|
},
|
|
34
35
|
"devDependencies": {
|
|
35
36
|
"@pnpm/logger": "^4.0.0",
|
|
36
|
-
"@pnpm/plugin-commands-setup": "2.0.
|
|
37
|
+
"@pnpm/plugin-commands-setup": "2.0.5",
|
|
37
38
|
"@pnpm/prepare": "0.0.40"
|
|
38
39
|
},
|
|
39
40
|
"exports": {
|