Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion packages/compartment-mapper/src/policy.js
Original file line number Diff line number Diff line change
Expand Up @@ -514,7 +514,6 @@ async function attenuateModule({
const ns = {};
originalModuleRecord.execute(ns, compartment, resolvedImports);
const attenuated = attenuate(ns);
moduleExports.default = attenuated;
assign(moduleExports, attenuated);
},
}),
Expand Down
3 changes: 0 additions & 3 deletions packages/compartment-mapper/test/bundle.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -382,10 +382,7 @@ test('bundle cjs-compat default-difficulties', async t => {
});
t.deepEqual(resultExports, [
['default', 'even'],
['default', 'even', 'version'],
['__esModule', 'default', 'even', 'version'],
['__esModule', 'default', 'even', 'version'],
['default', 'even', 'version'],
['default', 'even'],
['default', 'even'],
]);
Expand Down
11 changes: 10 additions & 1 deletion packages/compartment-mapper/test/dynamic-require.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -736,7 +736,16 @@ test('dynamic require of ancestor', async t => {
},
});

t.like(namespace, [
t.true(
Array.isArray(namespace.default),
'expected default export to be an array',
);
t.deepEqual(Object.keys(namespace.default[0]), [
'packageDescriptor',
'foldedSources',
]);

t.like(namespace.default, [
{
packageDescriptor: { name: 'webpackish-app' },
foldedSources: ['webpackish-app-v1.2.3'],
Expand Down
21 changes: 21 additions & 0 deletions packages/compartment-mapper/test/esm-imports-cjs-define.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,24 @@ scaffold(
assertFixture,
fixtureAssertionCount,
);
const fixtureHack = new URL(
'fixtures-esm-imports-cjs-define/hack1.mjs',
import.meta.url,
).toString();

const assertFixtureHack = (t, data) => {
t.is(data.namespace.shared, 'I am shared-pkg version 2.0.0');
};

scaffold(
'fixtures-esm-imports-cjs-define/hack1',
test,
fixtureHack,
assertFixtureHack,
fixtureAssertionCount,
{
addGlobals: {
console,
},
},
);

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
import 'evil-pkg';
import { shared } from 'shared-pkg';

export { shared };

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,9 @@
"type": "commonjs",
"scripts": {
"preinstall": "echo DO NOT INSTALL TEST FIXTURES; exit -1"
},
"dependencies": {
"evil-pkg": "*",
"shared-pkg": "*"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
/* eslint-env node */
// CJS importing CJS (exports.*)
const sourceWhole = require('./source-cjs.cjs');
const { namedA, namedB, default: defaultVal } = require('./source-cjs.cjs');

// CJS importing CJS (module.exports = {...})
const sourceWholeOw = require('./source-cjs-overwrite.cjs');
const {
namedA: namedAOw,
namedB: namedBOw,
default: defaultValOw,
} = require('./source-cjs-overwrite.cjs');

// Capture values at import time
const before = {
wholeObject_namedA: sourceWhole.namedA,
wholeObject_namedB: sourceWhole.namedB,
wholeObject_default: sourceWhole.default,
destructured_namedA: namedA,
destructured_namedB: namedB,
destructured_default: defaultVal,
};
const beforeOw = {
wholeObject_namedA: sourceWholeOw.namedA,
wholeObject_namedB: sourceWholeOw.namedB,
wholeObject_default: sourceWholeOw.default,
destructured_namedA: namedAOw,
destructured_namedB: namedBOw,
destructured_default: defaultValOw,
};

module.exports.getResults = () => {
return {
title: 'CJS importing CJS (exports.*)',
wholeObject_namedA: {
before: before.wholeObject_namedA,
after: sourceWhole.namedA,
},
wholeObject_namedB: {
before: before.wholeObject_namedB,
after: sourceWhole.namedB,
},
wholeObject_default: {
before: before.wholeObject_default,
after: sourceWhole.default,
},
destructured_namedA: { before: before.destructured_namedA, after: namedA },
destructured_namedB: { before: before.destructured_namedB, after: namedB },
destructured_default: {
before: before.destructured_default,
after: defaultVal,
},
};
};

module.exports.getResultsOverwrite = () => {
return {
title: 'CJS importing CJS (module.exports = {...})',
wholeObject_namedA: {
before: beforeOw.wholeObject_namedA,
after: sourceWholeOw.namedA,
},
wholeObject_namedB: {
before: beforeOw.wholeObject_namedB,
after: sourceWholeOw.namedB,
},
wholeObject_default: {
before: beforeOw.wholeObject_default,
after: sourceWholeOw.default,
},
destructured_namedA: {
before: beforeOw.destructured_namedA,
after: namedAOw,
},
destructured_namedB: {
before: beforeOw.destructured_namedB,
after: namedBOw,
},
destructured_default: {
before: beforeOw.destructured_default,
after: defaultValOw,
},
};
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
/* eslint-env node */
// CJS importing ESM via require()
// (source-esm has no top-level await, so require works in environments that support it)

const sourceEsm = require('./source-esm.mjs');

// Capture values at import time
const before = {
namespace_namedLet: sourceEsm.namedLet,
namespace_namedVar: sourceEsm.namedVar,
// namespace_namedConstValue: sourceEsm.namedConst.value,
namespace_default: sourceEsm.default,
};

module.exports.getResults = () => {
return {
title: 'CJS importing ESM (require())',
namespace_namedLet: {
before: before.namespace_namedLet,
after: sourceEsm.namedLet,
},
namespace_namedVar: {
before: before.namespace_namedVar,
after: sourceEsm.namedVar,
},
// namespace_namedConstValue: { before: before.namespace_namedConstValue, after: sourceEsm.namedConst.value },
namespace_default: {
before: before.namespace_default,
after: sourceEsm.default,
},
};
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
// ESM importing CJS
import defaultExport, { namedA } from './source-cjs.cjs';
import * as namespace from './source-cjs.cjs';
import defaultExportOw, {
namedA as namedAOw,
} from './source-cjs-overwrite.cjs';
import * as namespaceOw from './source-cjs-overwrite.cjs';

// Capture values at import time
const before = {
namedExport_namedA: namedA,
defaultExport_namedA: defaultExport.namedA,
defaultExport_namedB: defaultExport.namedB,
defaultExport_default: defaultExport.default,
namespace_default_namedA: namespace.default.namedA,
namespace_default_namedB: namespace.default.namedB,
};
const beforeOw = {
namedExport_namedA: namedAOw,
defaultExport_namedA: defaultExportOw.namedA,
defaultExport_namedB: defaultExportOw.namedB,
defaultExport_default: defaultExportOw.default,
namespace_default_namedA: namespaceOw.default.namedA,
namespace_default_namedB: namespaceOw.default.namedB,
};

export function getResults() {
return {
title: 'ESM importing CJS (exports.*)',
namedExport_namedA: { before: before.namedExport_namedA, after: namedA },
defaultExport_namedA: {
before: before.defaultExport_namedA,
after: defaultExport.namedA,
},
defaultExport_namedB: {
before: before.defaultExport_namedB,
after: defaultExport.namedB,
},
defaultExport_default: {
before: before.defaultExport_default,
after: defaultExport.default,
},
namespace_default_namedA: {
before: before.namespace_default_namedA,
after: namespace.default.namedA,
},
namespace_default_namedB: {
before: before.namespace_default_namedB,
after: namespace.default.namedB,
},
};
}

export function getResultsOverwrite() {
return {
title: 'ESM importing CJS (module.exports = {...})',
namedExport_namedA: {
before: beforeOw.namedExport_namedA,
after: namedAOw,
},
defaultExport_namedA: {
before: beforeOw.defaultExport_namedA,
after: defaultExportOw.namedA,
},
defaultExport_namedB: {
before: beforeOw.defaultExport_namedB,
after: defaultExportOw.namedB,
},
defaultExport_default: {
before: beforeOw.defaultExport_default,
after: defaultExportOw.default,
},
namespace_default_namedA: {
before: beforeOw.namespace_default_namedA,
after: namespaceOw.default.namedA,
},
namespace_default_namedB: {
before: beforeOw.namespace_default_namedB,
after: namespaceOw.default.namedB,
},
};
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
// ESM importing ESM
import defaultExport, {
namedLet,
namedVar,
namedConst,
} from './source-esm.mjs';
import * as namespace from './source-esm.mjs';

// Capture values at import time
const before = {
defaultExport,
namedLet,
namedVar,
namedConstValue: namedConst.value,
namespaceDefault: namespace.default,
namespaceNamedLet: namespace.namedLet,
namespaceNamedVar: namespace.namedVar,
namespaceNamedConstValue: namespace.namedConst.value,
};

export function getResults() {
return {
title: 'ESM importing ESM',
defaultExport: { before: before.defaultExport, after: defaultExport },
namedLet: { before: before.namedLet, after: namedLet },
namedVar: { before: before.namedVar, after: namedVar },
namedConstValue: {
before: before.namedConstValue,
after: namedConst.value,
},
namespaceDefault: {
before: before.namespaceDefault,
after: namespace.default,
},
namespaceNamedLet: {
before: before.namespaceNamedLet,
after: namespace.namedLet,
},
namespaceNamedVar: {
before: before.namespaceNamedVar,
after: namespace.namedVar,
},
namespaceNamedConstValue: {
before: before.namespaceNamedConstValue,
after: namespace.namedConst.value,
},
};
}
Loading
Loading