@electron-forge/maker-base 6.0.0-beta.7 → 6.0.0-beta.70
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/Maker.d.ts +31 -7
- package/dist/Maker.d.ts.map +1 -0
- package/dist/Maker.js +99 -111
- package/index.ts +5 -0
- package/package.json +9 -10
- package/src/Maker.ts +69 -15
- package/test/config-fetcher_spec.ts +42 -0
- package/test/ensure-output_spec.ts +6 -4
- package/test/support_spec.ts +19 -0
- package/test/version_spec.ts +22 -0
- package/tsconfig.json +34 -21
- package/tsconfig.tsbuildinfo +1 -0
- package/doc/assets/css/main.css +0 -865
- package/doc/assets/css/main.css.map +0 -7
- package/doc/assets/images/icons.png +0 -0
- package/doc/assets/images/icons@2x.png +0 -0
- package/doc/assets/images/widgets.png +0 -0
- package/doc/assets/images/widgets@2x.png +0 -0
- package/doc/assets/js/main.js +0 -5
- package/doc/assets/js/search.js +0 -3
- package/doc/classes/maker.html +0 -484
- package/doc/globals.html +0 -168
- package/doc/index.html +0 -237
- package/doc/interfaces/makeroptions.html +0 -315
- package/tslint.json +0 -12
package/dist/Maker.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { ForgeArch,
|
|
1
|
+
import { ForgeArch, ForgePlatform, IForgeMaker, ResolvedForgeConfig } from '@electron-forge/shared-types';
|
|
2
|
+
export declare type EmptyConfig = Record<string, never>;
|
|
2
3
|
export interface MakerOptions {
|
|
3
4
|
/**
|
|
4
5
|
* The directory containing the packaged Electron application
|
|
@@ -24,20 +25,28 @@ export interface MakerOptions {
|
|
|
24
25
|
/**
|
|
25
26
|
* Fully resolved forge configuration, you shouldn't really need this
|
|
26
27
|
*/
|
|
27
|
-
forgeConfig:
|
|
28
|
+
forgeConfig: ResolvedForgeConfig;
|
|
28
29
|
/**
|
|
29
|
-
* The
|
|
30
|
+
* The application's package.json file
|
|
30
31
|
*/
|
|
31
32
|
packageJSON: any;
|
|
32
33
|
}
|
|
33
|
-
export default abstract class Maker<C> {
|
|
34
|
+
export default abstract class Maker<C> implements IForgeMaker {
|
|
35
|
+
private configOrConfigFetcher;
|
|
36
|
+
protected platformsToMakeOn?: string[] | undefined;
|
|
34
37
|
config: C;
|
|
35
|
-
protected providedPlatforms: ForgePlatform[] | undefined;
|
|
36
38
|
abstract name: string;
|
|
37
39
|
abstract defaultPlatforms: ForgePlatform[];
|
|
40
|
+
requiredExternalBinaries: string[];
|
|
41
|
+
/** @internal */
|
|
38
42
|
__isElectronForgeMaker: true;
|
|
39
|
-
|
|
40
|
-
|
|
43
|
+
/**
|
|
44
|
+
* @param configOrConfigFetcher - Either a configuration object for this maker or a simple method that returns such a configuration for a given target architecture
|
|
45
|
+
* @param platformsToMakeOn - If you want this maker to run on platforms different from `defaultPlatforms` you can provide those platforms here
|
|
46
|
+
*/
|
|
47
|
+
constructor(configOrConfigFetcher?: C | ((arch: ForgeArch) => C), platformsToMakeOn?: string[] | undefined);
|
|
48
|
+
get platforms(): ForgePlatform[];
|
|
49
|
+
prepareConfig(targetArch: ForgeArch): void;
|
|
41
50
|
/**
|
|
42
51
|
* Makers must implement this method and return true or false indicating whether
|
|
43
52
|
* this maker can be run on the current platform. Normally this is just a process.platform
|
|
@@ -69,9 +78,24 @@ export default abstract class Maker<C> {
|
|
|
69
78
|
* I.e. If the file already exists it is deleted and the path created
|
|
70
79
|
*/
|
|
71
80
|
ensureFile(file: string): Promise<void>;
|
|
81
|
+
/**
|
|
82
|
+
* Checks if the specified binaries exist, which are required for the maker to be used.
|
|
83
|
+
*/
|
|
84
|
+
externalBinariesExist(): boolean;
|
|
85
|
+
/**
|
|
86
|
+
* Throws an error if any of the binaries don't exist.
|
|
87
|
+
*/
|
|
88
|
+
ensureExternalBinariesExist(): void;
|
|
72
89
|
/**
|
|
73
90
|
* Checks if the given module is installed, used for testing if optional dependencies
|
|
74
91
|
* are installed or not
|
|
75
92
|
*/
|
|
76
93
|
isInstalled(module: string): boolean;
|
|
94
|
+
/**
|
|
95
|
+
* Normalize the given semver-formatted version to a 4-part dot delimited version number without
|
|
96
|
+
* prerelease information for use in Windows apps.
|
|
97
|
+
*/
|
|
98
|
+
normalizeWindowsVersion(version: string): string;
|
|
77
99
|
}
|
|
100
|
+
export { Maker as MakerBase };
|
|
101
|
+
//# sourceMappingURL=Maker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Maker.d.ts","sourceRoot":"","sources":["../src/Maker.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAI1G,oBAAY,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAEhD,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,cAAc,EAAE,aAAa,CAAC;IAC9B;;OAEG;IACH,UAAU,EAAE,SAAS,CAAC;IACtB;;OAEG;IACH,WAAW,EAAE,mBAAmB,CAAC;IACjC;;OAEG;IACH,WAAW,EAAE,GAAG,CAAC;CAClB;AAED,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,KAAK,CAAC,CAAC,CAAE,YAAW,WAAW;IAgB/C,OAAO,CAAC,qBAAqB;IAA0C,SAAS,CAAC,iBAAiB,CAAC;IAfxG,MAAM,EAAG,CAAC,CAAC;IAElB,SAAgB,IAAI,EAAE,MAAM,CAAC;IAE7B,SAAgB,gBAAgB,EAAE,aAAa,EAAE,CAAC;IAE3C,wBAAwB,EAAE,MAAM,EAAE,CAAM;IAE/C,gBAAgB;IAChB,sBAAsB,EAAG,IAAI,CAAC;IAE9B;;;OAGG;gBACiB,qBAAqB,GAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,SAAS,KAAK,CAAC,CAAW,EAAY,iBAAiB,CAAC,sBAAiB;IAQhI,IAAI,SAAS,IAAI,aAAa,EAAE,CAG/B;IAID,aAAa,CAAC,UAAU,EAAE,SAAS,GAAG,IAAI;IAQ1C;;;;;;;;OAQG;IACH,4BAA4B,IAAI,OAAO;IAOvC;;;OAGG;IAEG,IAAI,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAOjD;;OAEG;IAEH;;;;;OAKG;IACG,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOjD;;;;OAIG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO7C;;OAEG;IACH,qBAAqB,IAAI,OAAO;IAIhC;;OAEG;IACH,2BAA2B,IAAI,IAAI;IAMnC;;;OAGG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAUpC;;;OAGG;IACH,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;CAIjD;AAED,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,CAAC"}
|
package/dist/Maker.js
CHANGED
|
@@ -1,57 +1,44 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
2
|
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
|
|
3
|
+
value: true
|
|
5
4
|
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
require("source-map-support/register");
|
|
9
|
-
|
|
10
|
-
var _fsExtra = _interopRequireDefault(require("fs-extra"));
|
|
11
|
-
|
|
5
|
+
exports.MakerBase = exports.default = void 0;
|
|
12
6
|
var _path = _interopRequireDefault(require("path"));
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
7
|
+
var _fsExtra = _interopRequireDefault(require("fs-extra"));
|
|
8
|
+
var _which = _interopRequireDefault(require("which"));
|
|
9
|
+
function _interopRequireDefault(obj) {
|
|
10
|
+
return obj && obj.__esModule ? obj : {
|
|
11
|
+
default: obj
|
|
12
|
+
};
|
|
13
|
+
}
|
|
18
14
|
class Maker {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
configurable: false
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
get platforms() {
|
|
51
|
-
if (this.providedPlatforms) return this.providedPlatforms;
|
|
52
|
-
return this.defaultPlatforms;
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
15
|
+
/**
|
|
16
|
+
* @param configOrConfigFetcher - Either a configuration object for this maker or a simple method that returns such a configuration for a given target architecture
|
|
17
|
+
* @param platformsToMakeOn - If you want this maker to run on platforms different from `defaultPlatforms` you can provide those platforms here
|
|
18
|
+
*/ constructor(configOrConfigFetcher = {}, platformsToMakeOn){
|
|
19
|
+
this.configOrConfigFetcher = configOrConfigFetcher;
|
|
20
|
+
this.platformsToMakeOn = platformsToMakeOn;
|
|
21
|
+
this.requiredExternalBinaries = [];
|
|
22
|
+
Object.defineProperty(this, '__isElectronForgeMaker', {
|
|
23
|
+
value: true,
|
|
24
|
+
enumerable: false,
|
|
25
|
+
configurable: false
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
get platforms() {
|
|
29
|
+
if (this.platformsToMakeOn) return this.platformsToMakeOn;
|
|
30
|
+
return this.defaultPlatforms;
|
|
31
|
+
}
|
|
32
|
+
// TODO: Remove this, it is an eye-sore and is a nasty hack to provide forge
|
|
33
|
+
// v5 style functionality in the new API
|
|
34
|
+
prepareConfig(targetArch) {
|
|
35
|
+
if (typeof this.configOrConfigFetcher === 'function') {
|
|
36
|
+
this.config = this.configOrConfigFetcher(targetArch);
|
|
37
|
+
} else {
|
|
38
|
+
this.config = this.configOrConfigFetcher;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
55
42
|
* Makers must implement this method and return true or false indicating whether
|
|
56
43
|
* this maker can be run on the current platform. Normally this is just a process.platform
|
|
57
44
|
* check but it can be a deeper check for dependencies like fake-root or other
|
|
@@ -59,80 +46,81 @@ class Maker {
|
|
|
59
46
|
*
|
|
60
47
|
* If the issue is a missing dependency you should log out a HELPFUL error message
|
|
61
48
|
* telling the developer exactly what is missing and if possible how to get it.
|
|
62
|
-
*/
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
49
|
+
*/ isSupportedOnCurrentPlatform() {
|
|
50
|
+
if (this.isSupportedOnCurrentPlatform === Maker.prototype.isSupportedOnCurrentPlatform) {
|
|
51
|
+
throw new Error(`Maker ${this.name} did not implement the isSupportedOnCurrentPlatform method`);
|
|
52
|
+
}
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
69
56
|
* Makers must implement this method and return an array of absolute paths
|
|
70
57
|
* to the artifacts generated by your maker
|
|
71
|
-
*/
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
})();
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
58
|
+
*/ // eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
59
|
+
async make(opts) {
|
|
60
|
+
if (this.make === Maker.prototype.make) {
|
|
61
|
+
throw new Error(`Maker ${this.name} did not implement the make method`);
|
|
62
|
+
}
|
|
63
|
+
return [];
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
82
66
|
* Helpers
|
|
83
|
-
*/
|
|
84
|
-
|
|
85
|
-
/**
|
|
67
|
+
*/ /**
|
|
86
68
|
* Ensures the directory exists and is forced to be empty.
|
|
87
69
|
*
|
|
88
70
|
* I.e. If the directory already exists it is deleted and recreated, this
|
|
89
71
|
* is a destructive operation
|
|
90
|
-
*/
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
return _fsExtra.default.mkdirs(dir);
|
|
100
|
-
})();
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
72
|
+
*/ async ensureDirectory(dir) {
|
|
73
|
+
if (await _fsExtra.default.pathExists(dir)) {
|
|
74
|
+
await _fsExtra.default.remove(dir);
|
|
75
|
+
}
|
|
76
|
+
return _fsExtra.default.mkdirs(dir);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
103
79
|
* Ensures the path to the file exists and the file does not exist
|
|
104
80
|
*
|
|
105
81
|
* I.e. If the file already exists it is deleted and the path created
|
|
106
|
-
*/
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
82
|
+
*/ async ensureFile(file) {
|
|
83
|
+
if (await _fsExtra.default.pathExists(file)) {
|
|
84
|
+
await _fsExtra.default.remove(file);
|
|
85
|
+
}
|
|
86
|
+
await _fsExtra.default.mkdirs(_path.default.dirname(file));
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Checks if the specified binaries exist, which are required for the maker to be used.
|
|
90
|
+
*/ externalBinariesExist() {
|
|
91
|
+
return this.requiredExternalBinaries.every((binary)=>_which.default.sync(binary, {
|
|
92
|
+
nothrow: true
|
|
93
|
+
}) !== null
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Throws an error if any of the binaries don't exist.
|
|
98
|
+
*/ ensureExternalBinariesExist() {
|
|
99
|
+
if (!this.externalBinariesExist()) {
|
|
100
|
+
throw new Error(`Cannot make for ${this.name}, the following external binaries need to be installed: ${this.requiredExternalBinaries.join(', ')}`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
119
104
|
* Checks if the given module is installed, used for testing if optional dependencies
|
|
120
105
|
* are installed or not
|
|
121
|
-
*/
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
|
|
106
|
+
*/ isInstalled(module) {
|
|
107
|
+
try {
|
|
108
|
+
require(module);
|
|
109
|
+
return true;
|
|
110
|
+
} catch (e) {
|
|
111
|
+
// Package doesn't exist -- must not be installable on this platform
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Normalize the given semver-formatted version to a 4-part dot delimited version number without
|
|
117
|
+
* prerelease information for use in Windows apps.
|
|
118
|
+
*/ normalizeWindowsVersion(version) {
|
|
119
|
+
const noPrerelease = version.replace(/-.*/, '');
|
|
120
|
+
return `${noPrerelease}.0`;
|
|
132
121
|
}
|
|
133
|
-
}
|
|
134
|
-
|
|
135
122
|
}
|
|
136
|
-
|
|
137
123
|
exports.default = Maker;
|
|
138
|
-
|
|
124
|
+
exports.MakerBase = Maker;
|
|
125
|
+
|
|
126
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9NYWtlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcblxuaW1wb3J0IHsgRm9yZ2VBcmNoLCBGb3JnZVBsYXRmb3JtLCBJRm9yZ2VNYWtlciwgUmVzb2x2ZWRGb3JnZUNvbmZpZyB9IGZyb20gJ0BlbGVjdHJvbi1mb3JnZS9zaGFyZWQtdHlwZXMnO1xuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB3aGljaCBmcm9tICd3aGljaCc7XG5cbmV4cG9ydCB0eXBlIEVtcHR5Q29uZmlnID0gUmVjb3JkPHN0cmluZywgbmV2ZXI+O1xuXG5leHBvcnQgaW50ZXJmYWNlIE1ha2VyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIHBhY2thZ2VkIEVsZWN0cm9uIGFwcGxpY2F0aW9uXG4gICAqL1xuICBkaXI6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBkaXJlY3RvcnkgeW91IHNob3VsZCBwdXQgYWxsIHlvdXIgYXJ0aWZhY3RzIGluIChwb3RlbnRpYWxseSBpbiBzdWIgZm9sZGVycylcbiAgICogTk9URTogdGhpcyBkaXJlY3RvcnkgaXMgbm90IGd1YXJ1bnRlZWQgdG8gYWxyZWFkeSBleGlzdFxuICAgKi9cbiAgbWFrZURpcjogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHJlc29sdmVkIGh1bWFuIGZyaWVuZGx5IG5hbWUgb2YgdGhlIHByb2plY3RcbiAgICovXG4gIGFwcE5hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSB0YXJnZXQgcGxhdGZvcm0geW91IHNob3VsZCBtYWtlIGZvclxuICAgKi9cbiAgdGFyZ2V0UGxhdGZvcm06IEZvcmdlUGxhdGZvcm07XG4gIC8qKlxuICAgKiBUaGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSB5b3Ugc2hvdWxkIG1ha2UgZm9yXG4gICAqL1xuICB0YXJnZXRBcmNoOiBGb3JnZUFyY2g7XG4gIC8qKlxuICAgKiBGdWxseSByZXNvbHZlZCBmb3JnZSBjb25maWd1cmF0aW9uLCB5b3Ugc2hvdWxkbid0IHJlYWxseSBuZWVkIHRoaXNcbiAgICovXG4gIGZvcmdlQ29uZmlnOiBSZXNvbHZlZEZvcmdlQ29uZmlnO1xuICAvKipcbiAgICogVGhlIGFwcGxpY2F0aW9uJ3MgcGFja2FnZS5qc29uIGZpbGVcbiAgICovXG4gIHBhY2thZ2VKU09OOiBhbnk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxufVxuXG5leHBvcnQgZGVmYXVsdCBhYnN0cmFjdCBjbGFzcyBNYWtlcjxDPiBpbXBsZW1lbnRzIElGb3JnZU1ha2VyIHtcbiAgcHVibGljIGNvbmZpZyE6IEM7XG5cbiAgcHVibGljIGFic3RyYWN0IG5hbWU6IHN0cmluZztcblxuICBwdWJsaWMgYWJzdHJhY3QgZGVmYXVsdFBsYXRmb3JtczogRm9yZ2VQbGF0Zm9ybVtdO1xuXG4gIHB1YmxpYyByZXF1aXJlZEV4dGVybmFsQmluYXJpZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBfX2lzRWxlY3Ryb25Gb3JnZU1ha2VyITogdHJ1ZTtcblxuICAvKipcbiAgICogQHBhcmFtIGNvbmZpZ09yQ29uZmlnRmV0Y2hlciAtIEVpdGhlciBhIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciB0aGlzIG1ha2VyIG9yIGEgc2ltcGxlIG1ldGhvZCB0aGF0IHJldHVybnMgc3VjaCBhIGNvbmZpZ3VyYXRpb24gZm9yIGEgZ2l2ZW4gdGFyZ2V0IGFyY2hpdGVjdHVyZVxuICAgKiBAcGFyYW0gcGxhdGZvcm1zVG9NYWtlT24gLSBJZiB5b3Ugd2FudCB0aGlzIG1ha2VyIHRvIHJ1biBvbiBwbGF0Zm9ybXMgZGlmZmVyZW50IGZyb20gYGRlZmF1bHRQbGF0Zm9ybXNgIHlvdSBjYW4gcHJvdmlkZSB0aG9zZSBwbGF0Zm9ybXMgaGVyZVxuICAgKi9cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjb25maWdPckNvbmZpZ0ZldGNoZXI6IEMgfCAoKGFyY2g6IEZvcmdlQXJjaCkgPT4gQykgPSB7fSBhcyBDLCBwcm90ZWN0ZWQgcGxhdGZvcm1zVG9NYWtlT24/OiBGb3JnZVBsYXRmb3JtW10pIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ19faXNFbGVjdHJvbkZvcmdlTWFrZXInLCB7XG4gICAgICB2YWx1ZTogdHJ1ZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICB9KTtcbiAgfVxuXG4gIGdldCBwbGF0Zm9ybXMoKTogRm9yZ2VQbGF0Zm9ybVtdIHtcbiAgICBpZiAodGhpcy5wbGF0Zm9ybXNUb01ha2VPbikgcmV0dXJuIHRoaXMucGxhdGZvcm1zVG9NYWtlT247XG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBsYXRmb3JtcztcbiAgfVxuXG4gIC8vIFRPRE86IFJlbW92ZSB0aGlzLCBpdCBpcyBhbiBleWUtc29yZSBhbmQgaXMgYSBuYXN0eSBoYWNrIHRvIHByb3ZpZGUgZm9yZ2VcbiAgLy8gICAgICAgdjUgc3R5bGUgZnVuY3Rpb25hbGl0eSBpbiB0aGUgbmV3IEFQSVxuICBwcmVwYXJlQ29uZmlnKHRhcmdldEFyY2g6IEZvcmdlQXJjaCk6IHZvaWQge1xuICAgIGlmICh0eXBlb2YgdGhpcy5jb25maWdPckNvbmZpZ0ZldGNoZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuY29uZmlnID0gKHRoaXMuY29uZmlnT3JDb25maWdGZXRjaGVyIGFzIHVua25vd24gYXMgKGFyY2g6IEZvcmdlQXJjaCkgPT4gQykodGFyZ2V0QXJjaCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29uZmlnID0gdGhpcy5jb25maWdPckNvbmZpZ0ZldGNoZXIgYXMgQztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTWFrZXJzIG11c3QgaW1wbGVtZW50IHRoaXMgbWV0aG9kIGFuZCByZXR1cm4gdHJ1ZSBvciBmYWxzZSBpbmRpY2F0aW5nIHdoZXRoZXJcbiAgICogdGhpcyBtYWtlciBjYW4gYmUgcnVuIG9uIHRoZSBjdXJyZW50IHBsYXRmb3JtLiAgTm9ybWFsbHkgdGhpcyBpcyBqdXN0IGEgcHJvY2Vzcy5wbGF0Zm9ybVxuICAgKiBjaGVjayBidXQgaXQgY2FuIGJlIGEgZGVlcGVyIGNoZWNrIGZvciBkZXBlbmRlbmNpZXMgbGlrZSBmYWtlLXJvb3Qgb3Igb3RoZXJcbiAgICogcmVxdWlyZWQgZXh0ZXJuYWwgYnVpbGQgdG9vbHMuXG4gICAqXG4gICAqIElmIHRoZSBpc3N1ZSBpcyBhIG1pc3NpbmcgZGVwZW5kZW5jeSB5b3Ugc2hvdWxkIGxvZyBvdXQgYSBIRUxQRlVMIGVycm9yIG1lc3NhZ2VcbiAgICogdGVsbGluZyB0aGUgZGV2ZWxvcGVyIGV4YWN0bHkgd2hhdCBpcyBtaXNzaW5nIGFuZCBpZiBwb3NzaWJsZSBob3cgdG8gZ2V0IGl0LlxuICAgKi9cbiAgaXNTdXBwb3J0ZWRPbkN1cnJlbnRQbGF0Zm9ybSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5pc1N1cHBvcnRlZE9uQ3VycmVudFBsYXRmb3JtID09PSBNYWtlci5wcm90b3R5cGUuaXNTdXBwb3J0ZWRPbkN1cnJlbnRQbGF0Zm9ybSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNYWtlciAke3RoaXMubmFtZX0gZGlkIG5vdCBpbXBsZW1lbnQgdGhlIGlzU3VwcG9ydGVkT25DdXJyZW50UGxhdGZvcm0gbWV0aG9kYCk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2VycyBtdXN0IGltcGxlbWVudCB0aGlzIG1ldGhvZCBhbmQgcmV0dXJuIGFuIGFycmF5IG9mIGFic29sdXRlIHBhdGhzXG4gICAqIHRvIHRoZSBhcnRpZmFjdHMgZ2VuZXJhdGVkIGJ5IHlvdXIgbWFrZXJcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgYXN5bmMgbWFrZShvcHRzOiBNYWtlck9wdGlvbnMpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgaWYgKHRoaXMubWFrZSA9PT0gTWFrZXIucHJvdG90eXBlLm1ha2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTWFrZXIgJHt0aGlzLm5hbWV9IGRpZCBub3QgaW1wbGVtZW50IHRoZSBtYWtlIG1ldGhvZGApO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyc1xuICAgKi9cblxuICAvKipcbiAgICogRW5zdXJlcyB0aGUgZGlyZWN0b3J5IGV4aXN0cyBhbmQgaXMgZm9yY2VkIHRvIGJlIGVtcHR5LlxuICAgKlxuICAgKiBJLmUuIElmIHRoZSBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMgaXQgaXMgZGVsZXRlZCBhbmQgcmVjcmVhdGVkLCB0aGlzXG4gICAqIGlzIGEgZGVzdHJ1Y3RpdmUgb3BlcmF0aW9uXG4gICAqL1xuICBhc3luYyBlbnN1cmVEaXJlY3RvcnkoZGlyOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoYXdhaXQgZnMucGF0aEV4aXN0cyhkaXIpKSB7XG4gICAgICBhd2FpdCBmcy5yZW1vdmUoZGlyKTtcbiAgICB9XG4gICAgcmV0dXJuIGZzLm1rZGlycyhkaXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuc3VyZXMgdGhlIHBhdGggdG8gdGhlIGZpbGUgZXhpc3RzIGFuZCB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdFxuICAgKlxuICAgKiBJLmUuIElmIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzIGl0IGlzIGRlbGV0ZWQgYW5kIHRoZSBwYXRoIGNyZWF0ZWRcbiAgICovXG4gIGFzeW5jIGVuc3VyZUZpbGUoZmlsZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGF3YWl0IGZzLnBhdGhFeGlzdHMoZmlsZSkpIHtcbiAgICAgIGF3YWl0IGZzLnJlbW92ZShmaWxlKTtcbiAgICB9XG4gICAgYXdhaXQgZnMubWtkaXJzKHBhdGguZGlybmFtZShmaWxlKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBzcGVjaWZpZWQgYmluYXJpZXMgZXhpc3QsIHdoaWNoIGFyZSByZXF1aXJlZCBmb3IgdGhlIG1ha2VyIHRvIGJlIHVzZWQuXG4gICAqL1xuICBleHRlcm5hbEJpbmFyaWVzRXhpc3QoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWlyZWRFeHRlcm5hbEJpbmFyaWVzLmV2ZXJ5KChiaW5hcnkpID0+IHdoaWNoLnN5bmMoYmluYXJ5LCB7IG5vdGhyb3c6IHRydWUgfSkgIT09IG51bGwpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRocm93cyBhbiBlcnJvciBpZiBhbnkgb2YgdGhlIGJpbmFyaWVzIGRvbid0IGV4aXN0LlxuICAgKi9cbiAgZW5zdXJlRXh0ZXJuYWxCaW5hcmllc0V4aXN0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5leHRlcm5hbEJpbmFyaWVzRXhpc3QoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgbWFrZSBmb3IgJHt0aGlzLm5hbWV9LCB0aGUgZm9sbG93aW5nIGV4dGVybmFsIGJpbmFyaWVzIG5lZWQgdG8gYmUgaW5zdGFsbGVkOiAke3RoaXMucmVxdWlyZWRFeHRlcm5hbEJpbmFyaWVzLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gbW9kdWxlIGlzIGluc3RhbGxlZCwgdXNlZCBmb3IgdGVzdGluZyBpZiBvcHRpb25hbCBkZXBlbmRlbmNpZXNcbiAgICogYXJlIGluc3RhbGxlZCBvciBub3RcbiAgICovXG4gIGlzSW5zdGFsbGVkKG1vZHVsZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIHJlcXVpcmUobW9kdWxlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIFBhY2thZ2UgZG9lc24ndCBleGlzdCAtLSBtdXN0IG5vdCBiZSBpbnN0YWxsYWJsZSBvbiB0aGlzIHBsYXRmb3JtXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE5vcm1hbGl6ZSB0aGUgZ2l2ZW4gc2VtdmVyLWZvcm1hdHRlZCB2ZXJzaW9uIHRvIGEgNC1wYXJ0IGRvdCBkZWxpbWl0ZWQgdmVyc2lvbiBudW1iZXIgd2l0aG91dFxuICAgKiBwcmVyZWxlYXNlIGluZm9ybWF0aW9uIGZvciB1c2UgaW4gV2luZG93cyBhcHBzLlxuICAgKi9cbiAgbm9ybWFsaXplV2luZG93c1ZlcnNpb24odmVyc2lvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBub1ByZXJlbGVhc2UgPSB2ZXJzaW9uLnJlcGxhY2UoLy0uKi8sICcnKTtcbiAgICByZXR1cm4gYCR7bm9QcmVyZWxlYXNlfS4wYDtcbiAgfVxufVxuXG5leHBvcnQgeyBNYWtlciBhcyBNYWtlckJhc2UgfTtcbiJdLCJuYW1lcyI6WyJNYWtlciIsImNvbmZpZ09yQ29uZmlnRmV0Y2hlciIsInBsYXRmb3Jtc1RvTWFrZU9uIiwicmVxdWlyZWRFeHRlcm5hbEJpbmFyaWVzIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJwbGF0Zm9ybXMiLCJkZWZhdWx0UGxhdGZvcm1zIiwicHJlcGFyZUNvbmZpZyIsInRhcmdldEFyY2giLCJjb25maWciLCJpc1N1cHBvcnRlZE9uQ3VycmVudFBsYXRmb3JtIiwicHJvdG90eXBlIiwiRXJyb3IiLCJuYW1lIiwibWFrZSIsIm9wdHMiLCJlbnN1cmVEaXJlY3RvcnkiLCJkaXIiLCJmcyIsInBhdGhFeGlzdHMiLCJyZW1vdmUiLCJta2RpcnMiLCJlbnN1cmVGaWxlIiwiZmlsZSIsInBhdGgiLCJkaXJuYW1lIiwiZXh0ZXJuYWxCaW5hcmllc0V4aXN0IiwiZXZlcnkiLCJiaW5hcnkiLCJ3aGljaCIsInN5bmMiLCJub3Rocm93IiwiZW5zdXJlRXh0ZXJuYWxCaW5hcmllc0V4aXN0Iiwiam9pbiIsImlzSW5zdGFsbGVkIiwibW9kdWxlIiwicmVxdWlyZSIsImUiLCJub3JtYWxpemVXaW5kb3dzVmVyc2lvbiIsInZlcnNpb24iLCJub1ByZXJlbGVhc2UiLCJyZXBsYWNlIiwiTWFrZXJCYXNlIl0sIm1hcHBpbmdzIjoiOzs7OztBQUFpQixHQUFNLENBQU4sS0FBTTtBQUdSLEdBQVUsQ0FBVixRQUFVO0FBQ1AsR0FBTyxDQUFQLE1BQU87Ozs7OztNQW9DS0EsS0FBSztJQVlqQyxFQUdHLEFBSEg7OztHQUdHLEFBSEgsRUFHRyxhQUNpQkMscUJBQW1ELEdBQUcsQ0FBQyxDQUFDLEVBQWlCQyxpQkFBbUMsQ0FBRSxDQUFDO2FBQS9HRCxxQkFBbUQsR0FBbkRBLHFCQUFtRDthQUFzQkMsaUJBQW1DLEdBQW5DQSxpQkFBbUM7UUFoQm5ILElBc0lkLENBL0hRQyx3QkFBd0IsR0FBYSxDQUFDLENBQUM7UUFVNUNDLE1BQU0sQ0FBQ0MsY0FBYyxDQUFDLElBQUksRUFBRSxDQUF3Qix5QkFBRSxDQUFDO1lBQ3JEQyxLQUFLLEVBQUUsSUFBSTtZQUNYQyxVQUFVLEVBQUUsS0FBSztZQUNqQkMsWUFBWSxFQUFFLEtBQUs7UUFDckIsQ0FBQztJQUNILENBQUM7UUFFR0MsU0FBUyxHQUFvQixDQUFDO1FBQ2hDLEVBQUUsRUFBRSxJQUFJLENBQUNQLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUNBLGlCQUFpQjtRQUN6RCxNQUFNLENBQUMsSUFBSSxDQUFDUSxnQkFBZ0I7SUFDOUIsQ0FBQztJQUVELEVBQTRFLEFBQTVFLDBFQUE0RTtJQUM1RSxFQUE4QyxBQUE5Qyw0Q0FBOEM7SUFDOUNDLGFBQWEsQ0FBQ0MsVUFBcUIsRUFBUSxDQUFDO1FBQzFDLEVBQUUsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDWCxxQkFBcUIsS0FBSyxDQUFVLFdBQUUsQ0FBQztZQUNyRCxJQUFJLENBQUNZLE1BQU0sR0FBSSxJQUFJLENBQUNaLHFCQUFxQixDQUF1Q1csVUFBVTtRQUM1RixDQUFDLE1BQU0sQ0FBQztZ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
|
package/index.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
// ⚠️ AUTOGENERATED ⚠️ AUTOGENERATED ⚠️ AUTOGENERATED ⚠️
|
|
2
|
+
// This file was automatically generated by `tools/gen-ts-glue.ts`. Do not modify directly if you want to keep your changes.
|
|
3
|
+
export * from "./src/Maker";
|
|
4
|
+
import defaultExport from "./src/Maker";
|
|
5
|
+
export default defaultExport;
|
package/package.json
CHANGED
|
@@ -1,24 +1,23 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@electron-forge/maker-base",
|
|
3
|
-
"version": "6.0.0-beta.
|
|
3
|
+
"version": "6.0.0-beta.70",
|
|
4
4
|
"description": "Base maker for Electron Forge",
|
|
5
|
-
"repository": "https://github.com/electron
|
|
5
|
+
"repository": "https://github.com/electron/forge",
|
|
6
6
|
"author": "Samuel Attard",
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"main": "dist/Maker.js",
|
|
9
9
|
"typings": "dist/Maker.d.ts",
|
|
10
|
-
"scripts": {
|
|
11
|
-
"test": "mocha --require ts-node/register test/**/*_spec.ts test/**/**/*_spec.ts --opts ../../../mocha.opts"
|
|
12
|
-
},
|
|
13
10
|
"devDependencies": {
|
|
14
|
-
"chai": "^4.
|
|
15
|
-
"mocha": "^
|
|
11
|
+
"chai": "^4.3.3",
|
|
12
|
+
"mocha": "^9.0.1",
|
|
13
|
+
"sinon": "^13.0.1"
|
|
16
14
|
},
|
|
17
15
|
"engines": {
|
|
18
|
-
"node": ">=
|
|
16
|
+
"node": ">= 14.17.5"
|
|
19
17
|
},
|
|
20
18
|
"dependencies": {
|
|
21
|
-
"@electron-forge/shared-types": "6.0.0-beta.
|
|
22
|
-
"fs-extra": "^
|
|
19
|
+
"@electron-forge/shared-types": "6.0.0-beta.70",
|
|
20
|
+
"fs-extra": "^10.0.0",
|
|
21
|
+
"which": "^2.0.2"
|
|
23
22
|
}
|
|
24
23
|
}
|
package/src/Maker.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
import path from 'path';
|
|
2
2
|
|
|
3
|
-
import { ForgeArch,
|
|
3
|
+
import { ForgeArch, ForgePlatform, IForgeMaker, ResolvedForgeConfig } from '@electron-forge/shared-types';
|
|
4
4
|
import fs from 'fs-extra';
|
|
5
|
-
import
|
|
5
|
+
import which from 'which';
|
|
6
|
+
|
|
7
|
+
export type EmptyConfig = Record<string, never>;
|
|
6
8
|
|
|
7
9
|
export interface MakerOptions {
|
|
8
10
|
/**
|
|
@@ -29,21 +31,30 @@ export interface MakerOptions {
|
|
|
29
31
|
/**
|
|
30
32
|
* Fully resolved forge configuration, you shouldn't really need this
|
|
31
33
|
*/
|
|
32
|
-
forgeConfig:
|
|
34
|
+
forgeConfig: ResolvedForgeConfig;
|
|
33
35
|
/**
|
|
34
|
-
* The
|
|
36
|
+
* The application's package.json file
|
|
35
37
|
*/
|
|
36
|
-
packageJSON: any;
|
|
38
|
+
packageJSON: any; // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
37
39
|
}
|
|
38
40
|
|
|
39
|
-
export default abstract class Maker<C> {
|
|
41
|
+
export default abstract class Maker<C> implements IForgeMaker {
|
|
42
|
+
public config!: C;
|
|
43
|
+
|
|
40
44
|
public abstract name: string;
|
|
45
|
+
|
|
41
46
|
public abstract defaultPlatforms: ForgePlatform[];
|
|
42
|
-
|
|
47
|
+
|
|
48
|
+
public requiredExternalBinaries: string[] = [];
|
|
49
|
+
|
|
50
|
+
/** @internal */
|
|
43
51
|
__isElectronForgeMaker!: true;
|
|
44
|
-
/* tslint:enable variable-name */
|
|
45
52
|
|
|
46
|
-
|
|
53
|
+
/**
|
|
54
|
+
* @param configOrConfigFetcher - Either a configuration object for this maker or a simple method that returns such a configuration for a given target architecture
|
|
55
|
+
* @param platformsToMakeOn - If you want this maker to run on platforms different from `defaultPlatforms` you can provide those platforms here
|
|
56
|
+
*/
|
|
57
|
+
constructor(private configOrConfigFetcher: C | ((arch: ForgeArch) => C) = {} as C, protected platformsToMakeOn?: ForgePlatform[]) {
|
|
47
58
|
Object.defineProperty(this, '__isElectronForgeMaker', {
|
|
48
59
|
value: true,
|
|
49
60
|
enumerable: false,
|
|
@@ -51,11 +62,21 @@ export default abstract class Maker<C> {
|
|
|
51
62
|
});
|
|
52
63
|
}
|
|
53
64
|
|
|
54
|
-
get platforms() {
|
|
55
|
-
if (this.
|
|
65
|
+
get platforms(): ForgePlatform[] {
|
|
66
|
+
if (this.platformsToMakeOn) return this.platformsToMakeOn;
|
|
56
67
|
return this.defaultPlatforms;
|
|
57
68
|
}
|
|
58
69
|
|
|
70
|
+
// TODO: Remove this, it is an eye-sore and is a nasty hack to provide forge
|
|
71
|
+
// v5 style functionality in the new API
|
|
72
|
+
prepareConfig(targetArch: ForgeArch): void {
|
|
73
|
+
if (typeof this.configOrConfigFetcher === 'function') {
|
|
74
|
+
this.config = (this.configOrConfigFetcher as unknown as (arch: ForgeArch) => C)(targetArch);
|
|
75
|
+
} else {
|
|
76
|
+
this.config = this.configOrConfigFetcher as C;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
59
80
|
/**
|
|
60
81
|
* Makers must implement this method and return true or false indicating whether
|
|
61
82
|
* this maker can be run on the current platform. Normally this is just a process.platform
|
|
@@ -66,18 +87,24 @@ export default abstract class Maker<C> {
|
|
|
66
87
|
* telling the developer exactly what is missing and if possible how to get it.
|
|
67
88
|
*/
|
|
68
89
|
isSupportedOnCurrentPlatform(): boolean {
|
|
69
|
-
|
|
90
|
+
if (this.isSupportedOnCurrentPlatform === Maker.prototype.isSupportedOnCurrentPlatform) {
|
|
91
|
+
throw new Error(`Maker ${this.name} did not implement the isSupportedOnCurrentPlatform method`);
|
|
92
|
+
}
|
|
93
|
+
return true;
|
|
70
94
|
}
|
|
71
95
|
|
|
72
96
|
/**
|
|
73
97
|
* Makers must implement this method and return an array of absolute paths
|
|
74
98
|
* to the artifacts generated by your maker
|
|
75
99
|
*/
|
|
100
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
76
101
|
async make(opts: MakerOptions): Promise<string[]> {
|
|
77
|
-
|
|
102
|
+
if (this.make === Maker.prototype.make) {
|
|
103
|
+
throw new Error(`Maker ${this.name} did not implement the make method`);
|
|
104
|
+
}
|
|
105
|
+
return [];
|
|
78
106
|
}
|
|
79
107
|
|
|
80
|
-
|
|
81
108
|
/**
|
|
82
109
|
* Helpers
|
|
83
110
|
*/
|
|
@@ -107,6 +134,22 @@ export default abstract class Maker<C> {
|
|
|
107
134
|
await fs.mkdirs(path.dirname(file));
|
|
108
135
|
}
|
|
109
136
|
|
|
137
|
+
/**
|
|
138
|
+
* Checks if the specified binaries exist, which are required for the maker to be used.
|
|
139
|
+
*/
|
|
140
|
+
externalBinariesExist(): boolean {
|
|
141
|
+
return this.requiredExternalBinaries.every((binary) => which.sync(binary, { nothrow: true }) !== null);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Throws an error if any of the binaries don't exist.
|
|
146
|
+
*/
|
|
147
|
+
ensureExternalBinariesExist(): void {
|
|
148
|
+
if (!this.externalBinariesExist()) {
|
|
149
|
+
throw new Error(`Cannot make for ${this.name}, the following external binaries need to be installed: ${this.requiredExternalBinaries.join(', ')}`);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
110
153
|
/**
|
|
111
154
|
* Checks if the given module is installed, used for testing if optional dependencies
|
|
112
155
|
* are installed or not
|
|
@@ -120,4 +163,15 @@ export default abstract class Maker<C> {
|
|
|
120
163
|
return false;
|
|
121
164
|
}
|
|
122
165
|
}
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Normalize the given semver-formatted version to a 4-part dot delimited version number without
|
|
169
|
+
* prerelease information for use in Windows apps.
|
|
170
|
+
*/
|
|
171
|
+
normalizeWindowsVersion(version: string): string {
|
|
172
|
+
const noPrerelease = version.replace(/-.*/, '');
|
|
173
|
+
return `${noPrerelease}.0`;
|
|
174
|
+
}
|
|
123
175
|
}
|
|
176
|
+
|
|
177
|
+
export { Maker as MakerBase };
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { expect } from 'chai';
|
|
2
|
+
import { stub } from 'sinon';
|
|
3
|
+
|
|
4
|
+
import { MakerBase } from '../src/Maker';
|
|
5
|
+
|
|
6
|
+
class MakerImpl extends MakerBase<{ a: number }> {
|
|
7
|
+
name = 'test';
|
|
8
|
+
|
|
9
|
+
defaultPlatforms = [];
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
describe('prepareConfig', () => {
|
|
13
|
+
it('should call the provided configure function', () => {
|
|
14
|
+
const fetcher = stub();
|
|
15
|
+
fetcher.returns({
|
|
16
|
+
a: 123,
|
|
17
|
+
});
|
|
18
|
+
const maker = new MakerImpl(fetcher, []);
|
|
19
|
+
expect(maker.config).to.be.undefined;
|
|
20
|
+
expect(fetcher.callCount).to.equal(0);
|
|
21
|
+
maker.prepareConfig('x64');
|
|
22
|
+
expect(maker.config).to.deep.equal({
|
|
23
|
+
a: 123,
|
|
24
|
+
});
|
|
25
|
+
expect(fetcher.callCount).to.equal(1);
|
|
26
|
+
expect(fetcher.firstCall.args).to.deep.equal(['x64']);
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
it('should hand through the provided object', () => {
|
|
30
|
+
const maker = new MakerImpl(
|
|
31
|
+
{
|
|
32
|
+
a: 234,
|
|
33
|
+
},
|
|
34
|
+
[]
|
|
35
|
+
);
|
|
36
|
+
expect(maker.config).to.be.undefined;
|
|
37
|
+
maker.prepareConfig('x64');
|
|
38
|
+
expect(maker.config).to.deep.equal({
|
|
39
|
+
a: 234,
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
});
|
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
import { expect } from 'chai';
|
|
2
|
-
import fs from 'fs-extra';
|
|
3
1
|
import os from 'os';
|
|
4
2
|
import path from 'path';
|
|
5
3
|
|
|
6
|
-
import
|
|
4
|
+
import { expect } from 'chai';
|
|
5
|
+
import fs from 'fs-extra';
|
|
6
|
+
|
|
7
|
+
import { EmptyConfig, MakerBase } from '../src/Maker';
|
|
7
8
|
|
|
8
|
-
class MakerImpl extends MakerBase<
|
|
9
|
+
class MakerImpl extends MakerBase<EmptyConfig> {
|
|
9
10
|
name = 'test';
|
|
11
|
+
|
|
10
12
|
defaultPlatforms = [];
|
|
11
13
|
}
|
|
12
14
|
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { expect } from 'chai';
|
|
2
|
+
|
|
3
|
+
import { EmptyConfig, MakerBase } from '../src/Maker';
|
|
4
|
+
|
|
5
|
+
class MakerImpl extends MakerBase<EmptyConfig> {
|
|
6
|
+
name = 'test';
|
|
7
|
+
|
|
8
|
+
defaultPlatforms = [];
|
|
9
|
+
|
|
10
|
+
requiredExternalBinaries = ['bash', 'nonexistent'];
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
describe('ensureExternalBinariesExist', () => {
|
|
14
|
+
const maker = new MakerImpl({}, []);
|
|
15
|
+
|
|
16
|
+
it('throws an error when one of the binaries does not exist', () => {
|
|
17
|
+
expect(() => maker.ensureExternalBinariesExist()).to.throw(/the following external binaries need to be installed: bash, nonexistent/);
|
|
18
|
+
});
|
|
19
|
+
});
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { expect } from 'chai';
|
|
2
|
+
|
|
3
|
+
import { EmptyConfig, MakerBase } from '../src/Maker';
|
|
4
|
+
|
|
5
|
+
class MakerImpl extends MakerBase<EmptyConfig> {
|
|
6
|
+
name = 'test';
|
|
7
|
+
|
|
8
|
+
defaultPlatforms = [];
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
describe('normalizeWindowsVersion', () => {
|
|
12
|
+
const maker = new MakerImpl({}, []);
|
|
13
|
+
|
|
14
|
+
it('removes everything after the dash', () => {
|
|
15
|
+
for (const version of ['1.0.0-alpha', '1.0.0-alpha.1', '1.0.0-0.3.7', '1.0.0-x.7.z.92']) {
|
|
16
|
+
expect(maker.normalizeWindowsVersion(version)).to.equal('1.0.0.0');
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
it('does not truncate the version when there is no dash', () => {
|
|
20
|
+
expect(maker.normalizeWindowsVersion('2.0.0')).to.equal('2.0.0.0');
|
|
21
|
+
});
|
|
22
|
+
});
|