@pnpm/plugin-commands-setup 2.0.6 → 2.0.7
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/setupOnWindows.js +34 -22
- package/lib/setupOnWindows.js.map +1 -1
- package/package.json +2 -2
package/lib/setupOnWindows.js
CHANGED
|
@@ -28,9 +28,10 @@ async function setupWindowsEnvironmentPath(pnpmHomeDir, opts) {
|
|
|
28
28
|
}
|
|
29
29
|
exports.setupWindowsEnvironmentPath = setupWindowsEnvironmentPath;
|
|
30
30
|
async function _setupWindowsEnvironmentPath(pnpmHomeDir, opts) {
|
|
31
|
+
const registryOutput = await getRegistryOutput();
|
|
31
32
|
const logger = [];
|
|
32
|
-
logger.push(logEnvUpdate(await updateEnvVariable('PNPM_HOME', pnpmHomeDir, opts), 'PNPM_HOME'));
|
|
33
|
-
logger.push(logEnvUpdate(await prependToPath('%PNPM_HOME%'), 'Path'));
|
|
33
|
+
logger.push(logEnvUpdate(await updateEnvVariable(registryOutput, 'PNPM_HOME', pnpmHomeDir, opts), 'PNPM_HOME'));
|
|
34
|
+
logger.push(logEnvUpdate(await prependToPath(registryOutput, '%PNPM_HOME%'), 'Path'));
|
|
34
35
|
return logger.join('\n');
|
|
35
36
|
}
|
|
36
37
|
function logEnvUpdate(envUpdateResult, envName) {
|
|
@@ -40,8 +41,8 @@ function logEnvUpdate(envUpdateResult, envName) {
|
|
|
40
41
|
}
|
|
41
42
|
return '';
|
|
42
43
|
}
|
|
43
|
-
async function updateEnvVariable(name, value, opts) {
|
|
44
|
-
const currentValue = await getEnvValueFromRegistry(name);
|
|
44
|
+
async function updateEnvVariable(registryOutput, name, value, opts) {
|
|
45
|
+
const currentValue = await getEnvValueFromRegistry(registryOutput, name);
|
|
45
46
|
if (currentValue && !opts.force) {
|
|
46
47
|
if (currentValue !== value) {
|
|
47
48
|
throw new errors_1.BadEnvVariableError({ envName: name, currentValue, wantedValue: value });
|
|
@@ -53,8 +54,8 @@ async function updateEnvVariable(name, value, opts) {
|
|
|
53
54
|
return 'updated';
|
|
54
55
|
}
|
|
55
56
|
}
|
|
56
|
-
async function prependToPath(prependDir) {
|
|
57
|
-
const pathData = await getEnvValueFromRegistry('Path');
|
|
57
|
+
async function prependToPath(registryOutput, prependDir) {
|
|
58
|
+
const pathData = await getEnvValueFromRegistry(registryOutput, 'Path');
|
|
58
59
|
if (pathData === undefined || pathData == null || pathData.trim() === '') {
|
|
59
60
|
throw new error_1.default('NO_PATH', '"Path" environment variable is not found in the registry');
|
|
60
61
|
}
|
|
@@ -67,28 +68,39 @@ async function prependToPath(prependDir) {
|
|
|
67
68
|
return 'updated';
|
|
68
69
|
}
|
|
69
70
|
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
71
|
+
// `windowsHide` in `execa` is true by default, which will cause `chcp` to have no effect.
|
|
72
|
+
const EXEC_OPTS = { windowsHide: false };
|
|
73
|
+
/**
|
|
74
|
+
* We read all the registry values and then pick the keys that we need.
|
|
75
|
+
* This is done because if we would try to pick a key that is not in the registry, the command would fail.
|
|
76
|
+
* And it is hard to identify the real cause of the command failure.
|
|
77
|
+
*/
|
|
78
|
+
async function getRegistryOutput() {
|
|
79
|
+
try {
|
|
80
|
+
const queryResult = await (0, execa_1.default)('reg', ['query', REG_KEY], EXEC_OPTS);
|
|
81
|
+
return queryResult.stdout;
|
|
82
|
+
}
|
|
83
|
+
catch (err) { // eslint-disable-line
|
|
84
|
+
throw new error_1.default('REG_READ', 'win32 registry environment values could not be retrieved');
|
|
74
85
|
}
|
|
86
|
+
}
|
|
87
|
+
async function getEnvValueFromRegistry(registryOutput, envVarName) {
|
|
75
88
|
const regexp = new RegExp(`^ {4}(?<name>${envVarName}) {4}(?<type>\\w+) {4}(?<data>.*)$`, 'gim');
|
|
76
|
-
const match = Array.from(
|
|
89
|
+
const match = Array.from(registryOutput.matchAll(regexp))[0];
|
|
77
90
|
return match?.groups.data;
|
|
78
91
|
}
|
|
79
92
|
async function setEnvVarInRegistry(envVarName, envVarValue) {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
if (addResult.failed) {
|
|
83
|
-
throw new error_1.default('FAILED_SET_ENV', `Failed to set "${envVarName}" to "${envVarValue}": ${addResult.stderr}`);
|
|
93
|
+
try {
|
|
94
|
+
await (0, execa_1.default)('reg', ['add', REG_KEY, '/v', envVarName, '/t', 'REG_EXPAND_SZ', '/d', envVarValue, '/f'], EXEC_OPTS);
|
|
84
95
|
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
// There is a workaround though, to set at least one environment variable with `setx`.
|
|
88
|
-
// We have some redundancy here because we run it for each env var.
|
|
89
|
-
// It would be enough also to run it only for the last changed env var.
|
|
90
|
-
// Read more at: https://bit.ly/39OlQnF
|
|
91
|
-
await (0, execa_1.default)('setx', [envVarName, envVarValue]);
|
|
96
|
+
catch (err) { // eslint-disable-line
|
|
97
|
+
throw new error_1.default('FAILED_SET_ENV', `Failed to set "${envVarName}" to "${envVarValue}": ${err.stderr}`);
|
|
92
98
|
}
|
|
99
|
+
// When setting environment variables through the registry, they will not be recognized immediately.
|
|
100
|
+
// There is a workaround though, to set at least one environment variable with `setx`.
|
|
101
|
+
// We have some redundancy here because we run it for each env var.
|
|
102
|
+
// It would be enough also to run it only for the last changed env var.
|
|
103
|
+
// Read more at: https://bit.ly/39OlQnF
|
|
104
|
+
await (0, execa_1.default)('setx', [envVarName, envVarValue], EXEC_OPTS);
|
|
93
105
|
}
|
|
94
106
|
//# sourceMappingURL=setupOnWindows.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setupOnWindows.js","sourceRoot":"","sources":["../src/setupOnWindows.ts"],"names":[],"mappings":";;;;;;AAAA,wDAAmC;AACnC,+BAAoC;AACpC,kDAAyB;AACzB,qCAA8C;AAI9C,MAAM,OAAO,GAAG,gCAAgC,CAAA;AAEzC,KAAK,UAAU,2BAA2B,CAAE,WAAmB,EAAE,IAAwB;IAC9F,yDAAyD;IACzD,mGAAmG;IACnG,MAAM,UAAU,GAAG,MAAM,IAAA,eAAK,EAAC,MAAM,CAAC,CAAA;IACtC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;IACnD,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;IAClC,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE;QACrC,OAAO,qBAAqB,KAAK,KAAK,UAAU,CAAC,MAAM,EAAE,CAAA;KAC1D;IACD,MAAM,IAAA,eAAK,EAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;IAC9B,IAAI;QACF,OAAO,MAAM,4BAA4B,CAAC,YAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,CAAA;KAC7E;YAAS;QACR,MAAM,IAAA,eAAK,EAAC,MAAM,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;KACxC;AACH,CAAC;AAfD,kEAeC;AAED,KAAK,UAAU,4BAA4B,CAAE,WAAmB,EAAE,IAAwB;IACxF,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,iBAAiB,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,WAAW,CAAC,CAAC,CAAA;IAC/
|
|
1
|
+
{"version":3,"file":"setupOnWindows.js","sourceRoot":"","sources":["../src/setupOnWindows.ts"],"names":[],"mappings":";;;;;;AAAA,wDAAmC;AACnC,+BAAoC;AACpC,kDAAyB;AACzB,qCAA8C;AAI9C,MAAM,OAAO,GAAG,gCAAgC,CAAA;AAEzC,KAAK,UAAU,2BAA2B,CAAE,WAAmB,EAAE,IAAwB;IAC9F,yDAAyD;IACzD,mGAAmG;IACnG,MAAM,UAAU,GAAG,MAAM,IAAA,eAAK,EAAC,MAAM,CAAC,CAAA;IACtC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;IACnD,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;IAClC,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE;QACrC,OAAO,qBAAqB,KAAK,KAAK,UAAU,CAAC,MAAM,EAAE,CAAA;KAC1D;IACD,MAAM,IAAA,eAAK,EAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;IAC9B,IAAI;QACF,OAAO,MAAM,4BAA4B,CAAC,YAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,CAAA;KAC7E;YAAS;QACR,MAAM,IAAA,eAAK,EAAC,MAAM,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;KACxC;AACH,CAAC;AAfD,kEAeC;AAED,KAAK,UAAU,4BAA4B,CAAE,WAAmB,EAAE,IAAwB;IACxF,MAAM,cAAc,GAAG,MAAM,iBAAiB,EAAE,CAAA;IAChD,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,iBAAiB,CAAC,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,WAAW,CAAC,CAAC,CAAA;IAC/G,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,aAAa,CAAC,cAAc,EAAE,aAAa,CAAC,EAAE,MAAM,CAAC,CAAC,CAAA;IAErF,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC1B,CAAC;AAED,SAAS,YAAY,CAAE,eAAsC,EAAE,OAAe;IAC5E,QAAQ,eAAe,EAAE;QACzB,KAAK,SAAS,CAAC,CAAC,OAAO,GAAG,OAAO,yBAAyB,CAAA;QAC1D,KAAK,SAAS,CAAC,CAAC,OAAO,GAAG,OAAO,cAAc,CAAA;KAC9C;IACD,OAAO,EAAE,CAAA;AACX,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAE,cAAsB,EAAE,IAAY,EAAE,KAAa,EAAE,IAAwB;IAC7G,MAAM,YAAY,GAAG,MAAM,uBAAuB,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;IACxE,IAAI,YAAY,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;QAC/B,IAAI,YAAY,KAAK,KAAK,EAAE;YAC1B,MAAM,IAAI,4BAAmB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAA;SACnF;QACD,OAAO,SAAS,CAAA;KACjB;SAAM;QACL,MAAM,mBAAmB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;QACtC,OAAO,SAAS,CAAA;KACjB;AACH,CAAC;AAED,KAAK,UAAU,aAAa,CAAE,cAAsB,EAAE,UAAkB;IACtE,MAAM,QAAQ,GAAG,MAAM,uBAAuB,CAAC,cAAc,EAAE,MAAM,CAAC,CAAA;IACtE,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,IAAI,IAAI,IAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACxE,MAAM,IAAI,eAAS,CAAC,SAAS,EAAE,0DAA0D,CAAC,CAAA;KAC3F;SAAM,IAAI,QAAQ,CAAC,KAAK,CAAC,YAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;QAC9D,OAAO,SAAS,CAAA;KACjB;SAAM;QACL,MAAM,YAAY,GAAG,GAAG,UAAU,GAAG,YAAI,CAAC,SAAS,GAAG,QAAQ,EAAE,CAAA;QAChE,MAAM,mBAAmB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;QAC/C,OAAO,SAAS,CAAA;KACjB;AACH,CAAC;AAED,0FAA0F;AAC1F,MAAM,SAAS,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,CAAA;AAExC;;;;GAIG;AACH,KAAK,UAAU,iBAAiB;IAC9B,IAAI;QACF,MAAM,WAAW,GAAG,MAAM,IAAA,eAAK,EAAC,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC,CAAA;QACrE,OAAO,WAAW,CAAC,MAAM,CAAA;KAC1B;IAAC,OAAO,GAAQ,EAAE,EAAE,sBAAsB;QACzC,MAAM,IAAI,eAAS,CAAC,UAAU,EAAE,0DAA0D,CAAC,CAAA;KAC5F;AACH,CAAC;AAED,KAAK,UAAU,uBAAuB,CAAE,cAAsB,EAAE,UAAkB;IAChF,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,gBAAgB,UAAU,oCAAoC,EAAE,KAAK,CAAC,CAAA;IAChG,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAA2B,CAAA;IACtF,OAAO,KAAK,EAAE,MAAM,CAAC,IAAI,CAAA;AAC3B,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAE,UAAkB,EAAE,WAAmB;IACzE,IAAI;QACF,MAAM,IAAA,eAAK,EAAC,KAAK,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,SAAS,CAAC,CAAA;KAClH;IAAC,OAAO,GAAQ,EAAE,EAAE,sBAAsB;QACzC,MAAM,IAAI,eAAS,CAAC,gBAAgB,EAAE,kBAAkB,UAAU,SAAS,WAAW,MAAM,GAAG,CAAC,MAAgB,EAAE,CAAC,CAAA;KACpH;IACD,oGAAoG;IACpG,sFAAsF;IACtF,mEAAmE;IACnE,uEAAuE;IACvE,uCAAuC;IACvC,MAAM,IAAA,eAAK,EAAC,MAAM,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,SAAS,CAAC,CAAA;AAC3D,CAAC"}
|
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.7",
|
|
4
4
|
"description": "pnpm commands for setting up pnpm",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"types": "lib/index.d.ts",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
36
|
"@pnpm/logger": "^4.0.0",
|
|
37
|
-
"@pnpm/plugin-commands-setup": "2.0.
|
|
37
|
+
"@pnpm/plugin-commands-setup": "2.0.7",
|
|
38
38
|
"@pnpm/prepare": "0.0.40"
|
|
39
39
|
},
|
|
40
40
|
"exports": {
|