@electron/rebuild 0.0.0 → 3.2.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/README.md +158 -0
  2. package/lib/src/arch.d.ts +16 -0
  3. package/lib/src/arch.js +36 -0
  4. package/lib/src/arch.js.map +1 -0
  5. package/lib/src/cache.d.ts +13 -0
  6. package/lib/src/cache.js +153 -0
  7. package/lib/src/cache.js.map +1 -0
  8. package/lib/src/clang-fetcher.d.ts +4 -0
  9. package/lib/src/clang-fetcher.js +145 -0
  10. package/lib/src/clang-fetcher.js.map +1 -0
  11. package/lib/src/cli.d.ts +2 -0
  12. package/lib/src/cli.js +168 -0
  13. package/lib/src/cli.js.map +1 -0
  14. package/lib/src/constants.d.ts +1 -0
  15. package/lib/src/constants.js +30 -0
  16. package/lib/src/constants.js.map +1 -0
  17. package/lib/src/electron-locator.d.ts +1 -0
  18. package/lib/src/electron-locator.js +56 -0
  19. package/lib/src/electron-locator.js.map +1 -0
  20. package/lib/src/fetcher.d.ts +2 -0
  21. package/lib/src/fetcher.js +36 -0
  22. package/lib/src/fetcher.js.map +1 -0
  23. package/lib/src/main.d.ts +3 -0
  24. package/lib/src/main.js +10 -0
  25. package/lib/src/main.js.map +1 -0
  26. package/lib/src/module-rebuilder.d.ts +27 -0
  27. package/lib/src/module-rebuilder.js +132 -0
  28. package/lib/src/module-rebuilder.js.map +1 -0
  29. package/lib/src/module-type/index.d.ts +17 -0
  30. package/lib/src/module-type/index.js +56 -0
  31. package/lib/src/module-type/index.js.map +1 -0
  32. package/lib/src/module-type/node-gyp.d.ts +7 -0
  33. package/lib/src/module-type/node-gyp.js +149 -0
  34. package/lib/src/module-type/node-gyp.js.map +1 -0
  35. package/lib/src/module-type/prebuild-install.d.ts +12 -0
  36. package/lib/src/module-type/prebuild-install.js +81 -0
  37. package/lib/src/module-type/prebuild-install.js.map +1 -0
  38. package/lib/src/module-type/prebuildify.d.ts +11 -0
  39. package/lib/src/module-type/prebuildify.js +68 -0
  40. package/lib/src/module-type/prebuildify.js.map +1 -0
  41. package/lib/src/module-walker.d.ts +17 -0
  42. package/lib/src/module-walker.js +112 -0
  43. package/lib/src/module-walker.js.map +1 -0
  44. package/lib/src/node-api.d.ts +8 -0
  45. package/lib/src/node-api.js +31 -0
  46. package/lib/src/node-api.js.map +1 -0
  47. package/lib/src/prebuild-shim.d.ts +0 -0
  48. package/lib/src/prebuild-shim.js +6 -0
  49. package/lib/src/prebuild-shim.js.map +1 -0
  50. package/lib/src/read-package-json.d.ts +1 -0
  51. package/lib/src/read-package-json.js +44 -0
  52. package/lib/src/read-package-json.js.map +1 -0
  53. package/lib/src/rebuild.d.ts +56 -0
  54. package/lib/src/rebuild.js +166 -0
  55. package/lib/src/rebuild.js.map +1 -0
  56. package/lib/src/search-module.d.ts +23 -0
  57. package/lib/src/search-module.js +97 -0
  58. package/lib/src/search-module.js.map +1 -0
  59. package/lib/src/sysroot-fetcher.d.ts +1 -0
  60. package/lib/src/sysroot-fetcher.js +74 -0
  61. package/lib/src/sysroot-fetcher.js.map +1 -0
  62. package/lib/src/types.d.ts +26 -0
  63. package/lib/src/types.js +9 -0
  64. package/lib/src/types.js.map +1 -0
  65. package/lib/test/arch.d.ts +1 -0
  66. package/lib/test/arch.js +37 -0
  67. package/lib/test/arch.js.map +1 -0
  68. package/lib/test/electron-locator.d.ts +1 -0
  69. package/lib/test/electron-locator.js +70 -0
  70. package/lib/test/electron-locator.js.map +1 -0
  71. package/lib/test/helpers/electron-version.d.ts +1 -0
  72. package/lib/test/helpers/electron-version.js +43 -0
  73. package/lib/test/helpers/electron-version.js.map +1 -0
  74. package/lib/test/helpers/module-setup.d.ts +5 -0
  75. package/lib/test/helpers/module-setup.js +35 -0
  76. package/lib/test/helpers/module-setup.js.map +1 -0
  77. package/lib/test/helpers/rebuild.d.ts +7 -0
  78. package/lib/test/helpers/rebuild.js +42 -0
  79. package/lib/test/helpers/rebuild.js.map +1 -0
  80. package/lib/test/module-type-node-gyp.d.ts +1 -0
  81. package/lib/test/module-type-node-gyp.js +57 -0
  82. package/lib/test/module-type-node-gyp.js.map +1 -0
  83. package/lib/test/module-type-prebuild-install.d.ts +1 -0
  84. package/lib/test/module-type-prebuild-install.js +82 -0
  85. package/lib/test/module-type-prebuild-install.js.map +1 -0
  86. package/lib/test/module-type-prebuildify.d.ts +1 -0
  87. package/lib/test/module-type-prebuildify.js +102 -0
  88. package/lib/test/module-type-prebuildify.js.map +1 -0
  89. package/lib/test/read-package-json.d.ts +1 -0
  90. package/lib/test/read-package-json.js +35 -0
  91. package/lib/test/read-package-json.js.map +1 -0
  92. package/lib/test/rebuild-yarnworkspace.d.ts +1 -0
  93. package/lib/test/rebuild-yarnworkspace.js +69 -0
  94. package/lib/test/rebuild-yarnworkspace.js.map +1 -0
  95. package/lib/test/rebuild.d.ts +1 -0
  96. package/lib/test/rebuild.js +192 -0
  97. package/lib/test/rebuild.js.map +1 -0
  98. package/lib/test/search-module.d.ts +1 -0
  99. package/lib/test/search-module.js +65 -0
  100. package/lib/test/search-module.js.map +1 -0
  101. package/package.json +127 -1
package/README.md ADDED
@@ -0,0 +1,158 @@
1
+ ## Electron Rebuild
2
+
3
+ [![CircleCI](https://circleci.com/gh/electron/rebuild.svg?style=svg)](https://circleci.com/gh/electron/rebuild)
4
+ [![NPM](https://img.shields.io/npm/v/@electron/rebuild.svg?style=flat)](https://npm.im/@electron/rebuild)
5
+ [![Coverage Status](https://codecov.io/gh/electron/rebuild/branch/main/graph/badge.svg)](https://codecov.io/gh/electron/rebuild)
6
+
7
+ This executable rebuilds native Node.js modules against the version of Node.js
8
+ that your Electron project is using. This allows you to use native Node.js
9
+ modules in Electron apps without your system version of Node.js matching exactly
10
+ (which is often not the case, and sometimes not even possible).
11
+
12
+ ### How does it work?
13
+
14
+ Install the package with `--save-dev`:
15
+
16
+ ```sh
17
+ npm install --save-dev @electron/rebuild
18
+ ```
19
+
20
+ Then, whenever you install a new npm package, rerun electron-rebuild:
21
+
22
+ ```sh
23
+ $(npm bin)/electron-rebuild
24
+ ```
25
+
26
+ Or if you're on Windows:
27
+
28
+ ```sh
29
+ .\node_modules\.bin\electron-rebuild.cmd
30
+ ```
31
+ If you have a good node-gyp config but you see an error about a missing element on Windows like `Could not load the Visual C++ component "VCBuild.exe"`, try to launch electron-rebuild in an npm script:
32
+
33
+ ```json
34
+ "scripts": {
35
+ "rebuild": "electron-rebuild -f -w yourmodule"
36
+ }
37
+ ```
38
+
39
+ and then
40
+
41
+ ```sh
42
+ npm run rebuild
43
+ ```
44
+
45
+ ### What are the requirements?
46
+
47
+ Node v12.13.0 or higher is required. Building native modules from source uses
48
+ [`node-gyp`](https://github.com/nodejs/node-gyp#installation), refer to the link for its
49
+ installation/runtime requirements.
50
+
51
+ ### CLI Arguments
52
+
53
+ ```
54
+ Usage: electron-rebuild --version [version] --module-dir [path]
55
+
56
+ Options:
57
+ -h, --help Show help [boolean]
58
+ -v, --version The version of Electron to build against
59
+ -f, --force Force rebuilding modules, even if we would skip
60
+ it otherwise
61
+ -a, --arch Override the target architecture to something
62
+ other than your system's
63
+ -m, --module-dir The path to the app directory to rebuild
64
+ -w, --which-module A specific module to build, or comma separated
65
+ list of modules. Modules will only be rebuilt if they
66
+ also match the types of dependencies being rebuilt
67
+ (see --types).
68
+ -e, --electron-prebuilt-dir The path to the prebuilt electron module
69
+ -d, --dist-url Custom header tarball URL
70
+ -t, --types The types of dependencies to rebuild. Comma
71
+ separated list of "prod", "dev" and "optional".
72
+ Default is "prod,optional"
73
+ -p, --parallel Rebuild in parallel, this is enabled by default
74
+ on macOS and Linux
75
+ -s, --sequential Rebuild modules sequentially, this is enabled by
76
+ default on Windows
77
+ -o, --only Only build specified module, or comma separated
78
+ list of modules. All others are ignored.
79
+ -b, --debug Build debug version of modules
80
+ --prebuild-tag-prefix GitHub tag prefix passed to prebuild-install.
81
+ Default is "v"
82
+
83
+ Copyright 2016
84
+ ```
85
+
86
+ ### How can I use this with [Electron Forge](https://github.com/electron/forge)?
87
+
88
+ This package is automatically used with Electron Forge when packaging an Electron app.
89
+
90
+ ### How can I integrate this into [Electron Packager](https://github.com/electron/electron-packager)?
91
+
92
+ electron-rebuild provides a function compatible with the [`afterCopy` hook](https://electron.github.io/electron-packager/main/interfaces/electronpackager.options.html#aftercopy)
93
+ for Electron Packager. For example:
94
+
95
+ ```javascript
96
+ import packager from 'electron-packager';
97
+ import rebuild from '@electron/rebuild';
98
+
99
+ packager({
100
+ // … other options
101
+ afterCopy: [(buildPath, electronVersion, platform, arch, callback) => {
102
+ rebuild({ buildPath, electronVersion, arch })
103
+ .then(() => callback())
104
+ .catch((error) => callback(error));
105
+ }],
106
+ // … other options
107
+ });
108
+ ```
109
+
110
+ ### How can I integrate this with [prebuild](https://github.com/prebuild/prebuild)?
111
+
112
+ If your module uses [prebuild](https://github.com/prebuild/prebuild) for creating prebuilt binaries,
113
+ it also uses [prebuild-install](https://github.com/prebuild/prebuild-install) to download them. If
114
+ this is the case, then `electron-rebuild` will run `prebuild-install` to download the correct
115
+ binaries from the project's GitHub Releases instead of rebuilding them.
116
+
117
+ ### How can I integrate this into Grunt / Gulp / Whatever?
118
+
119
+ electron-rebuild is also a library that you can require into your app or
120
+ build process. It has a very simple API:
121
+
122
+ ```javascript
123
+ import rebuild from '@electron/rebuild';
124
+
125
+ // Public: Rebuilds a node_modules directory with the given Electron version.
126
+ //
127
+ // options: Object with the following properties
128
+ // buildPath - An absolute path to your app's directory. (The directory that contains your node_modules)
129
+ // electronVersion - The version of Electron to rebuild for
130
+ // arch (optional) - Default: process.arch - The arch to rebuild for
131
+ // extraModules (optional) - Default: [] - An array of modules to rebuild as well as the detected modules
132
+ // onlyModules (optional) - Default: null - An array of modules to rebuild, ONLY these module names will be rebuilt.
133
+ // The "types" property will be ignored if this option is set.
134
+ // force (optional) - Default: false - Force a rebuild of modules regardless of their current build state
135
+ // headerURL (optional) - Default: https://www.electronjs.org/headers - The URL to download Electron header files from
136
+ // types (optional) - Default: ['prod', 'optional'] - The types of modules to rebuild
137
+ // mode (optional) - The rebuild mode, either 'sequential' or 'parallel' - Default varies per platform (probably shouldn't mess with this one)
138
+ // useElectronClang (optional) - Whether to use the clang executable that Electron used when building its binary. This will guarantee compiler compatibility
139
+
140
+ // Returns a Promise indicating whether the operation succeeded or not
141
+ ```
142
+
143
+ A full build process might look something like:
144
+
145
+ ```javascript
146
+ const childProcess = require('child_process');
147
+ const pathToElectron = require('electron');
148
+
149
+ rebuild({
150
+ buildPath: __dirname,
151
+ electronVersion: '1.4.12'
152
+ })
153
+ .then(() => console.info('Rebuild Successful'))
154
+ .catch((e) => {
155
+ console.error("Building modules didn't work!");
156
+ console.error(e);
157
+ });
158
+ ```
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Runs the `uname` command and returns the trimmed output.
3
+ *
4
+ * Copied from `@electron/get`.
5
+ */
6
+ export declare function uname(): string;
7
+ export declare type ConfigVariables = {
8
+ arm_version?: string;
9
+ };
10
+ /**
11
+ * Generates an architecture name that would be used in an Electron or Node.js
12
+ * download file name.
13
+ *
14
+ * Copied from `@electron/get`.
15
+ */
16
+ export declare function getNodeArch(arch: string, configVariables: ConfigVariables): string;
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getNodeArch = exports.uname = void 0;
4
+ const child_process_1 = require("child_process");
5
+ /**
6
+ * Runs the `uname` command and returns the trimmed output.
7
+ *
8
+ * Copied from `@electron/get`.
9
+ */
10
+ function uname() {
11
+ return (0, child_process_1.execSync)('uname -m')
12
+ .toString()
13
+ .trim();
14
+ }
15
+ exports.uname = uname;
16
+ /**
17
+ * Generates an architecture name that would be used in an Electron or Node.js
18
+ * download file name.
19
+ *
20
+ * Copied from `@electron/get`.
21
+ */
22
+ function getNodeArch(arch, configVariables) {
23
+ if (arch === 'arm') {
24
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
25
+ switch (configVariables.arm_version) {
26
+ case '6':
27
+ return uname();
28
+ case '7':
29
+ default:
30
+ return 'armv7l';
31
+ }
32
+ }
33
+ return arch;
34
+ }
35
+ exports.getNodeArch = getNodeArch;
36
+ //# sourceMappingURL=arch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arch.js","sourceRoot":"","sources":["../../src/arch.ts"],"names":[],"mappings":";;;AAAA,iDAAyC;AAEzC;;;;GAIG;AACH,SAAgB,KAAK;IACnB,OAAO,IAAA,wBAAQ,EAAC,UAAU,CAAC;SACxB,QAAQ,EAAE;SACV,IAAI,EAAE,CAAC;AACZ,CAAC;AAJD,sBAIC;AAMD;;;;;GAKG;AACH,SAAgB,WAAW,CAAC,IAAY,EAAE,eAAgC;IACxE,IAAI,IAAI,KAAK,KAAK,EAAE;QAClB,8DAA8D;QAC9D,QAAQ,eAAe,CAAC,WAAW,EAAE;YACnC,KAAK,GAAG;gBACN,OAAO,KAAK,EAAE,CAAC;YACjB,KAAK,GAAG,CAAC;YACT;gBACE,OAAO,QAAQ,CAAC;SACnB;KACF;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAbD,kCAaC"}
@@ -0,0 +1,13 @@
1
+ declare type CacheOptions = {
2
+ ABI: string;
3
+ arch: string;
4
+ debug: boolean;
5
+ electronVersion: string;
6
+ headerURL: string;
7
+ modulePath: string;
8
+ };
9
+ export declare const cacheModuleState: (dir: string, cachePath: string, key: string) => Promise<void>;
10
+ declare type ApplyDiffFunction = (dir: string) => Promise<void>;
11
+ export declare const lookupModuleState: (cachePath: string, key: string) => Promise<ApplyDiffFunction | boolean>;
12
+ export declare function generateCacheKey(opts: CacheOptions): Promise<string>;
13
+ export {};
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.generateCacheKey = exports.lookupModuleState = exports.cacheModuleState = void 0;
7
+ const crypto_1 = __importDefault(require("crypto"));
8
+ const debug_1 = __importDefault(require("debug"));
9
+ const fs_extra_1 = __importDefault(require("fs-extra"));
10
+ const path_1 = __importDefault(require("path"));
11
+ const zlib_1 = __importDefault(require("zlib"));
12
+ const d = (0, debug_1.default)('electron-rebuild');
13
+ // Update this number if you change the caching logic to ensure no bad cache hits
14
+ const ELECTRON_REBUILD_CACHE_ID = 1;
15
+ class Snap {
16
+ constructor(hash, data) {
17
+ this.hash = hash;
18
+ this.data = data;
19
+ }
20
+ }
21
+ const takeSnapshot = async (dir, relativeTo = dir) => {
22
+ const snap = {};
23
+ await Promise.all((await fs_extra_1.default.readdir(dir)).map(async (child) => {
24
+ if (child === 'node_modules')
25
+ return;
26
+ const childPath = path_1.default.resolve(dir, child);
27
+ const relative = path_1.default.relative(relativeTo, childPath);
28
+ if ((await fs_extra_1.default.stat(childPath)).isDirectory()) {
29
+ snap[relative] = await takeSnapshot(childPath, relativeTo);
30
+ }
31
+ else {
32
+ const data = await fs_extra_1.default.readFile(childPath);
33
+ snap[relative] = new Snap(crypto_1.default.createHash('SHA256').update(data).digest('hex'), data);
34
+ }
35
+ }));
36
+ return snap;
37
+ };
38
+ const writeSnapshot = async (diff, dir) => {
39
+ for (const key in diff) {
40
+ if (diff[key] instanceof Snap) {
41
+ await fs_extra_1.default.mkdirp(path_1.default.dirname(path_1.default.resolve(dir, key)));
42
+ await fs_extra_1.default.writeFile(path_1.default.resolve(dir, key), diff[key].data);
43
+ }
44
+ else {
45
+ await fs_extra_1.default.mkdirp(path_1.default.resolve(dir, key));
46
+ await writeSnapshot(diff[key], dir);
47
+ }
48
+ }
49
+ };
50
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
51
+ const serialize = (snap) => {
52
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
53
+ const jsonReady = {};
54
+ for (const key in snap) {
55
+ if (snap[key] instanceof Snap) {
56
+ const s = snap[key];
57
+ jsonReady[key] = {
58
+ __isSnap: true,
59
+ hash: s.hash,
60
+ data: s.data.toString('base64')
61
+ };
62
+ }
63
+ else {
64
+ jsonReady[key] = serialize(snap[key]);
65
+ }
66
+ }
67
+ return jsonReady;
68
+ };
69
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
70
+ const unserialize = (jsonReady) => {
71
+ const snap = {};
72
+ for (const key in jsonReady) {
73
+ if (jsonReady[key].__isSnap) {
74
+ snap[key] = new Snap(jsonReady[key].hash, Buffer.from(jsonReady[key].data, 'base64'));
75
+ }
76
+ else {
77
+ snap[key] = unserialize(jsonReady[key]);
78
+ }
79
+ }
80
+ return snap;
81
+ };
82
+ const cacheModuleState = async (dir, cachePath, key) => {
83
+ const snap = await takeSnapshot(dir);
84
+ const moduleBuffer = Buffer.from(JSON.stringify(serialize(snap)));
85
+ const zipped = await new Promise(resolve => zlib_1.default.gzip(moduleBuffer, (_, result) => resolve(result)));
86
+ await fs_extra_1.default.mkdirp(cachePath);
87
+ await fs_extra_1.default.writeFile(path_1.default.resolve(cachePath, key), zipped);
88
+ };
89
+ exports.cacheModuleState = cacheModuleState;
90
+ const lookupModuleState = async (cachePath, key) => {
91
+ if (await fs_extra_1.default.pathExists(path_1.default.resolve(cachePath, key))) {
92
+ return async function applyDiff(dir) {
93
+ const zipped = await fs_extra_1.default.readFile(path_1.default.resolve(cachePath, key));
94
+ const unzipped = await new Promise(resolve => { zlib_1.default.gunzip(zipped, (_, result) => resolve(result)); });
95
+ const diff = unserialize(JSON.parse(unzipped.toString()));
96
+ await writeSnapshot(diff, dir);
97
+ };
98
+ }
99
+ return false;
100
+ };
101
+ exports.lookupModuleState = lookupModuleState;
102
+ function dHashTree(tree, hash) {
103
+ for (const key of Object.keys(tree).sort()) {
104
+ hash.update(key);
105
+ if (typeof tree[key] === 'string') {
106
+ hash.update(tree[key]);
107
+ }
108
+ else {
109
+ dHashTree(tree[key], hash);
110
+ }
111
+ }
112
+ }
113
+ async function hashDirectory(dir, relativeTo) {
114
+ relativeTo !== null && relativeTo !== void 0 ? relativeTo : (relativeTo = dir);
115
+ d('hashing dir', dir);
116
+ const dirTree = {};
117
+ await Promise.all((await fs_extra_1.default.readdir(dir)).map(async (child) => {
118
+ d('found child', child, 'in dir', dir);
119
+ // Ignore output directories
120
+ if (dir === relativeTo && (child === 'build' || child === 'bin'))
121
+ return;
122
+ // Don't hash nested node_modules
123
+ if (child === 'node_modules')
124
+ return;
125
+ const childPath = path_1.default.resolve(dir, child);
126
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
127
+ const relative = path_1.default.relative(relativeTo, childPath);
128
+ if ((await fs_extra_1.default.stat(childPath)).isDirectory()) {
129
+ dirTree[relative] = await hashDirectory(childPath, relativeTo);
130
+ }
131
+ else {
132
+ dirTree[relative] = crypto_1.default.createHash('SHA256').update(await fs_extra_1.default.readFile(childPath)).digest('hex');
133
+ }
134
+ }));
135
+ return dirTree;
136
+ }
137
+ async function generateCacheKey(opts) {
138
+ const tree = await hashDirectory(opts.modulePath);
139
+ const hasher = crypto_1.default.createHash('SHA256')
140
+ .update(`${ELECTRON_REBUILD_CACHE_ID}`)
141
+ .update(path_1.default.basename(opts.modulePath))
142
+ .update(opts.ABI)
143
+ .update(opts.arch)
144
+ .update(opts.debug ? 'debug' : 'not debug')
145
+ .update(opts.headerURL)
146
+ .update(opts.electronVersion);
147
+ dHashTree(tree, hasher);
148
+ const hash = hasher.digest('hex');
149
+ d('calculated hash of', opts.modulePath, 'to be', hash);
150
+ return hash;
151
+ }
152
+ exports.generateCacheKey = generateCacheKey;
153
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function getClangEnvironmentVars(electronVersion: string, targetArch: string): Promise<{
2
+ env: Record<string, string>;
3
+ args: string[];
4
+ }>;
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.getClangEnvironmentVars = void 0;
30
+ const cp = __importStar(require("child_process"));
31
+ const debug_1 = __importDefault(require("debug"));
32
+ const fs = __importStar(require("fs-extra"));
33
+ const path = __importStar(require("path"));
34
+ const semver_1 = __importDefault(require("semver"));
35
+ const tar = __importStar(require("tar"));
36
+ const zlib = __importStar(require("zlib"));
37
+ const constants_1 = require("./constants");
38
+ const fetcher_1 = require("./fetcher");
39
+ const sysroot_fetcher_1 = require("./sysroot-fetcher");
40
+ const d = (0, debug_1.default)('electron-rebuild');
41
+ const CDS_URL = 'https://commondatastorage.googleapis.com/chromium-browser-clang';
42
+ function getPlatformUrlPrefix(hostOS) {
43
+ const prefixMap = {
44
+ 'linux': 'Linux_x64',
45
+ 'darwin': 'Mac',
46
+ 'win32': 'Win',
47
+ };
48
+ return CDS_URL + '/' + prefixMap[hostOS] + '/';
49
+ }
50
+ function getClangDownloadURL(packageFile, packageVersion, hostOS) {
51
+ const cdsFile = `${packageFile}-${packageVersion}.tgz`;
52
+ return getPlatformUrlPrefix(hostOS) + cdsFile;
53
+ }
54
+ function getSDKRoot() {
55
+ if (process.env.SDKROOT)
56
+ return process.env.SDKROOT;
57
+ const output = cp.execFileSync('xcrun', ['--sdk', 'macosx', '--show-sdk-path']);
58
+ return output.toString().trim();
59
+ }
60
+ async function getClangEnvironmentVars(electronVersion, targetArch) {
61
+ const clangDownloadDir = await downloadClangVersion(electronVersion);
62
+ const clangDir = path.resolve(clangDownloadDir, 'bin');
63
+ const cxxflags = [];
64
+ const clangArgs = [];
65
+ if (process.platform === 'darwin') {
66
+ clangArgs.push('-isysroot', getSDKRoot());
67
+ }
68
+ if (semver_1.default.major(electronVersion) >= 20) {
69
+ cxxflags.push('-std=c++17');
70
+ }
71
+ const gypArgs = [];
72
+ if (process.platform === 'win32') {
73
+ console.log(fs.readdirSync(clangDir));
74
+ gypArgs.push(`/p:CLToolExe=clang-cl.exe`, `/p:CLToolPath=${clangDir}`);
75
+ }
76
+ if (process.platform === 'linux') {
77
+ const sysrootPath = await (0, sysroot_fetcher_1.downloadLinuxSysroot)(electronVersion, targetArch);
78
+ clangArgs.push('--sysroot', sysrootPath);
79
+ }
80
+ return {
81
+ env: {
82
+ CC: `"${path.resolve(clangDir, 'clang')}" ${clangArgs.join(' ')}`,
83
+ CXX: `"${path.resolve(clangDir, 'clang++')}" ${clangArgs.join(' ')}`,
84
+ CFLAGS: `${cxxflags.join(' ')}`,
85
+ CXXFLAGS: `${cxxflags.join(' ')}`
86
+ },
87
+ args: gypArgs,
88
+ };
89
+ }
90
+ exports.getClangEnvironmentVars = getClangEnvironmentVars;
91
+ function clangVersionFromRevision(update) {
92
+ const regex = /CLANG_REVISION = '([^']+)'\nCLANG_SUB_REVISION = (\d+)\n/g;
93
+ const clangVersionMatch = regex.exec(update);
94
+ if (!clangVersionMatch)
95
+ return null;
96
+ const [, clangVersion, clangSubRevision] = clangVersionMatch;
97
+ return `${clangVersion}-${clangSubRevision}`;
98
+ }
99
+ function clangVersionFromSVN(update) {
100
+ const regex = /CLANG_REVISION = '([^']+)'\nCLANG_SVN_REVISION = '([^']+)'\nCLANG_SUB_REVISION = (\d+)\n/g;
101
+ const clangVersionMatch = regex.exec(update);
102
+ if (!clangVersionMatch)
103
+ return null;
104
+ const [, clangVersion, clangSvn, clangSubRevision] = clangVersionMatch;
105
+ return `${clangSvn}-${clangVersion.substr(0, 8)}-${clangSubRevision}`;
106
+ }
107
+ async function downloadClangVersion(electronVersion) {
108
+ d('fetching clang for Electron:', electronVersion);
109
+ const clangDirPath = path.resolve(constants_1.ELECTRON_GYP_DIR, `${electronVersion}-clang`);
110
+ if (await fs.pathExists(path.resolve(clangDirPath, 'bin', 'clang')))
111
+ return clangDirPath;
112
+ if (!await fs.pathExists(constants_1.ELECTRON_GYP_DIR))
113
+ await fs.mkdirp(constants_1.ELECTRON_GYP_DIR);
114
+ const electronDeps = await (0, fetcher_1.fetch)(`https://raw.githubusercontent.com/electron/electron/v${electronVersion}/DEPS`, 'text');
115
+ const chromiumRevisionExtractor = /'chromium_version':\n\s+'([^']+)/g;
116
+ const chromiumRevisionMatch = chromiumRevisionExtractor.exec(electronDeps);
117
+ if (!chromiumRevisionMatch)
118
+ throw new Error('Failed to determine Chromium revision for given Electron version');
119
+ const chromiumRevision = chromiumRevisionMatch[1];
120
+ d('fetching clang for Chromium:', chromiumRevision);
121
+ const base64ClangUpdate = await (0, fetcher_1.fetch)(`https://chromium.googlesource.com/chromium/src.git/+/${chromiumRevision}/tools/clang/scripts/update.py?format=TEXT`, 'text');
122
+ const clangUpdate = Buffer.from(base64ClangUpdate, 'base64').toString('utf8');
123
+ const clangVersionString = clangVersionFromRevision(clangUpdate) || clangVersionFromSVN(clangUpdate);
124
+ if (!clangVersionString)
125
+ throw new Error('Failed to determine Clang revision from Electron version');
126
+ d('fetching clang:', clangVersionString);
127
+ const clangDownloadURL = getClangDownloadURL('clang', clangVersionString, process.platform);
128
+ const contents = await (0, fetcher_1.fetch)(clangDownloadURL, 'buffer');
129
+ d('deflating clang');
130
+ zlib.deflateSync(contents);
131
+ const tarPath = path.resolve(constants_1.ELECTRON_GYP_DIR, `${electronVersion}-clang.tar`);
132
+ if (await fs.pathExists(tarPath))
133
+ await fs.remove(tarPath);
134
+ await fs.writeFile(tarPath, Buffer.from(contents));
135
+ await fs.mkdirp(clangDirPath);
136
+ d('tar running on clang');
137
+ await tar.x({
138
+ file: tarPath,
139
+ cwd: clangDirPath,
140
+ });
141
+ await fs.remove(tarPath);
142
+ d('cleaning up clang tar file');
143
+ return clangDirPath;
144
+ }
145
+ //# sourceMappingURL=clang-fetcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clang-fetcher.js","sourceRoot":"","sources":["../../src/clang-fetcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};