Skip to content

Commit

Permalink
fix(compartment-mapper): change how parse-cjs.js treats exports to al…
Browse files Browse the repository at this point in the history
…ign with behavior of cjs in Node.js; make execute synchronous
  • Loading branch information
naugtur committed Feb 9, 2022
1 parent 7c011e2 commit d1eb363
Showing 1 changed file with 13 additions and 6 deletions.
19 changes: 13 additions & 6 deletions packages/compartment-mapper/src/parse-cjs.js
Expand Up @@ -25,35 +25,42 @@ export const parseCjs = async (
* @param {Compartment} compartment
* @param {Record<string, string>} resolvedImports
*/
const execute = async (moduleExports, compartment, resolvedImports) => {
const execute = (moduleExports, compartment, resolvedImports) => {
const functor = compartment.evaluate(
`(function (require, exports, module, __filename, __dirname) { ${source} //*/\n})\n//# sourceURL=${location}`,
);

let exportsReferenceCopy = moduleExports;
const module = freeze({
get exports() {
return moduleExports;
return exportsReferenceCopy;
},
set exports(value) {
moduleExports.default = value;
exportsReferenceCopy = value;
},
});

const require = freeze((/** @type {string} */ importSpecifier) => {
const namespace = compartment.importNow(resolvedImports[importSpecifier]);
if (namespace.default !== undefined) {
return namespace.default;
if (Object.keys(namespace).length > 1) {
return { ...namespace.default, ...namespace }; // this resembles Node's behavior more closely
} else {
return namespace.default;
}
}
return namespace;
});

functor(
require,
moduleExports,
exportsReferenceCopy,
module,
location, // __filename
new URL('./', location).toString(), // __dirname
);
if (exportsReferenceCopy !== moduleExports) {
moduleExports.default = exportsReferenceCopy;
}
};

return {
Expand Down

0 comments on commit d1eb363

Please sign in to comment.