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.
9 const fs = require("fs");
10 const _path = require("path");
11 const { esmifyExtension } = require(_path.resolve(__dirname, "./utils.js"));
14 if (process.env.ESMIFY_MAP_JSON) {
15 json_map = _path.resolve(process.env.ESMIFY_MAP_JSON);
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) {
25 for (let [uri, jsms] of Object.entries(jsm_map)) {
26 if (typeof jsms === "string") {
29 esm_map[esmifyExtension(uri)] = jsms.map(esmifyExtension);
35 function isESMifiedSlow(resourceURI) {
36 if (!(resourceURI in uri_map)) {
37 console.log(`WARNING: Unknown module: ${resourceURI}`);
38 return { result: false, jsms: [] };
41 let jsms = uri_map[resourceURI];
42 if (typeof jsms === "string") {
46 const prefix = "../../";
47 for (const jsm of jsms) {
48 if (fs.existsSync(prefix + jsm)) {
49 return { result: false, jsms };
51 const esm = esmifyExtension(jsm);
52 if (!fs.existsSync(prefix + esm)) {
53 return { result: false, jsms };
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);
66 for (const jsm of isESMified_memo[resourceURI].jsms) {
67 files.push(esmifyExtension(jsm));
70 return isESMified_memo[resourceURI].result;
73 function getESMFiles(resourceURI) {
74 if (resourceURI in esm_uri_map) {
75 return esm_uri_map[resourceURI];
80 exports.isESMified = isESMified;
81 exports.getESMFiles = getESMFiles;