@mikeyt23/node-cli-utils 1.4.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.
Files changed (76) hide show
  1. package/README.md +45 -87
  2. package/dist/cjs/GitUtility.d.ts +7 -0
  3. package/dist/cjs/GitUtility.d.ts.map +1 -0
  4. package/dist/cjs/GitUtility.js +49 -0
  5. package/dist/cjs/NodeCliUtilsConfig.d.ts +21 -0
  6. package/dist/cjs/NodeCliUtilsConfig.d.ts.map +1 -0
  7. package/dist/cjs/NodeCliUtilsConfig.js +41 -0
  8. package/dist/cjs/TarballUtility.d.ts +63 -0
  9. package/dist/cjs/TarballUtility.d.ts.map +1 -0
  10. package/dist/cjs/TarballUtility.js +143 -0
  11. package/dist/cjs/certUtils.d.ts +66 -0
  12. package/dist/cjs/certUtils.d.ts.map +1 -0
  13. package/dist/cjs/certUtils.js +283 -0
  14. package/dist/cjs/dbMigrationUtils.d.ts +39 -0
  15. package/dist/cjs/dbMigrationUtils.d.ts.map +1 -0
  16. package/dist/cjs/dbMigrationUtils.js +195 -0
  17. package/dist/cjs/dotnetUtils.d.ts +25 -0
  18. package/dist/cjs/dotnetUtils.d.ts.map +1 -0
  19. package/dist/cjs/dotnetUtils.js +61 -0
  20. package/dist/cjs/esmSpecific.d.mts +7 -0
  21. package/dist/cjs/esmSpecific.d.mts.map +1 -0
  22. package/dist/cjs/esmSpecific.mjs +15 -0
  23. package/dist/cjs/generalUtils.d.ts +565 -0
  24. package/dist/cjs/generalUtils.d.ts.map +1 -0
  25. package/dist/cjs/generalUtils.js +1068 -0
  26. package/dist/cjs/generalUtilsInternal.d.ts +15 -0
  27. package/dist/cjs/generalUtilsInternal.d.ts.map +1 -0
  28. package/dist/cjs/generalUtilsInternal.js +317 -0
  29. package/dist/cjs/hostsUtils.d.ts +16 -0
  30. package/dist/cjs/hostsUtils.d.ts.map +1 -0
  31. package/dist/cjs/hostsUtils.js +82 -0
  32. package/dist/cjs/index.d.ts +4 -0
  33. package/dist/cjs/index.d.ts.map +1 -0
  34. package/dist/cjs/index.js +25 -0
  35. package/dist/cjs/package.json +5 -0
  36. package/dist/cjs/runWhileParentAlive.d.ts +2 -0
  37. package/dist/cjs/runWhileParentAlive.d.ts.map +1 -0
  38. package/dist/cjs/runWhileParentAlive.js +159 -0
  39. package/dist/esm/GitUtility.d.ts +7 -0
  40. package/dist/esm/GitUtility.d.ts.map +1 -0
  41. package/dist/esm/GitUtility.js +43 -0
  42. package/dist/esm/NodeCliUtilsConfig.d.ts +21 -0
  43. package/dist/esm/NodeCliUtilsConfig.d.ts.map +1 -0
  44. package/dist/esm/NodeCliUtilsConfig.js +35 -0
  45. package/dist/esm/TarballUtility.d.ts +63 -0
  46. package/dist/esm/TarballUtility.d.ts.map +1 -0
  47. package/dist/esm/TarballUtility.js +139 -0
  48. package/dist/esm/certUtils.d.ts +66 -0
  49. package/dist/esm/certUtils.d.ts.map +1 -0
  50. package/dist/esm/certUtils.js +271 -0
  51. package/dist/esm/dbMigrationUtils.d.ts +39 -0
  52. package/dist/esm/dbMigrationUtils.d.ts.map +1 -0
  53. package/dist/esm/dbMigrationUtils.js +184 -0
  54. package/dist/esm/dotnetUtils.d.ts +25 -0
  55. package/dist/esm/dotnetUtils.d.ts.map +1 -0
  56. package/dist/esm/dotnetUtils.js +54 -0
  57. package/dist/esm/esmSpecific.d.mts +7 -0
  58. package/dist/esm/esmSpecific.d.mts.map +1 -0
  59. package/dist/esm/esmSpecific.mjs +11 -0
  60. package/dist/esm/generalUtils.d.ts +565 -0
  61. package/dist/esm/generalUtils.d.ts.map +1 -0
  62. package/dist/esm/generalUtils.js +976 -0
  63. package/dist/esm/generalUtilsInternal.d.ts +15 -0
  64. package/dist/esm/generalUtilsInternal.d.ts.map +1 -0
  65. package/dist/esm/generalUtilsInternal.js +278 -0
  66. package/dist/esm/hostsUtils.d.ts +16 -0
  67. package/dist/esm/hostsUtils.d.ts.map +1 -0
  68. package/dist/esm/hostsUtils.js +69 -0
  69. package/dist/esm/index.d.ts +4 -0
  70. package/dist/esm/index.d.ts.map +1 -0
  71. package/dist/esm/index.js +4 -0
  72. package/dist/esm/runWhileParentAlive.d.ts +2 -0
  73. package/dist/esm/runWhileParentAlive.d.ts.map +1 -0
  74. package/dist/esm/runWhileParentAlive.js +151 -0
  75. package/package.json +69 -10
  76. package/index.js +0 -627
@@ -0,0 +1,15 @@
1
+ import { SimpleSpawnResult, SpawnOptionsWithThrow, SpawnResult, StringKeyedDictionary, WhichResult } from './generalUtils.js';
2
+ export declare function copyEnv(sourcePath: string, destinationPath: string, overrideExistingDestinationValues?: boolean, suppressAddKeysMessages?: boolean): Promise<void>;
3
+ export declare function getEnvAsDictionary(envPath: string): StringKeyedDictionary;
4
+ export declare function dictionaryToEnvFileString(dict: StringKeyedDictionary): string;
5
+ export interface SpawnOptionsInternal extends SpawnOptionsWithThrow {
6
+ isLongRunning: boolean;
7
+ }
8
+ export declare function spawnAsyncInternal(command: string, args: string[], options?: Partial<SpawnOptionsInternal>): Promise<SpawnResult>;
9
+ export declare function validateFindFilesRecursivelyParams(dir: string, filenamePattern: string): void;
10
+ export declare function simpleSpawnSyncInternal(command: string, args?: string[], throwOnNonZero?: boolean, useCmd?: boolean): SimpleSpawnResult;
11
+ export declare function simpleSpawnAsyncInternal(command: string, args?: string[], throwOnNonZero?: boolean, useCmd?: boolean): Promise<SimpleSpawnResult>;
12
+ type SimpleSpawnFunction = (cmd: string, args: string[]) => Promise<SimpleSpawnResult> | SimpleSpawnResult;
13
+ export declare function whichInternal(commandName: string, simpleCmd: SimpleSpawnFunction, simpleSpawn: SimpleSpawnFunction): Promise<WhichResult> | WhichResult;
14
+ export {};
15
+ //# sourceMappingURL=generalUtilsInternal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generalUtilsInternal.d.ts","sourceRoot":"","sources":["../../src/generalUtilsInternal.ts"],"names":[],"mappings":"AAKA,OAAO,EAAoB,iBAAiB,EAAc,qBAAqB,EAAE,WAAW,EAAE,qBAAqB,EAAE,WAAW,EAAuJ,MAAM,mBAAmB,CAAA;AAOhT,wBAAsB,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,iCAAiC,UAAO,EAAE,uBAAuB,UAAQ,iBAuCnJ;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,qBAAqB,CAUzE;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,qBAAqB,GAAG,MAAM,CAE7E;AAED,MAAM,WAAW,oBAAqB,SAAQ,qBAAqB;IACjE,aAAa,EAAE,OAAO,CAAA;CACvB;AAED,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAqDvI;AAiHD,wBAAgB,kCAAkC,CAAC,GAAG,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,QAgBtF;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,cAAc,GAAE,OAAc,EAAE,MAAM,GAAE,OAAe,GAAG,iBAAiB,CAmBpJ;AAED,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,cAAc,GAAE,OAAc,EAAE,MAAM,GAAE,OAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAmBpK;AAED,KAAK,mBAAmB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,iBAAiB,CAAC,GAAG,iBAAiB,CAAA;AAE1G,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,mBAAmB,EAAE,WAAW,EAAE,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,CAsCvJ"}
@@ -0,0 +1,317 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.whichInternal = exports.simpleSpawnAsyncInternal = exports.simpleSpawnSyncInternal = exports.validateFindFilesRecursivelyParams = exports.spawnAsyncInternal = exports.dictionaryToEnvFileString = exports.getEnvAsDictionary = exports.copyEnv = void 0;
30
+ const node_child_process_1 = require("node:child_process");
31
+ const node_fs_1 = __importDefault(require("node:fs"));
32
+ const promises_1 = __importDefault(require("node:fs/promises"));
33
+ const node_path_1 = __importDefault(require("node:path"));
34
+ const NodeCliUtilsConfig_js_1 = require("./NodeCliUtilsConfig.js");
35
+ const generalUtils_js_1 = require("./generalUtils.js");
36
+ const isCommonJS = typeof require === "function" && typeof module === "object" && module.exports;
37
+ const isEsm = !isCommonJS;
38
+ const spawnWorkaroundScriptName = 'runWhileParentAlive.js';
39
+ const currentModuleDir = ''; // Lazy loaded in getCurrentModuleDir
40
+ async function copyEnv(sourcePath, destinationPath, overrideExistingDestinationValues = true, suppressAddKeysMessages = false) {
41
+ (0, generalUtils_js_1.requireValidPath)('sourcePath', sourcePath);
42
+ // If the destination .env file doesn't exist, just copy it and return
43
+ if (!node_fs_1.default.existsSync(destinationPath)) {
44
+ (0, generalUtils_js_1.log)(`creating ${destinationPath} from ${sourcePath}`);
45
+ await promises_1.default.copyFile(sourcePath, destinationPath);
46
+ return;
47
+ }
48
+ const sourceDict = getEnvAsDictionary(sourcePath);
49
+ const destinationDict = getEnvAsDictionary(destinationPath);
50
+ // Determine what keys are missing from destinationPath .env that are in sourcePath .env or .env.template
51
+ const templateKeys = Object.keys(sourceDict);
52
+ const destinationKeysBeforeChanging = Object.keys(destinationDict);
53
+ const keysMissingInDestination = templateKeys.filter(envKey => !destinationKeysBeforeChanging.includes(envKey));
54
+ if (keysMissingInDestination.length > 0) {
55
+ if (!suppressAddKeysMessages) {
56
+ (0, generalUtils_js_1.log)(`adding missing keys in ${destinationPath}: ${keysMissingInDestination.join(', ')}`);
57
+ }
58
+ }
59
+ // For instances where both .env files have the same key, use the value from the source if
60
+ // overrideExistingDestinationValues param is true, otherwise leave the value from the destination intact.
61
+ const newDict = {};
62
+ for (const [key, value] of Object.entries(overrideExistingDestinationValues ? sourceDict : destinationDict)) {
63
+ newDict[key] = value;
64
+ }
65
+ // Add entries that the destination doesn't have yet
66
+ for (const key of keysMissingInDestination) {
67
+ newDict[key] = sourceDict[key];
68
+ }
69
+ const newSortedDict = (0, generalUtils_js_1.sortDictionaryByKeyAsc)(newDict);
70
+ const newEnvFileContent = dictionaryToEnvFileString(newSortedDict);
71
+ await promises_1.default.writeFile(destinationPath, newEnvFileContent);
72
+ }
73
+ exports.copyEnv = copyEnv;
74
+ function getEnvAsDictionary(envPath) {
75
+ const dict = {};
76
+ const lines = (0, generalUtils_js_1.stringToNonEmptyLines)(node_fs_1.default.readFileSync(envPath).toString());
77
+ for (const line of lines) {
78
+ if (line && line.indexOf('=') !== -1) {
79
+ const parts = line.split('=');
80
+ dict[parts[0].trim()] = parts[1].trim();
81
+ }
82
+ }
83
+ return dict;
84
+ }
85
+ exports.getEnvAsDictionary = getEnvAsDictionary;
86
+ function dictionaryToEnvFileString(dict) {
87
+ return Object.entries(dict).map(kvp => `${kvp[0]}=${kvp[1]}`).join('\n') + '\n';
88
+ }
89
+ exports.dictionaryToEnvFileString = dictionaryToEnvFileString;
90
+ async function spawnAsyncInternal(command, args, options) {
91
+ const mergedOptions = setDefaultsAndMergeOptions(options);
92
+ const logPrefix = `[${command} ${args.join(' ')}] `;
93
+ // Windows has an issue where child processes are orphaned when using the shell option. This workaround will spawn
94
+ // a "middle" process using the shell option to check whether parent process is still running at intervals and if not, kill the child process tree.
95
+ const workaroundScriptPath = await getWorkaroundScriptPath(command, args, options);
96
+ if (workaroundScriptPath) {
97
+ return await spawnWithKeepaliveWorkaround(logPrefix, workaroundScriptPath, command, args, mergedOptions);
98
+ }
99
+ return new Promise((resolve, reject) => {
100
+ var _a, _b;
101
+ try {
102
+ const result = getInitialSpawnResult();
103
+ const child = (0, node_child_process_1.spawn)(command, args, mergedOptions);
104
+ const childId = child.pid;
105
+ if (childId === undefined) {
106
+ throw new Error(`${logPrefix}ChildProcess pid is undefined - spawn failed`);
107
+ }
108
+ // This event will only be emitted when stdio is NOT set to 'inherit'
109
+ (_a = child.stdout) === null || _a === void 0 ? void 0 : _a.on('data', (data) => {
110
+ result.stdout += data.toString();
111
+ });
112
+ // This event will only be emitted when stdio is NOT set to 'inherit'
113
+ (_b = child.stderr) === null || _b === void 0 ? void 0 : _b.on('data', (data) => {
114
+ result.stderr += data.toString();
115
+ });
116
+ const listener = new SignalListener(child, logPrefix);
117
+ child.on('exit', (code, signal) => {
118
+ const signalMessage = signal ? ` with signal ${signal}` : '';
119
+ (0, generalUtils_js_1.trace)(`${logPrefix}ChildProcess exited with code ${code}${signalMessage}`);
120
+ result.code = getResultCode(code, mergedOptions.isLongRunning);
121
+ child.removeAllListeners();
122
+ listener.detach();
123
+ if (mergedOptions.throwOnNonZero && result.code !== 0) {
124
+ reject(getSpawnError(result.code, result, mergedOptions));
125
+ return;
126
+ }
127
+ resolve(result);
128
+ });
129
+ child.on('error', (error) => {
130
+ (0, generalUtils_js_1.trace)(`${logPrefix}ChildProcess emitted an error event: `, error);
131
+ });
132
+ }
133
+ catch (err) {
134
+ reject(err);
135
+ }
136
+ });
137
+ }
138
+ exports.spawnAsyncInternal = spawnAsyncInternal;
139
+ // If long running, ctrl+c will cause a null code, which we don't necessarily want to consider an error
140
+ function getResultCode(code, isLongRunning) {
141
+ return (code === null && isLongRunning) ? 0 : code !== null && code !== void 0 ? code : 1;
142
+ }
143
+ const setDefaultsAndMergeOptions = (options) => {
144
+ const defaultSpawnOptions = { stdio: 'inherit', isLongRunning: false, throwOnNonZero: false };
145
+ return { ...defaultSpawnOptions, ...options };
146
+ };
147
+ // Return workaroundScriptPath if:
148
+ // - Long running option set to true
149
+ // - OS is Windows
150
+ // - It's not the long running workaround call itself (avoid an infinite loop)
151
+ // Otherwise return undefined
152
+ async function getWorkaroundScriptPath(command, args, options) {
153
+ var _a;
154
+ const moduleDir = await getCurrentModuleDir();
155
+ let workaroundScriptPath = node_path_1.default.join(moduleDir, spawnWorkaroundScriptName);
156
+ // This allows use of spawnAsyncLongRunning within this project (i.e. swigfile.ts)
157
+ if (!node_fs_1.default.existsSync(workaroundScriptPath) && workaroundScriptPath.includes('node-cli-utils')) {
158
+ workaroundScriptPath = node_path_1.default.resolve('dist/esm', spawnWorkaroundScriptName);
159
+ }
160
+ if ((options === null || options === void 0 ? void 0 : options.isLongRunning) && (0, generalUtils_js_1.isPlatformWindows)() && !(command === 'node' && args && ((_a = args[0]) === null || _a === void 0 ? void 0 : _a.endsWith(spawnWorkaroundScriptName)))) {
161
+ return workaroundScriptPath;
162
+ }
163
+ return undefined;
164
+ }
165
+ async function spawnWithKeepaliveWorkaround(logPrefix, workaroundScriptPath, command, args, options) {
166
+ (0, generalUtils_js_1.trace)(`${logPrefix}Running on Windows with shell option - using middle process hack to prevent orphaned processes`);
167
+ const loggingEnabledString = NodeCliUtilsConfig_js_1.config.orphanProtectionLoggingEnabled.toString();
168
+ const traceEnabledString = NodeCliUtilsConfig_js_1.config.traceEnabled.toString();
169
+ const pollingMillisString = NodeCliUtilsConfig_js_1.config.orphanProtectionPollingIntervalMillis.toString();
170
+ (0, generalUtils_js_1.trace)(`${logPrefix}Orphan protection logging enabled: ${loggingEnabledString}`);
171
+ (0, generalUtils_js_1.trace)(`${logPrefix}Orphan protection trace enabled: ${traceEnabledString}`);
172
+ (0, generalUtils_js_1.trace)(`${logPrefix}Orphan protection polling interval: ${pollingMillisString}ms`);
173
+ if (NodeCliUtilsConfig_js_1.config.orphanProtectionLoggingEnabled) {
174
+ (0, generalUtils_js_1.trace)(`${logPrefix}Orphan protection logging path: ${NodeCliUtilsConfig_js_1.config.orphanProtectionLoggingPath}`);
175
+ }
176
+ const workaroundArgs = [
177
+ workaroundScriptPath,
178
+ loggingEnabledString,
179
+ traceEnabledString,
180
+ pollingMillisString,
181
+ command,
182
+ ...(args !== null && args !== void 0 ? args : [])
183
+ ];
184
+ return await (0, generalUtils_js_1.spawnAsync)('node', workaroundArgs, { ...options, stdio: 'inherit', shell: true });
185
+ }
186
+ function getInitialSpawnResult(options) {
187
+ var _a, _b;
188
+ return {
189
+ code: 1,
190
+ stdout: '',
191
+ stderr: '',
192
+ cwd: (_b = (_a = options === null || options === void 0 ? void 0 : options.cwd) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : process.cwd()
193
+ };
194
+ }
195
+ function getSpawnError(code, result, options) {
196
+ const additional = options.throwOnNonZero && options.stdio === 'inherit' ? `. See above for more details (stdio is 'inherit').` : '';
197
+ return new generalUtils_js_1.SpawnError(`Spawning child process failed with code ${code}${additional}`, result);
198
+ }
199
+ class SignalListener {
200
+ constructor(child, logPrefix) {
201
+ this.signals = ['SIGINT', 'SIGTERM', 'SIGQUIT'];
202
+ // Arrow function provides unique handler function for each instance of SignalListener
203
+ this.handler = (signal) => {
204
+ (0, generalUtils_js_1.trace)(`${this.logPrefix}Process received ${signal} - killing ChildProcess with ID ${this.child.pid}`);
205
+ this.child.kill(signal);
206
+ this.detach();
207
+ };
208
+ this.child = child;
209
+ this.logPrefix = logPrefix;
210
+ this.attach();
211
+ }
212
+ attach() {
213
+ this.signals.forEach(signal => process.on(signal, this.handler));
214
+ }
215
+ detach() {
216
+ this.signals.forEach(signal => process.removeListener(signal, this.handler));
217
+ }
218
+ }
219
+ async function getCurrentModuleDir() {
220
+ if (currentModuleDir) {
221
+ return currentModuleDir;
222
+ }
223
+ if (isEsm) {
224
+ const module = await Promise.resolve().then(() => __importStar(require('./esmSpecific.mjs')));
225
+ const metaUrlFilePath = module.getImportMetaUrlFilePath();
226
+ const directory = node_path_1.default.dirname(metaUrlFilePath);
227
+ return node_path_1.default.normalize(directory);
228
+ }
229
+ return __dirname;
230
+ }
231
+ function validateFindFilesRecursivelyParams(dir, filenamePattern) {
232
+ (0, generalUtils_js_1.requireValidPath)('dir', dir);
233
+ (0, generalUtils_js_1.requireString)('pattern', filenamePattern);
234
+ if (filenamePattern.length > 50) {
235
+ throw new Error(`filenamePattern param must have fewer than 50 characters`);
236
+ }
237
+ const numWildcards = filenamePattern.replace(/\*+/g, '*').split('*').length - 1;
238
+ if (numWildcards > 5) {
239
+ throw new Error(`filenamePattern param must contain 5 or fewer wildcards`);
240
+ }
241
+ if (filenamePattern.includes('/') || filenamePattern.includes('\\')) {
242
+ throw new Error('filenamePattern param must not contain slashes');
243
+ }
244
+ }
245
+ exports.validateFindFilesRecursivelyParams = validateFindFilesRecursivelyParams;
246
+ function simpleSpawnSyncInternal(command, args, throwOnNonZero = true, useCmd = false) {
247
+ var _a;
248
+ (0, generalUtils_js_1.requireString)('command', command);
249
+ const result = (0, node_child_process_1.spawnSync)(command, args !== null && args !== void 0 ? args : [], { encoding: 'utf-8', shell: useCmd ? 'cmd.exe' : false });
250
+ const spawnResult = {
251
+ code: (_a = result.status) !== null && _a !== void 0 ? _a : 1,
252
+ stdout: result.stdout.toString(),
253
+ stderr: result.stdout.toString(),
254
+ stdoutLines: (0, generalUtils_js_1.stringToNonEmptyLines)(result.stdout.toString()),
255
+ error: result.error,
256
+ cwd: process.cwd()
257
+ };
258
+ if (spawnResult.code !== 0 && throwOnNonZero) {
259
+ throw new generalUtils_js_1.SimpleSpawnError(`spawned process failed with code ${spawnResult.code}`, spawnResult);
260
+ }
261
+ return spawnResult;
262
+ }
263
+ exports.simpleSpawnSyncInternal = simpleSpawnSyncInternal;
264
+ async function simpleSpawnAsyncInternal(command, args, throwOnNonZero = true, useCmd = false) {
265
+ (0, generalUtils_js_1.requireString)('command', command);
266
+ const result = await (0, generalUtils_js_1.spawnAsync)(command, args, { stdio: 'pipe', shell: useCmd ? 'cmd.exe' : false });
267
+ const spawnResult = {
268
+ code: result.code,
269
+ stdout: result.stdout,
270
+ stderr: result.stdout,
271
+ stdoutLines: (0, generalUtils_js_1.stringToNonEmptyLines)(result.stdout),
272
+ error: result.error,
273
+ cwd: process.cwd()
274
+ };
275
+ if (spawnResult.code !== 0 && throwOnNonZero) {
276
+ throw new generalUtils_js_1.SimpleSpawnError(`spawned process failed with code ${spawnResult.code}`, spawnResult);
277
+ }
278
+ return spawnResult;
279
+ }
280
+ exports.simpleSpawnAsyncInternal = simpleSpawnAsyncInternal;
281
+ function whichInternal(commandName, simpleCmd, simpleSpawn) {
282
+ (0, generalUtils_js_1.requireString)('commandName', commandName);
283
+ if ((0, generalUtils_js_1.stripShellMetaCharacters)(commandName) !== commandName) {
284
+ throw new Error(`commandName cannot contain shell meta characters: ${commandName}`);
285
+ }
286
+ const execFunc = (0, generalUtils_js_1.isPlatformWindows)() ? simpleCmd : simpleSpawn;
287
+ const cmd = (0, generalUtils_js_1.isPlatformWindows)() ? 'where' : 'which';
288
+ const args = (0, generalUtils_js_1.isPlatformWindows)() ? [commandName] : ['-a', commandName];
289
+ try {
290
+ const result = execFunc(cmd, args);
291
+ if (result instanceof Promise) {
292
+ return result.then(parsedResult => ({
293
+ location: parsedResult.stdoutLines[0],
294
+ additionalLocations: parsedResult.stdoutLines.slice(1),
295
+ error: parsedResult.error
296
+ })).catch(err => ({
297
+ location: undefined,
298
+ additionalLocations: undefined,
299
+ error: err
300
+ }));
301
+ }
302
+ return {
303
+ location: result.stdoutLines[0],
304
+ additionalLocations: result.stdoutLines.slice(1),
305
+ error: result.error
306
+ };
307
+ }
308
+ catch (err) {
309
+ return {
310
+ location: undefined,
311
+ additionalLocations: undefined,
312
+ error: err
313
+ };
314
+ }
315
+ }
316
+ exports.whichInternal = whichInternal;
317
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhbFV0aWxzSW50ZXJuYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2VuZXJhbFV0aWxzSW50ZXJuYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyREFBbUU7QUFDbkUsc0RBQXdCO0FBQ3hCLGdFQUFrQztBQUNsQywwREFBNEI7QUFDNUIsbUVBQWdEO0FBQ2hELHVEQUFnVDtBQUVoVCxNQUFNLFVBQVUsR0FBRyxPQUFPLE9BQU8sS0FBSyxVQUFVLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUE7QUFDaEcsTUFBTSxLQUFLLEdBQUcsQ0FBQyxVQUFVLENBQUE7QUFDekIsTUFBTSx5QkFBeUIsR0FBRyx3QkFBd0IsQ0FBQTtBQUMxRCxNQUFNLGdCQUFnQixHQUFXLEVBQUUsQ0FBQSxDQUFDLHFDQUFxQztBQUVsRSxLQUFLLFVBQVUsT0FBTyxDQUFDLFVBQWtCLEVBQUUsZUFBdUIsRUFBRSxpQ0FBaUMsR0FBRyxJQUFJLEVBQUUsdUJBQXVCLEdBQUcsS0FBSztJQUNsSixJQUFBLGtDQUFnQixFQUFDLFlBQVksRUFBRSxVQUFVLENBQUMsQ0FBQTtJQUUxQyxzRUFBc0U7SUFDdEUsSUFBSSxDQUFDLGlCQUFFLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxFQUFFO1FBQ25DLElBQUEscUJBQUcsRUFBQyxZQUFZLGVBQWUsU0FBUyxVQUFVLEVBQUUsQ0FBQyxDQUFBO1FBQ3JELE1BQU0sa0JBQUcsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLGVBQWUsQ0FBQyxDQUFBO1FBQy9DLE9BQU07S0FDUDtJQUVELE1BQU0sVUFBVSxHQUFHLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ2pELE1BQU0sZUFBZSxHQUFHLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxDQUFBO0lBRTNELHlHQUF5RztJQUN6RyxNQUFNLFlBQVks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
@@ -0,0 +1,16 @@
1
+ export declare function ensureHostsEntry(url: string): Promise<void>;
2
+ export declare function removeHostsEntry(url: string): Promise<void>;
3
+ export declare function getHostsPath(): string;
4
+ export declare function getHostsFileString(): Promise<string>;
5
+ export declare function hostsFileStringHasEntry(hostsFileString: string, entry: string): boolean;
6
+ export declare function changeHostsFile(hostname: string, operation: 'add' | 'remove'): Promise<void>;
7
+ /**
8
+ * The `initialString` will have line endings normalized to use os.EOL and lines with `omitLine` will be removed.
9
+ * Comparisons for which lines should be removed are normalizing whitespace (multiple spaces collapsed into single
10
+ * spaces for the comparison). This is useful to remove instances of a hosts entry, for example.
11
+ * @param initialString The string to normalize remove instances of omitLine from
12
+ * @param omitLine All instance of this string will be omitted from the result
13
+ * @returns A string that has instances of the omitLine removed and all line endings changed to match the os.EOL
14
+ */
15
+ export declare function getEolNormalizedWithoutLine(initialString: string, omitLine: string): string;
16
+ //# sourceMappingURL=hostsUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hostsUtils.d.ts","sourceRoot":"","sources":["../../src/hostsUtils.ts"],"names":[],"mappings":"AAIA,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGjE;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGjE;AAED,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CAE1D;AAGD,wBAAgB,uBAAuB,CAAC,eAAe,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAKvF;AAED,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA2BlG;AAED;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAM3F"}
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getEolNormalizedWithoutLine = exports.changeHostsFile = exports.hostsFileStringHasEntry = exports.getHostsFileString = exports.getHostsPath = exports.removeHostsEntry = exports.ensureHostsEntry = void 0;
7
+ const promises_1 = __importDefault(require("node:fs/promises"));
8
+ const node_os_1 = __importDefault(require("node:os"));
9
+ const generalUtils_js_1 = require("./generalUtils.js");
10
+ async function ensureHostsEntry(url) {
11
+ const hostname = (0, generalUtils_js_1.getHostname)(url);
12
+ await changeHostsFile(hostname, 'add');
13
+ }
14
+ exports.ensureHostsEntry = ensureHostsEntry;
15
+ async function removeHostsEntry(url) {
16
+ const hostname = (0, generalUtils_js_1.getHostname)(url);
17
+ await changeHostsFile(hostname, 'remove');
18
+ }
19
+ exports.removeHostsEntry = removeHostsEntry;
20
+ function getHostsPath() {
21
+ return (0, generalUtils_js_1.isPlatformWindows)() ? 'C:/Windows/System32/drivers/etc/hosts' : '/etc/hosts';
22
+ }
23
+ exports.getHostsPath = getHostsPath;
24
+ async function getHostsFileString() {
25
+ return await promises_1.default.readFile(getHostsPath(), { encoding: 'utf-8' });
26
+ }
27
+ exports.getHostsFileString = getHostsFileString;
28
+ // Check by normalizing whitespace (collapse consecutive spaces to single spaces) in entry and on each line checked
29
+ function hostsFileStringHasEntry(hostsFileString, entry) {
30
+ const normalizedEntry = entry.replace(/\s+/g, ' ');
31
+ const hostsLines = (0, generalUtils_js_1.stringToNonEmptyLines)(hostsFileString).map(l => l.replace(/\s+/g, ' ')).filter(l => !l.startsWith('#'));
32
+ const hasLine = hostsLines.includes(normalizedEntry);
33
+ return hasLine;
34
+ }
35
+ exports.hostsFileStringHasEntry = hostsFileStringHasEntry;
36
+ async function changeHostsFile(hostname, operation) {
37
+ (0, generalUtils_js_1.requireString)('hostname', hostname);
38
+ const isAddition = operation === 'add';
39
+ const isRemoval = operation === 'remove';
40
+ const hostsPath = getHostsPath();
41
+ const entry = getNewHostsEntryString(hostname);
42
+ (0, generalUtils_js_1.log)(`checking hosts file: ${hostsPath} for entry ${entry}`);
43
+ const hostsFileString = await getHostsFileString();
44
+ const hasLine = hostsFileStringHasEntry(hostsFileString, entry);
45
+ if (isAddition && hasLine) {
46
+ (0, generalUtils_js_1.log)(`there is an existing entry in the hosts file (${entry}), skipping`);
47
+ return;
48
+ }
49
+ if (isRemoval && !hasLine) {
50
+ (0, generalUtils_js_1.log)(`there is no hosts entry to remove (${entry}), skipping`);
51
+ }
52
+ if (isAddition && !hasLine) {
53
+ (0, generalUtils_js_1.log)('existing entry not found - appending entry to the hosts file');
54
+ await promises_1.default.appendFile(hostsPath, `\n${entry}`);
55
+ }
56
+ if (isRemoval && hasLine) {
57
+ (0, generalUtils_js_1.log)(`existing entry found - removing entry`);
58
+ const hostsWithoutEntry = getEolNormalizedWithoutLine(hostsFileString, entry);
59
+ await promises_1.default.writeFile(hostsPath, hostsWithoutEntry);
60
+ }
61
+ }
62
+ exports.changeHostsFile = changeHostsFile;
63
+ /**
64
+ * The `initialString` will have line endings normalized to use os.EOL and lines with `omitLine` will be removed.
65
+ * Comparisons for which lines should be removed are normalizing whitespace (multiple spaces collapsed into single
66
+ * spaces for the comparison). This is useful to remove instances of a hosts entry, for example.
67
+ * @param initialString The string to normalize remove instances of omitLine from
68
+ * @param omitLine All instance of this string will be omitted from the result
69
+ * @returns A string that has instances of the omitLine removed and all line endings changed to match the os.EOL
70
+ */
71
+ function getEolNormalizedWithoutLine(initialString, omitLine) {
72
+ const normalizedOmitLine = omitLine.replace(/\s+/g, ' ');
73
+ const lines = initialString.split('\n')
74
+ .map(l => l.replace(/\r/g, ''))
75
+ .filter(l => l.replace(/\s+/g, ' ') !== normalizedOmitLine);
76
+ return lines.join(node_os_1.default.EOL);
77
+ }
78
+ exports.getEolNormalizedWithoutLine = getEolNormalizedWithoutLine;
79
+ function getNewHostsEntryString(hostname) {
80
+ return `127.0.0.1 ${hostname}`;
81
+ }
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9zdHNVdGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob3N0c1V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGdFQUFrQztBQUNsQyxzREFBd0I7QUFDeEIsdURBQTZHO0FBRXRHLEtBQUssVUFBVSxnQkFBZ0IsQ0FBQyxHQUFXO0lBQ2hELE1BQU0sUUFBUSxHQUFHLElBQUEsNkJBQVcsRUFBQyxHQUFHLENBQUMsQ0FBQTtJQUNqQyxNQUFNLGVBQWUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUE7QUFDeEMsQ0FBQztBQUhELDRDQUdDO0FBRU0sS0FBSyxVQUFVLGdCQUFnQixDQUFDLEdBQVc7SUFDaEQsTUFBTSxRQUFRLEdBQUcsSUFBQSw2QkFBVyxFQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ2pDLE1BQU0sZUFBZSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQTtBQUMzQyxDQUFDO0FBSEQsNENBR0M7QUFFRCxTQUFnQixZQUFZO0lBQzFCLE9BQU8sSUFBQSxtQ0FBaUIsR0FBRSxDQUFDLENBQUMsQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFBO0FBQ3JGLENBQUM7QUFGRCxvQ0FFQztBQUVNLEtBQUssVUFBVSxrQkFBa0I7SUFDdEMsT0FBTyxNQUFNLGtCQUFHLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUE7QUFDbEUsQ0FBQztBQUZELGdEQUVDO0FBRUQsbUhBQW1IO0FBQ25ILFNBQWdCLHVCQUF1QixDQUFDLGVBQXVCLEVBQUUsS0FBYTtJQUM1RSxNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUNsRCxNQUFNLFVBQVUsR0FBRyxJQUFBLHVDQUFxQixFQUFDLGVBQWUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFB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
@@ -0,0 +1,4 @@
1
+ export * from './generalUtils.js';
2
+ export { config } from './NodeCliUtilsConfig.js';
3
+ export { createTarball, unpackTarball, unpackTarballContents } from './TarballUtility.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAChD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA"}
@@ -0,0 +1,25 @@
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.unpackTarballContents = exports.unpackTarball = exports.createTarball = exports.config = void 0;
18
+ __exportStar(require("./generalUtils.js"), exports);
19
+ var NodeCliUtilsConfig_js_1 = require("./NodeCliUtilsConfig.js");
20
+ Object.defineProperty(exports, "config", { enumerable: true, get: function () { return NodeCliUtilsConfig_js_1.config; } });
21
+ var TarballUtility_js_1 = require("./TarballUtility.js");
22
+ Object.defineProperty(exports, "createTarball", { enumerable: true, get: function () { return TarballUtility_js_1.createTarball; } });
23
+ Object.defineProperty(exports, "unpackTarball", { enumerable: true, get: function () { return TarballUtility_js_1.unpackTarball; } });
24
+ Object.defineProperty(exports, "unpackTarballContents", { enumerable: true, get: function () { return TarballUtility_js_1.unpackTarballContents; } });
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBaUM7QUFDakMsaUVBQWdEO0FBQXZDLCtHQUFBLE1BQU0sT0FBQTtBQUNmLHlEQUF5RjtBQUFoRixrSEFBQSxhQUFhLE9BQUE7QUFBRSxrSEFBQSxhQUFhLE9BQUE7QUFBRSwwSEFBQSxxQkFBcUIsT0FBQSJ9
@@ -0,0 +1,5 @@
1
+ {
2
+ "type": "commonjs",
3
+ "main": "./index.cjs",
4
+ "types": "./index.d.ts"
5
+ }
@@ -0,0 +1,2 @@
1
+ export declare function trace(message?: unknown, ...optionalParams: unknown[]): void;
2
+ //# sourceMappingURL=runWhileParentAlive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runWhileParentAlive.d.ts","sourceRoot":"","sources":["../../src/runWhileParentAlive.ts"],"names":[],"mappings":"AAqBA,wBAAgB,KAAK,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,cAAc,EAAE,OAAO,EAAE,QAGpE"}