@mikeyt23/node-cli-utils 2.0.0-beta.1 → 2.0.0-beta.2
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/dist/cjs/GitUtility.d.ts +7 -0
- package/dist/cjs/GitUtility.d.ts.map +1 -0
- package/dist/cjs/GitUtility.js +49 -0
- package/dist/cjs/TarballUtility.d.ts +17 -7
- package/dist/cjs/TarballUtility.d.ts.map +1 -1
- package/dist/cjs/TarballUtility.js +18 -24
- package/dist/cjs/certUtils.d.ts +53 -17
- package/dist/cjs/certUtils.d.ts.map +1 -1
- package/dist/cjs/certUtils.js +175 -111
- package/dist/cjs/dbMigrationUtils.js +44 -54
- package/dist/cjs/dotnetUtils.d.ts.map +1 -1
- package/dist/cjs/dotnetUtils.js +4 -2
- package/dist/cjs/esmSpecific.d.mts +5 -0
- package/dist/cjs/esmSpecific.d.mts.map +1 -1
- package/dist/cjs/esmSpecific.mjs +6 -1
- package/dist/cjs/generalUtils.d.ts +268 -26
- package/dist/cjs/generalUtils.d.ts.map +1 -1
- package/dist/cjs/generalUtils.js +522 -106
- package/dist/cjs/generalUtilsInternal.d.ts +9 -3
- package/dist/cjs/generalUtilsInternal.d.ts.map +1 -1
- package/dist/cjs/generalUtilsInternal.js +159 -59
- package/dist/cjs/hostsUtils.d.ts +16 -0
- package/dist/cjs/hostsUtils.d.ts.map +1 -0
- package/dist/cjs/hostsUtils.js +82 -0
- package/dist/cjs/runWhileParentAlive.js +7 -9
- package/dist/esm/GitUtility.d.ts +7 -0
- package/dist/esm/GitUtility.d.ts.map +1 -0
- package/dist/esm/GitUtility.js +43 -0
- package/dist/esm/TarballUtility.d.ts +17 -7
- package/dist/esm/TarballUtility.d.ts.map +1 -1
- package/dist/esm/TarballUtility.js +21 -25
- package/dist/esm/certUtils.d.ts +53 -17
- package/dist/esm/certUtils.d.ts.map +1 -1
- package/dist/esm/certUtils.js +172 -86
- package/dist/esm/dbMigrationUtils.js +45 -55
- package/dist/esm/dotnetUtils.d.ts.map +1 -1
- package/dist/esm/dotnetUtils.js +4 -2
- package/dist/esm/esmSpecific.d.mts +5 -0
- package/dist/esm/esmSpecific.d.mts.map +1 -1
- package/dist/esm/esmSpecific.mjs +6 -1
- package/dist/esm/generalUtils.d.ts +268 -26
- package/dist/esm/generalUtils.d.ts.map +1 -1
- package/dist/esm/generalUtils.js +490 -105
- package/dist/esm/generalUtilsInternal.d.ts +9 -3
- package/dist/esm/generalUtilsInternal.d.ts.map +1 -1
- package/dist/esm/generalUtilsInternal.js +150 -57
- package/dist/esm/hostsUtils.d.ts +16 -0
- package/dist/esm/hostsUtils.d.ts.map +1 -0
- package/dist/esm/hostsUtils.js +69 -0
- package/dist/esm/runWhileParentAlive.js +8 -10
- package/package.json +4 -2
package/dist/cjs/certUtils.js
CHANGED
|
@@ -1,57 +1,39 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
4
|
};
|
|
28
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.
|
|
6
|
+
exports.linuxInstallCert = exports.winGetPfxInfo = exports.winUninstallCert = exports.winCertIsInstalled = exports.winInstallCert = exports.generateCertWithOpenSsl = void 0;
|
|
30
7
|
const node_fs_1 = __importDefault(require("node:fs"));
|
|
31
8
|
const promises_1 = __importDefault(require("node:fs/promises"));
|
|
32
9
|
const node_path_1 = __importDefault(require("node:path"));
|
|
33
|
-
const nodeCliUtils = __importStar(require("./generalUtils.js"));
|
|
34
10
|
const generalUtils_js_1 = require("./generalUtils.js");
|
|
35
|
-
const
|
|
36
|
-
|
|
11
|
+
const defaultCertLogOptions = {
|
|
12
|
+
logSpawnOutput: false,
|
|
13
|
+
logTraceMessages: false,
|
|
14
|
+
logElevatedPermissionsMessage: true,
|
|
15
|
+
logSuccess: true
|
|
16
|
+
};
|
|
37
17
|
/**
|
|
38
18
|
* Wrapper function for calling openssl to generate a self-signed cert to be used for developing a local website with trusted https.
|
|
39
19
|
* @param url The url to generate a cert for. This will be used as the common name (CN) in the cert as well as the filename for the generated cert files.
|
|
40
|
-
* @param
|
|
20
|
+
* @param options Options for generating the cert.
|
|
21
|
+
* @returns The path to the generated pfx file.
|
|
41
22
|
*/
|
|
42
|
-
async function generateCertWithOpenSsl(url,
|
|
43
|
-
|
|
23
|
+
async function generateCertWithOpenSsl(url, options) {
|
|
24
|
+
(0, generalUtils_js_1.requireString)('url', url);
|
|
44
25
|
throwIfMaybeBadUrlChars(url);
|
|
45
|
-
const isMac =
|
|
46
|
-
const
|
|
47
|
-
|
|
26
|
+
const isMac = (0, generalUtils_js_1.isPlatformMac)();
|
|
27
|
+
const mergedOptions = { ...defaultCertLogOptions, outputDirectory: './cert', ...options };
|
|
28
|
+
const spawnArgs = { cwd: mergedOptions.outputDirectory, stdio: mergedOptions.logSpawnOutput ? 'inherit' : 'pipe' };
|
|
29
|
+
(0, generalUtils_js_1.logIf)(mergedOptions.logTraceMessages, 'checking if openssl is installed');
|
|
48
30
|
let brewOpenSslPath = '';
|
|
49
31
|
if (!isMac) {
|
|
50
|
-
const openSslPath =
|
|
32
|
+
const openSslPath = (0, generalUtils_js_1.whichSync)('openssl').location;
|
|
51
33
|
if (!openSslPath) {
|
|
52
34
|
throw Error('openssl is required but was not found');
|
|
53
35
|
}
|
|
54
|
-
(0, generalUtils_js_1.
|
|
36
|
+
(0, generalUtils_js_1.logIf)(mergedOptions.logTraceMessages, `using openssl at: ${openSslPath}`);
|
|
55
37
|
}
|
|
56
38
|
else if (isMac) {
|
|
57
39
|
const brewOpenSslDirectory = getBrewOpensslPath();
|
|
@@ -63,81 +45,154 @@ async function generateCertWithOpenSsl(url, outputDirectory = './cert') {
|
|
|
63
45
|
throw Error(`openssl (brew version) is required but was not found at: ${brewOpenSslPath}`);
|
|
64
46
|
}
|
|
65
47
|
else {
|
|
66
|
-
(0, generalUtils_js_1.
|
|
48
|
+
(0, generalUtils_js_1.logIf)(mergedOptions.logTraceMessages, `using openssl at: ${brewOpenSslPath}`);
|
|
67
49
|
}
|
|
68
50
|
}
|
|
69
|
-
|
|
70
|
-
const keyName = url + '.key';
|
|
51
|
+
(0, generalUtils_js_1.ensureDirectory)(mergedOptions.outputDirectory);
|
|
71
52
|
const crtName = url + '.crt';
|
|
53
|
+
const keyName = url + '.key';
|
|
72
54
|
const pfxName = url + '.pfx';
|
|
73
|
-
const
|
|
74
|
-
|
|
75
|
-
|
|
55
|
+
const sanCnfName = url + '.cnf';
|
|
56
|
+
const filesToCheck = [crtName, keyName, pfxName, sanCnfName];
|
|
57
|
+
for (const file of filesToCheck) {
|
|
58
|
+
const filePath = node_path_1.default.join(mergedOptions.outputDirectory, file);
|
|
59
|
+
if (node_fs_1.default.existsSync(filePath)) {
|
|
60
|
+
throw Error(`${generalUtils_js_1.Emoji.Stop} File ${filePath} already exists. Delete or rename all of the following files from '${mergedOptions.outputDirectory}' if you want to generate a new cert: ${filesToCheck.join(', ')}.`);
|
|
61
|
+
}
|
|
76
62
|
}
|
|
77
|
-
(0, generalUtils_js_1.
|
|
63
|
+
(0, generalUtils_js_1.logIf)(mergedOptions.logTraceMessages, `writing ${sanCnfName} file for use with openssl command`);
|
|
78
64
|
const sanCnfContents = getSanCnfFileContents(url);
|
|
79
|
-
const sanCnfPath = node_path_1.default.join(outputDirectory,
|
|
65
|
+
const sanCnfPath = node_path_1.default.join(mergedOptions.outputDirectory, sanCnfName);
|
|
80
66
|
await promises_1.default.writeFile(sanCnfPath, sanCnfContents);
|
|
81
|
-
(0, generalUtils_js_1.
|
|
82
|
-
const genKeyAndCrtArgs = `req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes -keyout ${keyName} -out ${crtName} -subj /CN=${url} -config
|
|
67
|
+
(0, generalUtils_js_1.logIf)(mergedOptions.logTraceMessages, `attempting to generate cert ${pfxName}`);
|
|
68
|
+
const genKeyAndCrtArgs = `req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes -keyout ${keyName} -out ${crtName} -subj /CN=${url} -config ${sanCnfName}`.split(' ');
|
|
83
69
|
const command = isMac ? brewOpenSslPath : 'openssl';
|
|
84
|
-
let result = await
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
}
|
|
88
|
-
(0, generalUtils_js_1.log)('- converting key and crt to pfx');
|
|
70
|
+
let result = await (0, generalUtils_js_1.spawnAsync)(command, genKeyAndCrtArgs, spawnArgs);
|
|
71
|
+
throwIfSpawnResultError(result);
|
|
72
|
+
(0, generalUtils_js_1.logIf)(mergedOptions.logTraceMessages, 'converting key and crt to pfx');
|
|
89
73
|
const convertToPfxArgs = `pkcs12 -certpbe AES-256-CBC -export -out ${pfxName} -aes256 -inkey ${keyName} -in ${crtName} -password pass:`.split(' ');
|
|
90
|
-
result = await
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
}
|
|
74
|
+
result = await (0, generalUtils_js_1.spawnAsync)(command, convertToPfxArgs, spawnArgs);
|
|
75
|
+
throwIfSpawnResultError(result);
|
|
76
|
+
const pfxPath = node_path_1.default.join(mergedOptions.outputDirectory, pfxName);
|
|
77
|
+
(0, generalUtils_js_1.logIf)(mergedOptions.logSuccess, `${generalUtils_js_1.Emoji.GreenCheck} Successfully generated cert: ${pfxPath}`);
|
|
78
|
+
return pfxPath;
|
|
94
79
|
}
|
|
95
80
|
exports.generateCertWithOpenSsl = generateCertWithOpenSsl;
|
|
96
81
|
/**
|
|
97
|
-
* Uses Powershell to install a cert to the local machine's trusted root store. Must have
|
|
98
|
-
*
|
|
99
|
-
*
|
|
100
|
-
* @param urlOrCertFilename The url or cert filename to install. The url + '.pfx' or the cert filename passed must match a file that exists in the certDirectory.
|
|
101
|
-
* @param certDirectory The directory to look for the cert file in. Defaults to './cert'.
|
|
82
|
+
* Uses Powershell to install a cert to the local machine's trusted root store. Must have elevated permissions.
|
|
83
|
+
* If the cert is already installed, this function will do nothing.
|
|
84
|
+
* @param pfxPath The path to the pfx file to install.
|
|
102
85
|
*/
|
|
103
|
-
async function winInstallCert(
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
(
|
|
111
|
-
|
|
112
|
-
(0, generalUtils_js_1.
|
|
86
|
+
async function winInstallCert(pfxPath, options) {
|
|
87
|
+
if (!(0, generalUtils_js_1.isPlatformWindows)()) {
|
|
88
|
+
throw Error('winInstallCert is only supported on Windows');
|
|
89
|
+
}
|
|
90
|
+
validatePfxPath(pfxPath);
|
|
91
|
+
const mergedOptions = { ...defaultCertLogOptions, ...options };
|
|
92
|
+
(0, generalUtils_js_1.logIf)(mergedOptions.logElevatedPermissionsMessage, getRequiresElevatedPermissionsMessage(true));
|
|
93
|
+
if (await winCertIsInstalled({ pfxPath }, mergedOptions)) {
|
|
94
|
+
const certInfo = await winGetPfxInfo(pfxPath);
|
|
95
|
+
(0, generalUtils_js_1.logIf)(mergedOptions.logTraceMessages, `${generalUtils_js_1.Emoji.Warning} certificate '${pfxPath}' with subject '${certInfo.subject}' is already installed - to install it again, first uninstall it manually or with the winUninstallCert function`);
|
|
113
96
|
return;
|
|
114
97
|
}
|
|
115
|
-
|
|
116
|
-
const
|
|
117
|
-
|
|
118
|
-
|
|
98
|
+
(0, generalUtils_js_1.logIf)(mergedOptions.logTraceMessages, `installing cert '${pfxPath}'`);
|
|
99
|
+
const psCommandArgs = (0, generalUtils_js_1.getPowershellHackArgs)(`Import-PfxCertificate -FilePath '${pfxPath}' -CertStoreLocation Cert:\\LocalMachine\\Root`);
|
|
100
|
+
const result = await (0, generalUtils_js_1.spawnAsync)('powershell', psCommandArgs, { stdio: mergedOptions.logSpawnOutput ? 'inherit' : 'pipe' });
|
|
101
|
+
throwIfSpawnResultError(result);
|
|
102
|
+
(0, generalUtils_js_1.logIf)(mergedOptions.logSuccess, `${generalUtils_js_1.Emoji.GreenCheck} Successfully installed cert: ${pfxPath}`);
|
|
103
|
+
}
|
|
104
|
+
exports.winInstallCert = winInstallCert;
|
|
105
|
+
/**
|
|
106
|
+
* Uses Powershell to check if a cert is already installed to the local machine's trusted root store.
|
|
107
|
+
* Uses the subject of the cert in order to avoid false negatives from regenerating the same self-signed cert
|
|
108
|
+
* with the same subject but different thumbprint. Note that this method is geared towards use with certs generated
|
|
109
|
+
* with the {@link generateCertWithOpenSsl} function, so this may not work using subject if your subject is not precisely "`CN=<url>`".
|
|
110
|
+
* @param identifier The subject or path to the pfx file of the cert to check.
|
|
111
|
+
* @returns `true` if the cert is already installed, `false` otherwise.
|
|
112
|
+
*/
|
|
113
|
+
async function winCertIsInstalled(identifier, options) {
|
|
114
|
+
if (!(0, generalUtils_js_1.isPlatformWindows)()) {
|
|
115
|
+
throw new Error('winCertIsInstalled is only supported on Windows');
|
|
116
|
+
}
|
|
117
|
+
const mergedOptions = { ...defaultCertLogOptions, ...options };
|
|
118
|
+
let psCommandArgs;
|
|
119
|
+
// Get the count of certs installed with the same subject as the one we're trying to install
|
|
120
|
+
if (typeof identifier === 'string') {
|
|
121
|
+
(0, generalUtils_js_1.requireString)('subject', identifier);
|
|
122
|
+
validateSubject(identifier);
|
|
123
|
+
const subject = identifier.startsWith('CN=') ? identifier : `CN=${identifier}`;
|
|
124
|
+
psCommandArgs = (0, generalUtils_js_1.getPowershellHackArgs)(`Write-Host (Get-ChildItem Cert:\\LocalMachine\\Root | Where-Object { $_.Subject -eq '${subject}' } | Measure-Object).Count`);
|
|
119
125
|
}
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
throw Error(`powershell command to install cert failed with exit code ${result.code}`);
|
|
126
|
+
else if ('pfxPath' in identifier) {
|
|
127
|
+
validatePfxPath(identifier.pfxPath);
|
|
128
|
+
psCommandArgs = (0, generalUtils_js_1.getPowershellHackArgs)(`Write-Host (Get-ChildItem Cert:\\LocalMachine\\Root | Where-Object { $_.Subject -eq (Get-PfxCertificate -FilePath '${identifier.pfxPath}').Subject } | Measure-Object).Count`);
|
|
124
129
|
}
|
|
130
|
+
const tracePart = (typeof identifier === 'string') ? `subject ${identifier}` : `pfxPath ${identifier.pfxPath}`;
|
|
131
|
+
(0, generalUtils_js_1.logIf)(mergedOptions.logTraceMessages, `checking if cert with ${tracePart} is already installed`);
|
|
132
|
+
const result = await (0, generalUtils_js_1.spawnAsync)('powershell', psCommandArgs, { stdio: 'pipe' });
|
|
133
|
+
throwIfSpawnResultError(result);
|
|
134
|
+
const lines = (0, generalUtils_js_1.stringToNonEmptyLines)(result.stdout);
|
|
135
|
+
if (lines.length !== 1) {
|
|
136
|
+
throw new Error(`Unexpected output from powershell command to check if the cert is already installed: ${result.stdout}`);
|
|
137
|
+
}
|
|
138
|
+
return lines[0].trim() !== '0';
|
|
125
139
|
}
|
|
126
|
-
exports.
|
|
140
|
+
exports.winCertIsInstalled = winCertIsInstalled;
|
|
127
141
|
/**
|
|
128
|
-
* Uses Powershell to uninstall a cert from the local machine's trusted root store. Must have
|
|
129
|
-
* @param
|
|
142
|
+
* Uses Powershell to uninstall a cert from the local machine's trusted root store. Must have elevated permissions.
|
|
143
|
+
* @param identifier The subject, thumbprint or path to the pfx file of the cert to uninstall.
|
|
144
|
+
* @param options Options for uninstalling the cert.
|
|
130
145
|
*/
|
|
131
|
-
async function winUninstallCert(
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
const
|
|
136
|
-
|
|
137
|
-
|
|
146
|
+
async function winUninstallCert(identifier, options) {
|
|
147
|
+
if (!(0, generalUtils_js_1.isPlatformWindows)()) {
|
|
148
|
+
throw new Error('winUninstallCert is only supported on Windows');
|
|
149
|
+
}
|
|
150
|
+
const mergedOptions = { ...defaultCertLogOptions, ...options };
|
|
151
|
+
(0, generalUtils_js_1.logIf)(mergedOptions.logElevatedPermissionsMessage, getRequiresElevatedPermissionsMessage(false));
|
|
152
|
+
let psCommandArgs;
|
|
153
|
+
if (typeof identifier === 'string') {
|
|
154
|
+
(0, generalUtils_js_1.requireString)('subject', identifier);
|
|
155
|
+
validateSubject(identifier);
|
|
156
|
+
psCommandArgs = (0, generalUtils_js_1.getPowershellHackArgs)(`Get-ChildItem Cert:\\LocalMachine\\Root | Where-Object { $_.Subject -match '${identifier}' } | Remove-Item`);
|
|
157
|
+
}
|
|
158
|
+
else if ('thumbprint' in identifier) {
|
|
159
|
+
validateNoQuotes('thumbprint', identifier.thumbprint);
|
|
160
|
+
psCommandArgs = (0, generalUtils_js_1.getPowershellHackArgs)(`Get-ChildItem Cert:\\LocalMachine\\Root | Where-Object { $_.Thumbprint -eq '${identifier.thumbprint}' } | Remove-Item`);
|
|
161
|
+
}
|
|
162
|
+
else if ('pfxPath' in identifier) {
|
|
163
|
+
validatePfxPath(identifier.pfxPath);
|
|
164
|
+
psCommandArgs = (0, generalUtils_js_1.getPowershellHackArgs)(`$thumbprint = (Get-PfxCertificate -FilePath '${identifier.pfxPath}').Thumbprint; Get-ChildItem Cert:\\LocalMachine\\Root | Where-Object { $_.Thumbprint -eq $thumbprint } | Remove-Item`);
|
|
138
165
|
}
|
|
166
|
+
const tracePart = typeof identifier === 'string' ? `'${identifier}'` : JSON.stringify(identifier);
|
|
167
|
+
(0, generalUtils_js_1.logIf)(mergedOptions.logTraceMessages, `uninstalling cert ${tracePart}`);
|
|
168
|
+
const result = await (0, generalUtils_js_1.spawnAsync)('powershell', psCommandArgs, { stdio: mergedOptions.logSpawnOutput ? 'inherit' : 'pipe' });
|
|
169
|
+
throwIfSpawnResultError(result);
|
|
170
|
+
(0, generalUtils_js_1.logIf)(mergedOptions.logSuccess, `${generalUtils_js_1.Emoji.GreenCheck} Successfully uninstalled cert`);
|
|
139
171
|
}
|
|
140
172
|
exports.winUninstallCert = winUninstallCert;
|
|
173
|
+
/**
|
|
174
|
+
* Uses Powershell to get info about a cert.
|
|
175
|
+
* @param pfxPath The path to the pfx file to get info for.
|
|
176
|
+
* @returns The subject, thumbprint and pfxPath of the cert.
|
|
177
|
+
*/
|
|
178
|
+
async function winGetPfxInfo(pfxPath) {
|
|
179
|
+
if (!(0, generalUtils_js_1.isPlatformWindows)()) {
|
|
180
|
+
throw new Error('winGetPfxInfo is only supported on Windows');
|
|
181
|
+
}
|
|
182
|
+
validatePfxPath(pfxPath);
|
|
183
|
+
const psCommandArgs = (0, generalUtils_js_1.getPowershellHackArgs)(`Get-PfxCertificate -FilePath '${pfxPath}' | Select-Object -Property Subject, Thumbprint, @{Name='PfxPath';Expression={'${pfxPath}'}} | ConvertTo-Json`);
|
|
184
|
+
const result = await (0, generalUtils_js_1.spawnAsync)('powershell', psCommandArgs, { stdio: 'pipe' });
|
|
185
|
+
throwIfSpawnResultError(result);
|
|
186
|
+
const json = result.stdout.trim();
|
|
187
|
+
const parsedJson = JSON.parse(json);
|
|
188
|
+
const certInfo = {
|
|
189
|
+
subject: parsedJson.Subject,
|
|
190
|
+
thumbprint: parsedJson.Thumbprint,
|
|
191
|
+
pfxPath: parsedJson.PfxPath
|
|
192
|
+
};
|
|
193
|
+
return certInfo;
|
|
194
|
+
}
|
|
195
|
+
exports.winGetPfxInfo = winGetPfxInfo;
|
|
141
196
|
/**
|
|
142
197
|
* Does not actually do anything - just outputs the manual instructions for installing a cert for use by chrome on linux.
|
|
143
198
|
*/
|
|
@@ -146,34 +201,13 @@ function linuxInstallCert() {
|
|
|
146
201
|
Manual Instructions:
|
|
147
202
|
- In Chrome, go to chrome://settings/certificates
|
|
148
203
|
- Select Authorities -> import
|
|
149
|
-
- Select your generated .crt file (in the ./cert/ directory by default - if you haven't generated it, see the generateCertWithOpenSsl
|
|
204
|
+
- Select your generated .crt file (in the ./cert/ directory by default - if you haven't generated it, see the generateCertWithOpenSsl function)
|
|
150
205
|
- Check box for "Trust certificate for identifying websites"
|
|
151
206
|
- Click OK
|
|
152
207
|
- Reload site`;
|
|
153
208
|
console.log(instructions);
|
|
154
209
|
}
|
|
155
210
|
exports.linuxInstallCert = linuxInstallCert;
|
|
156
|
-
/**
|
|
157
|
-
* Uses Powershell to check if a cert is already installed to the local machine's trusted root store.
|
|
158
|
-
* @param urlOrSubject The url or subject of the cert to check. If the cert was installed with the winInstallCert method, this will be the url passed to that method.
|
|
159
|
-
* @returns `true` if the cert is already installed, `false` otherwise.
|
|
160
|
-
*/
|
|
161
|
-
async function winCertAlreadyInstalled(urlOrSubject) {
|
|
162
|
-
const psCommand = `${powershellHackPrefix}Get-ChildItem Cert:\\LocalMachine\\Root | Where-Object { $_.Subject -match '${urlOrSubject}' }`;
|
|
163
|
-
// The stdio option of 'pipe' is important here - if left to default of spawnAsync ('inherit'), stdout will be empty
|
|
164
|
-
const result = await nodeCliUtils.spawnAsync('powershell', ['-NoProfile', '-ExecutionPolicy', 'Bypass', '-Command', psCommand], { stdio: ['inherit', 'pipe', 'pipe'] });
|
|
165
|
-
if (result.code !== 0) {
|
|
166
|
-
throw Error(`powershell command to find installed cert failed with exit code ${result.code}`);
|
|
167
|
-
}
|
|
168
|
-
const lines = nodeCliUtils.stringToNonEmptyLines(result.stdout);
|
|
169
|
-
for (const line of lines) {
|
|
170
|
-
if (line.includes(urlOrSubject)) {
|
|
171
|
-
return true;
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
return false;
|
|
175
|
-
}
|
|
176
|
-
exports.winCertAlreadyInstalled = winCertAlreadyInstalled;
|
|
177
211
|
function throwIfMaybeBadUrlChars(url, varName = 'url') {
|
|
178
212
|
if (url.includes(' ')) {
|
|
179
213
|
throw Error(`${varName} should not contain spaces`);
|
|
@@ -186,7 +220,7 @@ function throwIfMaybeBadUrlChars(url, varName = 'url') {
|
|
|
186
220
|
}
|
|
187
221
|
}
|
|
188
222
|
function getBrewOpensslPath() {
|
|
189
|
-
const brewResult =
|
|
223
|
+
const brewResult = (0, generalUtils_js_1.simpleSpawnSync)('brew', ['--prefix', 'openssl']);
|
|
190
224
|
if (brewResult.error) {
|
|
191
225
|
throw Error('error attempting to find openssl installed by brew');
|
|
192
226
|
}
|
|
@@ -198,6 +232,36 @@ function getBrewOpensslPath() {
|
|
|
198
232
|
function getSanCnfFileContents(url) {
|
|
199
233
|
return sanCnfTemplate.replace(/{{url}}/g, url);
|
|
200
234
|
}
|
|
235
|
+
function validateSubject(subject) {
|
|
236
|
+
if (subject.includes('\\') || subject.includes('/') || subject.endsWith('.pfx')) {
|
|
237
|
+
throw new Error(`The subject appears to be a file path, which is not allowed. Did you mean to pass something like this instead: { pfxPath: '${subject}' } ?`);
|
|
238
|
+
}
|
|
239
|
+
validateNoQuotes('subject', subject);
|
|
240
|
+
}
|
|
241
|
+
function validateNoQuotes(name, value) {
|
|
242
|
+
if (value.includes("'") || value.includes('"')) {
|
|
243
|
+
throw new Error(`The value passed for '${name}' contains a single or double quote, which is not allowed.`);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
function throwIfSpawnResultError(result) {
|
|
247
|
+
if (result.code !== 0) {
|
|
248
|
+
// There won't be any stderr if stdio was set to 'inherit', so we're checking first
|
|
249
|
+
if (result.stderr) {
|
|
250
|
+
console.error((0, generalUtils_js_1.red)('Error:'), result.stderr);
|
|
251
|
+
}
|
|
252
|
+
throw Error(`Spawned command failed with exit code ${result.code}`);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
function validatePfxPath(pfxPath) {
|
|
256
|
+
if (!pfxPath.endsWith('.pfx')) {
|
|
257
|
+
throw new Error('pfxPath must end with .pfx');
|
|
258
|
+
}
|
|
259
|
+
(0, generalUtils_js_1.requireValidPath)('pfxPath', pfxPath);
|
|
260
|
+
validateNoQuotes('pfxPath', pfxPath);
|
|
261
|
+
}
|
|
262
|
+
function getRequiresElevatedPermissionsMessage(isInstall = true) {
|
|
263
|
+
return `${generalUtils_js_1.Emoji.Info} Important: ${isInstall ? '' : 'un'}installing a certificate requires elevated permissions`;
|
|
264
|
+
}
|
|
201
265
|
// Newer cert requirements force the need for "extension info" with DNS and IP info, but openssl v1.x doesn't support that with the
|
|
202
266
|
// CLI option -addext, so we're using a san.cnf file instead and passing this into the CLI command with the -config option.
|
|
203
267
|
const sanCnfTemplate = `[req]
|
|
@@ -216,4 +280,4 @@ DNS.1 = {{url}}
|
|
|
216
280
|
IP.1 = 127.0.0.1
|
|
217
281
|
|
|
218
282
|
`;
|
|
219
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VydFV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NlcnRVdGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHNEQUF3QjtBQUN4QixnRUFBa0M7QUFDbEMsMERBQTRCO0FBQzVCLGdFQUFpRDtBQUNqRCx1REFBdUM7QUFFdkMsTUFBTSxvQkFBb0IsR0FBRywwQ0FBMEMsQ0FBQTtBQUN2RSxNQUFNLG9CQUFvQixHQUFHLHdGQUF3RixDQUFBO0FBRXJIOzs7O0dBSUc7QUFDSSxLQUFLLFVBQVUsdUJBQXVCLENBQUMsR0FBVyxFQUFFLGtCQUEwQixRQUFRO0lBQzNGLFlBQVksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFBO0lBQ3RDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQzVCLE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxhQUFhLEVBQUUsQ0FBQTtJQUMxQyxNQUFNLFNBQVMsR0FBRyxFQUFFLEdBQUcsRUFBRSxlQUFlLEVBQUUsQ0FBQTtJQUUxQyxJQUFBLHFCQUFHLEVBQUMsb0NBQW9DLENBQUMsQ0FBQTtJQUN6QyxJQUFJLGVBQWUsR0FBVyxFQUFFLENBQUE7SUFDaEMsSUFBSSxDQUFDLEtBQUssRUFBRTtRQUNWLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFBO1FBQzlELElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDaEIsTUFBTSxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQTtTQUNyRDtRQUNELElBQUEscUJBQUcsRUFBQyx1QkFBdUIsV0FBVyxFQUFFLENBQUMsQ0FBQTtLQUMxQztTQUFNLElBQUksS0FBSyxFQUFFO1FBQ2hCLE1BQU0sb0JBQW9CLEdBQUcsa0JBQWtCLEVBQUUsQ0FBQTtRQUNqRCxJQUFJLENBQUMsb0JBQW9CLEVBQUU7WUFDekIsTUFB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
|
|
283
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VydFV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NlcnRVdGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxzREFBd0I7QUFDeEIsZ0VBQWtDO0FBQ2xDLDBEQUE0QjtBQUM1Qix1REFnQjBCO0FBZTFCLE1BQU0scUJBQXFCLEdBQW1CO0lBQzVDLGNBQWMsRUFBRSxLQUFLO0lBQ3JCLGdCQUFnQixFQUFFLEtBQUs7SUFDdkIsNkJBQTZCLEVBQUUsSUFBSTtJQUNuQyxVQUFVLEVBQUUsSUFBSTtDQUNqQixDQUFBO0FBV0Q7Ozs7O0dBS0c7QUFDSSxLQUFLLFVBQVUsdUJBQXVCLENBQUMsR0FBVyxFQUFFLE9BQXNDO0lBQy9GLElBQUEsK0JBQWEsRUFBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUE7SUFDekIsdUJBQXVCLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDNUIsTUFBTSxLQUFLLEdBQUcsSUFBQSwrQkFBYSxHQUFFLENBQUE7SUFFN0IsTUFBTSxhQUFhLEdBQXdCLEVBQUUsR0FBRyxxQkFBcUIsRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUE7SUFFOUcsTUFBTSxTQUFTLEdBQW1DLEVBQUUsR0FBRyxFQUFFLGFBQWEsQ0FBQyxlQUFlLEVBQUUsS0FBSyxFQUFFLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUE7SUFFbEosSUFBQSx1QkFBSyxFQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxrQ0FBa0MsQ0FBQyxDQUFBO0lBRXpFLElBQUksZUFBZSxHQUFXLEVBQUUsQ0FBQTtJQUNoQyxJQUFJLENBQUMsS0FBSyxFQUFFO1FBQ1YsTUFBTSxXQUFXLEdBQUcsSUFBQSwyQkFBUyxFQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQTtRQUNqRCxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2hCLE1B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
|
|
@@ -92,7 +92,7 @@ async function deleteScriptFileIfEmpty(scriptPath) {
|
|
|
92
92
|
await promises_1.default.unlink(scriptPath);
|
|
93
93
|
}
|
|
94
94
|
else {
|
|
95
|
-
(0, generalUtils_js_1.log)(
|
|
95
|
+
(0, generalUtils_js_1.log)(`${generalUtils_js_1.Emoji.Warning} Skipping deletion of non-empty script file: ${scriptPath}`);
|
|
96
96
|
}
|
|
97
97
|
}
|
|
98
98
|
}
|
|
@@ -110,7 +110,7 @@ async function getLastMigrationName(projectPath, dbContextName) {
|
|
|
110
110
|
});
|
|
111
111
|
(0, generalUtils_js_1.log)(`Found migrations: ${migrationNamesWithTimestamps.map(m => m.name).join(', ')}`);
|
|
112
112
|
(0, generalUtils_js_1.log)(`Found timestamps: ${migrationNamesWithTimestamps.map(m => m.timestamp).join(', ')}`);
|
|
113
|
-
const sortedMigrationNames = migrationNamesWithTimestamps.sort((a, b) => a.timestamp.localeCompare(b.timestamp));
|
|
113
|
+
const sortedMigrationNames = [...migrationNamesWithTimestamps].sort((a, b) => a.timestamp.localeCompare(b.timestamp));
|
|
114
114
|
const lastMigrationName = sortedMigrationNames[sortedMigrationNames.length - 1].name;
|
|
115
115
|
return lastMigrationName;
|
|
116
116
|
}
|
|
@@ -123,7 +123,7 @@ function getMigrationsDirectory(projectDirectory, dbContextName) {
|
|
|
123
123
|
function getScriptPath(projectDirectory, migrationName, isUp) {
|
|
124
124
|
return node_path_1.default.join(projectDirectory, `Scripts/${migrationName}${isUp ? '' : '_Down'}.sql`);
|
|
125
125
|
}
|
|
126
|
-
async function
|
|
126
|
+
async function getCSharpMigrationFilePath(projectDirectory, dbContextName, migrationName) {
|
|
127
127
|
const migrationsOutputDir = getMigrationsDirectory(projectDirectory, dbContextName);
|
|
128
128
|
if (!node_fs_1.default.existsSync(migrationsOutputDir)) {
|
|
129
129
|
throw new Error(`Unable to add migration C# boilerplate - could not find migrations output directory: ${migrationsOutputDir}`);
|
|
@@ -140,66 +140,56 @@ async function addDbMigrationBoilerplate(projectDirectory, dbContextName, migrat
|
|
|
140
140
|
const filename = filenames[0];
|
|
141
141
|
const filePath = node_path_1.default.join(migrationsOutputDir, filename);
|
|
142
142
|
if (!node_fs_1.default.existsSync(filePath)) {
|
|
143
|
-
throw new Error(`Issue generating file path for migration (
|
|
144
|
-
}
|
|
145
|
-
(0, generalUtils_js_1.log)(`Adding boilerplate to file 📄${filePath}`);
|
|
146
|
-
const usingLine = 'using MikeyT.DbMigrations;';
|
|
147
|
-
const upLine = `MigrationScriptRunner.RunScript(migrationBuilder, "${migrationName}.sql");`;
|
|
148
|
-
const downLine = `MigrationScriptRunner.RunScript(migrationBuilder, "${migrationName}_Down.sql");`;
|
|
149
|
-
const fileContents = await promises_1.default.readFile(filePath, { encoding: 'utf8' });
|
|
150
|
-
const lines = fileContents.replaceAll('\r', '').split('\n');
|
|
151
|
-
const newLines = [];
|
|
152
|
-
newLines.push(lines[0].trim());
|
|
153
|
-
newLines.push(usingLine);
|
|
154
|
-
let addUpLine = false;
|
|
155
|
-
let addDownLine = false;
|
|
156
|
-
let skipNextLineIfBlank = false;
|
|
157
|
-
for (let i = 1; i < lines.length; i++) {
|
|
158
|
-
if (skipNextLineIfBlank && lines[i].trim().length === 0) {
|
|
159
|
-
skipNextLineIfBlank = false;
|
|
160
|
-
continue;
|
|
161
|
-
}
|
|
162
|
-
if (addUpLine) {
|
|
163
|
-
const newLine = lines[i].replace('{', `{\n\t\t\t${upLine}`);
|
|
164
|
-
newLines.push(newLine);
|
|
165
|
-
addUpLine = false;
|
|
166
|
-
skipNextLineIfBlank = true;
|
|
167
|
-
continue;
|
|
168
|
-
}
|
|
169
|
-
if (addDownLine) {
|
|
170
|
-
const newLine = lines[i].replace('{', `{\n\t\t\t${downLine}`);
|
|
171
|
-
newLines.push(newLine);
|
|
172
|
-
addDownLine = false;
|
|
173
|
-
skipNextLineIfBlank = true;
|
|
174
|
-
continue;
|
|
175
|
-
}
|
|
176
|
-
newLines.push(lines[i]);
|
|
177
|
-
if (lines[i].includes('void Up')) {
|
|
178
|
-
addUpLine = true;
|
|
179
|
-
}
|
|
180
|
-
if (lines[i].includes('void Down')) {
|
|
181
|
-
addDownLine = true;
|
|
182
|
-
}
|
|
143
|
+
throw new Error(`Issue generating file path for migration (bad file path): ${filePath}`);
|
|
183
144
|
}
|
|
184
|
-
|
|
145
|
+
return filePath;
|
|
146
|
+
}
|
|
147
|
+
async function addDbMigrationBoilerplate(projectDirectory, dbContextName, migrationName) {
|
|
148
|
+
const filePath = await getCSharpMigrationFilePath(projectDirectory, dbContextName, migrationName);
|
|
149
|
+
(0, generalUtils_js_1.log)(`Replacing file contents with boilerplate for file 📄${filePath}`);
|
|
150
|
+
const newFileContents = cSharpMigrationFileTemplate
|
|
151
|
+
.replaceAll(contextNamePlaceholder, dbContextName)
|
|
152
|
+
.replaceAll(migrationNamePlaceholder, migrationName);
|
|
185
153
|
await promises_1.default.writeFile(filePath, newFileContents, { encoding: 'utf8' });
|
|
186
|
-
(0, generalUtils_js_1.log)(`Updated file with boilerplate - please ensure it is correct:
|
|
154
|
+
(0, generalUtils_js_1.log)(`Updated file with boilerplate - please ensure it is correct: 📄${filePath}`);
|
|
187
155
|
const upScriptPath = node_path_1.default.join(projectDirectory, `Scripts/${migrationName}.sql`);
|
|
188
156
|
const downScriptPath = node_path_1.default.join(projectDirectory, `Scripts/${migrationName}_Down.sql`);
|
|
189
157
|
(0, generalUtils_js_1.log)('\nCreating corresponding empty sql files (no action will be taken if they already exist):');
|
|
190
158
|
(0, generalUtils_js_1.log)(` - 📄${upScriptPath}`);
|
|
191
159
|
(0, generalUtils_js_1.log)(` - 📄${downScriptPath}\n`);
|
|
192
|
-
|
|
193
|
-
|
|
160
|
+
await writeEmptySqlFileIfNotExists(upScriptPath, 'Up');
|
|
161
|
+
await writeEmptySqlFileIfNotExists(downScriptPath, 'Down');
|
|
162
|
+
}
|
|
163
|
+
async function writeEmptySqlFileIfNotExists(scriptPath, scriptType) {
|
|
164
|
+
if (!node_fs_1.default.existsSync(scriptPath)) {
|
|
165
|
+
await promises_1.default.writeFile(scriptPath, '', { encoding: 'utf8' });
|
|
194
166
|
}
|
|
195
167
|
else {
|
|
196
|
-
(0, generalUtils_js_1.log)(
|
|
168
|
+
(0, generalUtils_js_1.log)(`Skipping ${scriptType} sql script (already exists)`);
|
|
197
169
|
}
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
170
|
+
}
|
|
171
|
+
const contextNamePlaceholder = '{{context_name}}';
|
|
172
|
+
const migrationNamePlaceholder = '{{migration_name}}';
|
|
173
|
+
const cSharpMigrationFileTemplate = `using Microsoft.EntityFrameworkCore.Migrations;
|
|
174
|
+
using MikeyT.DbMigrations;
|
|
175
|
+
|
|
176
|
+
#nullable disable
|
|
177
|
+
|
|
178
|
+
namespace DbMigrator.Migrations.${contextNamePlaceholder}Migrations
|
|
179
|
+
{
|
|
180
|
+
public partial class ${migrationNamePlaceholder} : Migration
|
|
181
|
+
{
|
|
182
|
+
protected override void Up(MigrationBuilder migrationBuilder)
|
|
183
|
+
{
|
|
184
|
+
MigrationScriptRunner.RunScript(migrationBuilder, "${migrationNamePlaceholder}.sql");
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
protected override void Down(MigrationBuilder migrationBuilder)
|
|
188
|
+
{
|
|
189
|
+
MigrationScriptRunner.RunScript(migrationBuilder, "${migrationNamePlaceholder}_Down.sql");
|
|
190
|
+
}
|
|
203
191
|
}
|
|
204
192
|
}
|
|
205
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGJNaWdyYXRpb25VdGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYk1pZ3JhdGlvblV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHVEQUFxRztBQUNyRywwREFBNEI7QUFDNUIsc0RBQXdCO0FBQ3hCLGdFQUFrQztBQUVsQzs7Ozs7Ozs7R0FRRztBQUNJLEtBQUssVUFBVSxlQUFlLENBQUMsV0FBbUIsRUFBRSxhQUFxQixFQUFFLElBQWMsRUFBRSxPQUFPLEdBQUcsSUFBSTtJQUM5RyxJQUFBLGtDQUFnQixFQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQTtJQUM1QyxJQUFBLCtCQUFhLEVBQUMsZUFBZSxFQUFFLGFBQWEsQ0FBQyxDQUFBO0lBQzdDLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBQSw0QkFBVSxFQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLEdBQUcsSUFBSSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3BKLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQTtBQUNwQixDQUFDO0FBTEQsMENBS0M7QUFFRDs7OztHQUlHO0FBQ0ksS0FBSyxVQUFVLGdCQUFnQixDQUFDLFdBQW1CLEVBQUUsYUFBcUI7SUFDL0UsTUFBTSxlQUFlLENBQUMsV0FBVyxFQUFFLGFBQWEsRUFBRSxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBRSxDQUFBO0FBQzVFLENBQUM7QUFGRCw0Q0FFQztBQUVEOzs7OztHQUtHO0FBQ0ksS0FBSyxVQUFVLGtCQUFrQixDQUFDLFdBQW1CLEVBQUUsYUFBcUIsRUFBRSxhQUFzQjtJQUN6RyxNQUFNLGVBQWUsQ0FBQyxXQUFXLEVBQUUsYUFBYSxFQUFFLENBQUMsVUFB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
|
|
193
|
+
|
|
194
|
+
`;
|
|
195
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGJNaWdyYXRpb25VdGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYk1pZ3JhdGlvblV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHVEQUE0RztBQUM1RywwREFBNEI7QUFDNUIsc0RBQXdCO0FBQ3hCLGdFQUFrQztBQUVsQzs7Ozs7Ozs7R0FRRztBQUNJLEtBQUssVUFBVSxlQUFlLENBQUMsV0FBbUIsRUFBRSxhQUFxQixFQUFFLElBQWMsRUFBRSxPQUFPLEdBQUcsSUFBSTtJQUM5RyxJQUFBLGtDQUFnQixFQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQTtJQUM1QyxJQUFBLCtCQUFhLEVBQUMsZUFBZSxFQUFFLGFBQWEsQ0FBQyxDQUFBO0lBQzdDLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBQSw0QkFBVSxFQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLEdBQUcsSUFBSSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3BKLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQTtBQUNwQixDQUFDO0FBTEQsMENBS0M7QUFFRDs7OztHQUlHO0FBQ0ksS0FBSyxVQUFVLGdCQUFnQixDQUFDLFdBQW1CLEVBQUUsYUFBcUI7SUFDL0UsTUFBTSxlQUFlLENBQUMsV0FBVyxFQUFFLGFBQWEsRUFBRSxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBRSxDQUFBO0FBQzVFLENBQUM7QUFGRCw0Q0FFQztBQUVEOzs7OztHQUtHO0FBQ0ksS0FBSyxVQUFVLGtCQUFrQixDQUFDLFdBQW1CLEVBQUUsYUFBcUIsRUFBRSxhQUFzQjtJQUN6RyxNQUFNLGVBQWUsQ0FBQyxXQUFXLEVBQUUsYUFBYSxFQUFFLENBQUMsVUFB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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dotnetUtils.d.ts","sourceRoot":"","sources":["../../src/dotnetUtils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dotnetUtils.d.ts","sourceRoot":"","sources":["../../src/dotnetUtils.ts"],"names":[],"mappings":"AAMA;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,iBAGpD;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CAAC,WAAW,GAAE,MAAa,EAAE,aAAa,GAAE,MAAkB,EAAE,SAAS,GAAE,MAAkB,EAAE,GAAG,CAAC,EAAE,MAAM,iBAY7I;AAED;;GAEG;AACH,wBAAsB,2BAA2B,kBAShD;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,kBAG5C"}
|
package/dist/cjs/dotnetUtils.js
CHANGED
|
@@ -27,7 +27,9 @@ async function dotnetPublish(projectPath = './', configuration = 'Release', outp
|
|
|
27
27
|
(0, generalUtils_js_1.requireValidPath)('cwd', cwd);
|
|
28
28
|
}
|
|
29
29
|
const args = ['publish', projectPath, '-c', configuration, '-o', outputDir];
|
|
30
|
-
|
|
30
|
+
const traceMessage = `running dotnet ${args.join(' ')}`;
|
|
31
|
+
const traceAdditional = cwd ? ` in cwd ${cwd}` : '';
|
|
32
|
+
(0, generalUtils_js_1.trace)(`${traceMessage}${traceAdditional}`);
|
|
31
33
|
await (0, generalUtils_js_1.spawnAsync)('dotnet', args, { cwd: cwd });
|
|
32
34
|
}
|
|
33
35
|
exports.dotnetPublish = dotnetPublish;
|
|
@@ -56,4 +58,4 @@ async function configureDotnetDevCerts() {
|
|
|
56
58
|
await (0, generalUtils_js_1.spawnAsync)('dotnet', ['dev-certs', 'https', '-t']);
|
|
57
59
|
}
|
|
58
60
|
exports.configureDotnetDevCerts = configureDotnetDevCerts;
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG90bmV0VXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZG90bmV0VXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdURBQXNHO0FBTXRHOzs7O0dBSUc7QUFDSSxLQUFLLFVBQVUsV0FBVyxDQUFDLFdBQW1CO0lBQ25ELElBQUEsa0NBQWdCLEVBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFBO0lBQzVDLE1BQU0sSUFBQSw0QkFBVSxFQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsRUFBRSxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO0FBQzlFLENBQUM7QUFIRCxrQ0FHQztBQUVEOzs7Ozs7R0FNRztBQUNJLEtBQUssVUFBVSxhQUFhLENBQUMsY0FBc0IsSUFBSSxFQUFFLGdCQUF3QixTQUFTLEVBQUUsWUFBb0IsU0FBUyxFQUFFLEdBQVk7SUFDNUksSUFBQSxrQ0FBZ0IsRUFBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUE7SUFDNUMsSUFBQSwrQkFBYSxFQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQTtJQUNyQyxJQUFBLCtCQUFhLEVBQUMsZUFBZSxFQUFFLGFBQWEsQ0FBQyxDQUFBO0lBQzdDLElBQUksR0FBRyxFQUFFO1FBQ1AsSUFBQSxrQ0FBZ0IsRUFBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUE7S0FDN0I7SUFDRCxNQUFNLElBQUksR0FBRyxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUE7SUFDM0UsTUFBTSxZQUFZLEdBQUcsa0JBQWtCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQTtJQUN2RCxNQUFNLGVBQWUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUNuRCxJQUFBLHVCQUFLLEVBQUMsR0FBRyxZQUFZLEdBQUcsZUFBZSxFQUFFLENBQUMsQ0FBQTtJQUMxQyxNQUFNLElBQUEsNEJBQVUsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUE7QUFDaEQsQ0FBQztBQVpELHNDQVlDO0FBRUQ7O0dBRUc7QUFDSSxLQUFLLFVBQVUsMkJBQTJCO0lBQy9DLE1BQU0sU0FBUyxHQUFHLElBQUEsMkJBQVMsRUFBQyxXQUFXLENBQUMsQ0FBQyxRQUFRLENBQUE7SUFDakQsSUFBSSxTQUFTLEVBQUU7UUFDYixJQUFBLHFCQUFHLEVBQUMsK0NBQStDLENBQUMsQ0FBQTtLQUNyRDtTQUFNO1FBQ0wsSUFBQSxxQkFBRyxFQUFDLDZDQUE2QyxDQUFDLENBQUE7S0FDbkQ7SUFDRCxNQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQTtJQUNoRixNQUFNLElBQUEsNEJBQVUsRUFBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUE7QUFDbEMsQ0FBQztBQVRELGtFQVNDO0FBRUQ7Ozs7R0FJRztBQUNJLEtBQUssVUFBVSx1QkFBdUI7SUFDM0MsTUFBTSxJQUFBLDRCQUFVLEVBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFBO0lBQzdELE1BQU0sSUFBQSw0QkFBVSxFQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQTtBQUMxRCxDQUFDO0FBSEQsMERBR0MifQ==
|