@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.
Files changed (81) hide show
  1. package/dist/cjs/DependencyChecker.d.ts +26 -0
  2. package/dist/cjs/DependencyChecker.d.ts.map +1 -0
  3. package/dist/cjs/DependencyChecker.js +200 -0
  4. package/dist/cjs/GitUtility.d.ts +7 -0
  5. package/dist/cjs/GitUtility.d.ts.map +1 -0
  6. package/dist/cjs/GitUtility.js +49 -0
  7. package/dist/cjs/NixUtil.d.ts +8 -0
  8. package/dist/cjs/NixUtil.d.ts.map +1 -0
  9. package/dist/cjs/NixUtil.js +50 -0
  10. package/dist/cjs/TarballUtility.d.ts +17 -7
  11. package/dist/cjs/TarballUtility.d.ts.map +1 -1
  12. package/dist/cjs/TarballUtility.js +18 -24
  13. package/dist/cjs/certUtils.d.ts +53 -17
  14. package/dist/cjs/certUtils.d.ts.map +1 -1
  15. package/dist/cjs/certUtils.js +176 -111
  16. package/dist/cjs/colors.d.ts +17 -0
  17. package/dist/cjs/colors.d.ts.map +1 -0
  18. package/dist/cjs/colors.js +30 -0
  19. package/dist/cjs/dbMigrationUtils.js +44 -54
  20. package/dist/cjs/dotnetUtils.d.ts.map +1 -1
  21. package/dist/cjs/dotnetUtils.js +4 -2
  22. package/dist/cjs/esmSpecific.d.mts +5 -0
  23. package/dist/cjs/esmSpecific.d.mts.map +1 -1
  24. package/dist/cjs/esmSpecific.mjs +6 -1
  25. package/dist/cjs/generalUtils.d.ts +252 -26
  26. package/dist/cjs/generalUtils.d.ts.map +1 -1
  27. package/dist/cjs/generalUtils.js +503 -107
  28. package/dist/cjs/generalUtilsInternal.d.ts +9 -3
  29. package/dist/cjs/generalUtilsInternal.d.ts.map +1 -1
  30. package/dist/cjs/generalUtilsInternal.js +160 -59
  31. package/dist/cjs/hostFileUtils.d.ts +18 -0
  32. package/dist/cjs/hostFileUtils.d.ts.map +1 -0
  33. package/dist/cjs/hostFileUtils.js +100 -0
  34. package/dist/cjs/index.d.ts +1 -0
  35. package/dist/cjs/index.d.ts.map +1 -1
  36. package/dist/cjs/index.js +2 -1
  37. package/dist/cjs/runWhileParentAlive.js +7 -9
  38. package/dist/cjs/testUtils.d.ts +11 -0
  39. package/dist/cjs/testUtils.d.ts.map +1 -0
  40. package/dist/cjs/testUtils.js +58 -0
  41. package/dist/esm/DependencyChecker.d.ts +26 -0
  42. package/dist/esm/DependencyChecker.d.ts.map +1 -0
  43. package/dist/esm/DependencyChecker.js +172 -0
  44. package/dist/esm/GitUtility.d.ts +7 -0
  45. package/dist/esm/GitUtility.d.ts.map +1 -0
  46. package/dist/esm/GitUtility.js +43 -0
  47. package/dist/esm/NixUtil.d.ts +8 -0
  48. package/dist/esm/NixUtil.d.ts.map +1 -0
  49. package/dist/esm/NixUtil.js +46 -0
  50. package/dist/esm/TarballUtility.d.ts +17 -7
  51. package/dist/esm/TarballUtility.d.ts.map +1 -1
  52. package/dist/esm/TarballUtility.js +21 -25
  53. package/dist/esm/certUtils.d.ts +53 -17
  54. package/dist/esm/certUtils.d.ts.map +1 -1
  55. package/dist/esm/certUtils.js +173 -86
  56. package/dist/esm/colors.d.ts +17 -0
  57. package/dist/esm/colors.d.ts.map +1 -0
  58. package/dist/esm/colors.js +20 -0
  59. package/dist/esm/dbMigrationUtils.js +45 -55
  60. package/dist/esm/dotnetUtils.d.ts.map +1 -1
  61. package/dist/esm/dotnetUtils.js +4 -2
  62. package/dist/esm/esmSpecific.d.mts +5 -0
  63. package/dist/esm/esmSpecific.d.mts.map +1 -1
  64. package/dist/esm/esmSpecific.mjs +6 -1
  65. package/dist/esm/generalUtils.d.ts +252 -26
  66. package/dist/esm/generalUtils.d.ts.map +1 -1
  67. package/dist/esm/generalUtils.js +477 -105
  68. package/dist/esm/generalUtilsInternal.d.ts +9 -3
  69. package/dist/esm/generalUtilsInternal.d.ts.map +1 -1
  70. package/dist/esm/generalUtilsInternal.js +151 -57
  71. package/dist/esm/hostFileUtils.d.ts +18 -0
  72. package/dist/esm/hostFileUtils.d.ts.map +1 -0
  73. package/dist/esm/hostFileUtils.js +85 -0
  74. package/dist/esm/index.d.ts +1 -0
  75. package/dist/esm/index.d.ts.map +1 -1
  76. package/dist/esm/index.js +2 -1
  77. package/dist/esm/runWhileParentAlive.js +8 -10
  78. package/dist/esm/testUtils.d.ts +11 -0
  79. package/dist/esm/testUtils.d.ts.map +1 -0
  80. package/dist/esm/testUtils.js +47 -0
  81. package/package.json +38 -2
@@ -1,9 +1,15 @@
1
- import { SpawnOptionsWithThrow, SpawnResult, StringKeyedDictionary } from './generalUtils.js';
1
+ import { SimpleSpawnResult, SpawnOptionsWithThrow, SpawnResult, StringKeyedDictionary, WhichResult } from './generalUtils.js';
2
2
  export declare function copyEnv(sourcePath: string, destinationPath: string, overrideExistingDestinationValues?: boolean, suppressAddKeysMessages?: boolean): Promise<void>;
3
3
  export declare function getEnvAsDictionary(envPath: string): StringKeyedDictionary;
4
4
  export declare function dictionaryToEnvFileString(dict: StringKeyedDictionary): string;
5
5
  export interface SpawnOptionsInternal extends SpawnOptionsWithThrow {
6
- isLongRunning?: boolean;
6
+ isLongRunning: boolean;
7
7
  }
8
- export declare function spawnAsyncInternal(command: string, args?: string[], options?: SpawnOptionsInternal): Promise<SpawnResult>;
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 {};
9
15
  //# sourceMappingURL=generalUtilsInternal.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"generalUtilsInternal.d.ts","sourceRoot":"","sources":["../../src/generalUtilsInternal.ts"],"names":[],"mappings":"AAKA,OAAO,EAAc,qBAAqB,EAAE,WAAW,EAAE,qBAAqB,EAA8G,MAAM,mBAAmB,CAAA;AAOrN,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,CAAC,EAAE,OAAO,CAAA;CACxB;AAED,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,WAAW,CAAC,CAmG/H"}
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;AAG1G,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,mBAAmB,EAAE,WAAW,EAAE,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,CAsCvJ"}
@@ -26,7 +26,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
26
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.spawnAsyncInternal = exports.dictionaryToEnvFileString = exports.getEnvAsDictionary = exports.copyEnv = void 0;
29
+ exports.whichInternal = exports.simpleSpawnAsyncInternal = exports.simpleSpawnSyncInternal = exports.validateFindFilesRecursivelyParams = exports.spawnAsyncInternal = exports.dictionaryToEnvFileString = exports.getEnvAsDictionary = exports.copyEnv = void 0;
30
30
  const node_child_process_1 = require("node:child_process");
31
31
  const node_fs_1 = __importDefault(require("node:fs"));
32
32
  const promises_1 = __importDefault(require("node:fs/promises"));
@@ -88,81 +88,39 @@ function dictionaryToEnvFileString(dict) {
88
88
  }
89
89
  exports.dictionaryToEnvFileString = dictionaryToEnvFileString;
90
90
  async function spawnAsyncInternal(command, args, options) {
91
- const moduleDir = await getCurrentModuleDir();
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
+ }
92
99
  return new Promise((resolve, reject) => {
93
- var _a, _b, _c, _d;
100
+ var _a, _b;
94
101
  try {
95
- const defaultSpawnOptions = { stdio: 'inherit' };
96
- const argsForChildProcess = args !== null && args !== void 0 ? args : [];
97
- const logPrefix = `[${command} ${argsForChildProcess.join(' ')}] `;
98
- const mergedOptions = { ...defaultSpawnOptions, ...options };
99
- const result = {
100
- code: 1,
101
- stdout: '',
102
- stderr: '',
103
- cwd: (_b = (_a = mergedOptions.cwd) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : process.cwd()
104
- };
105
- // Windows has an issue where child processes are orphaned when using the shell option. This workaround will spawn
106
- // 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.
107
- const workaroundCommand = 'node';
108
- const workaroundScriptPath = node_path_1.default.join(moduleDir, spawnWorkaroundScriptName);
109
- // First check if this is the request for the workaround process itself
110
- if ((options === null || options === void 0 ? void 0 : options.isLongRunning) && (0, generalUtils_js_1.isPlatformWindows)() && command !== workaroundCommand && (!argsForChildProcess[0] || !argsForChildProcess[0].endsWith(spawnWorkaroundScriptName))) {
111
- (0, generalUtils_js_1.trace)(`${logPrefix}Running on Windows with shell option - using middle process hack to prevent orphaned processes`);
112
- const loggingEnabledString = NodeCliUtilsConfig_js_1.config.orphanProtectionLoggingEnabled.toString();
113
- const traceEnabledString = NodeCliUtilsConfig_js_1.config.traceEnabled.toString();
114
- const pollingMillisString = NodeCliUtilsConfig_js_1.config.orphanProtectionPollingIntervalMillis.toString();
115
- (0, generalUtils_js_1.trace)(`${logPrefix}Orphan protection logging enabled: ${loggingEnabledString}`);
116
- (0, generalUtils_js_1.trace)(`${logPrefix}Orphan protection trace enabled: ${traceEnabledString}`);
117
- (0, generalUtils_js_1.trace)(`${logPrefix}Orphan protection polling interval: ${pollingMillisString}ms`);
118
- if (NodeCliUtilsConfig_js_1.config.orphanProtectionLoggingEnabled) {
119
- (0, generalUtils_js_1.trace)(`${logPrefix}Orphan protection logging path: ${NodeCliUtilsConfig_js_1.config.orphanProtectionLoggingPath}`);
120
- }
121
- const workaroundArgs = [
122
- workaroundScriptPath,
123
- loggingEnabledString,
124
- traceEnabledString,
125
- pollingMillisString,
126
- command,
127
- ...(args !== null && args !== void 0 ? args : [])
128
- ];
129
- (0, generalUtils_js_1.spawnAsync)(workaroundCommand, workaroundArgs, { ...mergedOptions, stdio: 'inherit', shell: true })
130
- .then((workaroundResult) => {
131
- result.code = workaroundResult.code;
132
- if ((options === null || options === void 0 ? void 0 : options.throwOnNonZero) && result.code !== 0) {
133
- reject(getSpawnError(result.code, result, options));
134
- return;
135
- }
136
- resolve(result);
137
- }).catch((err) => {
138
- reject(err);
139
- });
140
- return;
141
- }
142
- const child = (0, node_child_process_1.spawn)(command, argsForChildProcess, mergedOptions);
102
+ const result = getInitialSpawnResult();
103
+ const child = (0, node_child_process_1.spawn)(command, args, mergedOptions);
143
104
  const childId = child.pid;
144
105
  if (childId === undefined) {
145
106
  throw new Error(`${logPrefix}ChildProcess pid is undefined - spawn failed`);
146
107
  }
147
108
  // This event will only be emitted when stdio is NOT set to 'inherit'
148
- (_c = child.stdout) === null || _c === void 0 ? void 0 : _c.on('data', (data) => {
149
- process.stdout.write(data);
109
+ (_a = child.stdout) === null || _a === void 0 ? void 0 : _a.on('data', (data) => {
150
110
  result.stdout += data.toString();
151
111
  });
152
112
  // This event will only be emitted when stdio is NOT set to 'inherit'
153
- (_d = child.stderr) === null || _d === void 0 ? void 0 : _d.on('data', (data) => {
154
- process.stdout.write(data);
113
+ (_b = child.stderr) === null || _b === void 0 ? void 0 : _b.on('data', (data) => {
155
114
  result.stderr += data.toString();
156
115
  });
157
116
  const listener = new SignalListener(child, logPrefix);
158
117
  child.on('exit', (code, signal) => {
159
118
  const signalMessage = signal ? ` with signal ${signal}` : '';
160
119
  (0, generalUtils_js_1.trace)(`${logPrefix}ChildProcess exited with code ${code}${signalMessage}`);
161
- // If long running, ctrl+c will cause null, which we don't necessarily want to consider an error
162
- result.code = (code === null && (options === null || options === void 0 ? void 0 : options.isLongRunning)) ? 0 : code !== null && code !== void 0 ? code : 1;
120
+ result.code = getResultCode(code, mergedOptions.isLongRunning);
163
121
  child.removeAllListeners();
164
122
  listener.detach();
165
- if ((options === null || options === void 0 ? void 0 : options.throwOnNonZero) && result.code !== 0) {
123
+ if (mergedOptions.throwOnNonZero && result.code !== 0) {
166
124
  reject(getSpawnError(result.code, result, mergedOptions));
167
125
  return;
168
126
  }
@@ -178,6 +136,62 @@ async function spawnAsyncInternal(command, args, options) {
178
136
  });
179
137
  }
180
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
+ }
181
195
  function getSpawnError(code, result, options) {
182
196
  const additional = options.throwOnNonZero && options.stdio === 'inherit' ? `. See above for more details (stdio is 'inherit').` : '';
183
197
  return new generalUtils_js_1.SpawnError(`Spawning child process failed with code ${code}${additional}`, result);
@@ -214,4 +228,91 @@ async function getCurrentModuleDir() {
214
228
  }
215
229
  return __dirname;
216
230
  }
217
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhbFV0aWxzSW50ZXJuYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2VuZXJhbFV0aWxzSW50ZXJuYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyREFBc0U7QUFDdEUsc0RBQXdCO0FBQ3hCLGdFQUFrQztBQUNsQywwREFBNEI7QUFDNUIsbUVBQWdEO0FBQ2hELHVEQUFxTjtBQUVyTixNQUFNLFVBQVUsR0FBRyxPQUFPLE9BQU8sS0FBSyxVQUFVLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUE7QUFDaEcsTUFBTSxLQUFLLEdBQUcsQ0FBQyxVQUFVLENBQUE7QUFDekIsTUFBTSx5QkFBeUIsR0FBRyx3QkFBd0IsQ0FBQTtBQUMxRCxNQUFNLGdCQUFnQixHQUFXLEVBQUUsQ0FBQSxDQUFDLHFDQUFxQztBQUVsRSxLQUFLLFVBQVUsT0FBTyxDQUFDLFVBQWtCLEVBQUUsZUFBdUIsRUFBRSxpQ0FBaUMsR0FBRyxJQUFJLEVBQUUsdUJBQXVCLEdBQUcsS0FBSztJQUNsSixJQUFBLGtDQUFnQixFQUFDLFlBQVksRUFBRSxVQUFVLENBQUMsQ0FBQTtJQUUxQyxzRUFBc0U7SUFDdEUsSUFBSSxDQUFDLGlCQUFFLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxFQUFFO1FBQ25DLElBQUEscUJBQUcsRUFBQyxZQUFZLGVBQWUsU0FBUyxVQUFVLEVBQUUsQ0FBQyxDQUFBO1FBQ3JELE1BQU0sa0JBQUcsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLGVBQWUsQ0FBQyxDQUFBO1FBQy9DLE9BQU07S0FDUDtJQUVELE1BQU0sVUFBVSxHQUFHLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ2pELE1BQU0sZUFBZSxHQUFHLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxDQUFBO0lBRTNELHlHQUF5RztJQUN6RyxNQUFNLFlBQVks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
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
+ // Spawn functions passed here so they can be mocked in tests
282
+ function whichInternal(commandName, simpleCmd, simpleSpawn) {
283
+ (0, generalUtils_js_1.requireString)('commandName', commandName);
284
+ if ((0, generalUtils_js_1.stripShellMetaCharacters)(commandName) !== commandName) {
285
+ throw new Error(`commandName cannot contain shell meta characters: ${commandName}`);
286
+ }
287
+ const execFunc = (0, generalUtils_js_1.isPlatformWindows)() ? simpleCmd : simpleSpawn;
288
+ const cmd = (0, generalUtils_js_1.isPlatformWindows)() ? 'where' : 'which';
289
+ const args = (0, generalUtils_js_1.isPlatformWindows)() ? [commandName] : ['-a', commandName];
290
+ try {
291
+ const result = execFunc(cmd, args);
292
+ if (result instanceof Promise) {
293
+ return result.then(parsedResult => ({
294
+ location: parsedResult.stdoutLines[0],
295
+ additionalLocations: parsedResult.stdoutLines.slice(1),
296
+ error: parsedResult.error
297
+ })).catch(err => ({
298
+ location: undefined,
299
+ additionalLocations: undefined,
300
+ error: err
301
+ }));
302
+ }
303
+ return {
304
+ location: result.stdoutLines[0],
305
+ additionalLocations: result.stdoutLines.slice(1),
306
+ error: result.error
307
+ };
308
+ }
309
+ catch (err) {
310
+ return {
311
+ location: undefined,
312
+ additionalLocations: undefined,
313
+ error: err
314
+ };
315
+ }
316
+ }
317
+ exports.whichInternal = whichInternal;
318
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhbFV0aWxzSW50ZXJuYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2VuZXJhbFV0aWxzSW50ZXJuYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyREFBbUU7QUFDbkUsc0RBQXdCO0FBQ3hCLGdFQUFrQztBQUNsQywwREFBNEI7QUFDNUIsbUVBQWdEO0FBQ2hELHVEQUFnVDtBQUVoVCxNQUFNLFVBQVUsR0FBRyxPQUFPLE9BQU8sS0FBSyxVQUFVLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUE7QUFDaEcsTUFBTSxLQUFLLEdBQUcsQ0FBQyxVQUFVLENBQUE7QUFDekIsTUFBTSx5QkFBeUIsR0FBRyx3QkFBd0IsQ0FBQTtBQUMxRCxNQUFNLGdCQUFnQixHQUFXLEVBQUUsQ0FBQSxDQUFDLHFDQUFxQztBQUVsRSxLQUFLLFVBQVUsT0FBTyxDQUFDLFVBQWtCLEVBQUUsZUFBdUIsRUFBRSxpQ0FBaUMsR0FBRyxJQUFJLEVBQUUsdUJBQXVCLEdBQUcsS0FBSztJQUNsSixJQUFBLGtDQUFnQixFQUFDLFlBQVksRUFBRSxVQUFVLENBQUMsQ0FBQTtJQUUxQyxzRUFBc0U7SUFDdEUsSUFBSSxDQUFDLGlCQUFFLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxFQUFFO1FBQ25DLElBQUEscUJBQUcsRUFBQyxZQUFZLGVBQWUsU0FBUyxVQUFVLEVBQUUsQ0FBQyxDQUFBO1FBQ3JELE1BQU0sa0JBQUcsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLGVBQWUsQ0FBQyxDQUFBO1FBQy9DLE9BQU07S0FDUDtJQUVELE1BQU0sVUFBVSxHQUFHLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ2pELE1BQU0sZUFBZSxHQUFHLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxDQUFBO0lBRTNELHlHQUF5RztJQUN6RyxNQUFNLFlBQVks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
@@ -0,0 +1,18 @@
1
+ export declare function ensureHostsEntry(url: string, ipV4Address?: string): Promise<void>;
2
+ export declare function removeHostsEntry(url: string, ipV4Address?: string): Promise<void>;
3
+ export declare function getHostsPath(): string;
4
+ export declare function getHostsFileString(): Promise<string>;
5
+ export declare function hostsFileHasEntry(hostname: string, ipV4Address?: string): Promise<boolean>;
6
+ export declare function hostsFileStringHasEntry(hostsFileString: string, entry: string): boolean;
7
+ export declare function changeHostsFile(hostname: string, ipV4Address: string, operation: 'add' | 'remove'): Promise<void>;
8
+ export declare function isIpV4Address(address: string): boolean;
9
+ /**
10
+ * The `initialString` will have line endings normalized to use os.EOL and lines with `omitLine` will be removed.
11
+ * Comparisons for which lines should be removed are normalizing whitespace (multiple spaces collapsed into single
12
+ * spaces for the comparison). This is useful to remove instances of a hosts entry, for example.
13
+ * @param initialString The string to normalize remove instances of omitLine from
14
+ * @param omitLine All instance of this string will be omitted from the result
15
+ * @returns A string that has instances of the omitLine removed and all line endings changed to match the os.EOL
16
+ */
17
+ export declare function getEolNormalizedWithoutLine(initialString: string, omitLine: string): string;
18
+ //# sourceMappingURL=hostFileUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hostFileUtils.d.ts","sourceRoot":"","sources":["../../src/hostFileUtils.ts"],"names":[],"mappings":"AAIA,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,GAAE,MAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAGpG;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,GAAE,MAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAGpG;AAED,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CAE1D;AAED,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,GAAE,MAAoB,GAAG,OAAO,CAAC,OAAO,CAAC,CAI7G;AAGD,wBAAgB,uBAAuB,CAAC,eAAe,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAKvF;AAED,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAiCvH;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAQtD;AAGD;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAM3F"}
@@ -0,0 +1,100 @@
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.isIpV4Address = exports.changeHostsFile = exports.hostsFileStringHasEntry = exports.hostsFileHasEntry = 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, ipV4Address = '127.0.0.1') {
11
+ const hostname = (0, generalUtils_js_1.getHostname)(url);
12
+ await changeHostsFile(hostname, ipV4Address, 'add');
13
+ }
14
+ exports.ensureHostsEntry = ensureHostsEntry;
15
+ async function removeHostsEntry(url, ipV4Address = '127.0.0.1') {
16
+ const hostname = (0, generalUtils_js_1.getHostname)(url);
17
+ await changeHostsFile(hostname, ipV4Address, '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
+ async function hostsFileHasEntry(hostname, ipV4Address = '127.0.0.1') {
29
+ const entry = `${ipV4Address} ${hostname}`;
30
+ const hostsFileString = await getHostsFileString();
31
+ return hostsFileStringHasEntry(hostsFileString, entry);
32
+ }
33
+ exports.hostsFileHasEntry = hostsFileHasEntry;
34
+ // Check by normalizing whitespace (collapse consecutive spaces to single spaces) in entry and on each line checked
35
+ function hostsFileStringHasEntry(hostsFileString, entry) {
36
+ const normalizedEntry = entry.replace(/\s+/g, ' ');
37
+ const hostsLines = (0, generalUtils_js_1.stringToNonEmptyLines)(hostsFileString).map(l => l.replace(/\s+/g, ' ')).filter(l => !l.startsWith('#'));
38
+ const hasLine = hostsLines.includes(normalizedEntry);
39
+ return hasLine;
40
+ }
41
+ exports.hostsFileStringHasEntry = hostsFileStringHasEntry;
42
+ async function changeHostsFile(hostname, ipV4Address, operation) {
43
+ (0, generalUtils_js_1.requireString)('hostname', hostname);
44
+ if ((0, generalUtils_js_1.hasWhitespace)(hostname)) {
45
+ throw new Error(`Invalid hostname: ${hostname}`);
46
+ }
47
+ if (!isIpV4Address(ipV4Address)) {
48
+ throw new Error(`Invalid ipV4Address: ${ipV4Address}`);
49
+ }
50
+ const isAddition = operation === 'add';
51
+ const isRemoval = operation === 'remove';
52
+ const hostsPath = getHostsPath();
53
+ const entry = `${ipV4Address} ${hostname}`;
54
+ (0, generalUtils_js_1.log)(`checking hosts file: ${hostsPath} for entry ${entry}`);
55
+ const hostsFileString = await getHostsFileString();
56
+ const hasLine = hostsFileStringHasEntry(hostsFileString, entry);
57
+ if (isAddition && hasLine) {
58
+ (0, generalUtils_js_1.log)(`there is an existing entry in the hosts file (${entry}), skipping`);
59
+ return;
60
+ }
61
+ if (isRemoval && !hasLine) {
62
+ (0, generalUtils_js_1.log)(`there is no hosts entry to remove (${entry}), skipping`);
63
+ }
64
+ if (isAddition && !hasLine) {
65
+ (0, generalUtils_js_1.log)('existing entry not found - appending entry to the hosts file');
66
+ await promises_1.default.appendFile(hostsPath, `\n${entry}`);
67
+ }
68
+ if (isRemoval && hasLine) {
69
+ (0, generalUtils_js_1.log)(`existing entry found - removing entry`);
70
+ const hostsWithoutEntry = getEolNormalizedWithoutLine(hostsFileString, entry);
71
+ await promises_1.default.writeFile(hostsPath, hostsWithoutEntry);
72
+ }
73
+ }
74
+ exports.changeHostsFile = changeHostsFile;
75
+ function isIpV4Address(address) {
76
+ const ipV4AddressRegex = /^(\d{1,3}\.){3}\d{1,3}$/;
77
+ if (!ipV4AddressRegex.test(address)) {
78
+ return false;
79
+ }
80
+ const octets = address.split('.').map(Number);
81
+ return octets.every(octet => octet >= 0 && octet <= 255);
82
+ }
83
+ exports.isIpV4Address = isIpV4Address;
84
+ /**
85
+ * The `initialString` will have line endings normalized to use os.EOL and lines with `omitLine` will be removed.
86
+ * Comparisons for which lines should be removed are normalizing whitespace (multiple spaces collapsed into single
87
+ * spaces for the comparison). This is useful to remove instances of a hosts entry, for example.
88
+ * @param initialString The string to normalize remove instances of omitLine from
89
+ * @param omitLine All instance of this string will be omitted from the result
90
+ * @returns A string that has instances of the omitLine removed and all line endings changed to match the os.EOL
91
+ */
92
+ function getEolNormalizedWithoutLine(initialString, omitLine) {
93
+ const normalizedOmitLine = omitLine.replace(/\s+/g, ' ');
94
+ const lines = initialString.split('\n')
95
+ .map(l => l.replace(/\r/g, ''))
96
+ .filter(l => l.replace(/\s+/g, ' ') !== normalizedOmitLine);
97
+ return lines.join(node_os_1.default.EOL);
98
+ }
99
+ exports.getEolNormalizedWithoutLine = getEolNormalizedWithoutLine;
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9zdEZpbGVVdGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob3N0RmlsZVV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGdFQUFrQztBQUNsQyxzREFBd0I7QUFDeEIsdURBQTRIO0FBRXJILEtBQUssVUFBVSxnQkFBZ0IsQ0FBQyxHQUFXLEVBQUUsY0FBc0IsV0FBVztJQUNuRixNQUFNLFFBQVEsR0FBRyxJQUFBLDZCQUFXLEVBQUMsR0FBRyxDQUFDLENBQUE7SUFDakMsTUFBTSxlQUFlLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQTtBQUNyRCxDQUFDO0FBSEQsNENBR0M7QUFFTSxLQUFLLFVBQVUsZ0JBQWdCLENBQUMsR0FBVyxFQUFFLGNBQXNCLFdBQVc7SUFDbkYsTUFBTSxRQUFRLEdBQUcsSUFBQSw2QkFBVyxFQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ2pDLE1BQU0sZUFBZSxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUE7QUFDeEQsQ0FBQztBQUhELDRDQUdDO0FBRUQsU0FBZ0IsWUFBWTtJQUMxQixPQUFPLElBQUEsbUNBQWlCLEdBQUUsQ0FBQyxDQUFDLENBQUMsdUNBQXVDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQTtBQUNyRixDQUFDO0FBRkQsb0NBRUM7QUFFTSxLQUFLLFVBQVUsa0JBQWtCO0lBQ3RDLE9BQU8sTUFBTSxrQkFBRyxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFBO0FBQ2xFLENBQUM7QUFGRCxnREFFQztBQUVNLEtBQUssVUFBVSxpQkFBaUIsQ0FBQyxRQUFnQixFQUFFLGNBQXNCLFdBQVc7SUFDekYsTUFBTSxLQUFLLEdBQUcsR0FBRyxXQUFXLElBQUksUUFBUSxFQUFFLENBQUE7SUFDMUMsTUFBTSxlQUFlLEdBQUcsTUFBTSxrQkFBa0IsRUFB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
@@ -1,4 +1,5 @@
1
1
  export * from './generalUtils.js';
2
2
  export { config } from './NodeCliUtilsConfig.js';
3
3
  export { createTarball, unpackTarball, unpackTarballContents } from './TarballUtility.js';
4
+ export * from './hostFileUtils.js';
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +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"}
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;AACzF,cAAc,oBAAoB,CAAA"}
package/dist/cjs/index.js CHANGED
@@ -22,4 +22,5 @@ var TarballUtility_js_1 = require("./TarballUtility.js");
22
22
  Object.defineProperty(exports, "createTarball", { enumerable: true, get: function () { return TarballUtility_js_1.createTarball; } });
23
23
  Object.defineProperty(exports, "unpackTarball", { enumerable: true, get: function () { return TarballUtility_js_1.unpackTarball; } });
24
24
  Object.defineProperty(exports, "unpackTarballContents", { enumerable: true, get: function () { return TarballUtility_js_1.unpackTarballContents; } });
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBaUM7QUFDakMsaUVBQWdEO0FBQXZDLCtHQUFBLE1BQU0sT0FBQTtBQUNmLHlEQUF5RjtBQUFoRixrSEFBQSxhQUFhLE9BQUE7QUFBRSxrSEFBQSxhQUFhLE9BQUE7QUFBRSwwSEFBQSxxQkFBcUIsT0FBQSJ9
25
+ __exportStar(require("./hostFileUtils.js"), exports);
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBaUM7QUFDakMsaUVBQWdEO0FBQXZDLCtHQUFBLE1BQU0sT0FBQTtBQUNmLHlEQUF5RjtBQUFoRixrSEFBQSxhQUFhLE9BQUE7QUFBRSxrSEFBQSxhQUFhLE9BQUE7QUFBRSwwSEFBQSxxQkFBcUIsT0FBQTtBQUM1RCxxREFBa0MifQ==
@@ -28,7 +28,7 @@ function trace(message, ...optionalParams) {
28
28
  }
29
29
  exports.trace = trace;
30
30
  function logToFile(message) {
31
- node_fs_1.default.appendFileSync(NodeCliUtilsConfig_js_1.config.orphanProtectionLoggingPath, `${getLogPrefix()}${message}` + ((message && message.length && message[message.length - 1] !== '\n') ? '\n' : ''));
31
+ node_fs_1.default.appendFileSync(NodeCliUtilsConfig_js_1.config.orphanProtectionLoggingPath, `${getLogPrefix()}${message}` + !(message === null || message === void 0 ? void 0 : message.endsWith('\n')) ? '\n' : '');
32
32
  }
33
33
  function traceAndLog(message, isDevTrace = false) {
34
34
  if (isDevTrace && !DEV_LOGGING) {
@@ -49,7 +49,7 @@ function traceAndLog(message, isDevTrace = false) {
49
49
  function isParentProcessAlive(parentId) {
50
50
  var _a, _b, _c;
51
51
  try {
52
- const result = (0, node_child_process_1.spawnSync)('tasklist', { shell: true });
52
+ const result = (0, node_child_process_1.spawnSync)('C:\\Windows\\system32\\tasklist.exe');
53
53
  const resultToLog = {
54
54
  status: result.status,
55
55
  stderr: (_a = result.stderr) === null || _a === void 0 ? void 0 : _a.toString(),
@@ -72,7 +72,7 @@ function isParentProcessAlive(parentId) {
72
72
  }
73
73
  function killTree(pid) {
74
74
  try {
75
- (0, node_child_process_1.execSync)(`taskkill /pid ${pid} /T /F`);
75
+ (0, node_child_process_1.spawnSync)(`C:\\Windows\\system32\\taskkill.exe /pid ${pid} /T /F`);
76
76
  traceAndLog(`No errors running killTree`);
77
77
  }
78
78
  catch (err) {
@@ -108,7 +108,7 @@ try {
108
108
  process.exit(1);
109
109
  }
110
110
  const [command, ...args] = passthroughArgs;
111
- const child = (0, node_child_process_1.spawn)(command, args, { stdio: 'inherit', shell: true });
111
+ const child = (0, node_child_process_1.spawn)(command, args, { stdio: 'inherit', shell: 'cmd.exe' });
112
112
  const childId = child.pid;
113
113
  if (!childId) {
114
114
  const noChildIdMessage = 'spawning ChildProcess failed - no pid on returned handle';
@@ -124,10 +124,8 @@ try {
124
124
  traceAndLog('Used taskkill and cleared interval - exiting...');
125
125
  process.exit(0);
126
126
  }
127
- else {
128
- if (DEV_LOGGING) {
129
- traceAndLog('Parent is alive, keep running.');
130
- }
127
+ if (DEV_LOGGING) {
128
+ traceAndLog('Parent is alive, keep running.');
131
129
  }
132
130
  }, pollingMillis);
133
131
  child.on('exit', (code, signal) => {
@@ -158,4 +156,4 @@ catch (err) {
158
156
  logToFile(msg);
159
157
  process.exit(1);
160
158
  }
161
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuV2hpbGVQYXJlbnRBbGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW5XaGlsZVBhcmVudEFsaXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHlCQUF5QjtBQUN6Qiw4RkFBOEY7QUFDOUYsMkRBQStEO0FBQy9ELHNEQUF3QjtBQUN4QixtRUFBZ0Q7QUFFaEQsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFBLENBQUMsOEVBQThFO0FBQ3hHLElBQUksY0FBYyxHQUFHLElBQUksQ0FBQSxDQUFDLHFGQUFxRjtBQUMvRyxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUEsQ0FBQyxxRkFBcUY7QUFDN0csSUFBSSxhQUFhLEdBQVcsOEJBQU0sQ0FBQyxxQ0FBcUMsQ0FBQSxDQUFDLG9FQUFvRTtBQUU3SSxTQUFTLFlBQVk7SUFDbkIsTUFBTSxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQTtJQUN0QixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUN4RCxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUM1RCxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUM1RCxNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUN0RSxPQUFPLElBQUksS0FBSyxJQUFJLE9BQU8sSUFBSSxPQUFPLElBQUksWUFBWSxJQUFJLENBQUE7QUFDNUQsQ0FBQztB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
159
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuV2hpbGVQYXJlbnRBbGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW5XaGlsZVBhcmVudEFsaXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHlCQUF5QjtBQUN6Qiw4RkFBOEY7QUFDOUYsMkRBQXFEO0FBQ3JELHNEQUF3QjtBQUN4QixtRUFBZ0Q7QUFFaEQsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFBLENBQUMsOEVBQThFO0FBQ3hHLElBQUksY0FBYyxHQUFHLElBQUksQ0FBQSxDQUFDLHFGQUFxRjtBQUMvRyxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUEsQ0FBQyxxRkFBcUY7QUFDN0csSUFBSSxhQUFhLEdBQVcsOEJBQU0sQ0FBQyxxQ0FBcUMsQ0FBQSxDQUFDLG9FQUFvRTtBQUU3SSxTQUFTLFlBQVk7SUFDbkIsTUFBTSxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQTtJQUN0QixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUN4RCxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUM1RCxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUM1RCxNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUN0RSxPQUFPLElBQUksS0FBSyxJQUFJLE9BQU8sSUFBSSxPQUFPLElBQUksWUFBWSxJQUFJLENBQUE7QUFDNUQsQ0FBQztB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
@@ -0,0 +1,11 @@
1
+ export declare const tempDir = "./test/temp";
2
+ export declare const fixturesDir = "./test/fixtures";
3
+ export declare const only: {
4
+ only: boolean;
5
+ };
6
+ export declare const ensureEmptyTempDir: (dir: string) => Promise<void>;
7
+ export declare function fileExistsAndIsNonZero(filePath: string): boolean;
8
+ export declare function assertErrorMessageStartsWith(err: unknown, expectedStartsWith: string): boolean;
9
+ export declare function assertErrorMessageIncludes(err: unknown, expectedIncludes: string): boolean;
10
+ export declare function assertErrorMessageEquals(err: unknown, expected: string): boolean;
11
+ //# sourceMappingURL=testUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testUtils.d.ts","sourceRoot":"","sources":["../../src/testUtils.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,OAAO,gBAAgB,CAAA;AACpC,eAAO,MAAM,WAAW,oBAAoB,CAAA;AAC5C,eAAO,MAAM,IAAI;;CAAiB,CAAA;AAElC,eAAO,MAAM,kBAAkB,QAAe,MAAM,kBAWnD,CAAA;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAWhE;AAED,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAIpF;AAED,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAIhF;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAItE"}