@electron-forge/core-utils 6.0.1 → 6.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +19 -0
- package/package.json +4 -3
- package/src/electron-version.ts +128 -0
- package/{dist/index.d.ts → src/index.ts} +0 -1
- package/src/rebuild.ts +77 -0
- package/src/remote-rebuild.ts +32 -0
- package/src/yarn-or-npm.ts +22 -0
- package/test/electron-version_spec.ts +195 -0
- package/test/yarn-or-npm_spec.ts +40 -0
- package/dist/electron-version.d.ts +0 -12
- package/dist/electron-version.d.ts.map +0 -1
- package/dist/electron-version.js +0 -134
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -64
- package/dist/rebuild.d.ts +0 -4
- package/dist/rebuild.d.ts.map +0 -1
- package/dist/rebuild.js +0 -99
- package/dist/remote-rebuild.d.ts +0 -2
- package/dist/remote-rebuild.d.ts.map +0 -1
- package/dist/remote-rebuild.js +0 -42
- package/dist/yarn-or-npm.d.ts +0 -5
- package/dist/yarn-or-npm.d.ts.map +0 -1
- package/dist/yarn-or-npm.js +0 -36
package/LICENSE
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
The MIT License (MIT)
|
|
2
|
+
Copyright (c) 2016 Samuel Attard
|
|
3
|
+
|
|
4
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
5
|
+
this software and associated documentation files (the "Software"), to deal in
|
|
6
|
+
the Software without restriction, including without limitation the rights to
|
|
7
|
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
8
|
+
the Software, and to permit persons to whom the Software is furnished to do so,
|
|
9
|
+
subject to the following conditions:
|
|
10
|
+
|
|
11
|
+
The above copyright notice and this permission notice shall be included in all
|
|
12
|
+
copies or substantial portions of the Software.
|
|
13
|
+
|
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
15
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
16
|
+
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
17
|
+
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
18
|
+
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
19
|
+
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@electron-forge/core-utils",
|
|
3
|
-
"version": "6.0.
|
|
3
|
+
"version": "6.0.2",
|
|
4
4
|
"description": "Core utilities for the Electron Forge packages",
|
|
5
5
|
"repository": "https://github.com/electron-userland/electron-forge",
|
|
6
6
|
"author": "Samuel Attard",
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"main": "dist/index.js",
|
|
9
9
|
"typings": "dist/index.d.ts",
|
|
10
10
|
"dependencies": {
|
|
11
|
-
"@electron-forge/shared-types": "6.0.
|
|
11
|
+
"@electron-forge/shared-types": "^6.0.2",
|
|
12
12
|
"@electron/rebuild": "^3.2.10",
|
|
13
13
|
"@malept/cross-spawn-promise": "^2.0.0",
|
|
14
14
|
"chalk": "^4.0.0",
|
|
@@ -24,5 +24,6 @@
|
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
26
|
"chai": "^4.3.3"
|
|
27
|
-
}
|
|
27
|
+
},
|
|
28
|
+
"gitHead": "11cf4b58359c9881c05c06e0d62be575a0ed70d1"
|
|
28
29
|
}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
|
|
3
|
+
import debug from 'debug';
|
|
4
|
+
import findUp from 'find-up';
|
|
5
|
+
import fs from 'fs-extra';
|
|
6
|
+
import semver from 'semver';
|
|
7
|
+
|
|
8
|
+
import { safeYarnOrNpm } from './yarn-or-npm';
|
|
9
|
+
|
|
10
|
+
const d = debug('electron-forge:electron-version');
|
|
11
|
+
|
|
12
|
+
const electronPackageNames = ['electron-prebuilt-compile', 'electron-prebuilt', 'electron-nightly', 'electron'];
|
|
13
|
+
|
|
14
|
+
type PackageJSONWithDeps = {
|
|
15
|
+
devDependencies?: Record<string, string>;
|
|
16
|
+
dependencies?: Record<string, string>;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
function findElectronDep(dep: string): boolean {
|
|
20
|
+
return electronPackageNames.includes(dep);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
async function findAncestorNodeModulesPath(dir: string, packageName: string): Promise<string | undefined> {
|
|
24
|
+
d('Looking for a lock file to indicate the root of the repo');
|
|
25
|
+
const lockPath = await findUp(['package-lock.json', 'yarn.lock', 'pnpm-lock.yaml'], { cwd: dir, type: 'file' });
|
|
26
|
+
if (lockPath) {
|
|
27
|
+
d(`Found lock file: ${lockPath}`);
|
|
28
|
+
const nodeModulesPath = path.join(path.dirname(lockPath), 'node_modules', packageName);
|
|
29
|
+
if (await fs.pathExists(nodeModulesPath)) {
|
|
30
|
+
return nodeModulesPath;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return Promise.resolve(undefined);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
async function determineNodeModulesPath(dir: string, packageName: string): Promise<string | undefined> {
|
|
38
|
+
const nodeModulesPath: string | undefined = path.join(dir, 'node_modules', packageName);
|
|
39
|
+
if (await fs.pathExists(nodeModulesPath)) {
|
|
40
|
+
return nodeModulesPath;
|
|
41
|
+
}
|
|
42
|
+
return findAncestorNodeModulesPath(dir, packageName);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export class PackageNotFoundError extends Error {
|
|
46
|
+
constructor(packageName: string, dir: string) {
|
|
47
|
+
super(`Cannot find the package "${packageName}". Perhaps you need to run "${safeYarnOrNpm()} install" in "${dir}"?`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function getElectronModuleName(packageJSON: PackageJSONWithDeps): string {
|
|
52
|
+
if (!packageJSON.devDependencies) {
|
|
53
|
+
throw new Error('package.json for app does not have any devDependencies');
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Why: checked above
|
|
57
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
58
|
+
const packageName = electronPackageNames.find((pkg) => packageJSON.devDependencies![pkg]);
|
|
59
|
+
if (packageName === undefined) {
|
|
60
|
+
throw new Error('Could not find any Electron packages in devDependencies');
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
return packageName;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
async function getElectronPackageJSONPath(dir: string, packageName: string): Promise<string | undefined> {
|
|
67
|
+
const nodeModulesPath = await determineNodeModulesPath(dir, packageName);
|
|
68
|
+
if (!nodeModulesPath) {
|
|
69
|
+
throw new PackageNotFoundError(packageName, dir);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const electronPackageJSONPath = path.join(nodeModulesPath, 'package.json');
|
|
73
|
+
if (await fs.pathExists(electronPackageJSONPath)) {
|
|
74
|
+
return electronPackageJSONPath;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
return undefined;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export async function getElectronModulePath(dir: string, packageJSON: PackageJSONWithDeps): Promise<string | undefined> {
|
|
81
|
+
const moduleName = getElectronModuleName(packageJSON);
|
|
82
|
+
const packageJSONPath = await getElectronPackageJSONPath(dir, moduleName);
|
|
83
|
+
if (packageJSONPath) {
|
|
84
|
+
return path.dirname(packageJSONPath);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
return undefined;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export async function getElectronVersion(dir: string, packageJSON: PackageJSONWithDeps): Promise<string> {
|
|
91
|
+
const packageName = getElectronModuleName(packageJSON);
|
|
92
|
+
|
|
93
|
+
// Why: checked in getElectronModuleName
|
|
94
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
95
|
+
let version = packageJSON.devDependencies![packageName];
|
|
96
|
+
if (!semver.valid(version)) {
|
|
97
|
+
// It's not an exact version, find it in the actual module
|
|
98
|
+
const electronPackageJSONPath = await getElectronPackageJSONPath(dir, packageName);
|
|
99
|
+
if (electronPackageJSONPath) {
|
|
100
|
+
const electronPackageJSON = await fs.readJson(electronPackageJSONPath);
|
|
101
|
+
version = electronPackageJSON.version;
|
|
102
|
+
} else {
|
|
103
|
+
throw new PackageNotFoundError(packageName, dir);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
return version;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
export function updateElectronDependency(packageJSON: PackageJSONWithDeps, dev: string[], exact: string[]): [string[], string[]] {
|
|
111
|
+
const alteredDev = ([] as string[]).concat(dev);
|
|
112
|
+
let alteredExact = ([] as string[]).concat(exact);
|
|
113
|
+
// Why: checked in getElectronModuleName
|
|
114
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
115
|
+
if (Object.keys(packageJSON.devDependencies!).find(findElectronDep)) {
|
|
116
|
+
alteredExact = alteredExact.filter((dep) => dep !== 'electron');
|
|
117
|
+
} else if (packageJSON.dependencies) {
|
|
118
|
+
const electronKey = Object.keys(packageJSON.dependencies).find(findElectronDep);
|
|
119
|
+
if (electronKey) {
|
|
120
|
+
alteredExact = alteredExact.filter((dep) => dep !== 'electron');
|
|
121
|
+
d(`Moving ${electronKey} from dependencies to devDependencies`);
|
|
122
|
+
alteredDev.push(`${electronKey}@${packageJSON.dependencies[electronKey]}`);
|
|
123
|
+
delete packageJSON.dependencies[electronKey];
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
return [alteredDev, alteredExact];
|
|
128
|
+
}
|
package/src/rebuild.ts
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import * as cp from 'child_process';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
|
|
4
|
+
import { ForgeArch, ForgeListrTask, ForgePlatform } from '@electron-forge/shared-types';
|
|
5
|
+
import { RebuildOptions } from '@electron/rebuild';
|
|
6
|
+
|
|
7
|
+
export const listrCompatibleRebuildHook = async (
|
|
8
|
+
buildPath: string,
|
|
9
|
+
electronVersion: string,
|
|
10
|
+
platform: ForgePlatform,
|
|
11
|
+
arch: ForgeArch,
|
|
12
|
+
config: Partial<RebuildOptions> = {},
|
|
13
|
+
task: ForgeListrTask<never>,
|
|
14
|
+
taskTitlePrefix = ''
|
|
15
|
+
): Promise<void> => {
|
|
16
|
+
task.title = `${taskTitlePrefix}Preparing native dependencies`;
|
|
17
|
+
|
|
18
|
+
const options: RebuildOptions = {
|
|
19
|
+
...config,
|
|
20
|
+
buildPath,
|
|
21
|
+
electronVersion,
|
|
22
|
+
arch,
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
const child = cp.fork(path.resolve(__dirname, 'remote-rebuild.js'), [JSON.stringify(options)], {
|
|
26
|
+
stdio: ['pipe', 'pipe', 'pipe', 'ipc'],
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
let pendingError: Error;
|
|
30
|
+
let found = 0;
|
|
31
|
+
let done = 0;
|
|
32
|
+
|
|
33
|
+
const redraw = () => {
|
|
34
|
+
task.title = `${taskTitlePrefix}Preparing native dependencies: ${done} / ${found}`;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
child.stdout?.on('data', (chunk) => {
|
|
38
|
+
task.output = chunk.toString();
|
|
39
|
+
});
|
|
40
|
+
child.stderr?.on('data', (chunk) => {
|
|
41
|
+
task.output = chunk.toString();
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
child.on('message', (message: { msg: string; err: { message: string; stack: string } }) => {
|
|
45
|
+
switch (message.msg) {
|
|
46
|
+
case 'module-found': {
|
|
47
|
+
found += 1;
|
|
48
|
+
redraw();
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
case 'module-done': {
|
|
52
|
+
done += 1;
|
|
53
|
+
redraw();
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
case 'rebuild-error': {
|
|
57
|
+
pendingError = new Error(message.err.message);
|
|
58
|
+
pendingError.stack = message.err.stack;
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
case 'rebuild-done': {
|
|
62
|
+
task.task.rendererTaskOptions.persistentOutput = false;
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
await new Promise<void>((resolve, reject) => {
|
|
69
|
+
child.on('exit', (code) => {
|
|
70
|
+
if (code === 0 && !pendingError) {
|
|
71
|
+
resolve();
|
|
72
|
+
} else {
|
|
73
|
+
reject(pendingError || new Error(`Rebuilder failed with exit code: ${code}`));
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { rebuild, RebuildOptions } from '@electron/rebuild';
|
|
2
|
+
|
|
3
|
+
if (!process.send) {
|
|
4
|
+
console.error('The remote rebuilder expects to be spawned with an IPC channel');
|
|
5
|
+
// eslint-disable-next-line no-process-exit
|
|
6
|
+
process.exit(1);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
const options: RebuildOptions = JSON.parse(process.argv[2]);
|
|
10
|
+
|
|
11
|
+
const rebuilder = rebuild(options);
|
|
12
|
+
|
|
13
|
+
rebuilder.lifecycle.on('module-found', () => process.send?.({ msg: 'module-found' }));
|
|
14
|
+
rebuilder.lifecycle.on('module-done', () => process.send?.({ msg: 'module-done' }));
|
|
15
|
+
|
|
16
|
+
rebuilder
|
|
17
|
+
.then(() => {
|
|
18
|
+
process.send?.({ msg: 'rebuild-done' });
|
|
19
|
+
// eslint-disable-next-line no-process-exit
|
|
20
|
+
return process.exit(0);
|
|
21
|
+
})
|
|
22
|
+
.catch((err) => {
|
|
23
|
+
process.send?.({
|
|
24
|
+
msg: 'rebuild-error',
|
|
25
|
+
err: {
|
|
26
|
+
message: err.message,
|
|
27
|
+
stack: err.stack,
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
// eslint-disable-next-line no-process-exit
|
|
31
|
+
process.exit(0);
|
|
32
|
+
});
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { CrossSpawnArgs, CrossSpawnOptions, spawn } from '@malept/cross-spawn-promise';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import logSymbols from 'log-symbols';
|
|
4
|
+
import yarnOrNpm from 'yarn-or-npm';
|
|
5
|
+
|
|
6
|
+
export const safeYarnOrNpm = () => {
|
|
7
|
+
const system = yarnOrNpm();
|
|
8
|
+
switch (process.env.NODE_INSTALLER) {
|
|
9
|
+
case 'yarn':
|
|
10
|
+
case 'npm':
|
|
11
|
+
return process.env.NODE_INSTALLER;
|
|
12
|
+
default:
|
|
13
|
+
if (process.env.NODE_INSTALLER) {
|
|
14
|
+
console.warn(logSymbols.warning, chalk.yellow(`Unknown NODE_INSTALLER, using detected installer ${system}`));
|
|
15
|
+
}
|
|
16
|
+
return system;
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export const yarnOrNpmSpawn = (args?: CrossSpawnArgs, opts?: CrossSpawnOptions): Promise<string> => spawn(safeYarnOrNpm(), args, opts);
|
|
21
|
+
|
|
22
|
+
export const hasYarn = (): boolean => safeYarnOrNpm() === 'yarn';
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import os from 'os';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
|
|
4
|
+
import { expect } from 'chai';
|
|
5
|
+
import fs from 'fs-extra';
|
|
6
|
+
|
|
7
|
+
import { devDeps, exactDevDeps } from '../../../api/core/src/api/init-scripts/init-npm';
|
|
8
|
+
import { getElectronModulePath, getElectronVersion, updateElectronDependency } from '../src/electron-version';
|
|
9
|
+
|
|
10
|
+
const fixturePath = path.resolve(__dirname, '..', '..', '..', 'api', 'core', 'test', 'fixture');
|
|
11
|
+
|
|
12
|
+
describe('updateElectronDependency', () => {
|
|
13
|
+
it('adds an Electron dep if one does not already exist', () => {
|
|
14
|
+
const packageJSON = { dependencies: {}, devDependencies: {} };
|
|
15
|
+
const [dev, exact] = updateElectronDependency(packageJSON, devDeps, exactDevDeps);
|
|
16
|
+
expect(dev).to.deep.equal(devDeps);
|
|
17
|
+
expect(exact).to.deep.equal(exactDevDeps);
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
it('does not add an Electron dep if one already exists', () => {
|
|
21
|
+
const packageJSON = {
|
|
22
|
+
dependencies: {},
|
|
23
|
+
devDependencies: { electron: '0.37.0' },
|
|
24
|
+
};
|
|
25
|
+
const [dev, exact] = updateElectronDependency(packageJSON, devDeps, exactDevDeps);
|
|
26
|
+
expect(dev).to.deep.equal(devDeps);
|
|
27
|
+
expect(exact).to.deep.equal([]);
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
it('moves an Electron dependency from dependencies to devDependencies', () => {
|
|
31
|
+
const packageJSON = {
|
|
32
|
+
dependencies: { electron: '0.37.0' },
|
|
33
|
+
devDependencies: {},
|
|
34
|
+
};
|
|
35
|
+
const [dev, exact] = updateElectronDependency(packageJSON, devDeps, exactDevDeps);
|
|
36
|
+
expect(dev.includes('electron@0.37.0')).to.equal(true);
|
|
37
|
+
expect(exact).to.deep.equal([]);
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
describe('getElectronVersion', () => {
|
|
42
|
+
it('fails without devDependencies', () => expect(getElectronVersion('', {})).to.eventually.be.rejectedWith('does not have any devDependencies'));
|
|
43
|
+
|
|
44
|
+
it('fails without electron devDependencies', () =>
|
|
45
|
+
expect(getElectronVersion('', { devDependencies: {} })).to.eventually.be.rejectedWith('Electron packages in devDependencies'));
|
|
46
|
+
|
|
47
|
+
it('fails with a non-exact version and no electron installed', () => {
|
|
48
|
+
const fixtureDir = path.resolve(fixturePath, 'dummy_app');
|
|
49
|
+
return expect(getElectronVersion(fixtureDir, { devDependencies: { electron: '^4.0.2' } })).to.eventually.be.rejectedWith('Cannot find the package');
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
it('works with a non-exact version with electron installed', () => {
|
|
53
|
+
const fixtureDir = path.resolve(fixturePath, 'non-exact');
|
|
54
|
+
return expect(getElectronVersion(fixtureDir, { devDependencies: { electron: '^4.0.2' } })).to.eventually.equal('4.0.9');
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
it('works with electron-prebuilt-compile', () => {
|
|
58
|
+
const packageJSON = {
|
|
59
|
+
devDependencies: { 'electron-prebuilt-compile': '1.0.0' },
|
|
60
|
+
};
|
|
61
|
+
return expect(getElectronVersion('', packageJSON)).to.eventually.equal('1.0.0');
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
it('works with electron-prebuilt', async () => {
|
|
65
|
+
const packageJSON = {
|
|
66
|
+
devDependencies: { 'electron-prebuilt': '1.0.0' },
|
|
67
|
+
};
|
|
68
|
+
return expect(await getElectronVersion('', packageJSON)).to.be.equal('1.0.0');
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
it('works with electron-nightly', async () => {
|
|
72
|
+
const packageJSON = {
|
|
73
|
+
devDependencies: { 'electron-nightly': '5.0.0-nightly.20190107' },
|
|
74
|
+
};
|
|
75
|
+
return expect(await getElectronVersion('', packageJSON)).to.be.equal('5.0.0-nightly.20190107');
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
it('works with electron', async () => {
|
|
79
|
+
const packageJSON = {
|
|
80
|
+
devDependencies: { electron: '1.0.0' },
|
|
81
|
+
};
|
|
82
|
+
return expect(await getElectronVersion('', packageJSON)).to.be.equal('1.0.0');
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
describe('with yarn workspaces', () => {
|
|
86
|
+
before(() => {
|
|
87
|
+
process.env.NODE_INSTALLER = 'yarn';
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
it('works with a non-exact version', async () => {
|
|
91
|
+
const fixtureDir = path.resolve(fixturePath, 'yarn-workspace', 'packages', 'subpackage');
|
|
92
|
+
const packageJSON = {
|
|
93
|
+
devDependencies: { electron: '^4.0.4' },
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
expect(await getElectronVersion(fixtureDir, packageJSON)).to.be.equal('4.0.9');
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
after(() => {
|
|
100
|
+
delete process.env.NODE_INSTALLER;
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
describe('getElectronModulePath', () => {
|
|
106
|
+
it('fails without devDependencies', () => expect(getElectronModulePath('', {})).to.eventually.be.rejectedWith('does not have any devDependencies'));
|
|
107
|
+
|
|
108
|
+
it('fails without electron devDependencies', () =>
|
|
109
|
+
expect(getElectronModulePath('', { devDependencies: {} })).to.eventually.be.rejectedWith('Electron packages in devDependencies'));
|
|
110
|
+
|
|
111
|
+
describe('with no electron installed', () => {
|
|
112
|
+
let tempDir: string;
|
|
113
|
+
before(async () => {
|
|
114
|
+
tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'electron-forge-test-'));
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
it('throws an error saying it cannot find electron', async () => {
|
|
118
|
+
const fixtureDir = path.resolve(fixturePath, 'dummy_app');
|
|
119
|
+
await fs.copy(fixtureDir, tempDir);
|
|
120
|
+
return expect(getElectronModulePath(tempDir, { devDependencies: { electron: '^4.0.2' } })).to.eventually.be.rejectedWith('Cannot find the package');
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
after(async () => {
|
|
124
|
+
await fs.remove(tempDir);
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
it('works with electron', () => {
|
|
129
|
+
const fixtureDir = path.resolve(fixturePath, 'non-exact');
|
|
130
|
+
return expect(getElectronModulePath(fixtureDir, { devDependencies: { electron: '^4.0.2' } })).to.eventually.equal(
|
|
131
|
+
path.join(fixtureDir, 'node_modules', 'electron')
|
|
132
|
+
);
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
describe('with npm workspaces', () => {
|
|
136
|
+
before(() => {
|
|
137
|
+
process.env.NODE_INSTALLER = 'npm';
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
it('finds the top-level electron module', async () => {
|
|
141
|
+
const workspaceDir = path.resolve(fixturePath, 'npm-workspace');
|
|
142
|
+
const fixtureDir = path.join(workspaceDir, 'packages', 'subpackage');
|
|
143
|
+
const packageJSON = {
|
|
144
|
+
devDependencies: { electron: '^4.0.4' },
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
expect(await getElectronModulePath(fixtureDir, packageJSON)).to.be.equal(path.join(workspaceDir, 'node_modules', 'electron'));
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
after(() => {
|
|
151
|
+
delete process.env.NODE_INSTALLER;
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
describe('with yarn workspaces', () => {
|
|
156
|
+
before(() => {
|
|
157
|
+
process.env.NODE_INSTALLER = 'yarn';
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
it('finds the top-level electron module', async () => {
|
|
161
|
+
const workspaceDir = path.resolve(fixturePath, 'yarn-workspace');
|
|
162
|
+
const fixtureDir = path.join(workspaceDir, 'packages', 'subpackage');
|
|
163
|
+
const packageJSON = {
|
|
164
|
+
devDependencies: { electron: '^4.0.4' },
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
expect(await getElectronModulePath(fixtureDir, packageJSON)).to.be.equal(path.join(workspaceDir, 'node_modules', 'electron'));
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
it('finds the top-level electron module despite the additional node_modules folder inside the package', async () => {
|
|
171
|
+
const workspaceDir = path.resolve(fixturePath, 'yarn-workspace');
|
|
172
|
+
const fixtureDir = path.join(workspaceDir, 'packages', 'with-node-modules');
|
|
173
|
+
const packageJSON = {
|
|
174
|
+
devDependencies: { electron: '^4.0.4' },
|
|
175
|
+
};
|
|
176
|
+
|
|
177
|
+
expect(await getElectronModulePath(fixtureDir, packageJSON)).to.be.equal(path.join(workspaceDir, 'node_modules', 'electron'));
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
it('finds the correct electron module in nohoist mode', async () => {
|
|
181
|
+
const workspaceDir = path.resolve(fixturePath, 'yarn-workspace');
|
|
182
|
+
const fixtureDir = path.join(workspaceDir, 'packages', 'electron-folder-in-node-modules');
|
|
183
|
+
const packageJSON = {
|
|
184
|
+
devDependencies: { electron: '^13.0.0' },
|
|
185
|
+
};
|
|
186
|
+
|
|
187
|
+
expect(await getElectronModulePath(fixtureDir, packageJSON)).to.be.equal(path.join(fixtureDir, 'node_modules', 'electron'));
|
|
188
|
+
expect(await getElectronModulePath(fixtureDir, packageJSON)).not.to.be.equal(path.join(workspaceDir, 'node_modules', 'electron'));
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
after(() => {
|
|
192
|
+
delete process.env.NODE_INSTALLER;
|
|
193
|
+
});
|
|
194
|
+
});
|
|
195
|
+
});
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { expect } from 'chai';
|
|
2
|
+
import systemYarnOrNpm from 'yarn-or-npm';
|
|
3
|
+
|
|
4
|
+
import { safeYarnOrNpm } from '../src/yarn-or-npm';
|
|
5
|
+
|
|
6
|
+
describe('yarn-or-npm', () => {
|
|
7
|
+
let nodeInstaller: string | undefined;
|
|
8
|
+
|
|
9
|
+
beforeEach(() => {
|
|
10
|
+
nodeInstaller = process.env.NODE_INSTALLER;
|
|
11
|
+
delete process.env.NODE_INSTALLER;
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
afterEach(() => {
|
|
15
|
+
if (!nodeInstaller) {
|
|
16
|
+
delete process.env.NODE_INSTALLER;
|
|
17
|
+
} else {
|
|
18
|
+
process.env.NODE_INSTALLER = nodeInstaller;
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
it('should by default equal the system yarn-or-npm value', () => {
|
|
23
|
+
expect(safeYarnOrNpm()).to.be.equal(systemYarnOrNpm());
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
it('should return yarn if NODE_INSTALLER=yarn', () => {
|
|
27
|
+
process.env.NODE_INSTALLER = 'yarn';
|
|
28
|
+
expect(safeYarnOrNpm()).to.be.equal('yarn');
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
it('should return npm if NODE_INSTALLER=npm', () => {
|
|
32
|
+
process.env.NODE_INSTALLER = 'npm';
|
|
33
|
+
expect(safeYarnOrNpm()).to.be.equal('npm');
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
it('should return system value if NODE_INSTALLER is an unrecognized installer', () => {
|
|
37
|
+
process.env.NODE_INSTALLER = 'magical_unicorn';
|
|
38
|
+
expect(safeYarnOrNpm()).to.be.equal(systemYarnOrNpm());
|
|
39
|
+
});
|
|
40
|
+
});
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
declare type PackageJSONWithDeps = {
|
|
2
|
-
devDependencies?: Record<string, string>;
|
|
3
|
-
dependencies?: Record<string, string>;
|
|
4
|
-
};
|
|
5
|
-
export declare class PackageNotFoundError extends Error {
|
|
6
|
-
constructor(packageName: string, dir: string);
|
|
7
|
-
}
|
|
8
|
-
export declare function getElectronModulePath(dir: string, packageJSON: PackageJSONWithDeps): Promise<string | undefined>;
|
|
9
|
-
export declare function getElectronVersion(dir: string, packageJSON: PackageJSONWithDeps): Promise<string>;
|
|
10
|
-
export declare function updateElectronDependency(packageJSON: PackageJSONWithDeps, dev: string[], exact: string[]): [string[], string[]];
|
|
11
|
-
export {};
|
|
12
|
-
//# sourceMappingURL=electron-version.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"electron-version.d.ts","sourceRoot":"","sources":["../src/electron-version.ts"],"names":[],"mappings":"AAaA,aAAK,mBAAmB,GAAG;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC,CAAC;AA4BF,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;CAG7C;AA+BD,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAQtH;AAED,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,CAkBvG;AAED,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,mBAAmB,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAkB/H"}
|
package/dist/electron-version.js
DELETED
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
exports.getElectronModulePath = getElectronModulePath;
|
|
6
|
-
exports.getElectronVersion = getElectronVersion;
|
|
7
|
-
exports.updateElectronDependency = updateElectronDependency;
|
|
8
|
-
var _path = _interopRequireDefault(require("path"));
|
|
9
|
-
var _debug = _interopRequireDefault(require("debug"));
|
|
10
|
-
var _findUp = _interopRequireDefault(require("find-up"));
|
|
11
|
-
var _fsExtra = _interopRequireDefault(require("fs-extra"));
|
|
12
|
-
var _semver = _interopRequireDefault(require("semver"));
|
|
13
|
-
var _yarnOrNpm = require("./yarn-or-npm");
|
|
14
|
-
function _interopRequireDefault(obj) {
|
|
15
|
-
return obj && obj.__esModule ? obj : {
|
|
16
|
-
default: obj
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
const d = (0, _debug).default('electron-forge:electron-version');
|
|
20
|
-
const electronPackageNames = [
|
|
21
|
-
'electron-prebuilt-compile',
|
|
22
|
-
'electron-prebuilt',
|
|
23
|
-
'electron-nightly',
|
|
24
|
-
'electron'
|
|
25
|
-
];
|
|
26
|
-
function findElectronDep(dep) {
|
|
27
|
-
return electronPackageNames.includes(dep);
|
|
28
|
-
}
|
|
29
|
-
async function findAncestorNodeModulesPath(dir, packageName) {
|
|
30
|
-
d('Looking for a lock file to indicate the root of the repo');
|
|
31
|
-
const lockPath = await (0, _findUp).default([
|
|
32
|
-
'package-lock.json',
|
|
33
|
-
'yarn.lock',
|
|
34
|
-
'pnpm-lock.yaml'
|
|
35
|
-
], {
|
|
36
|
-
cwd: dir,
|
|
37
|
-
type: 'file'
|
|
38
|
-
});
|
|
39
|
-
if (lockPath) {
|
|
40
|
-
d(`Found lock file: ${lockPath}`);
|
|
41
|
-
const nodeModulesPath = _path.default.join(_path.default.dirname(lockPath), 'node_modules', packageName);
|
|
42
|
-
if (await _fsExtra.default.pathExists(nodeModulesPath)) {
|
|
43
|
-
return nodeModulesPath;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
return Promise.resolve(undefined);
|
|
47
|
-
}
|
|
48
|
-
async function determineNodeModulesPath(dir, packageName) {
|
|
49
|
-
const nodeModulesPath = _path.default.join(dir, 'node_modules', packageName);
|
|
50
|
-
if (await _fsExtra.default.pathExists(nodeModulesPath)) {
|
|
51
|
-
return nodeModulesPath;
|
|
52
|
-
}
|
|
53
|
-
return findAncestorNodeModulesPath(dir, packageName);
|
|
54
|
-
}
|
|
55
|
-
class PackageNotFoundError extends Error {
|
|
56
|
-
constructor(packageName, dir){
|
|
57
|
-
super(`Cannot find the package "${packageName}". Perhaps you need to run "${(0, _yarnOrNpm).safeYarnOrNpm()} install" in "${dir}"?`);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
exports.PackageNotFoundError = PackageNotFoundError;
|
|
61
|
-
function getElectronModuleName(packageJSON) {
|
|
62
|
-
if (!packageJSON.devDependencies) {
|
|
63
|
-
throw new Error('package.json for app does not have any devDependencies');
|
|
64
|
-
}
|
|
65
|
-
// Why: checked above
|
|
66
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
67
|
-
const packageName = electronPackageNames.find((pkg)=>packageJSON.devDependencies[pkg]
|
|
68
|
-
);
|
|
69
|
-
if (packageName === undefined) {
|
|
70
|
-
throw new Error('Could not find any Electron packages in devDependencies');
|
|
71
|
-
}
|
|
72
|
-
return packageName;
|
|
73
|
-
}
|
|
74
|
-
async function getElectronPackageJSONPath(dir, packageName) {
|
|
75
|
-
const nodeModulesPath = await determineNodeModulesPath(dir, packageName);
|
|
76
|
-
if (!nodeModulesPath) {
|
|
77
|
-
throw new PackageNotFoundError(packageName, dir);
|
|
78
|
-
}
|
|
79
|
-
const electronPackageJSONPath = _path.default.join(nodeModulesPath, 'package.json');
|
|
80
|
-
if (await _fsExtra.default.pathExists(electronPackageJSONPath)) {
|
|
81
|
-
return electronPackageJSONPath;
|
|
82
|
-
}
|
|
83
|
-
return undefined;
|
|
84
|
-
}
|
|
85
|
-
async function getElectronModulePath(dir, packageJSON) {
|
|
86
|
-
const moduleName = getElectronModuleName(packageJSON);
|
|
87
|
-
const packageJSONPath = await getElectronPackageJSONPath(dir, moduleName);
|
|
88
|
-
if (packageJSONPath) {
|
|
89
|
-
return _path.default.dirname(packageJSONPath);
|
|
90
|
-
}
|
|
91
|
-
return undefined;
|
|
92
|
-
}
|
|
93
|
-
async function getElectronVersion(dir, packageJSON) {
|
|
94
|
-
const packageName = getElectronModuleName(packageJSON);
|
|
95
|
-
// Why: checked in getElectronModuleName
|
|
96
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
97
|
-
let version = packageJSON.devDependencies[packageName];
|
|
98
|
-
if (!_semver.default.valid(version)) {
|
|
99
|
-
// It's not an exact version, find it in the actual module
|
|
100
|
-
const electronPackageJSONPath = await getElectronPackageJSONPath(dir, packageName);
|
|
101
|
-
if (electronPackageJSONPath) {
|
|
102
|
-
const electronPackageJSON = await _fsExtra.default.readJson(electronPackageJSONPath);
|
|
103
|
-
version = electronPackageJSON.version;
|
|
104
|
-
} else {
|
|
105
|
-
throw new PackageNotFoundError(packageName, dir);
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
return version;
|
|
109
|
-
}
|
|
110
|
-
function updateElectronDependency(packageJSON, dev, exact) {
|
|
111
|
-
const alteredDev = [].concat(dev);
|
|
112
|
-
let alteredExact = [].concat(exact);
|
|
113
|
-
// Why: checked in getElectronModuleName
|
|
114
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
115
|
-
if (Object.keys(packageJSON.devDependencies).find(findElectronDep)) {
|
|
116
|
-
alteredExact = alteredExact.filter((dep)=>dep !== 'electron'
|
|
117
|
-
);
|
|
118
|
-
} else if (packageJSON.dependencies) {
|
|
119
|
-
const electronKey = Object.keys(packageJSON.dependencies).find(findElectronDep);
|
|
120
|
-
if (electronKey) {
|
|
121
|
-
alteredExact = alteredExact.filter((dep)=>dep !== 'electron'
|
|
122
|
-
);
|
|
123
|
-
d(`Moving ${electronKey} from dependencies to devDependencies`);
|
|
124
|
-
alteredDev.push(`${electronKey}@${packageJSON.dependencies[electronKey]}`);
|
|
125
|
-
delete packageJSON.dependencies[electronKey];
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
return [
|
|
129
|
-
alteredDev,
|
|
130
|
-
alteredExact
|
|
131
|
-
];
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9lbGVjdHJvbi12ZXJzaW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IGZpbmRVcCBmcm9tICdmaW5kLXVwJztcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgc2VtdmVyIGZyb20gJ3NlbXZlcic7XG5cbmltcG9ydCB7IHNhZmVZYXJuT3JOcG0gfSBmcm9tICcuL3lhcm4tb3ItbnBtJztcblxuY29uc3QgZCA9IGRlYnVnKCdlbGVjdHJvbi1mb3JnZTplbGVjdHJvbi12ZXJzaW9uJyk7XG5cbmNvbnN0IGVsZWN0cm9uUGFja2FnZU5hbWVzID0gWydlbGVjdHJvbi1wcmVidWlsdC1jb21waWxlJywgJ2VsZWN0cm9uLXByZWJ1aWx0JywgJ2VsZWN0cm9uLW5pZ2h0bHknLCAnZWxlY3Ryb24nXTtcblxudHlwZSBQYWNrYWdlSlNPTldpdGhEZXBzID0ge1xuICBkZXZEZXBlbmRlbmNpZXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBkZXBlbmRlbmNpZXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufTtcblxuZnVuY3Rpb24gZmluZEVsZWN0cm9uRGVwKGRlcDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBlbGVjdHJvblBhY2thZ2VOYW1lcy5pbmNsdWRlcyhkZXApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmaW5kQW5jZXN0b3JOb2RlTW9kdWxlc1BhdGgoZGlyOiBzdHJpbmcsIHBhY2thZ2VOYW1lOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBkKCdMb29raW5nIGZvciBhIGxvY2sgZmlsZSB0byBpbmRpY2F0ZSB0aGUgcm9vdCBvZiB0aGUgcmVwbycpO1xuICBjb25zdCBsb2NrUGF0aCA9IGF3YWl0IGZpbmRVcChbJ3BhY2thZ2UtbG9jay5qc29uJywgJ3lhcm4ubG9jaycsICdwbnBtLWxvY2sueWFtbCddLCB7IGN3ZDogZGlyLCB0eXBlOiAnZmlsZScgfSk7XG4gIGlmIChsb2NrUGF0aCkge1xuICAgIGQoYEZvdW5kIGxvY2sgZmlsZTogJHtsb2NrUGF0aH1gKTtcbiAgICBjb25zdCBub2RlTW9kdWxlc1BhdGggPSBwYXRoLmpvaW4ocGF0aC5kaXJuYW1lKGxvY2tQYXRoKSwgJ25vZGVfbW9kdWxlcycsIHBhY2thZ2VOYW1lKTtcbiAgICBpZiAoYXdhaXQgZnMucGF0aEV4aXN0cyhub2RlTW9kdWxlc1BhdGgpKSB7XG4gICAgICByZXR1cm4gbm9kZU1vZHVsZXNQYXRoO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZGV0ZXJtaW5lTm9kZU1vZHVsZXNQYXRoKGRpcjogc3RyaW5nLCBwYWNrYWdlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgY29uc3Qgbm9kZU1vZHVsZXNQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBwYXRoLmpvaW4oZGlyLCAnbm9kZV9tb2R1bGVzJywgcGFja2FnZU5hbWUpO1xuICBpZiAoYXdhaXQgZnMucGF0aEV4aXN0cyhub2RlTW9kdWxlc1BhdGgpKSB7XG4gICAgcmV0dXJuIG5vZGVNb2R1bGVzUGF0aDtcbiAgfVxuICByZXR1cm4gZmluZEFuY2VzdG9yTm9kZU1vZHVsZXNQYXRoKGRpciwgcGFja2FnZU5hbWUpO1xufVxuXG5leHBvcnQgY2xhc3MgUGFja2FnZU5vdEZvdW5kRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHBhY2thZ2VOYW1lOiBzdHJpbmcsIGRpcjogc3RyaW5nKSB7XG4gICAgc3VwZXIoYENhbm5vdCBmaW5kIHRoZSBwYWNrYWdlIFwiJHtwYWNrYWdlTmFtZX1cIi4gUGVyaGFwcyB5b3UgbmVlZCB0byBydW4gXCIke3NhZmVZYXJuT3JOcG0oKX0gaW5zdGFsbFwiIGluIFwiJHtkaXJ9XCI/YCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RWxlY3Ryb25Nb2R1bGVOYW1lKHBhY2thZ2VKU09OOiBQYWNrYWdlSlNPTldpdGhEZXBzKTogc3RyaW5nIHtcbiAgaWYgKCFwYWNrYWdlSlNPTi5kZXZEZXBlbmRlbmNpZXMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhY2thZ2UuanNvbiBmb3IgYXBwIGRvZXMgbm90IGhhdmUgYW55IGRldkRlcGVuZGVuY2llcycpO1xuICB9XG5cbiAgLy8gV2h5OiBjaGVja2VkIGFib3ZlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gIGNvbnN0IHBhY2thZ2VOYW1lID0gZWxlY3Ryb25QYWNrYWdlTmFtZXMuZmluZCgocGtnKSA9PiBwYWNrYWdlSlNPTi5kZXZEZXBlbmRlbmNpZXMhW3BrZ10pO1xuICBpZiAocGFja2FnZU5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgYW55IEVsZWN0cm9uIHBhY2thZ2VzIGluIGRldkRlcGVuZGVuY2llcycpO1xuICB9XG5cbiAgcmV0dXJuIHBhY2thZ2VOYW1lO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRFbGVjdHJvblBhY2thZ2VKU09OUGF0aChkaXI6IHN0cmluZywgcGFja2FnZU5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IG5vZGVNb2R1bGVzUGF0aCA9IGF3YWl0IGRldGVybWluZU5vZGVNb2R1bGVzUGF0aChkaXIsIHBhY2thZ2VOYW1lKTtcbiAgaWYgKCFub2RlTW9kdWxlc1BhdGgpIHtcbiAgICB0aHJvdyBuZXcgUGFja2FnZU5vdEZvdW5kRXJyb3IocGFja2FnZU5hbWUsIGRpcik7XG4gIH1cblxuICBjb25zdCBlbGVjdHJvblBhY2thZ2VKU09OUGF0aCA9IHBhdGguam9pbihub2RlTW9kdWxlc1BhdGgsICdwYWNrYWdlLmpzb24nKTtcbiAgaWYgKGF3YWl0IGZzLnBhdGhFeGlzdHMoZWxlY3Ryb25QYWNrYWdlSlNPTlBhdGgpKSB7XG4gICAgcmV0dXJuIGVsZWN0cm9uUGFja2FnZUpTT05QYXRoO1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEVsZWN0cm9uTW9kdWxlUGF0aChkaXI6IHN0cmluZywgcGFja2FnZUpTT046IFBhY2thZ2VKU09OV2l0aERlcHMpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBtb2R1bGVOYW1lID0gZ2V0RWxlY3Ryb25Nb2R1bGVOYW1lKHBhY2thZ2VKU09OKTtcbiAgY29uc3QgcGFja2FnZUpTT05QYXRoID0gYXdhaXQgZ2V0RWxlY3Ryb25QYWNrYWdlSlNPTlBhdGgoZGlyLCBtb2R1bGVOYW1lKTtcbiAgaWYgKHBhY2thZ2VKU09OUGF0aCkge1xuICAgIHJldHVybiBwYXRoLmRpcm5hbWUocGFja2FnZUpTT05QYXRoKTtcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRFbGVjdHJvblZlcnNpb24oZGlyOiBzdHJpbmcsIHBhY2thZ2VKU09OOiBQYWNrYWdlSlNPTldpdGhEZXBzKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcGFja2FnZU5hbWUgPSBnZXRFbGVjdHJvbk1vZHVsZU5hbWUocGFja2FnZUpTT04pO1xuXG4gIC8vIFdoeTogY2hlY2tlZCBpbiBnZXRFbGVjdHJvbk1vZHVsZU5hbWVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgbGV0IHZlcnNpb24gPSBwYWNrYWdlSlNPTi5kZXZEZXBlbmRlbmNpZXMhW3BhY2thZ2VOYW1lXTtcbiAgaWYgKCFzZW12ZXIudmFsaWQodmVyc2lvbikpIHtcbiAgICAvLyBJdCdzIG5vdCBhbiBleGFjdCB2ZXJzaW9uLCBmaW5kIGl0IGluIHRoZSBhY3R1YWwgbW9kdWxlXG4gICAgY29uc3QgZWxlY3Ryb25QYWNrYWdlSlNPTlBhdGggPSBhd2FpdCBnZXRFbGVjdHJvblBhY2thZ2VKU09OUGF0aChkaXIsIHBhY2thZ2VOYW1lKTtcbiAgICBpZiAoZWxlY3Ryb25QYWNrYWdlSlNPTlBhdGgpIHtcbiAgICAgIGNvbnN0IGVsZWN0cm9uUGFja2FnZUpTT04gPSBhd2FpdCBmcy5yZWFkSnNvbihlbGVjdHJvblBhY2thZ2VKU09OUGF0aCk7XG4gICAgICB2ZXJzaW9uID0gZWxlY3Ryb25QYWNrYWdlSlNPTi52ZXJzaW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgUGFja2FnZU5vdEZvdW5kRXJyb3IocGFja2FnZU5hbWUsIGRpcik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZlcnNpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVFbGVjdHJvbkRlcGVuZGVuY3kocGFja2FnZUpTT046IFBhY2thZ2VKU09OV2l0aERlcHMsIGRldjogc3RyaW5nW10sIGV4YWN0OiBzdHJpbmdbXSk6IFtzdHJpbmdbXSwgc3RyaW5nW11dIHtcbiAgY29uc3QgYWx0ZXJlZERldiA9IChbXSBhcyBzdHJpbmdbXSkuY29uY2F0KGRldik7XG4gIGxldCBhbHRlcmVkRXhhY3QgPSAoW10gYXMgc3RyaW5nW10pLmNvbmNhdChleGFjdCk7XG4gIC8vIFdoeTogY2hlY2tlZCBpbiBnZXRFbGVjdHJvbk1vZHVsZU5hbWVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgaWYgKE9iamVjdC5rZXlzKHBhY2thZ2VKU09OLmRldkRlcGVuZGVuY2llcyEpLmZpbmQoZmluZEVsZWN0cm9uRGVwKSkge1xuICAgIGFsdGVyZWRFeGFjdCA9IGFsdGVyZWRFeGFjdC5maWx0ZXIoKGRlcCkgPT4gZGVwICE9PSAnZWxlY3Ryb24nKTtcbiAgfSBlbHNlIGlmIChwYWNrYWdlSlNPTi5kZXBlbmRlbmNpZXMpIHtcbiAgICBjb25zdCBlbGVjdHJvbktleSA9IE9iamVjdC5rZXlzKHBhY2thZ2VKU09OLmRlcGVuZGVuY2llcykuZmluZChmaW5kRWxlY3Ryb25EZXApO1xuICAgIGlmIChlbGVjdHJvbktleSkge1xuICAgICAgYWx0ZXJlZEV4YWN0ID0gYWx0ZXJlZEV4YWN0LmZpbHRlcigoZGVwKSA9PiBkZXAgIT09ICdlbGVjdHJvbicpO1xuICAgICAgZChgTW92aW5nICR7ZWxlY3Ryb25LZXl9IGZyb20gZGVwZW5kZW5jaWVzIHRvIGRldkRlcGVuZGVuY2llc2ApO1xuICAgICAgYWx0ZXJlZERldi5wdXNoKGAke2VsZWN0cm9uS2V5fUAke3BhY2thZ2VKU09OLmRlcGVuZGVuY2llc1tlbGVjdHJvbktleV19YCk7XG4gICAgICBkZWxldGUgcGFja2FnZUpTT04uZGVwZW5kZW5jaWVzW2VsZWN0cm9uS2V5XTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gW2FsdGVyZWREZXYsIGFsdGVyZWRFeGFjdF07XG59XG4iXSwibmFtZXMiOlsiZ2V0RWxlY3Ryb25Nb2R1bGVQYXRoIiwiZ2V0RWxlY3Ryb25WZXJzaW9uIiwidXBkYXRlRWxlY3Ryb25EZXBlbmRlbmN5IiwiZCIsImRlYnVnIiwiZWxlY3Ryb25QYWNrYWdlTmFtZXMiLCJmaW5kRWxlY3Ryb25EZXAiLCJkZXAiLCJpbmNsdWRlcyIsImZpbmRBbmNlc3Rvck5vZGVNb2R1bGVzUGF0aCIsImRpciIsInBhY2thZ2VOYW1lIiwibG9ja1BhdGgiLCJmaW5kVXAiLCJjd2QiLCJ0eXBlIiwibm9kZU1vZHVsZXNQYXRoIiwicGF0aCIsImpvaW4iLCJkaXJuYW1lIiwiZnMiLCJwYXRoRXhpc3RzIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ1bmRlZmluZWQiLCJkZXRlcm1pbmVOb2RlTW9kdWxlc1BhdGgiLCJQYWNrYWdlTm90Rm91bmRFcnJvciIsIkVycm9yIiwic2FmZVlhcm5Pck5wbSIsImdldEVsZWN0cm9uTW9kdWxlTmFtZSIsInBhY2thZ2VKU09OIiwiZGV2RGVwZW5kZW5jaWVzIiwiZmluZCIsInBrZyIsImdldEVsZWN0cm9uUGFja2FnZUpTT05QYXRoIiwiZWxlY3Ryb25QYWNrYWdlSlNPTlBhdGgiLCJtb2R1bGVOYW1lIiwicGFja2FnZUpTT05QYXRoIiwidmVyc2lvbiIsInNlbXZlciIsInZhbGlkIiwiZWxlY3Ryb25QYWNrYWdlSlNPTiIsInJlYWRKc29uIiwiZGV2IiwiZXhhY3QiLCJhbHRlcmVkRGV2IiwiY29uY2F0IiwiYWx0ZXJlZEV4YWN0IiwiT2JqZWN0Iiwia2V5cyIsImZpbHRlciIsImRlcGVuZGVuY2llcyIsImVsZWN0cm9uS2V5IiwicHVzaCJdLCJtYXBwaW5ncyI6Ijs7OztRQStFc0JBLHFCQUFxQixHQUFyQkEscUJBQXFCO1FBVXJCQyxrQkFBa0IsR0FBbEJBLGtCQUFrQjtRQW9CeEJDLHdCQUF3QixHQUF4QkEsd0JBQXdCO0FBN0d2QixHQUFNLENBQU4sS0FBTTtBQUVMLEdBQU8sQ0FBUCxNQUFPO0FBQ04sR0FBUyxDQUFULE9BQVM7QUFDYixHQUFVLENBQVYsUUFBVTtBQUNOLEdBQVEsQ0FBUixPQUFRO0FBRUcsR0FBZSxDQUFmLFVBQWU7Ozs7OztBQUU3QyxLQUFLLENBQUNDLENBQUMsT0FBR0MsTUFBSyxVQUFDLENBQWlDO0FBRWpELEtBQUssQ0FBQ0Msb0JBQW9CLEdBQUcsQ0FBQztJQUFBLENBQTJCO0lBQUUsQ0FBbUI7SUFBRSxDQUFrQjtJQUFFLENBQVU7QUFBQSxDQUFDO1NBT3RHQyxlQUFlLENBQUNDLEdBQVcsRUFBVyxDQUFDO0lBQzlDLE1BQU0sQ0FBQ0Ysb0JBQW9CLENBQUNHLFFBQVEsQ0FBQ0QsR0FBRztBQUMxQyxDQUFDO2VBRWNFLDJCQUEyQixDQUFDQyxHQUFXLEVBQUVDLFdBQW1CLEVBQStCLENBQUM7SUFDekdSLENBQUMsQ0FBQyxDQUEwRDtJQUM1RCxLQUFLLENBQUNTLFFBQVEsR0FBRyxLQUFLLEtBQUNDLE9BQU0sVUFBQyxDQUFD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
|
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC"}
|
package/dist/index.js
DELETED
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
var _exportNames = {};
|
|
6
|
-
var _rebuild = _interopRequireWildcard(require("./rebuild"));
|
|
7
|
-
Object.keys(_rebuild).forEach(function(key) {
|
|
8
|
-
if (key === "default" || key === "__esModule") return;
|
|
9
|
-
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
10
|
-
if (key in exports && exports[key] === _rebuild[key]) return;
|
|
11
|
-
Object.defineProperty(exports, key, {
|
|
12
|
-
enumerable: true,
|
|
13
|
-
get: function() {
|
|
14
|
-
return _rebuild[key];
|
|
15
|
-
}
|
|
16
|
-
});
|
|
17
|
-
});
|
|
18
|
-
var _electronVersion = _interopRequireWildcard(require("./electron-version"));
|
|
19
|
-
Object.keys(_electronVersion).forEach(function(key) {
|
|
20
|
-
if (key === "default" || key === "__esModule") return;
|
|
21
|
-
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
22
|
-
if (key in exports && exports[key] === _electronVersion[key]) return;
|
|
23
|
-
Object.defineProperty(exports, key, {
|
|
24
|
-
enumerable: true,
|
|
25
|
-
get: function() {
|
|
26
|
-
return _electronVersion[key];
|
|
27
|
-
}
|
|
28
|
-
});
|
|
29
|
-
});
|
|
30
|
-
var _yarnOrNpm = _interopRequireWildcard(require("./yarn-or-npm"));
|
|
31
|
-
Object.keys(_yarnOrNpm).forEach(function(key) {
|
|
32
|
-
if (key === "default" || key === "__esModule") return;
|
|
33
|
-
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
34
|
-
if (key in exports && exports[key] === _yarnOrNpm[key]) return;
|
|
35
|
-
Object.defineProperty(exports, key, {
|
|
36
|
-
enumerable: true,
|
|
37
|
-
get: function() {
|
|
38
|
-
return _yarnOrNpm[key];
|
|
39
|
-
}
|
|
40
|
-
});
|
|
41
|
-
});
|
|
42
|
-
function _interopRequireWildcard(obj) {
|
|
43
|
-
if (obj && obj.__esModule) {
|
|
44
|
-
return obj;
|
|
45
|
-
} else {
|
|
46
|
-
var newObj = {};
|
|
47
|
-
if (obj != null) {
|
|
48
|
-
for(var key in obj){
|
|
49
|
-
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
50
|
-
var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};
|
|
51
|
-
if (desc.get || desc.set) {
|
|
52
|
-
Object.defineProperty(newObj, key, desc);
|
|
53
|
-
} else {
|
|
54
|
-
newObj[key] = obj[key];
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
newObj.default = obj;
|
|
60
|
-
return newObj;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
|
package/dist/rebuild.d.ts
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import { ForgeArch, ForgeListrTask, ForgePlatform } from '@electron-forge/shared-types';
|
|
2
|
-
import { RebuildOptions } from '@electron/rebuild';
|
|
3
|
-
export declare const listrCompatibleRebuildHook: (buildPath: string, electronVersion: string, platform: ForgePlatform, arch: ForgeArch, config: Partial<RebuildOptions> | undefined, task: ForgeListrTask<never>, taskTitlePrefix?: string) => Promise<void>;
|
|
4
|
-
//# sourceMappingURL=rebuild.d.ts.map
|
package/dist/rebuild.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rebuild.d.ts","sourceRoot":"","sources":["../src/rebuild.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AACxF,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,eAAO,MAAM,0BAA0B,cAC1B,MAAM,mBACA,MAAM,YACb,aAAa,QACjB,SAAS,yGAId,QAAQ,IAAI,CA8Dd,CAAC"}
|
package/dist/rebuild.js
DELETED
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
exports.listrCompatibleRebuildHook = void 0;
|
|
6
|
-
var cp = _interopRequireWildcard(require("child_process"));
|
|
7
|
-
var path = _interopRequireWildcard(require("path"));
|
|
8
|
-
function _interopRequireWildcard(obj) {
|
|
9
|
-
if (obj && obj.__esModule) {
|
|
10
|
-
return obj;
|
|
11
|
-
} else {
|
|
12
|
-
var newObj = {};
|
|
13
|
-
if (obj != null) {
|
|
14
|
-
for(var key in obj){
|
|
15
|
-
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
16
|
-
var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};
|
|
17
|
-
if (desc.get || desc.set) {
|
|
18
|
-
Object.defineProperty(newObj, key, desc);
|
|
19
|
-
} else {
|
|
20
|
-
newObj[key] = obj[key];
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
newObj.default = obj;
|
|
26
|
-
return newObj;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
const listrCompatibleRebuildHook = async (buildPath, electronVersion, platform, arch, config = {}, task, taskTitlePrefix = '')=>{
|
|
30
|
-
var ref, ref1;
|
|
31
|
-
task.title = `${taskTitlePrefix}Preparing native dependencies`;
|
|
32
|
-
const options = {
|
|
33
|
-
...config,
|
|
34
|
-
buildPath,
|
|
35
|
-
electronVersion,
|
|
36
|
-
arch
|
|
37
|
-
};
|
|
38
|
-
const child = cp.fork(path.resolve(__dirname, 'remote-rebuild.js'), [
|
|
39
|
-
JSON.stringify(options)
|
|
40
|
-
], {
|
|
41
|
-
stdio: [
|
|
42
|
-
'pipe',
|
|
43
|
-
'pipe',
|
|
44
|
-
'pipe',
|
|
45
|
-
'ipc'
|
|
46
|
-
]
|
|
47
|
-
});
|
|
48
|
-
let pendingError;
|
|
49
|
-
let found = 0;
|
|
50
|
-
let done = 0;
|
|
51
|
-
const redraw = ()=>{
|
|
52
|
-
task.title = `${taskTitlePrefix}Preparing native dependencies: ${done} / ${found}`;
|
|
53
|
-
};
|
|
54
|
-
(ref = child.stdout) === null || ref === void 0 ? void 0 : ref.on('data', (chunk)=>{
|
|
55
|
-
task.output = chunk.toString();
|
|
56
|
-
});
|
|
57
|
-
(ref1 = child.stderr) === null || ref1 === void 0 ? void 0 : ref1.on('data', (chunk)=>{
|
|
58
|
-
task.output = chunk.toString();
|
|
59
|
-
});
|
|
60
|
-
child.on('message', (message)=>{
|
|
61
|
-
switch(message.msg){
|
|
62
|
-
case 'module-found':
|
|
63
|
-
{
|
|
64
|
-
found += 1;
|
|
65
|
-
redraw();
|
|
66
|
-
break;
|
|
67
|
-
}
|
|
68
|
-
case 'module-done':
|
|
69
|
-
{
|
|
70
|
-
done += 1;
|
|
71
|
-
redraw();
|
|
72
|
-
break;
|
|
73
|
-
}
|
|
74
|
-
case 'rebuild-error':
|
|
75
|
-
{
|
|
76
|
-
pendingError = new Error(message.err.message);
|
|
77
|
-
pendingError.stack = message.err.stack;
|
|
78
|
-
break;
|
|
79
|
-
}
|
|
80
|
-
case 'rebuild-done':
|
|
81
|
-
{
|
|
82
|
-
task.task.rendererTaskOptions.persistentOutput = false;
|
|
83
|
-
break;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
});
|
|
87
|
-
await new Promise((resolve, reject)=>{
|
|
88
|
-
child.on('exit', (code)=>{
|
|
89
|
-
if (code === 0 && !pendingError) {
|
|
90
|
-
resolve();
|
|
91
|
-
} else {
|
|
92
|
-
reject(pendingError || new Error(`Rebuilder failed with exit code: ${code}`));
|
|
93
|
-
}
|
|
94
|
-
});
|
|
95
|
-
});
|
|
96
|
-
};
|
|
97
|
-
exports.listrCompatibleRebuildHook = listrCompatibleRebuildHook;
|
|
98
|
-
|
|
99
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9yZWJ1aWxkLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNwIGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcblxuaW1wb3J0IHsgRm9yZ2VBcmNoLCBGb3JnZUxpc3RyVGFzaywgRm9yZ2VQbGF0Zm9ybSB9IGZyb20gJ0BlbGVjdHJvbi1mb3JnZS9zaGFyZWQtdHlwZXMnO1xuaW1wb3J0IHsgUmVidWlsZE9wdGlvbnMgfSBmcm9tICdAZWxlY3Ryb24vcmVidWlsZCc7XG5cbmV4cG9ydCBjb25zdCBsaXN0ckNvbXBhdGlibGVSZWJ1aWxkSG9vayA9IGFzeW5jIChcbiAgYnVpbGRQYXRoOiBzdHJpbmcsXG4gIGVsZWN0cm9uVmVyc2lvbjogc3RyaW5nLFxuICBwbGF0Zm9ybTogRm9yZ2VQbGF0Zm9ybSxcbiAgYXJjaDogRm9yZ2VBcmNoLFxuICBjb25maWc6IFBhcnRpYWw8UmVidWlsZE9wdGlvbnM+ID0ge30sXG4gIHRhc2s6IEZvcmdlTGlzdHJUYXNrPG5ldmVyPixcbiAgdGFza1RpdGxlUHJlZml4ID0gJydcbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICB0YXNrLnRpdGxlID0gYCR7dGFza1RpdGxlUHJlZml4fVByZXBhcmluZyBuYXRpdmUgZGVwZW5kZW5jaWVzYDtcblxuICBjb25zdCBvcHRpb25zOiBSZWJ1aWxkT3B0aW9ucyA9IHtcbiAgICAuLi5jb25maWcsXG4gICAgYnVpbGRQYXRoLFxuICAgIGVsZWN0cm9uVmVyc2lvbixcbiAgICBhcmNoLFxuICB9O1xuXG4gIGNvbnN0IGNoaWxkID0gY3AuZm9yayhwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAncmVtb3RlLXJlYnVpbGQuanMnKSwgW0pTT04uc3RyaW5naWZ5KG9wdGlvbnMpXSwge1xuICAgIHN0ZGlvOiBbJ3BpcGUnLCAncGlwZScsICdwaXBlJywgJ2lwYyddLFxuICB9KTtcblxuICBsZXQgcGVuZGluZ0Vycm9yOiBFcnJvcjtcbiAgbGV0IGZvdW5kID0gMDtcbiAgbGV0IGRvbmUgPSAwO1xuXG4gIGNvbnN0IHJlZHJhdyA9ICgpID0+IHtcbiAgICB0YXNrLnRpdGxlID0gYCR7dGFza1RpdGxlUHJlZml4fVByZXBhcmluZyBuYXRpdmUgZGVwZW5kZW5jaWVzOiAke2RvbmV9IC8gJHtmb3VuZH1gO1xuICB9O1xuXG4gIGNoaWxkLnN0ZG91dD8ub24oJ2RhdGEnLCAoY2h1bmspID0+IHtcbiAgICB0YXNrLm91dHB1dCA9IGNodW5rLnRvU3RyaW5nKCk7XG4gIH0pO1xuICBjaGlsZC5zdGRlcnI/Lm9uKCdkYXRhJywgKGNodW5rKSA9PiB7XG4gICAgdGFzay5vdXRwdXQgPSBjaHVuay50b1N0cmluZygpO1xuICB9KTtcblxuICBjaGlsZC5vbignbWVzc2FnZScsIChtZXNzYWdlOiB7IG1zZzogc3RyaW5nOyBlcnI6IHsgbWVzc2FnZTogc3RyaW5nOyBzdGFjazogc3RyaW5nIH0gfSkgPT4ge1xuICAgIHN3aXRjaCAobWVzc2FnZS5tc2cpIHtcbiAgICAgIGNhc2UgJ21vZHVsZS1mb3VuZCc6IHtcbiAgICAgICAgZm91bmQgKz0gMTtcbiAgICAgICAgcmVkcmF3KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnbW9kdWxlLWRvbmUnOiB7XG4gICAgICAgIGRvbmUgKz0gMTtcbiAgICAgICAgcmVkcmF3KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAncmVidWlsZC1lcnJvcic6IHtcbiAgICAgICAgcGVuZGluZ0Vycm9yID0gbmV3IEVycm9yKG1lc3NhZ2UuZXJyLm1lc3NhZ2UpO1xuICAgICAgICBwZW5kaW5nRXJyb3Iuc3RhY2sgPSBtZXNzYWdlLmVyci5zdGFjaztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdyZWJ1aWxkLWRvbmUnOiB7XG4gICAgICAgIHRhc2sudGFzay5yZW5kZXJlclRhc2tPcHRpb25zLnBlcnNpc3RlbnRPdXRwdXQgPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY2hpbGQub24oJ2V4aXQnLCAoY29kZSkgPT4ge1xuICAgICAgaWYgKGNvZGUgPT09IDAgJiYgIXBlbmRpbmdFcnJvcikge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWplY3QocGVuZGluZ0Vycm9yIHx8IG5ldyBFcnJvcihgUmVidWlsZGVyIGZhaWxlZCB3aXRoIGV4aXQgY29kZTogJHtjb2RlfWApKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59O1xuIl0sIm5hbWVzIjpbImNwIiwicGF0aCIsImxpc3RyQ29tcGF0aWJsZVJlYnVpbGRIb29rIiwiYnVpbGRQYXRoIiwiZWxlY3Ryb25WZXJzaW9uIiwicGxhdGZvcm0iLCJhcmNoIiwiY29uZmlnIiwidGFzayIsInRhc2tUaXRsZVByZWZpeCIsImNoaWxkIiwidGl0bGUiLCJvcHRpb25zIiwiZm9yayIsInJlc29sdmUiLCJfX2Rpcm5hbWUiLCJKU09OIiwic3RyaW5naWZ5Iiwic3RkaW8iLCJwZW5kaW5nRXJyb3IiLCJmb3VuZCIsImRvbmUiLCJyZWRyYXciLCJzdGRvdXQiLCJvbiIsImNodW5rIiwib3V0cHV0IiwidG9TdHJpbmciLCJzdGRlcnIiLCJtZXNzYWdlIiwibXNnIiwiRXJyb3IiLCJlcnIiLCJzdGFjayIsInJlbmRlcmVyVGFza09wdGlvbnMiLCJwZXJzaXN0ZW50T3V0cHV0IiwiUHJvbWlzZSIsInJlamVjdCIsImNvZGUiXSwibWFwcGluZ3MiOiI7Ozs7O0FBQVlBLEdBQUUsQ0FBRkEsRUFBRTtBQUNGQyxHQUFJLENBQUpBLElBQUk7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFLVCxLQUFLLENBQUNDLDBCQUEwQixVQUNyQ0MsU0FBaUIsRUFDakJDLGVBQXVCLEVBQ3ZCQyxRQUF1QixFQUN2QkMsSUFBZSxF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
|
package/dist/remote-rebuild.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"remote-rebuild.d.ts","sourceRoot":"","sources":["../src/remote-rebuild.ts"],"names":[],"mappings":""}
|
package/dist/remote-rebuild.js
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var _rebuild = require("@electron/rebuild");
|
|
3
|
-
if (!process.send) {
|
|
4
|
-
console.error('The remote rebuilder expects to be spawned with an IPC channel');
|
|
5
|
-
// eslint-disable-next-line no-process-exit
|
|
6
|
-
process.exit(1);
|
|
7
|
-
}
|
|
8
|
-
const options = JSON.parse(process.argv[2]);
|
|
9
|
-
const rebuilder = (0, _rebuild).rebuild(options);
|
|
10
|
-
rebuilder.lifecycle.on('module-found', ()=>{
|
|
11
|
-
var ref;
|
|
12
|
-
return (ref = process.send) === null || ref === void 0 ? void 0 : ref.call(process, {
|
|
13
|
-
msg: 'module-found'
|
|
14
|
-
});
|
|
15
|
-
});
|
|
16
|
-
rebuilder.lifecycle.on('module-done', ()=>{
|
|
17
|
-
var ref;
|
|
18
|
-
return (ref = process.send) === null || ref === void 0 ? void 0 : ref.call(process, {
|
|
19
|
-
msg: 'module-done'
|
|
20
|
-
});
|
|
21
|
-
});
|
|
22
|
-
rebuilder.then(()=>{
|
|
23
|
-
var ref;
|
|
24
|
-
(ref = process.send) === null || ref === void 0 ? void 0 : ref.call(process, {
|
|
25
|
-
msg: 'rebuild-done'
|
|
26
|
-
});
|
|
27
|
-
// eslint-disable-next-line no-process-exit
|
|
28
|
-
return process.exit(0);
|
|
29
|
-
}).catch((err)=>{
|
|
30
|
-
var ref;
|
|
31
|
-
(ref = process.send) === null || ref === void 0 ? void 0 : ref.call(process, {
|
|
32
|
-
msg: 'rebuild-error',
|
|
33
|
-
err: {
|
|
34
|
-
message: err.message,
|
|
35
|
-
stack: err.stack
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
// eslint-disable-next-line no-process-exit
|
|
39
|
-
process.exit(0);
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9yZW1vdGUtcmVidWlsZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZWJ1aWxkLCBSZWJ1aWxkT3B0aW9ucyB9IGZyb20gJ0BlbGVjdHJvbi9yZWJ1aWxkJztcblxuaWYgKCFwcm9jZXNzLnNlbmQpIHtcbiAgY29uc29sZS5lcnJvcignVGhlIHJlbW90ZSByZWJ1aWxkZXIgZXhwZWN0cyB0byBiZSBzcGF3bmVkIHdpdGggYW4gSVBDIGNoYW5uZWwnKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb2Nlc3MtZXhpdFxuICBwcm9jZXNzLmV4aXQoMSk7XG59XG5cbmNvbnN0IG9wdGlvbnM6IFJlYnVpbGRPcHRpb25zID0gSlNPTi5wYXJzZShwcm9jZXNzLmFyZ3ZbMl0pO1xuXG5jb25zdCByZWJ1aWxkZXIgPSByZWJ1aWxkKG9wdGlvbnMpO1xuXG5yZWJ1aWxkZXIubGlmZWN5Y2xlLm9uKCdtb2R1bGUtZm91bmQnLCAoKSA9PiBwcm9jZXNzLnNlbmQ/Lih7IG1zZzogJ21vZHVsZS1mb3VuZCcgfSkpO1xucmVidWlsZGVyLmxpZmVjeWNsZS5vbignbW9kdWxlLWRvbmUnLCAoKSA9PiBwcm9jZXNzLnNlbmQ/Lih7IG1zZzogJ21vZHVsZS1kb25lJyB9KSk7XG5cbnJlYnVpbGRlclxuICAudGhlbigoKSA9PiB7XG4gICAgcHJvY2Vzcy5zZW5kPy4oeyBtc2c6ICdyZWJ1aWxkLWRvbmUnIH0pO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm9jZXNzLWV4aXRcbiAgICByZXR1cm4gcHJvY2Vzcy5leGl0KDApO1xuICB9KVxuICAuY2F0Y2goKGVycikgPT4ge1xuICAgIHByb2Nlc3Muc2VuZD8uKHtcbiAgICAgIG1zZzogJ3JlYnVpbGQtZXJyb3InLFxuICAgICAgZXJyOiB7XG4gICAgICAgIG1lc3NhZ2U6IGVyci5tZXNzYWdlLFxuICAgICAgICBzdGFjazogZXJyLnN0YWNrLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvY2Vzcy1leGl0XG4gICAgcHJvY2Vzcy5leGl0KDApO1xuICB9KTtcbiJdLCJuYW1lcyI6WyJwcm9jZXNzIiwic2VuZCIsImNvbnNvbGUiLCJlcnJvciIsImV4aXQiLCJvcHRpb25zIiwiSlNPTiIsInBhcnNlIiwiYXJndiIsInJlYnVpbGRlciIsInJlYnVpbGQiLCJsaWZlY3ljbGUiLCJvbiIsIm1zZyIsInRoZW4iLCJjYXRjaCIsImVyciIsIm1lc3NhZ2UiLCJzdGFjayJdLCJtYXBwaW5ncyI6IjtBQUF3QyxHQUFtQixDQUFuQixRQUFtQjtBQUUzRCxFQUFFLEdBQUdBLE9BQU8sQ0FBQ0MsSUFBSSxFQUFFLENBQUM7SUFDbEJDLE9BQU8sQ0FBQ0MsS0FBSyxDQUFDLENBQWdFO0lBQzlFLEVBQTJDLEFBQTNDLHlDQUEyQztJQUMzQ0gsT0FBTyxDQUFDSSxJQUFJLENBQUMsQ0FBQztBQUNoQixDQUFDO0FBRUQsS0FBSyxDQUFDQyxPQUFPLEdBQW1CQyxJQUFJLENBQUNDLEtBQUssQ0FBQ1AsT0FBTyxDQUFDUSxJQUFJLENBQUMsQ0FBQztBQUV6RCxLQUFLLENBQUNDLFNBQVMsT0FBR0MsUUFBTyxVQUFDTCxPQUFPO0FBRWpDSSxTQUFTLENBQUNFLFNBQVMsQ0FBQ0MsRUFBRSxDQUFDLENBQWM7UUFBUVosR0FBWTtJQUFaQSxNQUFNLEVBQU5BLEdBQVksR0FBWkEsT0FBTyxDQUFDQyxJQUFJLGNBQVpELEdBQVksS0FBWkEsSUFBSSxDQUFKQSxDQUF1QyxHQUF2Q0EsSUFBSSxDQUFKQSxDQUF1QyxHQUF2Q0EsR0FBWSxDQUFaQSxJQUF1QyxDQUF2Q0EsT0FBTyxFQUFRLENBQUM7UUFBQ2EsR0FBRyxFQUFFLENBQWM7SUFBQyxDQUFDOztBQUNuRkosU0FBUyxDQUFDRSxTQUFTLENBQUNDLEVBQUUsQ0FBQyxDQUFhO1FBQVFaLEdBQVk7SUFBWkEsTUFBTSxFQUFOQSxHQUFZLEdBQVpBLE9BQU8sQ0FBQ0MsSUFBSSxjQUFaRCxHQUFZLEtBQVpBLElBQUksQ0FBSkEsQ0FBc0MsR0FBdENBLElBQUksQ0FBSkEsQ0FBc0MsR0FBdENBLEdBQVksQ0FBWkEsSUFBc0MsQ0FBdENBLE9BQU8sRUFBUSxDQUFDO1FBQUNhLEdBQUcsRUFBRSxDQUFhO0lBQUMsQ0FBQzs7QUFFakZKLFNBQVMsQ0FDTkssSUFBSSxLQUFPLENBQUM7UUFDWGQsR0FBWTtLQUFaQSxHQUFZLEdBQVpBLE9BQU8sQ0FBQ0MsSUFBSSxjQUFaRCxHQUFZLEtBQVpBLElBQUksQ0FBSkEsQ0FBdUMsR0FBdkNBLElBQUksQ0FBSkEsQ0FBdUMsR0FBdkNBLEdBQVksQ0FBWkEsSUFBdUMsQ0FBdkNBLE9BQU8sRUFBUSxDQUFDO1FBQUNhLEdBQUcsRUFBRSxDQUFjO0lBQUMsQ0FBQztJQUN0QyxFQUEyQyxBQUEzQyx5Q0FBMkM7SUFDM0MsTUFBTSxDQUFDYixPQUFPLENBQUNJLElBQUksQ0FBQyxDQUFDO0FBQ3ZCLENBQUMsRUFDQVcsS0FBSyxFQUFFQyxHQUFHLEdBQUssQ0FBQztRQUNmaEIsR0FBWTtLQUFaQSxHQUFZLEdBQVpBLE9BQU8sQ0FBQ0MsSUFBSSxjQUFaRCxHQUFZLEtBQVpBLElBQUksQ0FBSkEsQ0FNRSxHQU5GQSxJQUFJLENBQUpBLENBTUUsR0FORkEsR0FBWSxDQUFaQSxJQU1FLENBTkZBLE9BQU8sRUFBUSxDQUFDO1FBQ2RhLEdBQUcsRUFBRSxDQUFlO1FBQ3BCRyxHQUFHLEVBQUUsQ0FBQztZQUNKQyxPQUFPLEVBQUVELEdBQUcsQ0FBQ0MsT0FBTztZQUNwQkMsS0FBSyxFQUFFRixHQUFHLENBQUNFLEtBQUs7UUFDbEIsQ0FBQztJQUNILENBQUM7SUFDRCxFQUEyQyxBQUEzQyx5Q0FBMkM7SUFDM0NsQixPQUFPLENBQUNJLElBQUksQ0FBQyxDQUFDO0FBQ2hCLENBQUMifQ==
|
package/dist/yarn-or-npm.d.ts
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { CrossSpawnArgs, CrossSpawnOptions } from '@malept/cross-spawn-promise';
|
|
2
|
-
export declare const safeYarnOrNpm: () => "yarn" | "npm";
|
|
3
|
-
export declare const yarnOrNpmSpawn: (args?: CrossSpawnArgs, opts?: CrossSpawnOptions | undefined) => Promise<string>;
|
|
4
|
-
export declare const hasYarn: () => boolean;
|
|
5
|
-
//# sourceMappingURL=yarn-or-npm.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"yarn-or-npm.d.ts","sourceRoot":"","sources":["../src/yarn-or-npm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAS,MAAM,6BAA6B,CAAC;AAKvF,eAAO,MAAM,aAAa,sBAYzB,CAAC;AAEF,eAAO,MAAM,cAAc,UAAW,cAAc,2CAA6B,QAAQ,MAAM,CAAuC,CAAC;AAEvI,eAAO,MAAM,OAAO,QAAO,OAAqC,CAAC"}
|
package/dist/yarn-or-npm.js
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
exports.hasYarn = exports.yarnOrNpmSpawn = exports.safeYarnOrNpm = void 0;
|
|
6
|
-
var _crossSpawnPromise = require("@malept/cross-spawn-promise");
|
|
7
|
-
var _chalk = _interopRequireDefault(require("chalk"));
|
|
8
|
-
var _logSymbols = _interopRequireDefault(require("log-symbols"));
|
|
9
|
-
var _yarnOrNpm = _interopRequireDefault(require("yarn-or-npm"));
|
|
10
|
-
function _interopRequireDefault(obj) {
|
|
11
|
-
return obj && obj.__esModule ? obj : {
|
|
12
|
-
default: obj
|
|
13
|
-
};
|
|
14
|
-
}
|
|
15
|
-
const safeYarnOrNpm = ()=>{
|
|
16
|
-
const system = (0, _yarnOrNpm).default();
|
|
17
|
-
switch(process.env.NODE_INSTALLER){
|
|
18
|
-
case 'yarn':
|
|
19
|
-
case 'npm':
|
|
20
|
-
return process.env.NODE_INSTALLER;
|
|
21
|
-
default:
|
|
22
|
-
if (process.env.NODE_INSTALLER) {
|
|
23
|
-
console.warn(_logSymbols.default.warning, _chalk.default.yellow(`Unknown NODE_INSTALLER, using detected installer ${system}`));
|
|
24
|
-
}
|
|
25
|
-
return system;
|
|
26
|
-
}
|
|
27
|
-
};
|
|
28
|
-
exports.safeYarnOrNpm = safeYarnOrNpm;
|
|
29
|
-
const yarnOrNpmSpawn = (args, opts)=>(0, _crossSpawnPromise).spawn(safeYarnOrNpm(), args, opts)
|
|
30
|
-
;
|
|
31
|
-
exports.yarnOrNpmSpawn = yarnOrNpmSpawn;
|
|
32
|
-
const hasYarn = ()=>safeYarnOrNpm() === 'yarn'
|
|
33
|
-
;
|
|
34
|
-
exports.hasYarn = hasYarn;
|
|
35
|
-
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy95YXJuLW9yLW5wbS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDcm9zc1NwYXduQXJncywgQ3Jvc3NTcGF3bk9wdGlvbnMsIHNwYXduIH0gZnJvbSAnQG1hbGVwdC9jcm9zcy1zcGF3bi1wcm9taXNlJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgbG9nU3ltYm9scyBmcm9tICdsb2ctc3ltYm9scyc7XG5pbXBvcnQgeWFybk9yTnBtIGZyb20gJ3lhcm4tb3ItbnBtJztcblxuZXhwb3J0IGNvbnN0IHNhZmVZYXJuT3JOcG0gPSAoKSA9PiB7XG4gIGNvbnN0IHN5c3RlbSA9IHlhcm5Pck5wbSgpO1xuICBzd2l0Y2ggKHByb2Nlc3MuZW52Lk5PREVfSU5TVEFMTEVSKSB7XG4gICAgY2FzZSAneWFybic6XG4gICAgY2FzZSAnbnBtJzpcbiAgICAgIHJldHVybiBwcm9jZXNzLmVudi5OT0RFX0lOU1RBTExFUjtcbiAgICBkZWZhdWx0OlxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfSU5TVEFMTEVSKSB7XG4gICAgICAgIGNvbnNvbGUud2Fybihsb2dTeW1ib2xzLndhcm5pbmcsIGNoYWxrLnllbGxvdyhgVW5rbm93biBOT0RFX0lOU1RBTExFUiwgdXNpbmcgZGV0ZWN0ZWQgaW5zdGFsbGVyICR7c3lzdGVtfWApKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzeXN0ZW07XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCB5YXJuT3JOcG1TcGF3biA9IChhcmdzPzogQ3Jvc3NTcGF3bkFyZ3MsIG9wdHM/OiBDcm9zc1NwYXduT3B0aW9ucyk6IFByb21pc2U8c3RyaW5nPiA9PiBzcGF3bihzYWZlWWFybk9yTnBtKCksIGFyZ3MsIG9wdHMpO1xuXG5leHBvcnQgY29uc3QgaGFzWWFybiA9ICgpOiBib29sZWFuID0+IHNhZmVZYXJuT3JOcG0oKSA9PT0gJ3lhcm4nO1xuIl0sIm5hbWVzIjpbInNhZmVZYXJuT3JOcG0iLCJzeXN0ZW0iLCJ5YXJuT3JOcG0iLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9JTlNUQUxMRVIiLCJjb25zb2xlIiwid2FybiIsImxvZ1N5bWJvbHMiLCJ3YXJuaW5nIiwiY2hhbGsiLCJ5ZWxsb3ciLCJ5YXJuT3JOcG1TcGF3biIsImFyZ3MiLCJvcHRzIiwic3Bhd24iLCJoYXNZYXJuIl0sIm1hcHBpbmdzIjoiOzs7OztBQUF5RCxHQUE2QixDQUE3QixrQkFBNkI7QUFDcEUsR0FBTyxDQUFQLE1BQU87QUFDRixHQUFhLENBQWIsV0FBYTtBQUNkLEdBQWEsQ0FBYixVQUFhOzs7Ozs7QUFFNUIsS0FBSyxDQUFDQSxhQUFhLE9BQVMsQ0FBQztJQUNsQyxLQUFLLENBQUNDLE1BQU0sT0FBR0MsVUFBUztJQUN4QixNQUFNLENBQUVDLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDQyxjQUFjO1FBQ2hDLElBQUksQ0FBQyxDQUFNO1FBQ1gsSUFBSSxDQUFDLENBQUs7WUFDUixNQUFNLENBQUNGLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDQyxjQUFjOztZQUVqQyxFQUFFLEVBQUVGLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDQyxjQUFjLEVBQUUsQ0FBQztnQkFDL0JDLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDQyxXQUFVLFNBQUNDLE9BQU8sRUFBRUMsTUFBSyxTQUFDQyxNQUFNLEVBQUUsaURBQWlELEVBQUVWLE1BQU07WUFDMUcsQ0FBQztZQUNELE1BQU0sQ0FBQ0EsTUFBTTs7QUFFbkIsQ0FBQztRQVpZRCxhQUFhLEdBQWJBLGFBQWE7QUFjbkIsS0FBSyxDQUFDWSxjQUFjLElBQUlDLElBQXFCLEVBQUVDLElBQXdCLE9BQXNCQyxrQkFBSyxRQUFDZixhQUFhLElBQUlhLElBQUksRUFBRUMsSUFBSTs7UUFBeEhGLGNBQWMsR0FBZEEsY0FBYztBQUVwQixLQUFLLENBQUNJLE9BQU8sT0FBa0JoQixhQUFhLE9BQU8sQ0FBTTs7UUFBbkRnQixPQUFPLEdBQVBBLE9BQU8ifQ==
|