@mikeyt23/node-cli-utils 2.0.0-beta.1 → 2.0.0-beta.3
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/DependencyChecker.d.ts +26 -0
- package/dist/cjs/DependencyChecker.d.ts.map +1 -0
- package/dist/cjs/DependencyChecker.js +200 -0
- 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/NixUtil.d.ts +8 -0
- package/dist/cjs/NixUtil.d.ts.map +1 -0
- package/dist/cjs/NixUtil.js +50 -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 +176 -111
- package/dist/cjs/colors.d.ts +17 -0
- package/dist/cjs/colors.d.ts.map +1 -0
- package/dist/cjs/colors.js +30 -0
- 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 +252 -26
- package/dist/cjs/generalUtils.d.ts.map +1 -1
- package/dist/cjs/generalUtils.js +503 -107
- package/dist/cjs/generalUtilsInternal.d.ts +9 -3
- package/dist/cjs/generalUtilsInternal.d.ts.map +1 -1
- package/dist/cjs/generalUtilsInternal.js +160 -59
- package/dist/cjs/hostFileUtils.d.ts +18 -0
- package/dist/cjs/hostFileUtils.d.ts.map +1 -0
- package/dist/cjs/hostFileUtils.js +100 -0
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +2 -1
- package/dist/cjs/runWhileParentAlive.js +7 -9
- package/dist/cjs/testUtils.d.ts +11 -0
- package/dist/cjs/testUtils.d.ts.map +1 -0
- package/dist/cjs/testUtils.js +58 -0
- package/dist/esm/DependencyChecker.d.ts +26 -0
- package/dist/esm/DependencyChecker.d.ts.map +1 -0
- package/dist/esm/DependencyChecker.js +172 -0
- 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/NixUtil.d.ts +8 -0
- package/dist/esm/NixUtil.d.ts.map +1 -0
- package/dist/esm/NixUtil.js +46 -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 +173 -86
- package/dist/esm/colors.d.ts +17 -0
- package/dist/esm/colors.d.ts.map +1 -0
- package/dist/esm/colors.js +20 -0
- 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 +252 -26
- package/dist/esm/generalUtils.d.ts.map +1 -1
- package/dist/esm/generalUtils.js +477 -105
- package/dist/esm/generalUtilsInternal.d.ts +9 -3
- package/dist/esm/generalUtilsInternal.d.ts.map +1 -1
- package/dist/esm/generalUtilsInternal.js +151 -57
- package/dist/esm/hostFileUtils.d.ts +18 -0
- package/dist/esm/hostFileUtils.d.ts.map +1 -0
- package/dist/esm/hostFileUtils.js +85 -0
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +2 -1
- package/dist/esm/runWhileParentAlive.js +8 -10
- package/dist/esm/testUtils.d.ts +11 -0
- package/dist/esm/testUtils.d.ts.map +1 -0
- package/dist/esm/testUtils.js +47 -0
- package/package.json +38 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getConfirmation, log, requireString, requireValidPath, spawnAsync } from './generalUtils.js';
|
|
1
|
+
import { Emoji, getConfirmation, log, requireString, requireValidPath, spawnAsync } from './generalUtils.js';
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import fs from 'node:fs';
|
|
4
4
|
import fsp from 'node:fs/promises';
|
|
@@ -81,7 +81,7 @@ async function deleteScriptFileIfEmpty(scriptPath) {
|
|
|
81
81
|
await fsp.unlink(scriptPath);
|
|
82
82
|
}
|
|
83
83
|
else {
|
|
84
|
-
log(
|
|
84
|
+
log(`${Emoji.Warning} Skipping deletion of non-empty script file: ${scriptPath}`);
|
|
85
85
|
}
|
|
86
86
|
}
|
|
87
87
|
}
|
|
@@ -99,7 +99,7 @@ async function getLastMigrationName(projectPath, dbContextName) {
|
|
|
99
99
|
});
|
|
100
100
|
log(`Found migrations: ${migrationNamesWithTimestamps.map(m => m.name).join(', ')}`);
|
|
101
101
|
log(`Found timestamps: ${migrationNamesWithTimestamps.map(m => m.timestamp).join(', ')}`);
|
|
102
|
-
const sortedMigrationNames = migrationNamesWithTimestamps.sort((a, b) => a.timestamp.localeCompare(b.timestamp));
|
|
102
|
+
const sortedMigrationNames = [...migrationNamesWithTimestamps].sort((a, b) => a.timestamp.localeCompare(b.timestamp));
|
|
103
103
|
const lastMigrationName = sortedMigrationNames[sortedMigrationNames.length - 1].name;
|
|
104
104
|
return lastMigrationName;
|
|
105
105
|
}
|
|
@@ -112,7 +112,7 @@ function getMigrationsDirectory(projectDirectory, dbContextName) {
|
|
|
112
112
|
function getScriptPath(projectDirectory, migrationName, isUp) {
|
|
113
113
|
return path.join(projectDirectory, `Scripts/${migrationName}${isUp ? '' : '_Down'}.sql`);
|
|
114
114
|
}
|
|
115
|
-
async function
|
|
115
|
+
async function getCSharpMigrationFilePath(projectDirectory, dbContextName, migrationName) {
|
|
116
116
|
const migrationsOutputDir = getMigrationsDirectory(projectDirectory, dbContextName);
|
|
117
117
|
if (!fs.existsSync(migrationsOutputDir)) {
|
|
118
118
|
throw new Error(`Unable to add migration C# boilerplate - could not find migrations output directory: ${migrationsOutputDir}`);
|
|
@@ -129,66 +129,56 @@ async function addDbMigrationBoilerplate(projectDirectory, dbContextName, migrat
|
|
|
129
129
|
const filename = filenames[0];
|
|
130
130
|
const filePath = path.join(migrationsOutputDir, filename);
|
|
131
131
|
if (!fs.existsSync(filePath)) {
|
|
132
|
-
throw new Error(`Issue generating file path for migration (
|
|
133
|
-
}
|
|
134
|
-
log(`Adding boilerplate to file 📄${filePath}`);
|
|
135
|
-
const usingLine = 'using MikeyT.DbMigrations;';
|
|
136
|
-
const upLine = `MigrationScriptRunner.RunScript(migrationBuilder, "${migrationName}.sql");`;
|
|
137
|
-
const downLine = `MigrationScriptRunner.RunScript(migrationBuilder, "${migrationName}_Down.sql");`;
|
|
138
|
-
const fileContents = await fsp.readFile(filePath, { encoding: 'utf8' });
|
|
139
|
-
const lines = fileContents.replaceAll('\r', '').split('\n');
|
|
140
|
-
const newLines = [];
|
|
141
|
-
newLines.push(lines[0].trim());
|
|
142
|
-
newLines.push(usingLine);
|
|
143
|
-
let addUpLine = false;
|
|
144
|
-
let addDownLine = false;
|
|
145
|
-
let skipNextLineIfBlank = false;
|
|
146
|
-
for (let i = 1; i < lines.length; i++) {
|
|
147
|
-
if (skipNextLineIfBlank && lines[i].trim().length === 0) {
|
|
148
|
-
skipNextLineIfBlank = false;
|
|
149
|
-
continue;
|
|
150
|
-
}
|
|
151
|
-
if (addUpLine) {
|
|
152
|
-
const newLine = lines[i].replace('{', `{\n\t\t\t${upLine}`);
|
|
153
|
-
newLines.push(newLine);
|
|
154
|
-
addUpLine = false;
|
|
155
|
-
skipNextLineIfBlank = true;
|
|
156
|
-
continue;
|
|
157
|
-
}
|
|
158
|
-
if (addDownLine) {
|
|
159
|
-
const newLine = lines[i].replace('{', `{\n\t\t\t${downLine}`);
|
|
160
|
-
newLines.push(newLine);
|
|
161
|
-
addDownLine = false;
|
|
162
|
-
skipNextLineIfBlank = true;
|
|
163
|
-
continue;
|
|
164
|
-
}
|
|
165
|
-
newLines.push(lines[i]);
|
|
166
|
-
if (lines[i].includes('void Up')) {
|
|
167
|
-
addUpLine = true;
|
|
168
|
-
}
|
|
169
|
-
if (lines[i].includes('void Down')) {
|
|
170
|
-
addDownLine = true;
|
|
171
|
-
}
|
|
132
|
+
throw new Error(`Issue generating file path for migration (bad file path): ${filePath}`);
|
|
172
133
|
}
|
|
173
|
-
|
|
134
|
+
return filePath;
|
|
135
|
+
}
|
|
136
|
+
async function addDbMigrationBoilerplate(projectDirectory, dbContextName, migrationName) {
|
|
137
|
+
const filePath = await getCSharpMigrationFilePath(projectDirectory, dbContextName, migrationName);
|
|
138
|
+
log(`Replacing file contents with boilerplate for file 📄${filePath}`);
|
|
139
|
+
const newFileContents = cSharpMigrationFileTemplate
|
|
140
|
+
.replaceAll(contextNamePlaceholder, dbContextName)
|
|
141
|
+
.replaceAll(migrationNamePlaceholder, migrationName);
|
|
174
142
|
await fsp.writeFile(filePath, newFileContents, { encoding: 'utf8' });
|
|
175
|
-
log(`Updated file with boilerplate - please ensure it is correct:
|
|
143
|
+
log(`Updated file with boilerplate - please ensure it is correct: 📄${filePath}`);
|
|
176
144
|
const upScriptPath = path.join(projectDirectory, `Scripts/${migrationName}.sql`);
|
|
177
145
|
const downScriptPath = path.join(projectDirectory, `Scripts/${migrationName}_Down.sql`);
|
|
178
146
|
log('\nCreating corresponding empty sql files (no action will be taken if they already exist):');
|
|
179
147
|
log(` - 📄${upScriptPath}`);
|
|
180
148
|
log(` - 📄${downScriptPath}\n`);
|
|
181
|
-
|
|
182
|
-
|
|
149
|
+
await writeEmptySqlFileIfNotExists(upScriptPath, 'Up');
|
|
150
|
+
await writeEmptySqlFileIfNotExists(downScriptPath, 'Down');
|
|
151
|
+
}
|
|
152
|
+
async function writeEmptySqlFileIfNotExists(scriptPath, scriptType) {
|
|
153
|
+
if (!fs.existsSync(scriptPath)) {
|
|
154
|
+
await fsp.writeFile(scriptPath, '', { encoding: 'utf8' });
|
|
183
155
|
}
|
|
184
156
|
else {
|
|
185
|
-
log(
|
|
157
|
+
log(`Skipping ${scriptType} sql script (already exists)`);
|
|
186
158
|
}
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
159
|
+
}
|
|
160
|
+
const contextNamePlaceholder = '{{context_name}}';
|
|
161
|
+
const migrationNamePlaceholder = '{{migration_name}}';
|
|
162
|
+
const cSharpMigrationFileTemplate = `using Microsoft.EntityFrameworkCore.Migrations;
|
|
163
|
+
using MikeyT.DbMigrations;
|
|
164
|
+
|
|
165
|
+
#nullable disable
|
|
166
|
+
|
|
167
|
+
namespace DbMigrator.Migrations.${contextNamePlaceholder}Migrations
|
|
168
|
+
{
|
|
169
|
+
public partial class ${migrationNamePlaceholder} : Migration
|
|
170
|
+
{
|
|
171
|
+
protected override void Up(MigrationBuilder migrationBuilder)
|
|
172
|
+
{
|
|
173
|
+
MigrationScriptRunner.RunScript(migrationBuilder, "${migrationNamePlaceholder}.sql");
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
protected override void Down(MigrationBuilder migrationBuilder)
|
|
177
|
+
{
|
|
178
|
+
MigrationScriptRunner.RunScript(migrationBuilder, "${migrationNamePlaceholder}_Down.sql");
|
|
179
|
+
}
|
|
192
180
|
}
|
|
193
181
|
}
|
|
194
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGJNaWdyYXRpb25VdGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYk1pZ3JhdGlvblV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUNyRyxPQUFPLElBQUksTUFBTSxXQUFXLENBQUE7QUFDNUIsT0FBTyxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBQ3hCLE9BQU8sR0FBRyxNQUFNLGtCQUFrQixDQUFBO0FBRWxDOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxlQUFlLENBQUMsV0FBbUIsRUFBRSxhQUFxQixFQUFFLElBQWMsRUFBRSxPQUFPLEdBQUcsSUFBSTtJQUM5RyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUE7SUFDNUMsYUFBYSxDQUFDLGVBQWUsRUFBRSxhQUFhLENBQUMsQ0FBQTtJQUM3QyxNQUFNLE1BQU0sR0FBRyxNQUFNLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxHQUFHLElBQUksRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNwSixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUE7QUFDcEIsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGdCQUFnQixDQUFDLFdBQW1CLEVBQUUsYUFBcUI7SUFDL0UsTUFBTSxlQUFlLENBQUMsV0FBVyxFQUFFLGFBQWEsRUFBRSxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBRSxDQUFBO0FBQzVFLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsa0JBQWtCLENBQUMsV0FBbUIsRUFBRSxhQUFxQixFQUFFLGFBQXNCO0lBQ3pHLE1BQU0sZUFBZSxDQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUUsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUN0SCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxjQUFjLENBQUMsV0FBbUIsRUFBRSxhQUFxQixFQUFFLGFBQXFCLEVBQUUsZUFBZSxHQUFHLEtBQUs7SUFDN0gsTUFBTSxnQkFBZ0IsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQTtJQUMvSCxNQUFNLG1CQUFtQixHQUFHLGdDQUFnQyxDQUFDLGFBQWEsQ0FBQyxDQUFBO0lBQzNFLE1BQU0sZUFBZSxDQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUUsQ0FBQyxZQUFZLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsbUJBQW1CLENBQUMsQ0FBQyxDQUFBO0lBQ2xILElBQUksZUFBZSxFQUFFO1FBQ25CLElBQUk7WUFDRixNQUFNLHlCQUF5QixDQUFDLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxhQUFhLENBQUMsQ0FBQTtTQUNoRjtRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ2QsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUNwQixNQUFNLHFCQUFxQixDQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUE7U0FDOUQ7S0FDRjtBQUNILENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUscUJBQXFCLENBQUMsV0FBbUIsRUFBRSxhQUFxQixFQUFFLFdBQVcsR0FBRyxLQUFLO0lBQ3pHLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxvQkFBb0IsQ0FBQyxXQUFXLEVBQUUsYUFBYSxDQUFDLENBQUE7SUFFaEYsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLE1BQU0sZUFBZSxDQUFDLHlEQUF5RCxpQkFBaUIsR0FBRyxDQUFDLEVBQUU7UUFDekgsT0FBTTtLQUNQO0lBRUQsTUFBTSxVQUFVLEdBQUcsTUFBTSxlQUFlLENBQUMsV0FBVyxFQUFFLGFBQWEsRUFBRSxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFBO0lBQzlGLElBQUksVUFBVSxLQUFLLENBQUMsRUFBRTtRQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLDREQUE0RCxVQUFVLEVBQUUsQ0FBQyxDQUFBO0tBQzFGO0lBRUQsR0FBRyxDQUFDLG9FQUFvRSxDQUFDLENBQUE7SUFDekUsTUFBTSx1QkFBdUIsQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDbEYsTUFBTSx1QkFBdUIsQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUE7QUFDckYsQ0FBQztBQUVELEtBQUssVUFBVSx1QkFBdUIsQ0FBQyxVQUFrQjtJQUN2RCxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEVBQUU7UUFDN0IsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQTtRQUN4RSxJQUFJLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3RDLE1BQU0sR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQTtTQUM3QjthQUFNO1lBQ0wsR0FBRyxDQUFDLGtEQUFrRCxVQUFVLEVBQUUsQ0FBQyxDQUFBO1NBQ3BFO0tBQ0Y7QUFDSCxDQUFDO0FBRUQsS0FBSyxVQUFVLG9CQUFvQixDQUFDLFdBQW1CLEVBQUUsYUFBcUI7SUFDNUUsTUFBTSxtQkFBbUIsR0FBRyxzQkFBc0IsQ0FBQyxXQUFXLEVBQUUsYUFBYSxDQUFDLENBQUE7SUFDOUUsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFBO0lBQ3JELE1BQU0sY0FBYyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FDakQsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFDeEIsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQztRQUNsQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUM7UUFDdkMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNyRixNQUFNLDRCQUE0QixHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUU7UUFDdEUsTUFBTSxTQUFTLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFDaEQsTUFBTSxJQUFJLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUN4QyxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFBO0lBQzVCLENBQUMsQ0FBQyxDQUFBO0lBQ0YsR0FBRyxDQUFDLHFCQUFxQiw0QkFBNEIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUNwRixHQUFHLENBQUMscUJBQXFCLDRCQUE0QixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQ3pGLE1BQU0sb0JBQW9CLEdBQUcsNEJBQTRCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUE7SUFDaEgsTUFBTSxpQkFBaUIsR0FBRyxvQkFBb0IsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBO0lBQ3BGLE9BQU8saUJBQWlCLENBQUE7QUFDMUIsQ0FBQztBQUVELFNBQVMsZ0NBQWdDLENBQUMsYUFBcUI7SUFDN0QsT0FBTyxjQUFjLGFBQWEsWUFBWSxDQUFBO0FBQ2hELENBQUM7QUFFRCxTQUFTLHNCQUFzQixDQUFDLGdCQUF3QixFQUFFLGFBQXFCO0lBQzdFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxjQUFjLGFBQWEsWUFBWSxDQUFDLENBQUE7QUFDN0UsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLGdCQUF3QixFQUFFLGFBQXFCLEVBQUUsSUFBYTtJQUNuRixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsV0FBVyxhQUFhLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sTUFBTSxDQUFDLENBQUE7QUFDMUYsQ0FBQztBQUVELEtBQUssVUFBVSx5QkFBeUIsQ0FBQyxnQkFBd0IsRUFBRSxhQUFxQixFQUFFLGFBQXFCO0lBQzdHLE1BQU0sbUJBQW1CLEdBQUcsc0JBQXNCLENBQUMsZ0JBQWdCLEVBQUUsYUFBYSxDQUFDLENBQUE7SUFFbkYsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsRUFBRTtRQUN2QyxNQUFNLElBQUksS0FBSyxDQUFDLHdGQUF3RixtQkFBbUIsRUFBRSxDQUFDLENBQUE7S0FDL0g7SUFFRCxHQUFHLENBQUMseUNBQXlDLGFBQWEsc0JBQXNCLG1CQUFtQixFQUFFLENBQUMsQ0FBQTtJQUV0RyxNQUFNLGVBQWUsR0FBRyxJQUFJLGFBQWEsS0FBSyxDQUFBO0lBQzlDLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUE7SUFDNUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUN4QyxNQUFNLElBQUksS0FBSyxDQUFDLHVHQUF1RyxlQUFlLEVBQUUsQ0FBQyxDQUFBO0tBQzFJO0lBRUQsSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLDZIQUE2SCxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtLQUNySztJQUVELE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUM3QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBRXpELElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMseURBQXlELFFBQVEsRUFBRSxDQUFDLENBQUE7S0FDckY7SUFFRCxHQUFHLENBQUMsZ0NBQWdDLFFBQVEsRUFBRSxDQUFDLENBQUE7SUFFL0MsTUFBTSxTQUFTLEdBQUcsNEJBQTRCLENBQUE7SUFDOUMsTUFBTSxNQUFNLEdBQUcsc0RBQXNELGFBQWEsU0FBUyxDQUFBO0lBQzNGLE1BQU0sUUFBUSxHQUFHLHNEQUFzRCxhQUFhLGNBQWMsQ0FBQTtJQUVsRyxNQUFNLFlBQVksR0FBRyxNQUFNLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUE7SUFDdkUsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO0lBRTNELE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQTtJQUVuQixRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFBO0lBQzlCLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUE7SUFFeEIsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFBO0lBQ3JCLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQTtJQUN2QixJQUFJLG1CQUFtQixHQUFHLEtBQUssQ0FBQTtJQUMvQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNyQyxJQUFJLG1CQUFtQixJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3ZELG1CQUFtQixHQUFHLEtBQUssQ0FBQTtZQUMzQixTQUFRO1NBQ1Q7UUFDRCxJQUFJLFNBQVMsRUFBRTtZQUNiLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLFlBQVksTUFBTSxFQUFFLENBQUMsQ0FBQTtZQUMzRCxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1lBQ3RCLFNBQVMsR0FBRyxLQUFLLENBQUE7WUFDakIsbUJBQW1CLEdBQUcsSUFBSSxDQUFBO1lBQzFCLFNBQVE7U0FDVDtRQUNELElBQUksV0FBVyxFQUFFO1lBQ2YsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsWUFBWSxRQUFRLEVBQUUsQ0FBQyxDQUFBO1lBQzdELFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7WUFDdEIsV0FBVyxHQUFHLEtBQUssQ0FBQTtZQUNuQixtQkFBbUIsR0FBRyxJQUFJLENBQUE7WUFDMUIsU0FBUTtTQUNUO1FBQ0QsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUN2QixJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDaEMsU0FBUyxHQUFHLElBQUksQ0FBQTtTQUNqQjtRQUNELElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUNsQyxXQUFXLEdBQUcsSUFBSSxDQUFBO1NBQ25CO0tBQ0Y7SUFFRCxNQUFNLGVBQWUsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBRTNDLE1BQU0sR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsZUFBZSxFQUFFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUE7SUFFcEUsR0FBRyxDQUFDLGdFQUFnRSxRQUFRLEVBQUUsQ0FBQyxDQUFBO0lBRS9FLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsV0FBVyxhQUFhLE1BQU0sQ0FBQyxDQUFBO0lBQ2hGLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsV0FBVyxhQUFhLFdBQVcsQ0FBQyxDQUFBO0lBRXZGLEdBQUcsQ0FBQywyRkFBMkYsQ0FBQyxDQUFBO0lBQ2hHLEdBQUcsQ0FBQyxTQUFTLFlBQVksRUFBRSxDQUFDLENBQUE7SUFDNUIsR0FBRyxDQUFDLFNBQVMsY0FBYyxJQUFJLENBQUMsQ0FBQTtJQUVoQyxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsRUFBRTtRQUNoQyxNQUFNLEdBQUcsQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFBO0tBQzVEO1NBQU07UUFDTCxHQUFHLENBQUMseUNBQXlDLENBQUMsQ0FBQTtLQUMvQztJQUVELElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxFQUFFO1FBQ2xDLE1BQU0sR0FBRyxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUE7S0FDOUQ7U0FBTTtRQUNMLEdBQUcsQ0FBQywyQ0FBMkMsQ0FBQyxDQUFBO0tBQ2pEO0FBQ0gsQ0FBQyJ9
|
|
182
|
+
|
|
183
|
+
`;
|
|
184
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGJNaWdyYXRpb25VdGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYk1pZ3JhdGlvblV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDNUcsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFBO0FBQzVCLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQTtBQUN4QixPQUFPLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQTtBQUVsQzs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsZUFBZSxDQUFDLFdBQW1CLEVBQUUsYUFBcUIsRUFBRSxJQUFjLEVBQUUsT0FBTyxHQUFHLElBQUk7SUFDOUcsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFBO0lBQzVDLGFBQWEsQ0FBQyxlQUFlLEVBQUUsYUFBYSxDQUFDLENBQUE7SUFDN0MsTUFBTSxNQUFNLEdBQUcsTUFBTSxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsR0FBRyxJQUFJLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDcEosT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFBO0FBQ3BCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxnQkFBZ0IsQ0FBQyxXQUFtQixFQUFFLGFBQXFCO0lBQy9FLE1BQU0sZUFBZSxDQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUUsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUUsQ0FBQTtBQUM1RSxDQUFDO0FBRUQ7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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/esm/dotnetUtils.js
CHANGED
|
@@ -23,7 +23,9 @@ export async function dotnetPublish(projectPath = './', configuration = 'Release
|
|
|
23
23
|
requireValidPath('cwd', cwd);
|
|
24
24
|
}
|
|
25
25
|
const args = ['publish', projectPath, '-c', configuration, '-o', outputDir];
|
|
26
|
-
|
|
26
|
+
const traceMessage = `running dotnet ${args.join(' ')}`;
|
|
27
|
+
const traceAdditional = cwd ? ` in cwd ${cwd}` : '';
|
|
28
|
+
trace(`${traceMessage}${traceAdditional}`);
|
|
27
29
|
await spawnAsync('dotnet', args, { cwd: cwd });
|
|
28
30
|
}
|
|
29
31
|
/**
|
|
@@ -49,4 +51,4 @@ export async function configureDotnetDevCerts() {
|
|
|
49
51
|
await spawnAsync('dotnet', ['dev-certs', 'https', '--clean']);
|
|
50
52
|
await spawnAsync('dotnet', ['dev-certs', 'https', '-t']);
|
|
51
53
|
}
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG90bmV0VXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZG90bmV0VXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQU10Rzs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxXQUFXLENBQUMsV0FBbUI7SUFDbkQsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFBO0lBQzVDLE1BQU0sVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsRUFBRSxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO0FBQzlFLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGFBQWEsQ0FBQyxjQUFzQixJQUFJLEVBQUUsZ0JBQXdCLFNBQVMsRUFBRSxZQUFvQixTQUFTLEVBQUUsR0FBWTtJQUM1SSxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUE7SUFDNUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQTtJQUNyQyxhQUFhLENBQUMsZUFBZSxFQUFFLGFBQWEsQ0FBQyxDQUFBO0lBQzdDLElBQUksR0FBRyxFQUFFO1FBQ1AsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFBO0tBQzdCO0lBQ0QsTUFBTSxJQUFJLEdBQUcsQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFBO0lBQzNFLE1BQU0sWUFBWSxHQUFHLGtCQUFrQixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUE7SUFDdkQsTUFBTSxlQUFlLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7SUFDbkQsS0FBSyxDQUFDLEdBQUcsWUFBWSxHQUFHLGVBQWUsRUFBRSxDQUFDLENBQUE7SUFDMUMsTUFBTSxVQUFVLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFBO0FBQ2hELENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsMkJBQTJCO0lBQy9DLE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxRQUFRLENBQUE7SUFDakQsSUFBSSxTQUFTLEVBQUU7UUFDYixHQUFHLENBQUMsK0NBQStDLENBQUMsQ0FBQTtLQUNyRDtTQUFNO1FBQ0wsR0FBRyxDQUFDLDZDQUE2QyxDQUFDLENBQUE7S0FDbkQ7SUFDRCxNQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQTtJQUNoRixNQUFNLFVBQVUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUE7QUFDbEMsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLHVCQUF1QjtJQUMzQyxNQUFNLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUE7SUFDN0QsTUFBTSxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFBO0FBQzFELENBQUMifQ==
|
|
@@ -1,2 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Only dynamically import this if ESM is detected. This allows a CJS-specific build to avoid
|
|
3
|
+
* an error it would otherwise encounter when parsing import.meta.url.
|
|
4
|
+
* @returns the file path of the currently executing script
|
|
5
|
+
*/
|
|
1
6
|
export declare const getImportMetaUrlFilePath: () => string;
|
|
2
7
|
//# sourceMappingURL=esmSpecific.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"esmSpecific.d.mts","sourceRoot":"","sources":["../../src/esmSpecific.mts"],"names":[],"mappings":"AAEA,eAAO,MAAM,wBAAwB,cAGpC,CAAA"}
|
|
1
|
+
{"version":3,"file":"esmSpecific.d.mts","sourceRoot":"","sources":["../../src/esmSpecific.mts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,cAGpC,CAAA"}
|
package/dist/esm/esmSpecific.mjs
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { fileURLToPath } from 'node:url';
|
|
2
|
+
/**
|
|
3
|
+
* Only dynamically import this if ESM is detected. This allows a CJS-specific build to avoid
|
|
4
|
+
* an error it would otherwise encounter when parsing import.meta.url.
|
|
5
|
+
* @returns the file path of the currently executing script
|
|
6
|
+
*/
|
|
2
7
|
export const getImportMetaUrlFilePath = () => {
|
|
3
8
|
// @ts-ignore
|
|
4
9
|
return fileURLToPath(import.meta.url);
|
|
5
10
|
};
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNtU3BlY2lmaWMubWpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2VzbVNwZWNpZmljLm10cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBRXhDOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxHQUFHLEVBQUU7SUFDM0MsYUFBYTtJQUNiLE9BQU8sYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7QUFDdkMsQ0FBQyxDQUFBIn0=
|
|
@@ -6,6 +6,12 @@ import { SpawnOptions } from 'node:child_process';
|
|
|
6
6
|
* @param moreData More data to log
|
|
7
7
|
*/
|
|
8
8
|
export declare function log(data: unknown, ...moreData: unknown[]): void;
|
|
9
|
+
/**
|
|
10
|
+
* Log conditionally. Useful for methods that have an option to either suppress output or to show it when it normally isn't.
|
|
11
|
+
* @param data The data to log
|
|
12
|
+
* @param moreData More data to log
|
|
13
|
+
*/
|
|
14
|
+
export declare function logIf(shouldLog: boolean, data: unknown, ...moreData: unknown[]): void;
|
|
9
15
|
/**
|
|
10
16
|
* Wrapper for console.log() that is suppressed if NodeCliUtilsConfig.logEnabled is false.
|
|
11
17
|
* @param data The data to log
|
|
@@ -91,24 +97,33 @@ export declare function sleep(ms: number): Promise<void>;
|
|
|
91
97
|
* An extension of the built-in SpawnOptions with an extra option to specify whether a non-zero exit code should throw an error.
|
|
92
98
|
*/
|
|
93
99
|
export interface SpawnOptionsWithThrow extends SpawnOptions {
|
|
94
|
-
throwOnNonZero
|
|
100
|
+
throwOnNonZero: boolean;
|
|
95
101
|
simpleErrorMsg?: string;
|
|
96
102
|
}
|
|
97
103
|
/**
|
|
98
|
-
* This is a wrapper function for NodeJS. Defaults stdio to inherit so that output is visible in the console,
|
|
99
|
-
* but note that this means stdout and stderr will not be available in the returned SpawnResult.
|
|
104
|
+
* This is a wrapper function for NodeJS spawn. Defaults stdio to inherit so that output is visible in the console,
|
|
105
|
+
* but note that this means stdout and stderr will not be available in the returned SpawnResult. To hide the output
|
|
106
|
+
* from the console but collect the stdout and stderr in the SpawnResult, use stdio: 'pipe'.
|
|
100
107
|
*
|
|
101
108
|
* When spawning long-running processes, use {@link spawnAsyncLongRunning} instead so that unexpected
|
|
102
109
|
* termination of the parent process will not orphan the child process tree on windows.
|
|
110
|
+
*
|
|
111
|
+
* **Warning:** Do NOT use this for generating commands dynamically from user input as it could be used to execute arbitrary code.
|
|
112
|
+
* This is meant solely for building up known commands that are not made up of unsanitized user input, and only at compile time.
|
|
113
|
+
* See {@link winInstallCert} and {@link winUninstallCert} for examples of taking user input and inserting it safely into known commands.
|
|
103
114
|
* @param command The command to spawn
|
|
104
115
|
* @param args The arguments to pass to the command
|
|
105
116
|
* @param options The options to pass to the command
|
|
106
117
|
* @returns A Promise that resolves to a {@link SpawnResult}
|
|
107
118
|
*/
|
|
108
|
-
export declare function spawnAsync(command: string, args?: string[], options?: SpawnOptionsWithThrow): Promise<SpawnResult>;
|
|
119
|
+
export declare function spawnAsync(command: string, args?: string[], options?: Partial<SpawnOptionsWithThrow>): Promise<SpawnResult>;
|
|
109
120
|
/**
|
|
110
121
|
* Use this alternate spawn wrapper instead of {@link spawnAsync} when spawning long-running processes to
|
|
111
122
|
* avoid orphaned child process trees on Windows.
|
|
123
|
+
*
|
|
124
|
+
* **Warning:** Do NOT use this for generating commands dynamically from user input as it could be used to execute arbitrary code.
|
|
125
|
+
* This is meant solely for building up known commands that are not made up of unsanitized user input, and only at compile time.
|
|
126
|
+
* See {@link winInstallCert} and {@link winUninstallCert} for examples of taking user input and inserting it safely into known commands.
|
|
112
127
|
* @param command The command to spawn
|
|
113
128
|
* @param args The arguments to pass to the command
|
|
114
129
|
* @param cwd The current working directory to run the command from - defaults to process.cwd()
|
|
@@ -125,6 +140,11 @@ export declare function ensureDirectory(dir: string): Promise<void>;
|
|
|
125
140
|
* @param dir The directory to create.
|
|
126
141
|
*/
|
|
127
142
|
export declare function mkdirp(dir: string): Promise<void>;
|
|
143
|
+
/**
|
|
144
|
+
* Create a directory. Will create parent directory structure if it don't exist. Similar to `mkdir -p`.
|
|
145
|
+
* @param dir The directory to create.
|
|
146
|
+
*/
|
|
147
|
+
export declare function mkdirpSync(dir: string): Promise<void>;
|
|
128
148
|
/**
|
|
129
149
|
* Empties a directory of all files and subdirectories.
|
|
130
150
|
*
|
|
@@ -142,10 +162,8 @@ export declare function emptyDirectory(directoryToEmpty: string, fileAndDirector
|
|
|
142
162
|
*/
|
|
143
163
|
export declare function copyDirectoryContents(sourceDirectory: string, destinationDirectory: string): Promise<void>;
|
|
144
164
|
/**
|
|
145
|
-
* Helper method to validate that a non-falsy value is provided for a parameter that should be a string.
|
|
146
|
-
*
|
|
147
|
-
* **Warning:** this does not validate the type of the parameter, just whether something non-empty was provided.
|
|
148
|
-
* @param paramName The name of the parameter, for logging purposes
|
|
165
|
+
* Helper method to validate that a non-falsy and non-empty value is provided for a parameter that should be a string.
|
|
166
|
+
* @param paramName The name of the parameter to be used in the error message
|
|
149
167
|
* @param paramValue The value of the parameter
|
|
150
168
|
*/
|
|
151
169
|
export declare function requireString(paramName: string, paramValue: string): void;
|
|
@@ -156,56 +174,144 @@ export declare function requireString(paramName: string, paramValue: string): vo
|
|
|
156
174
|
*/
|
|
157
175
|
export declare function requireValidPath(paramName: string, paramValue: string): void;
|
|
158
176
|
/**
|
|
159
|
-
*
|
|
160
|
-
*
|
|
161
|
-
*
|
|
177
|
+
* Project names must contain only lowercase letters, decimal digits, dashes, and underscores, and must begin with a lowercase letter or decimal digit.
|
|
178
|
+
*
|
|
179
|
+
* See https://docs.docker.com/compose/environment-variables/envvars/#compose_project_name.
|
|
180
|
+
* @param projectName The string to validate
|
|
181
|
+
* @returns `true` if it's a valid docker compose project name and `false` otherwise
|
|
182
|
+
*/
|
|
183
|
+
export declare function isDockerComposeProjectNameValid(projectName: string): boolean;
|
|
184
|
+
/**
|
|
185
|
+
* Options for {@link spawnDockerCompose}.
|
|
186
|
+
* @param projectName
|
|
162
187
|
* Note that there are other better options such as using the environment variable `COMPOSE_PROJECT_NAME`. See https://docs.docker.com/compose/environment-variables/envvars/#compose_project_name.
|
|
163
188
|
* @param attached Default: false. All commands that support the detached option wil use it unless attached is specified as true (-d support: exec, logs, ps, restart, run, start, stop, up)
|
|
164
189
|
* @param useDockerComposeFileDirectoryAsCwd Default: false. If true, the docker compose command will be run in the directory containing the docker compose file.
|
|
165
190
|
*/
|
|
166
191
|
export interface DockerComposeOptions {
|
|
167
|
-
|
|
192
|
+
/** Additional arguments to pass to the docker-compose command. */
|
|
193
|
+
args: string[];
|
|
194
|
+
/**
|
|
195
|
+
* Defaults to `false`. Controls whether or not the `--detach` option is passed. Note that this only applies to
|
|
196
|
+
* some commands (exec, logs, ps, restart, run, start, stop, up).
|
|
197
|
+
*/
|
|
198
|
+
attached: boolean;
|
|
199
|
+
/**
|
|
200
|
+
* If not provided, it will default to using the directory that the docker-compose.yml is located in.
|
|
201
|
+
* Specifies what current working directory to use with the spawn command.
|
|
202
|
+
*/
|
|
203
|
+
cwd?: string;
|
|
204
|
+
/**
|
|
205
|
+
* Optional. If provided, projectName will be passed as the `--project-name` param to `docker compose` so that generated containers will use it as a prefix
|
|
206
|
+
* instead of the default, which is the directory name where the docker-compose.yml is located.
|
|
207
|
+
*
|
|
208
|
+
* Alternate approaches for setting the docker compose project name:
|
|
209
|
+
*
|
|
210
|
+
* - Locate your docker-compose.yml file in the root of your project so that docker will use that directory name for prefixing generated containers
|
|
211
|
+
* - OR, locate your docker-compose.yml in a sub-directory named appropriately for use as a prefix for generated containers
|
|
212
|
+
* - OR, put a `.env` file in the same directory as your docker-compose.yml
|
|
213
|
+
* with the entry `COMPOSE_PROJECT_NAME=your-project-name`
|
|
214
|
+
*
|
|
215
|
+
* Additional note on docker compose project names form the official docker compose docs: "Project names must contain only lowercase letters, decimal digits,
|
|
216
|
+
* dashes, and underscores, and must begin with a lowercase letter or decimal digit". See https://docs.docker.com/compose/environment-variables/envvars/#compose_project_name.
|
|
217
|
+
*
|
|
218
|
+
*/
|
|
168
219
|
projectName?: string;
|
|
169
|
-
|
|
170
|
-
|
|
220
|
+
/**
|
|
221
|
+
* Optional. If provided, profile is passed to docker compose along with `--profile` param. Must match this regex: `[a-zA-Z0-9][a-zA-Z0-9_.-]+`.
|
|
222
|
+
*
|
|
223
|
+
* See https://docs.docker.com/compose/profiles/.
|
|
224
|
+
*/
|
|
225
|
+
profile?: string;
|
|
171
226
|
}
|
|
172
227
|
/**
|
|
173
|
-
* For docker compose commands, see https://docs.docker.com/compose/reference/.
|
|
228
|
+
* For docker compose commands, see https://docs.docker.com/compose/reference/. For available options for this wrapper function, see {@link DockerComposeOptions}.
|
|
229
|
+
*
|
|
230
|
+
* The current working directory will be the directory of the {@link dockerComposePath} unless specified in the options. This ensures relative paths in the
|
|
231
|
+
* docker compose file will be relative to itself by default.
|
|
232
|
+
*
|
|
233
|
+
* See {@link DockerComposeOptions.projectName} for info on where to locate your docker compose file and how to specify the docker project name.
|
|
174
234
|
* @param dockerComposePath Path to docker-compose.yml
|
|
175
235
|
* @param dockerComposeCommand The docker-compose command to run
|
|
176
236
|
* @param options {@link DockerComposeOptions} to use, including additional arguments to pass to the docker compose command and the project name
|
|
177
237
|
*/
|
|
178
|
-
export declare function spawnDockerCompose(dockerComposePath: string, dockerComposeCommand: DockerComposeCommand, options?: DockerComposeOptions): Promise<void>;
|
|
238
|
+
export declare function spawnDockerCompose(dockerComposePath: string, dockerComposeCommand: DockerComposeCommand, options?: Partial<DockerComposeOptions>): Promise<void>;
|
|
179
239
|
/**
|
|
180
|
-
* Splits a string into lines, removing empty lines
|
|
240
|
+
* Splits a string into lines, removing `\n` and `\r` characters. Does not return empty lines. Also see {@link stringToLines}.
|
|
181
241
|
* @param str String to split into lines
|
|
182
242
|
* @returns An array of lines from the string, with empty lines removed
|
|
183
243
|
*/
|
|
184
244
|
export declare function stringToNonEmptyLines(str: string): string[];
|
|
245
|
+
/**
|
|
246
|
+
* Splits a string into lines, removing `\n` and `\r` characters. Returns empty lines. Also see {@link stringToNonEmptyLines}.
|
|
247
|
+
* @param str String to split into lines
|
|
248
|
+
* @returns An array of lines from the string, with empty lines removed
|
|
249
|
+
*/
|
|
250
|
+
export declare function stringToLines(str: string): string[];
|
|
185
251
|
/**
|
|
186
252
|
* Runs the requested command using NodeJS spawnSync wrapped in an outer Windows CMD.exe command and returns the result with stdout split into lines.
|
|
187
253
|
*
|
|
188
254
|
* Use this for simple quick commands that don't require a lot of control.
|
|
189
255
|
*
|
|
190
256
|
* For commands that aren't Windows and CMD specific, use {@link simpleSpawnSync}.
|
|
257
|
+
*
|
|
258
|
+
* **Warning:** Do NOT use this for generating commands dynamically from user input as it could be used to execute arbitrary code.
|
|
259
|
+
* This is meant solely for building up known commands that are not made up of unsanitized user input, and only at compile time.
|
|
260
|
+
* See {@link winInstallCert} and {@link winUninstallCert} for examples of taking user input and inserting it safely into known commands.
|
|
191
261
|
* @param command Command to run
|
|
192
262
|
* @param args Arguments to pass to the command
|
|
193
263
|
* @returns An object with the status code, stdout, stderr, and error (if any)
|
|
194
264
|
* @throws {@link SimpleSpawnError} if the command fails and throwOnNonZero is true
|
|
195
265
|
*/
|
|
196
266
|
export declare function simpleCmdSync(command: string, args?: string[], throwOnNonZero?: boolean): SimpleSpawnResult;
|
|
267
|
+
/**
|
|
268
|
+
* Runs the requested command using {@link spawnAsync} wrapped in an outer Windows CMD.exe command and returns the result with stdout split into lines.
|
|
269
|
+
*
|
|
270
|
+
* Use this for simple quick commands that don't require a lot of control.
|
|
271
|
+
*
|
|
272
|
+
* For commands that aren't Windows and CMD specific, use {@link simpleSpawnAsync}.
|
|
273
|
+
*
|
|
274
|
+
* **Warning:** Do NOT use this for generating commands dynamically from user input as it could be used to execute arbitrary code.
|
|
275
|
+
* This is meant solely for building up known commands that are not made up of unsanitized user input, and only at compile time.
|
|
276
|
+
* See {@link winInstallCert} and {@link winUninstallCert} for examples of taking user input and inserting it safely into known commands.
|
|
277
|
+
* @param command Command to run
|
|
278
|
+
* @param args Arguments to pass to the command
|
|
279
|
+
* @returns An object with the status code, stdout, stderr, and error (if any)
|
|
280
|
+
* @throws {@link SimpleSpawnError} if the command fails and throwOnNonZero is true
|
|
281
|
+
*/
|
|
282
|
+
export declare function simpleCmdAsync(command: string, args?: string[], throwOnNonZero?: boolean): Promise<SimpleSpawnResult>;
|
|
197
283
|
/**
|
|
198
284
|
* Runs the requested command using NodeJS spawnSync and returns the result with stdout split into lines.
|
|
199
285
|
*
|
|
200
286
|
* Use this for simple quick commands that don't require a lot of control.
|
|
201
287
|
*
|
|
202
288
|
* For commands that are Windows and CMD specific, use {@link simpleCmdSync}.
|
|
289
|
+
*
|
|
290
|
+
* **Warning:** Do NOT use this for generating commands dynamically from user input as it could be used to execute arbitrary code.
|
|
291
|
+
* This is meant solely for building up known commands that are not made up of unsanitized user input, and only at compile time.
|
|
292
|
+
* See {@link winInstallCert} and {@link winUninstallCert} for examples of taking user input and inserting it safely into known commands.
|
|
203
293
|
* @param command Command to run
|
|
204
294
|
* @param args Arguments to pass to the command
|
|
205
295
|
* @returns An object with the status code, stdout, stderr, and error (if any)
|
|
206
296
|
* @throws {@link SimpleSpawnError} if the command fails and throwOnNonZero is true
|
|
207
297
|
*/
|
|
208
298
|
export declare function simpleSpawnSync(command: string, args?: string[], throwOnNonZero?: boolean): SimpleSpawnResult;
|
|
299
|
+
/**
|
|
300
|
+
* Runs the requested command using {@link spawnAsync} and returns the result with stdout split into lines.
|
|
301
|
+
*
|
|
302
|
+
* Use this for simple quick commands that don't require a lot of control.
|
|
303
|
+
*
|
|
304
|
+
* For commands that are Windows and CMD specific, use {@link simpleCmdSync}.
|
|
305
|
+
*
|
|
306
|
+
* **Warning:** Do NOT use this for generating commands dynamically from user input as it could be used to execute arbitrary code.
|
|
307
|
+
* This is meant solely for building up known commands that are not made up of unsanitized user input, and only at compile time.
|
|
308
|
+
* See {@link winInstallCert} and {@link winUninstallCert} for examples of taking user input and inserting it safely into known commands.
|
|
309
|
+
* @param command Command to run
|
|
310
|
+
* @param args Arguments to pass to the command
|
|
311
|
+
* @returns An object with the status code, stdout, stderr, and error (if any)
|
|
312
|
+
* @throws {@link SimpleSpawnError} if the command fails and throwOnNonZero is true
|
|
313
|
+
*/
|
|
314
|
+
export declare function simpleSpawnAsync(command: string, args?: string[], throwOnNonZero?: boolean): Promise<SimpleSpawnResult>;
|
|
209
315
|
/**
|
|
210
316
|
* @returns `true` if platform() is 'win32', `false` otherwise
|
|
211
317
|
*/
|
|
@@ -217,20 +323,26 @@ export declare function isPlatformWindows(): boolean;
|
|
|
217
323
|
export declare function isPlatformMac(): boolean;
|
|
218
324
|
/**
|
|
219
325
|
*
|
|
220
|
-
* @returns `true` if {@link isPlatformWindows} and {@link isPlatformMac} are both `false, otherwise returns `
|
|
326
|
+
* @returns `true` if {@link isPlatformWindows} and {@link isPlatformMac} are both `false, otherwise returns `true`
|
|
221
327
|
*/
|
|
222
328
|
export declare function isPlatformLinux(): boolean;
|
|
223
329
|
/**
|
|
224
330
|
* This is a cross-platform method to get the location of a system command. Useful for checking if software
|
|
225
|
-
* is installed, where it's installed and whether there are multiple locations
|
|
331
|
+
* is installed, where it's installed and whether there are multiple locations.
|
|
332
|
+
* @param commandName The name of the command to find
|
|
333
|
+
* @returns The location of the command, any additional locations, and an error if one occurred
|
|
334
|
+
*/
|
|
335
|
+
export declare function which(commandName: string): Promise<WhichResult>;
|
|
336
|
+
/**
|
|
337
|
+
* This is a cross-platform method to get the location of a system command. Useful for checking if software
|
|
338
|
+
* is installed, where it's installed and whether there are multiple locations.
|
|
226
339
|
* @param commandName The name of the command to find
|
|
227
340
|
* @returns The location of the command, any additional locations, and an error if one occurred
|
|
228
341
|
*/
|
|
229
342
|
export declare function whichSync(commandName: string): WhichResult;
|
|
230
343
|
/**
|
|
231
|
-
* First checks if docker is installed and if not immediately returns false.
|
|
232
|
-
*
|
|
233
|
-
* Then runs the `docker info` command and looks for "error during connect" in the output to determine if docker is running.
|
|
344
|
+
* First checks if docker is installed and if not immediately returns false. Then runs the `docker info`
|
|
345
|
+
* command and looks for "error during connect" in the output to determine if docker is running.
|
|
234
346
|
* @returns `true` if docker is installed and running, `false` otherwise
|
|
235
347
|
*/
|
|
236
348
|
export declare function isDockerRunning(): Promise<boolean>;
|
|
@@ -305,9 +417,9 @@ export declare function sortDictionaryByKeyAsc(dict: StringKeyedDictionary): Str
|
|
|
305
417
|
*/
|
|
306
418
|
export declare function deleteEnvIfExists(envPath: string): Promise<void>;
|
|
307
419
|
export interface FindFilesOptions {
|
|
308
|
-
maxDepth
|
|
309
|
-
excludeDirectoryNames
|
|
310
|
-
returnForwardSlashRelativePaths
|
|
420
|
+
maxDepth: number;
|
|
421
|
+
excludeDirectoryNames: string[];
|
|
422
|
+
returnForwardSlashRelativePaths: boolean;
|
|
311
423
|
}
|
|
312
424
|
/**
|
|
313
425
|
* Searches a directory recursively for files that match the specified pattern.
|
|
@@ -317,7 +429,121 @@ export interface FindFilesOptions {
|
|
|
317
429
|
* @param options Specify a max depth to search, defaults to 5
|
|
318
430
|
* @returns A Promise that resolves to an array of file paths that match the pattern
|
|
319
431
|
*/
|
|
320
|
-
export declare function findFilesRecursively(dir: string, filenamePattern: string, options?: FindFilesOptions): Promise<string[]>;
|
|
432
|
+
export declare function findFilesRecursively(dir: string, filenamePattern: string, options?: Partial<FindFilesOptions>): Promise<string[]>;
|
|
321
433
|
/** Utility function to escape a string for use within regex */
|
|
322
434
|
export declare function escapeStringForRegex(str: string): string;
|
|
435
|
+
/**
|
|
436
|
+
* Logs the provided 2-dimensional string array as a formatted table.
|
|
437
|
+
*
|
|
438
|
+
* @param data 2-dimensional string array where the first row is the column headers
|
|
439
|
+
* @example
|
|
440
|
+
*
|
|
441
|
+
* logTable([
|
|
442
|
+
* ['Name', 'Age', 'Country'],
|
|
443
|
+
* ['Alice', '28', 'USA'],
|
|
444
|
+
* ['Bob', '22', 'Canada']
|
|
445
|
+
* ])
|
|
446
|
+
*/
|
|
447
|
+
export declare function logTable(data: string[][]): void;
|
|
448
|
+
/**
|
|
449
|
+
* See {@link getPowershellHackArgs}.
|
|
450
|
+
*/
|
|
451
|
+
export declare const powershellHackPrefix = "$env:PSModulePath = [Environment]::GetEnvironmentVariable('PSModulePath', 'Machine'); ";
|
|
452
|
+
/**
|
|
453
|
+
* Powershell doesn't load the system PSModulePath when running in a non-interactive shell.
|
|
454
|
+
* This is a workaround to set the PSModulePath environment variable to the system value before running a powershell command.
|
|
455
|
+
*
|
|
456
|
+
* **Warning:** Do NOT use this for generating commands dynamically from user input as it could be used to execute arbitrary code.
|
|
457
|
+
* This is meant solely for building up known commands that are not made up of unsanitized user input, and only at compile time.
|
|
458
|
+
* See {@link winInstallCert} and {@link winUninstallCert} for examples of taking user input and inserting it safely into known commands.
|
|
459
|
+
* @param command The powershell command to run
|
|
460
|
+
* @returns An array of arguments to pass to {@link spawnAsync} with the "powershell" command as the first argument
|
|
461
|
+
*/
|
|
462
|
+
export declare function getPowershellHackArgs(command: string): string[];
|
|
463
|
+
/**
|
|
464
|
+
* Returns a humanized string representation of the number of milliseconds using ms, seconds, minutes, or hours.
|
|
465
|
+
* @param milliseconds The number of milliseconds to humanize
|
|
466
|
+
* @returns A humanized string representation of the number
|
|
467
|
+
*/
|
|
468
|
+
export declare function humanizeTime(milliseconds: number): string;
|
|
469
|
+
export declare class ExtendedError extends Error {
|
|
470
|
+
innerError: Error | null;
|
|
471
|
+
constructor(message: string, innerError?: Error);
|
|
472
|
+
}
|
|
473
|
+
export declare function getHostname(url: string): string;
|
|
474
|
+
export declare function isDirectory(path: string): Promise<boolean>;
|
|
475
|
+
export declare function isDirectorySync(path: string): boolean;
|
|
476
|
+
export type PlatformCode = 'win' | 'linux' | 'mac';
|
|
477
|
+
/**
|
|
478
|
+
* This is a somewhat naive method but is useful if you rarely or never deal with unusual operating systems.
|
|
479
|
+
* @returns `win`, `mac` or `linux`
|
|
480
|
+
*/
|
|
481
|
+
export declare function getPlatformCode(): PlatformCode;
|
|
482
|
+
/**
|
|
483
|
+
* Tries connecting to a port to see if it's being listened on or not. It's likely that this won't work in a lot of scenarios, so use it at your own risk.
|
|
484
|
+
* @param port The port to check
|
|
485
|
+
* @returns `true` if the port is available, `false` otherwise
|
|
486
|
+
*/
|
|
487
|
+
export declare function isPortAvailable(port: number): Promise<boolean>;
|
|
488
|
+
/**
|
|
489
|
+
* Returns the value for an environment variable or throws if it's undefined or null. Pass optional {@param throwOnEmpty} to throw when the key exists but has an empty value.
|
|
490
|
+
* @param varName The name of the environment variable to get.
|
|
491
|
+
* @param throwOnEmpty Throw an error if key exists (not undefined or null) but is empty.
|
|
492
|
+
* @returns
|
|
493
|
+
*/
|
|
494
|
+
export declare function getRequiredEnvVar(varName: string, throwOnEmpty?: boolean): string;
|
|
495
|
+
/** Options for {@link withRetryAsync}. */
|
|
496
|
+
export interface WithRetryOptions {
|
|
497
|
+
/**
|
|
498
|
+
* Number of milliseconds to wait before the first attempt.
|
|
499
|
+
*/
|
|
500
|
+
initialDelayMilliseconds: number;
|
|
501
|
+
/**
|
|
502
|
+
* Use this in log messages instead of the function name (useful for passing lambdas which would otherwise display as "anonymous").
|
|
503
|
+
*/
|
|
504
|
+
functionLabel?: string;
|
|
505
|
+
/**
|
|
506
|
+
* If NodeCliUtilsConfig.traceEnabled is `true` then messages will be logged even if this option is `false`.
|
|
507
|
+
* Set to `true` to log messages even if Node ]
|
|
508
|
+
*/
|
|
509
|
+
traceEnabled: boolean;
|
|
510
|
+
}
|
|
511
|
+
export declare function getNormalizedError(err: unknown): Error;
|
|
512
|
+
/**
|
|
513
|
+
* Call a function until it succeeds. Will stop after the number of calls specified by {@param maxCalls}, or forever if -1 is passed.
|
|
514
|
+
* @param func The function to call
|
|
515
|
+
* @param maxCalls The maximum number of times to call the function before giving up. Pass -1 to retry forever.
|
|
516
|
+
* @param delayMilliseconds The number of milliseconds to wait between calls
|
|
517
|
+
* @param options Options for controlling the behavior of the retry. See {@link WithRetryOptions}.
|
|
518
|
+
*/
|
|
519
|
+
export declare function withRetryAsync(func: () => Promise<void>, maxCalls: number, delayMilliseconds: number, options?: Partial<WithRetryOptions>): Promise<void>;
|
|
520
|
+
/**
|
|
521
|
+
* Collapses each instance of consecutive whitespace characters into a single space.
|
|
522
|
+
*/
|
|
523
|
+
export declare function collapseWhitespace(str: string): string;
|
|
524
|
+
/**
|
|
525
|
+
* Check if a string is a valid directory name. This is a very simple check that just makes sure the string doesn't contain any invalid characters.
|
|
526
|
+
* @param dirName The directory name to check
|
|
527
|
+
* @returns `true` if the directory name is valid, `false` otherwise
|
|
528
|
+
*/
|
|
529
|
+
export declare function isValidDirName(dirName: string): boolean;
|
|
530
|
+
export declare function hasWhitespace(str: string): boolean;
|
|
531
|
+
export declare function stripShellMetaCharacters(input: string): string;
|
|
532
|
+
export declare enum Emoji {
|
|
533
|
+
RightArrow = "\u27A1\uFE0F",
|
|
534
|
+
LeftArrow = "\u2B05\uFE0F",
|
|
535
|
+
GreenCheck = "\u2705",
|
|
536
|
+
Warning = "\u26A0\uFE0F",
|
|
537
|
+
Lightning = "\u26A1",
|
|
538
|
+
Exclamation = "\u2757",
|
|
539
|
+
RedQuestion = "\u2753",
|
|
540
|
+
RedX = "\u274C",
|
|
541
|
+
Info = "\u2139\uFE0F",
|
|
542
|
+
SadFace = "\uD83D\uDE22",
|
|
543
|
+
Tools = "\uD83D\uDEE0\uFE0F",
|
|
544
|
+
NoEntry = "\u26D4",
|
|
545
|
+
Stop = "\uD83D\uDED1",
|
|
546
|
+
Certificate = "\uD83D\uDCDC",
|
|
547
|
+
Key = "\uD83D\uDD11"
|
|
548
|
+
}
|
|
323
549
|
//# sourceMappingURL=generalUtils.d.ts.map
|