@mikeyt23/node-cli-utils 2.0.0-beta.2 → 2.0.0
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/README.md +19 -9
- 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/NixUtil.d.ts +8 -0
- package/dist/cjs/NixUtil.d.ts.map +1 -0
- package/dist/cjs/NixUtil.js +50 -0
- package/dist/cjs/certUtils.js +3 -2
- 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/generalUtils.d.ts +0 -16
- package/dist/cjs/generalUtils.d.ts.map +1 -1
- package/dist/cjs/generalUtils.js +9 -29
- package/dist/cjs/generalUtilsInternal.d.ts.map +1 -1
- package/dist/cjs/generalUtilsInternal.js +2 -1
- package/dist/cjs/{hostsUtils.d.ts → hostFileUtils.d.ts} +6 -4
- 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/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/NixUtil.d.ts +8 -0
- package/dist/esm/NixUtil.d.ts.map +1 -0
- package/dist/esm/NixUtil.js +46 -0
- package/dist/esm/certUtils.js +3 -2
- 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/generalUtils.d.ts +0 -16
- package/dist/esm/generalUtils.d.ts.map +1 -1
- package/dist/esm/generalUtils.js +8 -21
- package/dist/esm/generalUtilsInternal.d.ts.map +1 -1
- package/dist/esm/generalUtilsInternal.js +2 -1
- package/dist/esm/{hostsUtils.d.ts → hostFileUtils.d.ts} +6 -4
- 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/testUtils.d.ts +11 -0
- package/dist/esm/testUtils.d.ts.map +1 -0
- package/dist/esm/testUtils.js +47 -0
- package/package.json +36 -2
- package/dist/cjs/hostsUtils.d.ts.map +0 -1
- package/dist/cjs/hostsUtils.js +0 -82
- package/dist/esm/hostsUtils.d.ts.map +0 -1
- package/dist/esm/hostsUtils.js +0 -69
|
@@ -240,6 +240,7 @@ export async function simpleSpawnAsyncInternal(command, args, throwOnNonZero = t
|
|
|
240
240
|
}
|
|
241
241
|
return spawnResult;
|
|
242
242
|
}
|
|
243
|
+
// Spawn functions passed here so they can be mocked in tests
|
|
243
244
|
export function whichInternal(commandName, simpleCmd, simpleSpawn) {
|
|
244
245
|
requireString('commandName', commandName);
|
|
245
246
|
if (stripShellMetaCharacters(commandName) !== commandName) {
|
|
@@ -275,4 +276,4 @@ export function whichInternal(commandName, simpleCmd, simpleSpawn) {
|
|
|
275
276
|
};
|
|
276
277
|
}
|
|
277
278
|
}
|
|
278
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhbFV0aWxzSW50ZXJuYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2VuZXJhbFV0aWxzSW50ZXJuYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFDbkUsT0FBTyxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBQ3hCLE9BQU8sR0FBRyxNQUFNLGtCQUFrQixDQUFBO0FBQ2xDLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQTtBQUM1QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFDaEQsT0FBTyxFQUFFLGdCQUFnQixFQUFxQixVQUFVLEVBQTBFLGlCQUFpQixFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsc0JBQXNCLEVBQUUsVUFBVSxFQUFFLHFCQUFxQixFQUFFLHdCQUF3QixFQUFFLEtBQUssRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBRWhULE1BQU0sVUFBVSxHQUFHLE9BQU8sT0FBTyxLQUFLLFVBQVUsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQTtBQUNoRyxNQUFNLEtBQUssR0FBRyxDQUFDLFVBQVUsQ0FBQTtBQUN6QixNQUFNLHlCQUF5QixHQUFHLHdCQUF3QixDQUFBO0FBQzFELE1BQU0sZ0JBQWdCLEdBQVcsRUFBRSxDQUFBLENBQUMscUNBQXFDO0FBRXpFLE1BQU0sQ0FBQyxLQUFLLFVBQVUsT0FBTyxDQUFDLFVBQWtCLEVBQUUsZUFBdUIsRUFBRSxpQ0FBaUMsR0FBRyxJQUFJLEVBQUUsdUJBQXVCLEdBQUcsS0FBSztJQUNsSixnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsVUFBVSxDQUFDLENBQUE7SUFFMUMsc0VBQXNFO0lBQ3RFLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxFQUFFO1FBQ25DLEdB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
|
|
279
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhbFV0aWxzSW50ZXJuYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2VuZXJhbFV0aWxzSW50ZXJuYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFDbkUsT0FBTyxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBQ3hCLE9BQU8sR0FBRyxNQUFNLGtCQUFrQixDQUFBO0FBQ2xDLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQTtBQUM1QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFDaEQsT0FBTyxFQUFFLGdCQUFnQixFQUFxQixVQUFVLEVBQTBFLGlCQUFpQixFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsc0JBQXNCLEVBQUUsVUFBVSxFQUFFLHFCQUFxQixFQUFFLHdCQUF3QixFQUFFLEtBQUssRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBRWhULE1BQU0sVUFBVSxHQUFHLE9BQU8sT0FBTyxLQUFLLFVBQVUsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQTtBQUNoRyxNQUFNLEtBQUssR0FBRyxDQUFDLFVBQVUsQ0FBQTtBQUN6QixNQUFNLHlCQUF5QixHQUFHLHdCQUF3QixDQUFBO0FBQzFELE1BQU0sZ0JBQWdCLEdBQVcsRUFBRSxDQUFBLENBQUMscUNBQXFDO0FBRXpFLE1BQU0sQ0FBQyxLQUFLLFVBQVUsT0FBTyxDQUFDLFVBQWtCLEVBQUUsZUFBdUIsRUFBRSxpQ0FBaUMsR0FBRyxJQUFJLEVBQUUsdUJBQXVCLEdBQUcsS0FBSztJQUNsSixnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsVUFBVSxDQUFDLENBQUE7SUFFMUMsc0VBQXNFO0lBQ3RFLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxFQUFFO1FBQ25DLEdB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
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
export declare function ensureHostsEntry(url: string): Promise<void>;
|
|
2
|
-
export declare function removeHostsEntry(url: string): Promise<void>;
|
|
1
|
+
export declare function ensureHostsEntry(url: string, ipV4Address?: string): Promise<void>;
|
|
2
|
+
export declare function removeHostsEntry(url: string, ipV4Address?: string): Promise<void>;
|
|
3
3
|
export declare function getHostsPath(): string;
|
|
4
4
|
export declare function getHostsFileString(): Promise<string>;
|
|
5
|
+
export declare function hostsFileHasEntry(hostname: string, ipV4Address?: string): Promise<boolean>;
|
|
5
6
|
export declare function hostsFileStringHasEntry(hostsFileString: string, entry: string): boolean;
|
|
6
|
-
export declare function changeHostsFile(hostname: string, operation: 'add' | 'remove'): Promise<void>;
|
|
7
|
+
export declare function changeHostsFile(hostname: string, ipV4Address: string, operation: 'add' | 'remove'): Promise<void>;
|
|
8
|
+
export declare function isIpV4Address(address: string): boolean;
|
|
7
9
|
/**
|
|
8
10
|
* The `initialString` will have line endings normalized to use os.EOL and lines with `omitLine` will be removed.
|
|
9
11
|
* Comparisons for which lines should be removed are normalizing whitespace (multiple spaces collapsed into single
|
|
@@ -13,4 +15,4 @@ export declare function changeHostsFile(hostname: string, operation: 'add' | 're
|
|
|
13
15
|
* @returns A string that has instances of the omitLine removed and all line endings changed to match the os.EOL
|
|
14
16
|
*/
|
|
15
17
|
export declare function getEolNormalizedWithoutLine(initialString: string, omitLine: string): string;
|
|
16
|
-
//# sourceMappingURL=
|
|
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,85 @@
|
|
|
1
|
+
import fsp from 'node:fs/promises';
|
|
2
|
+
import os from 'node:os';
|
|
3
|
+
import { getHostname, hasWhitespace, isPlatformWindows, log, requireString, stringToNonEmptyLines } from './generalUtils.js';
|
|
4
|
+
export async function ensureHostsEntry(url, ipV4Address = '127.0.0.1') {
|
|
5
|
+
const hostname = getHostname(url);
|
|
6
|
+
await changeHostsFile(hostname, ipV4Address, 'add');
|
|
7
|
+
}
|
|
8
|
+
export async function removeHostsEntry(url, ipV4Address = '127.0.0.1') {
|
|
9
|
+
const hostname = getHostname(url);
|
|
10
|
+
await changeHostsFile(hostname, ipV4Address, 'remove');
|
|
11
|
+
}
|
|
12
|
+
export function getHostsPath() {
|
|
13
|
+
return isPlatformWindows() ? 'C:/Windows/System32/drivers/etc/hosts' : '/etc/hosts';
|
|
14
|
+
}
|
|
15
|
+
export async function getHostsFileString() {
|
|
16
|
+
return await fsp.readFile(getHostsPath(), { encoding: 'utf-8' });
|
|
17
|
+
}
|
|
18
|
+
export async function hostsFileHasEntry(hostname, ipV4Address = '127.0.0.1') {
|
|
19
|
+
const entry = `${ipV4Address} ${hostname}`;
|
|
20
|
+
const hostsFileString = await getHostsFileString();
|
|
21
|
+
return hostsFileStringHasEntry(hostsFileString, entry);
|
|
22
|
+
}
|
|
23
|
+
// Check by normalizing whitespace (collapse consecutive spaces to single spaces) in entry and on each line checked
|
|
24
|
+
export function hostsFileStringHasEntry(hostsFileString, entry) {
|
|
25
|
+
const normalizedEntry = entry.replace(/\s+/g, ' ');
|
|
26
|
+
const hostsLines = stringToNonEmptyLines(hostsFileString).map(l => l.replace(/\s+/g, ' ')).filter(l => !l.startsWith('#'));
|
|
27
|
+
const hasLine = hostsLines.includes(normalizedEntry);
|
|
28
|
+
return hasLine;
|
|
29
|
+
}
|
|
30
|
+
export async function changeHostsFile(hostname, ipV4Address, operation) {
|
|
31
|
+
requireString('hostname', hostname);
|
|
32
|
+
if (hasWhitespace(hostname)) {
|
|
33
|
+
throw new Error(`Invalid hostname: ${hostname}`);
|
|
34
|
+
}
|
|
35
|
+
if (!isIpV4Address(ipV4Address)) {
|
|
36
|
+
throw new Error(`Invalid ipV4Address: ${ipV4Address}`);
|
|
37
|
+
}
|
|
38
|
+
const isAddition = operation === 'add';
|
|
39
|
+
const isRemoval = operation === 'remove';
|
|
40
|
+
const hostsPath = getHostsPath();
|
|
41
|
+
const entry = `${ipV4Address} ${hostname}`;
|
|
42
|
+
log(`checking hosts file: ${hostsPath} for entry ${entry}`);
|
|
43
|
+
const hostsFileString = await getHostsFileString();
|
|
44
|
+
const hasLine = hostsFileStringHasEntry(hostsFileString, entry);
|
|
45
|
+
if (isAddition && hasLine) {
|
|
46
|
+
log(`there is an existing entry in the hosts file (${entry}), skipping`);
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
if (isRemoval && !hasLine) {
|
|
50
|
+
log(`there is no hosts entry to remove (${entry}), skipping`);
|
|
51
|
+
}
|
|
52
|
+
if (isAddition && !hasLine) {
|
|
53
|
+
log('existing entry not found - appending entry to the hosts file');
|
|
54
|
+
await fsp.appendFile(hostsPath, `\n${entry}`);
|
|
55
|
+
}
|
|
56
|
+
if (isRemoval && hasLine) {
|
|
57
|
+
log(`existing entry found - removing entry`);
|
|
58
|
+
const hostsWithoutEntry = getEolNormalizedWithoutLine(hostsFileString, entry);
|
|
59
|
+
await fsp.writeFile(hostsPath, hostsWithoutEntry);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
export function isIpV4Address(address) {
|
|
63
|
+
const ipV4AddressRegex = /^(\d{1,3}\.){3}\d{1,3}$/;
|
|
64
|
+
if (!ipV4AddressRegex.test(address)) {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
const octets = address.split('.').map(Number);
|
|
68
|
+
return octets.every(octet => octet >= 0 && octet <= 255);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* The `initialString` will have line endings normalized to use os.EOL and lines with `omitLine` will be removed.
|
|
72
|
+
* Comparisons for which lines should be removed are normalizing whitespace (multiple spaces collapsed into single
|
|
73
|
+
* spaces for the comparison). This is useful to remove instances of a hosts entry, for example.
|
|
74
|
+
* @param initialString The string to normalize remove instances of omitLine from
|
|
75
|
+
* @param omitLine All instance of this string will be omitted from the result
|
|
76
|
+
* @returns A string that has instances of the omitLine removed and all line endings changed to match the os.EOL
|
|
77
|
+
*/
|
|
78
|
+
export function getEolNormalizedWithoutLine(initialString, omitLine) {
|
|
79
|
+
const normalizedOmitLine = omitLine.replace(/\s+/g, ' ');
|
|
80
|
+
const lines = initialString.split('\n')
|
|
81
|
+
.map(l => l.replace(/\r/g, ''))
|
|
82
|
+
.filter(l => l.replace(/\s+/g, ' ') !== normalizedOmitLine);
|
|
83
|
+
return lines.join(os.EOL);
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9zdEZpbGVVdGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob3N0RmlsZVV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sR0FBRyxNQUFNLGtCQUFrQixDQUFBO0FBQ2xDLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQTtBQUN4QixPQUFPLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFFNUgsTUFBTSxDQUFDLEtBQUssVUFBVSxnQkFBZ0IsQ0FBQyxHQUFXLEVBQUUsY0FBc0IsV0FBVztJQUNuRixNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDakMsTUFBTSxlQUFlLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQTtBQUNyRCxDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFBVSxnQkFBZ0IsQ0FBQyxHQUFXLEVBQUUsY0FBc0IsV0FBVztJQUNuRixNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDakMsTUFBTSxlQUFlLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQTtBQUN4RCxDQUFDO0FBRUQsTUFBTSxVQUFVLFlBQVk7SUFDMUIsT0FBTyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFBO0FBQ3JGLENBQUM7QUFFRCxNQUFNLENBQUMsS0FBSyxVQUFVLGtCQUFrQjtJQUN0QyxPQUFPLE1BQU0sR0FBRyxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFBO0FBQ2xFLENBQUM7QUFFRCxNQUFNLENBQUMsS0FBSyxVQUFVLGlCQUFpQixDQUFDLFFBQWdCLEVBQUUs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
|
package/dist/esm/index.d.ts
CHANGED
package/dist/esm/index.d.ts.map
CHANGED
|
@@ -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/esm/index.js
CHANGED
|
@@ -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
|
-
|
|
4
|
+
export * from './hostFileUtils.js';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBbUIsQ0FBQTtBQUNqQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFDaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUN6RixjQUFjLG9CQUFvQixDQUFBIn0=
|
|
@@ -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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import assert from 'node:assert';
|
|
2
|
+
import fs from 'node:fs';
|
|
3
|
+
import fsp from 'node:fs/promises';
|
|
4
|
+
export const tempDir = './test/temp';
|
|
5
|
+
export const fixturesDir = './test/fixtures';
|
|
6
|
+
export const only = { only: true }; // Convenience object to make it easier to mark tests as "only"
|
|
7
|
+
export const ensureEmptyTempDir = async (dir) => {
|
|
8
|
+
if (!dir) {
|
|
9
|
+
throw new Error('dir is required');
|
|
10
|
+
}
|
|
11
|
+
if (!dir.startsWith('test/temp') && !dir.startsWith('test\\temp') && !dir.startsWith('./test/temp') && !dir.startsWith('.\\test\\temp')) {
|
|
12
|
+
throw new Error(`dir must start with 'test/temp': ${dir}`);
|
|
13
|
+
}
|
|
14
|
+
if (fs.existsSync(dir)) {
|
|
15
|
+
await fsp.rm(dir, { recursive: true, force: true });
|
|
16
|
+
}
|
|
17
|
+
await fsp.mkdir(dir, { recursive: true });
|
|
18
|
+
};
|
|
19
|
+
export function fileExistsAndIsNonZero(filePath) {
|
|
20
|
+
try {
|
|
21
|
+
const stats = fs.statSync(filePath);
|
|
22
|
+
return stats.isFile() && stats.size > 0;
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
const e = err;
|
|
26
|
+
if (e.code === 'ENOENT') {
|
|
27
|
+
return false; // File doesn't exist
|
|
28
|
+
}
|
|
29
|
+
throw err; // Rethrow other errors
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
export function assertErrorMessageStartsWith(err, expectedStartsWith) {
|
|
33
|
+
assert(err instanceof Error);
|
|
34
|
+
assert.strictEqual(err.message.startsWith(expectedStartsWith), true, `Error message did not start with expected value. Actual: "${err.message}".`);
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
export function assertErrorMessageIncludes(err, expectedIncludes) {
|
|
38
|
+
assert(err instanceof Error);
|
|
39
|
+
assert.strictEqual(err.message.includes(expectedIncludes), true, `Error message did not include the expected value. Actual: "${err.message}".`);
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
export function assertErrorMessageEquals(err, expected) {
|
|
43
|
+
assert(err instanceof Error);
|
|
44
|
+
assert.strictEqual(err.message, expected, `Error message did not equal the expected value. Actual: "${err.message}".`);
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdFV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3RVdGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUE7QUFDaEMsT0FBTyxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBQ3hCLE9BQU8sR0FBRyxNQUFNLGtCQUFrQixDQUFBO0FBRWxDLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUE7QUFDcEMsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLGlCQUFpQixDQUFBO0FBQzVDLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQSxDQUFDLCtEQUErRDtBQUVsRyxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxLQUFLLEVBQUUsR0FBVyxFQUFFLEVBQUU7SUFDdEQsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUNSLE1BQU0sSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtLQUNuQztJQUNELElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxFQUFFO1FBQ3ZJLE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLEdBQUcsRUFBRSxDQUFDLENBQUE7S0FDM0Q7SUFDRCxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDdEIsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7S0FDcEQ7SUFDRCxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7QUFDM0MsQ0FBQyxDQUFBO0FBRUQsTUFBTSxVQUFVLHNCQUFzQixDQUFDLFFBQWdCO0lBQ3JELElBQUk7UUFDRixNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ25DLE9BQU8sS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFBO0tBQ3hDO0lBQUMsT0FBTyxHQUFHLEVBQUU7UUFDWixNQUFNLENBQUMsR0FBRyxHQUF3QixDQUFBO1FBQ2xDLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUU7WUFDdkIsT0FBTyxLQUFLLENBQUEsQ0FBQyxxQkFBcUI7U0FDbkM7UUFDRCxNQUFNLEdBQUcsQ0FBQSxDQUFDLHVCQUF1QjtLQUNsQztBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsNEJBQTRCLENBQUMsR0FBWSxFQUFFLGtCQUEwQjtJQUNuRixNQUFNLENBQUMsR0FBRyxZQUFZLEtBQUssQ0FBQyxDQUFBO0lBQzVCLE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsRUFBRSxJQUFJLEVBQUUsNkRBQTZELEdBQUcsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFBO0lBQ2xKLE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQztBQUVELE1BQU0sVUFBVSwwQkFBMEIsQ0FBQyxHQUFZLEVBQUUsZ0JBQXdCO0lBQy9FLE1BQU0sQ0FBQyxHQUFHLFlBQVksS0FBSyxDQUFDLENBQUE7SUFDNUIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLElBQUksRUFBRSw4REFBOEQsR0FBRyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUE7SUFDL0ksT0FBTyxJQUFJLENBQUE7QUFDYixDQUFDO0FBRUQsTUFBTSxVQUFVLHdCQUF3QixDQUFDLEdBQVksRUFBRSxRQUFnQjtJQUNyRSxNQUFNLENBQUMsR0FBRyxZQUFZLEtBQUssQ0FBQyxDQUFBO0lBQzVCLE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsNERBQTRELEdBQUcsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFBO0lBQ3RILE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQyJ9
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mikeyt23/node-cli-utils",
|
|
3
|
-
"version": "2.0.0
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "Some node cli utility functions",
|
|
5
5
|
"author": "Mike Thompson",
|
|
6
6
|
"license": "MIT",
|
|
@@ -48,6 +48,38 @@
|
|
|
48
48
|
"require": {
|
|
49
49
|
"default": "./dist/cjs/dbMigrationUtils.js"
|
|
50
50
|
}
|
|
51
|
+
},
|
|
52
|
+
"./colors": {
|
|
53
|
+
"import": {
|
|
54
|
+
"default": "./dist/esm/colors.js"
|
|
55
|
+
},
|
|
56
|
+
"require": {
|
|
57
|
+
"default": "./dist/cjs/colors.js"
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
"./DependencyChecker": {
|
|
61
|
+
"import": {
|
|
62
|
+
"default": "./dist/esm/DependencyChecker.js"
|
|
63
|
+
},
|
|
64
|
+
"require": {
|
|
65
|
+
"default": "./dist/cjs/DependencyChecker.js"
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
"./hostFileUtils": {
|
|
69
|
+
"import": {
|
|
70
|
+
"default": "./dist/esm/hostFileUtils.js"
|
|
71
|
+
},
|
|
72
|
+
"require": {
|
|
73
|
+
"default": "./dist/cjs/hostFileUtils.js"
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
"./testUtils": {
|
|
77
|
+
"import": {
|
|
78
|
+
"default": "./dist/esm/testUtils.js"
|
|
79
|
+
},
|
|
80
|
+
"require": {
|
|
81
|
+
"default": "./dist/cjs/testUtils.js"
|
|
82
|
+
}
|
|
51
83
|
}
|
|
52
84
|
},
|
|
53
85
|
"main": "./dist/esm/index.js",
|
|
@@ -71,11 +103,13 @@
|
|
|
71
103
|
"c8": "^8.0.1",
|
|
72
104
|
"dotenv": "^16.3.1",
|
|
73
105
|
"eslint": "^8.49.0",
|
|
74
|
-
"swig-cli": "^0.0.14",
|
|
75
106
|
"ts-node": "^10.9.1",
|
|
76
107
|
"tsx": "^3.12.10",
|
|
77
108
|
"typedoc": "^0.25.1",
|
|
78
109
|
"typedoc-plugin-missing-exports": "^2.1.0",
|
|
79
110
|
"typescript": "^5.2.2"
|
|
111
|
+
},
|
|
112
|
+
"dependencies": {
|
|
113
|
+
"swig-cli": "^0.0.14"
|
|
80
114
|
}
|
|
81
115
|
}
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
package/dist/cjs/hostsUtils.js
DELETED
|
@@ -1,82 +0,0 @@
|
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9zdHNVdGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob3N0c1V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGdFQUFrQztBQUNsQyxzREFBd0I7QUFDeEIsdURBQTZHO0FBRXRHLEtBQUssVUFBVSxnQkFBZ0IsQ0FBQyxHQUFXO0lBQ2hELE1BQU0sUUFBUSxHQUFHLElBQUEsNkJBQVcsRUFBQyxHQUFHLENBQUMsQ0FBQTtJQUNqQyxNQUFNLGVBQWUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUE7QUFDeEMsQ0FBQztBQUhELDRDQUdDO0FBRU0sS0FBSyxVQUFVLGdCQUFnQixDQUFDLEdBQVc7SUFDaEQsTUFBTSxRQUFRLEdBQUcsSUFBQSw2QkFBVyxFQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ2pDLE1BQU0sZUFBZSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQTtBQUMzQyxDQUFDO0FBSEQsNENBR0M7QUFFRCxTQUFnQixZQUFZO0lBQzFCLE9BQU8sSUFBQSxtQ0FBaUIsR0FBRSxDQUFDLENBQUMsQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFBO0FBQ3JGLENBQUM7QUFGRCxvQ0FFQztBQUVNLEtBQUssVUFBVSxrQkFBa0I7SUFDdEMsT0FBTyxNQUFNLGtCQUFHLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUE7QUFDbEUsQ0FBQztBQUZELGdEQUVDO0FBRUQsbUhBQW1IO0FBQ25ILFNBQWdCLHVCQUF1QixDQUFDLGVBQXVCLEVBQUUsS0FBYTtJQUM1RSxNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUNsRCxNQUFNLFVBQVUsR0FBRyxJQUFBLHVDQUFxQixFQUFDLGVBQWUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7SUFDMUgsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQTtJQUNwRCxPQUFPLE9BQU8sQ0FBQTtBQUNoQixDQUFDO0FBTEQsMERBS0M7QUFFTSxLQUFLLFVBQVUsZUFBZSxDQUFDLFFBQWdCLEVBQUUsU0FBMkI7SUFDakYsSUFBQSwrQkFBYSxFQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUNuQyxNQUFNLFVBQVUsR0FBRyxTQUFTLEtBQUssS0FBSyxDQUFBO0lBQ3RDLE1BQU0sU0FBUyxHQUFHLFNBQVMsS0FBSyxRQUFRLENBQUE7SUFDeEMsTUFBTSxTQUFTLEdBQUcsWUFBWSxFQUFFLENBQUE7SUFDaEMsTUFBTSxLQUFLLEdBQUcsc0JBQXNCLENBQUMsUUFBUSxDQUFDLENBQUE7SUFFOUMsSUFBQSxxQkFBRyxFQUFDLHdCQUF3QixTQUFTLGNBQWMsS0FBSyxFQUFFLENBQUMsQ0FBQTtJQUMzRCxNQUFNLGVBQWUsR0FBRyxNQUFNLGtCQUFrQixFQUFFLENBQUE7SUFDbEQsTUFBTSxPQUFPLEdBQUcsdUJBQXVCLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxDQUFBO0lBRS9ELElBQUksVUFBVSxJQUFJLE9BQU8sRUFBRTtRQUN6QixJQUFBLHFCQUFHLEVBQUMsaURBQWlELEtBQUssYUFBYSxDQUFDLENBQUE7UUFDeEUsT0FBTTtLQUNQO0lBQ0QsSUFBSSxTQUFTLElBQUksQ0FBQyxPQUFPLEVBQUU7UUFDekIsSUFBQSxxQkFBRyxFQUFDLHNDQUFzQyxLQUFLLGFBQWEsQ0FBQyxDQUFBO0tBQzlEO0lBQ0QsSUFBSSxVQUFVLElBQUksQ0FBQyxPQUFPLEVBQUU7UUFDMUIsSUFBQSxxQkFBRyxFQUFDLDhEQUE4RCxDQUFDLENBQUE7UUFDbkUsTUFBTSxrQkFBRyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsS0FBSyxLQUFLLEVBQUUsQ0FBQyxDQUFBO0tBQzlDO0lBQ0QsSUFBSSxTQUFTLElBQUksT0FBTyxFQUFFO1FBQ3hCLElBQUEscUJBQUcsRUFBQyx1Q0FBdUMsQ0FBQyxDQUFBO1FBQzVDLE1BQU0saUJBQWlCLEdBQUcsMkJBQTJCLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxDQUFBO1FBQzdFLE1BQU0sa0JBQUcsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLGlCQUFpQixDQUFDLENBQUE7S0FDbEQ7QUFDSCxDQUFDO0FBM0JELDBDQTJCQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxTQUFnQiwyQkFBMkIsQ0FBQyxhQUFxQixFQUFFLFFBQWdCO0lBQ2pGLE1BQU0sa0JBQWtCLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUE7SUFDeEQsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7U0FDcEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDOUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEtBQUssa0JBQWtCLENBQUMsQ0FBQTtJQUM3RCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsaUJBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQTtBQUMzQixDQUFDO0FBTkQsa0VBTUM7QUFFRCxTQUFTLHNCQUFzQixDQUFDLFFBQWdCO0lBQzlDLE9BQU8sYUFBYSxRQUFRLEVBQUUsQ0FBQTtBQUNoQyxDQUFDIn0=
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
package/dist/esm/hostsUtils.js
DELETED
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import fsp from 'node:fs/promises';
|
|
2
|
-
import os from 'node:os';
|
|
3
|
-
import { getHostname, isPlatformWindows, log, requireString, stringToNonEmptyLines } from './generalUtils.js';
|
|
4
|
-
export async function ensureHostsEntry(url) {
|
|
5
|
-
const hostname = getHostname(url);
|
|
6
|
-
await changeHostsFile(hostname, 'add');
|
|
7
|
-
}
|
|
8
|
-
export async function removeHostsEntry(url) {
|
|
9
|
-
const hostname = getHostname(url);
|
|
10
|
-
await changeHostsFile(hostname, 'remove');
|
|
11
|
-
}
|
|
12
|
-
export function getHostsPath() {
|
|
13
|
-
return isPlatformWindows() ? 'C:/Windows/System32/drivers/etc/hosts' : '/etc/hosts';
|
|
14
|
-
}
|
|
15
|
-
export async function getHostsFileString() {
|
|
16
|
-
return await fsp.readFile(getHostsPath(), { encoding: 'utf-8' });
|
|
17
|
-
}
|
|
18
|
-
// Check by normalizing whitespace (collapse consecutive spaces to single spaces) in entry and on each line checked
|
|
19
|
-
export function hostsFileStringHasEntry(hostsFileString, entry) {
|
|
20
|
-
const normalizedEntry = entry.replace(/\s+/g, ' ');
|
|
21
|
-
const hostsLines = stringToNonEmptyLines(hostsFileString).map(l => l.replace(/\s+/g, ' ')).filter(l => !l.startsWith('#'));
|
|
22
|
-
const hasLine = hostsLines.includes(normalizedEntry);
|
|
23
|
-
return hasLine;
|
|
24
|
-
}
|
|
25
|
-
export async function changeHostsFile(hostname, operation) {
|
|
26
|
-
requireString('hostname', hostname);
|
|
27
|
-
const isAddition = operation === 'add';
|
|
28
|
-
const isRemoval = operation === 'remove';
|
|
29
|
-
const hostsPath = getHostsPath();
|
|
30
|
-
const entry = getNewHostsEntryString(hostname);
|
|
31
|
-
log(`checking hosts file: ${hostsPath} for entry ${entry}`);
|
|
32
|
-
const hostsFileString = await getHostsFileString();
|
|
33
|
-
const hasLine = hostsFileStringHasEntry(hostsFileString, entry);
|
|
34
|
-
if (isAddition && hasLine) {
|
|
35
|
-
log(`there is an existing entry in the hosts file (${entry}), skipping`);
|
|
36
|
-
return;
|
|
37
|
-
}
|
|
38
|
-
if (isRemoval && !hasLine) {
|
|
39
|
-
log(`there is no hosts entry to remove (${entry}), skipping`);
|
|
40
|
-
}
|
|
41
|
-
if (isAddition && !hasLine) {
|
|
42
|
-
log('existing entry not found - appending entry to the hosts file');
|
|
43
|
-
await fsp.appendFile(hostsPath, `\n${entry}`);
|
|
44
|
-
}
|
|
45
|
-
if (isRemoval && hasLine) {
|
|
46
|
-
log(`existing entry found - removing entry`);
|
|
47
|
-
const hostsWithoutEntry = getEolNormalizedWithoutLine(hostsFileString, entry);
|
|
48
|
-
await fsp.writeFile(hostsPath, hostsWithoutEntry);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* The `initialString` will have line endings normalized to use os.EOL and lines with `omitLine` will be removed.
|
|
53
|
-
* Comparisons for which lines should be removed are normalizing whitespace (multiple spaces collapsed into single
|
|
54
|
-
* spaces for the comparison). This is useful to remove instances of a hosts entry, for example.
|
|
55
|
-
* @param initialString The string to normalize remove instances of omitLine from
|
|
56
|
-
* @param omitLine All instance of this string will be omitted from the result
|
|
57
|
-
* @returns A string that has instances of the omitLine removed and all line endings changed to match the os.EOL
|
|
58
|
-
*/
|
|
59
|
-
export function getEolNormalizedWithoutLine(initialString, omitLine) {
|
|
60
|
-
const normalizedOmitLine = omitLine.replace(/\s+/g, ' ');
|
|
61
|
-
const lines = initialString.split('\n')
|
|
62
|
-
.map(l => l.replace(/\r/g, ''))
|
|
63
|
-
.filter(l => l.replace(/\s+/g, ' ') !== normalizedOmitLine);
|
|
64
|
-
return lines.join(os.EOL);
|
|
65
|
-
}
|
|
66
|
-
function getNewHostsEntryString(hostname) {
|
|
67
|
-
return `127.0.0.1 ${hostname}`;
|
|
68
|
-
}
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9zdHNVdGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob3N0c1V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sR0FBRyxNQUFNLGtCQUFrQixDQUFBO0FBQ2xDLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQTtBQUN4QixPQUFPLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUU3RyxNQUFNLENBQUMsS0FBSyxVQUFVLGdCQUFnQixDQUFDLEdBQVc7SUFDaEQsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ2pDLE1BQU0sZUFBZSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQTtBQUN4QyxDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFBVSxnQkFBZ0IsQ0FBQyxHQUFXO0lBQ2hELE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNqQyxNQUFNLGVBQWUsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUE7QUFDM0MsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZO0lBQzFCLE9BQU8saUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsdUNBQXVDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQTtBQUNyRixDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFBVSxrQkFBa0I7SUFDdEMsT0FBTyxNQUFNLEdBQUcsQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQTtBQUNsRSxDQUFDO0FBRUQsbUhBQW1IO0FBQ25ILE1BQU0sVUFBVSx1QkFBdUIsQ0FBQyxlQUF1QixFQUFFLEtBQWE7SUFDNUUsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFD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
|