Bug 1829125 - Align the PHC area to the jemalloc chunk size r=glandium
[gecko.git] / tools / esmify / is-esmified.js
blob872b4cd877af08c96a35014a505a7431e94229e7
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2  * License, v. 2.0. If a copy of the MPL was not distributed with this
3  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 // A utility to check if given JSM is already ESM-ified.
7 /* eslint-env node */
9 const fs = require("fs");
10 const _path = require("path");
11 const { esmifyExtension } = require(_path.resolve(__dirname, "./utils.js"));
13 let json_map;
14 if (process.env.ESMIFY_MAP_JSON) {
15   json_map = _path.resolve(process.env.ESMIFY_MAP_JSON);
16 } else {
17   json_map = _path.resolve(__dirname, "./map.json");
19 const uri_map = JSON.parse(fs.readFileSync(json_map));
20 const esm_uri_map = generateESMURIMap(uri_map);
22 function generateESMURIMap(jsm_map) {
23   const esm_map = {};
25   for (let [uri, jsms] of Object.entries(jsm_map)) {
26     if (typeof jsms === "string") {
27       jsms = [jsms];
28     }
29     esm_map[esmifyExtension(uri)] = jsms.map(esmifyExtension);
30   }
32   return esm_map;
35 function isESMifiedSlow(resourceURI) {
36   if (!(resourceURI in uri_map)) {
37     console.log(`WARNING: Unknown module: ${resourceURI}`);
38     return { result: false, jsms: [] };
39   }
41   let jsms = uri_map[resourceURI];
42   if (typeof jsms === "string") {
43     jsms = [jsms];
44   }
46   const prefix = "../../";
47   for (const jsm of jsms) {
48     if (fs.existsSync(prefix + jsm)) {
49       return { result: false, jsms };
50     }
51     const esm = esmifyExtension(jsm);
52     if (!fs.existsSync(prefix + esm)) {
53       return { result: false, jsms };
54     }
55   }
57   return { result: true, jsms };
60 const isESMified_memo = {};
61 function isESMified(resourceURI, files) {
62   if (!(resourceURI in isESMified_memo)) {
63     isESMified_memo[resourceURI] = isESMifiedSlow(resourceURI);
64   }
66   for (const jsm of isESMified_memo[resourceURI].jsms) {
67     files.push(esmifyExtension(jsm));
68   }
70   return isESMified_memo[resourceURI].result;
73 function getESMFiles(resourceURI) {
74   if (resourceURI in esm_uri_map) {
75     return esm_uri_map[resourceURI];
76   }
77   return [];
80 exports.isESMified = isESMified;
81 exports.getESMFiles = getESMFiles;