@electron-forge/test-utils 8.0.0-alpha.3 → 8.0.0-alpha.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +14 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -63
- package/package.json +7 -5
- package/src/index.ts +27 -17
package/dist/index.d.ts
CHANGED
|
@@ -1,13 +1,22 @@
|
|
|
1
|
+
export type PackageJSON = Record<string, unknown> & {
|
|
2
|
+
config?: {
|
|
3
|
+
forge?: Record<string, unknown>;
|
|
4
|
+
};
|
|
5
|
+
dependencies?: Record<string, string>;
|
|
6
|
+
devDependencies?: Record<string, string>;
|
|
7
|
+
};
|
|
1
8
|
export declare function runNPMInstall(dir: string, ...args: string[]): Promise<void>;
|
|
2
9
|
export declare function ensureModulesInstalled(dir: string, deps: string[], devDeps: string[]): Promise<void>;
|
|
3
10
|
export declare function ensureTestDirIsNonexistent(): Promise<string>;
|
|
4
11
|
export declare function expectLintToPass(dir: string): Promise<void>;
|
|
5
12
|
/**
|
|
6
|
-
*
|
|
13
|
+
* Mutates the `package.json` file in a directory.
|
|
14
|
+
* Use the return value to later restore the original `package.json` value
|
|
15
|
+
* in a subsequent call of this function.
|
|
7
16
|
*
|
|
8
|
-
* @
|
|
9
|
-
* @param
|
|
10
|
-
* @
|
|
17
|
+
* @param dir - The target directory containing the `package.json` file
|
|
18
|
+
* @param callback - A callback function that returns the value of the new `package.json` to be applied
|
|
19
|
+
* @returns The original `package.json` prior to mutation
|
|
11
20
|
*/
|
|
12
|
-
export declare function
|
|
21
|
+
export declare function updatePackageJSON(dir: string, callback: (packageJSON: PackageJSON) => Promise<PackageJSON>): Promise<any>;
|
|
13
22
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAClD,MAAM,CAAC,EAAE;QACP,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACjC,CAAC;IACF,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC1C,CAAC;AAMF,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,iBAEjE;AAED,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE,MAAM,EAAE,GAChB,OAAO,CAAC,IAAI,CAAC,CAGf;AAID,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,MAAM,CAAC,CAMlE;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAUjE;AAED;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,OAAO,CAAC,WAAW,CAAC,gBAU7D"}
|
package/dist/index.js
CHANGED
|
@@ -1,88 +1,49 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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.mockRequire = exports.expectLintToPass = exports.ensureTestDirIsNonexistent = exports.ensureModulesInstalled = exports.runNPMInstall = void 0;
|
|
30
|
-
const node_fs_1 = __importDefault(require("node:fs"));
|
|
31
|
-
const node_os_1 = __importDefault(require("node:os"));
|
|
32
|
-
const node_path_1 = __importDefault(require("node:path"));
|
|
33
|
-
const cross_spawn_promise_1 = require("@malept/cross-spawn-promise");
|
|
1
|
+
import os from 'node:os';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { ExitError, spawn } from '@malept/cross-spawn-promise';
|
|
4
|
+
import fs from 'fs-extra';
|
|
34
5
|
async function runNPM(dir, ...args) {
|
|
35
|
-
await
|
|
6
|
+
await spawn('npm', args, { cwd: dir });
|
|
36
7
|
}
|
|
37
|
-
async function runNPMInstall(dir, ...args) {
|
|
8
|
+
export async function runNPMInstall(dir, ...args) {
|
|
38
9
|
await runNPM(dir, 'install', ...args);
|
|
39
10
|
}
|
|
40
|
-
|
|
41
|
-
async function ensureModulesInstalled(dir, deps, devDeps) {
|
|
11
|
+
export async function ensureModulesInstalled(dir, deps, devDeps) {
|
|
42
12
|
await runNPMInstall(dir, ...deps);
|
|
43
13
|
await runNPMInstall(dir, '--save-dev', ...devDeps);
|
|
44
14
|
}
|
|
45
|
-
exports.ensureModulesInstalled = ensureModulesInstalled;
|
|
46
15
|
let dirID = Date.now();
|
|
47
|
-
async function ensureTestDirIsNonexistent() {
|
|
48
|
-
const dir =
|
|
16
|
+
export async function ensureTestDirIsNonexistent() {
|
|
17
|
+
const dir = path.resolve(os.tmpdir(), `electron-forge-test-${dirID}`);
|
|
49
18
|
dirID += 1;
|
|
50
|
-
await
|
|
19
|
+
await fs.promises.rm(dir, { recursive: true, force: true });
|
|
51
20
|
return dir;
|
|
52
21
|
}
|
|
53
|
-
|
|
54
|
-
async function expectLintToPass(dir) {
|
|
22
|
+
export async function expectLintToPass(dir) {
|
|
55
23
|
try {
|
|
56
24
|
await runNPM(dir, 'run', 'lint');
|
|
57
25
|
}
|
|
58
26
|
catch (err) {
|
|
59
|
-
if (err instanceof
|
|
27
|
+
if (err instanceof ExitError) {
|
|
60
28
|
console.error('STDOUT:', err.stdout.toString());
|
|
61
29
|
console.error('STDERR:', err.stderr.toString());
|
|
62
30
|
}
|
|
63
31
|
throw err;
|
|
64
32
|
}
|
|
65
33
|
}
|
|
66
|
-
exports.expectLintToPass = expectLintToPass;
|
|
67
34
|
/**
|
|
68
|
-
*
|
|
35
|
+
* Mutates the `package.json` file in a directory.
|
|
36
|
+
* Use the return value to later restore the original `package.json` value
|
|
37
|
+
* in a subsequent call of this function.
|
|
69
38
|
*
|
|
70
|
-
* @
|
|
71
|
-
* @param
|
|
72
|
-
* @
|
|
39
|
+
* @param dir - The target directory containing the `package.json` file
|
|
40
|
+
* @param callback - A callback function that returns the value of the new `package.json` to be applied
|
|
41
|
+
* @returns The original `package.json` prior to mutation
|
|
73
42
|
*/
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
//@ts-expect-error undocumented functions
|
|
80
|
-
Module._load = (uri, parent) => {
|
|
81
|
-
if (uri === mockedUri)
|
|
82
|
-
return stub;
|
|
83
|
-
//@ts-expect-error undocumented functions
|
|
84
|
-
return Module._load_original(uri, parent);
|
|
85
|
-
};
|
|
43
|
+
export async function updatePackageJSON(dir, callback) {
|
|
44
|
+
const packageJSON = await fs.readJson(path.resolve(dir, 'package.json'));
|
|
45
|
+
const mutated = await callback(JSON.parse(JSON.stringify(packageJSON)));
|
|
46
|
+
await fs.promises.writeFile(path.resolve(dir, 'package.json'), JSON.stringify(mutated, null, 2), 'utf-8');
|
|
47
|
+
return packageJSON;
|
|
86
48
|
}
|
|
87
|
-
|
|
88
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxzREFBeUI7QUFDekIsc0RBQXlCO0FBQ3pCLDBEQUE2QjtBQUU3QixxRUFBK0Q7QUFFL0QsS0FBSyxVQUFVLE1BQU0sQ0FBQyxHQUFXLEVBQUUsR0FBRyxJQUFjO0lBQ2xELE1BQU0sSUFBQSwyQkFBSyxFQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUN6QyxDQUFDO0FBRU0sS0FBSyxVQUFVLGFBQWEsQ0FBQyxHQUFXLEVBQUUsR0FBRyxJQUFjO0lBQ2hFLE1BQU0sTUFBTSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRkQsc0NBRUM7QUFFTSxLQUFLLFVBQVUsc0JBQXNCLENBQzFDLEdBQVcsRUFDWCxJQUFjLEVBQ2QsT0FBaUI7SUFFakIsTUFBTSxhQUFhLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDbEMsTUFBTSxhQUFhLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO0FBQ3JELENBQUM7QUFQRCx3REFPQztBQUVELElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUVoQixLQUFLLFVBQVUsMEJBQTBCO0lBQzlDLE1BQU0sR0FBRyxHQUFHLG1CQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsdUJBQXVCLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDdEUsS0FBSyxJQUFJLENBQUMsQ0FBQztJQUNYLE1BQU0saUJBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFNUQsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBTkQsZ0VBTUM7QUFFTSxLQUFLLFVBQVUsZ0JBQWdCLENBQUMsR0FBVztJQUNoRCxJQUFJLENBQUM7UUFDSCxNQUFNLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsSUFBSSxHQUFHLFlBQVksK0JBQVMsRUFBRSxDQUFDO1lBQzdCLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUNoRCxPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUNELE1BQU0sR0FBRyxDQUFDO0lBQ1osQ0FBQztBQUNILENBQUM7QUFWRCw0Q0FVQztBQUVEOzs7Ozs7R0FNRztBQUNILDhEQUE4RDtBQUN2RCxLQUFLLFVBQVUsV0FBVyxDQUFDLFNBQWlCLEVBQUUsSUFBUztJQUM1RCxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsd0RBQWEsUUFBUSxHQUFDLENBQUM7SUFFMUMseUNBQXlDO0lBQ3pDLE1BQU0sQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUNyQyx5Q0FBeUM7SUFDekMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUM3QixJQUFJLEdBQUcsS0FBSyxTQUFTO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDbkMseUNBQXlDO1FBQ3pDLE9BQU8sTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDNUMsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQVhELGtDQVdDIn0=
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3pCLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUU3QixPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQVUxQixLQUFLLFVBQVUsTUFBTSxDQUFDLEdBQVcsRUFBRSxHQUFHLElBQWM7SUFDbEQsTUFBTSxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFFRCxNQUFNLENBQUMsS0FBSyxVQUFVLGFBQWEsQ0FBQyxHQUFXLEVBQUUsR0FBRyxJQUFjO0lBQ2hFLE1BQU0sTUFBTSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFBVSxzQkFBc0IsQ0FDMUMsR0FBVyxFQUNYLElBQWMsRUFDZCxPQUFpQjtJQUVqQixNQUFNLGFBQWEsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUNsQyxNQUFNLGFBQWEsQ0FBQyxHQUFHLEVBQUUsWUFBWSxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7QUFDckQsQ0FBQztBQUVELElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUV2QixNQUFNLENBQUMsS0FBSyxVQUFVLDBCQUEwQjtJQUM5QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSx1QkFBdUIsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN0RSxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQ1gsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRTVELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sQ0FBQyxLQUFLLFVBQVUsZ0JBQWdCLENBQUMsR0FBVztJQUNoRCxJQUFJLENBQUM7UUFDSCxNQUFNLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsSUFBSSxHQUFHLFlBQVksU0FBUyxFQUFFLENBQUM7WUFDN0IsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ2hELE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNsRCxDQUFDO1FBQ0QsTUFBTSxHQUFHLENBQUM7SUFDWixDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxpQkFBaUIsQ0FDckMsR0FBVyxFQUNYLFFBQTREO0lBRTVELE1BQU0sV0FBVyxHQUFHLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLE1BQU0sT0FBTyxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEUsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FDekIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDLEVBQ2pDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsRUFDaEMsT0FBTyxDQUNSLENBQUM7SUFDRixPQUFPLFdBQVcsQ0FBQztBQUNyQixDQUFDIn0=
|
package/package.json
CHANGED
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@electron-forge/test-utils",
|
|
3
|
-
"version": "8.0.0-alpha.
|
|
3
|
+
"version": "8.0.0-alpha.5",
|
|
4
|
+
"type": "module",
|
|
4
5
|
"description": "Helper utilities for the Electron Forge testsuite",
|
|
5
6
|
"repository": "https://github.com/electron/forge",
|
|
6
7
|
"author": "Mark Lee",
|
|
7
8
|
"license": "MIT",
|
|
8
|
-
"
|
|
9
|
+
"exports": "./dist/index.js",
|
|
9
10
|
"typings": "dist/index.d.ts",
|
|
10
11
|
"dependencies": {
|
|
11
|
-
"@malept/cross-spawn-promise": "^2.0.0"
|
|
12
|
+
"@malept/cross-spawn-promise": "^2.0.0",
|
|
13
|
+
"fs-extra": "^10.0.0"
|
|
12
14
|
},
|
|
13
15
|
"engines": {
|
|
14
|
-
"node": ">=
|
|
16
|
+
"node": ">= 22.12.0"
|
|
15
17
|
},
|
|
16
18
|
"publishConfig": {
|
|
17
19
|
"access": "public"
|
|
@@ -20,5 +22,5 @@
|
|
|
20
22
|
"dist",
|
|
21
23
|
"src"
|
|
22
24
|
],
|
|
23
|
-
"gitHead": "
|
|
25
|
+
"gitHead": "5ad3a256c5896637d0858d7713101bfabefb557e"
|
|
24
26
|
}
|
package/src/index.ts
CHANGED
|
@@ -1,8 +1,16 @@
|
|
|
1
|
-
import fs from 'node:fs';
|
|
2
1
|
import os from 'node:os';
|
|
3
2
|
import path from 'node:path';
|
|
4
3
|
|
|
5
4
|
import { ExitError, spawn } from '@malept/cross-spawn-promise';
|
|
5
|
+
import fs from 'fs-extra';
|
|
6
|
+
|
|
7
|
+
export type PackageJSON = Record<string, unknown> & {
|
|
8
|
+
config?: {
|
|
9
|
+
forge?: Record<string, unknown>;
|
|
10
|
+
};
|
|
11
|
+
dependencies?: Record<string, string>;
|
|
12
|
+
devDependencies?: Record<string, string>;
|
|
13
|
+
};
|
|
6
14
|
|
|
7
15
|
async function runNPM(dir: string, ...args: string[]) {
|
|
8
16
|
await spawn('npm', args, { cwd: dir });
|
|
@@ -44,22 +52,24 @@ export async function expectLintToPass(dir: string): Promise<void> {
|
|
|
44
52
|
}
|
|
45
53
|
|
|
46
54
|
/**
|
|
47
|
-
*
|
|
55
|
+
* Mutates the `package.json` file in a directory.
|
|
56
|
+
* Use the return value to later restore the original `package.json` value
|
|
57
|
+
* in a subsequent call of this function.
|
|
48
58
|
*
|
|
49
|
-
* @
|
|
50
|
-
* @param
|
|
51
|
-
* @
|
|
59
|
+
* @param dir - The target directory containing the `package.json` file
|
|
60
|
+
* @param callback - A callback function that returns the value of the new `package.json` to be applied
|
|
61
|
+
* @returns The original `package.json` prior to mutation
|
|
52
62
|
*/
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
63
|
+
export async function updatePackageJSON(
|
|
64
|
+
dir: string,
|
|
65
|
+
callback: (packageJSON: PackageJSON) => Promise<PackageJSON>,
|
|
66
|
+
) {
|
|
67
|
+
const packageJSON = await fs.readJson(path.resolve(dir, 'package.json'));
|
|
68
|
+
const mutated = await callback(JSON.parse(JSON.stringify(packageJSON)));
|
|
69
|
+
await fs.promises.writeFile(
|
|
70
|
+
path.resolve(dir, 'package.json'),
|
|
71
|
+
JSON.stringify(mutated, null, 2),
|
|
72
|
+
'utf-8',
|
|
73
|
+
);
|
|
74
|
+
return packageJSON;
|
|
65
75
|
}
|