From 784f7bc0cbaae8185d9911c5cf39d754ad8e9363 Mon Sep 17 00:00:00 2001 From: Kris Kowal Date: Tue, 9 Jun 2020 13:50:29 -0700 Subject: [PATCH] feat(ses): Add Compartment load function --- packages/ses/NEWS.md | 3 +++ packages/ses/src/compartment-shim.js | 10 ++++++++++ packages/ses/src/whitelist.js | 1 + packages/ses/test/compartment-instance.test.js | 1 + packages/ses/test/compartment-prototype.test.js | 1 + 5 files changed, 16 insertions(+) diff --git a/packages/ses/NEWS.md b/packages/ses/NEWS.md index 73b2f40ce4..d568223bc4 100644 --- a/packages/ses/NEWS.md +++ b/packages/ses/NEWS.md @@ -10,6 +10,9 @@ User-visible changes in SES: by aliasing them to their non-locale equivalents. `localeCompare` had no builtin non-locale equivalent, so we provide one. * Adds a TypeScript definition for `harden`. +* Adds the `load` method to `Compartment`. + Load allows a bundler or archiver to use the `Compartment` API to gather the + transitive dependencies of modules without executing them. ## Release 0.9.0 (13-July-2020) diff --git a/packages/ses/src/compartment-shim.js b/packages/ses/src/compartment-shim.js index beef5cb409..c2a55793d4 100644 --- a/packages/ses/src/compartment-shim.js +++ b/packages/ses/src/compartment-shim.js @@ -235,6 +235,16 @@ export class Compartment { }); } + async load(specifier) { + if (typeof specifier !== 'string') { + throw new TypeError('first argument of load() must be a string'); + } + + assertModuleHooks(this); + + return load(privateFields, moduleAnalyses, this, specifier); + } + importNow(specifier) { if (typeof specifier !== 'string') { throw new TypeError('first argument of importNow() must be a string'); diff --git a/packages/ses/src/whitelist.js b/packages/ses/src/whitelist.js index 08210acfdc..95ae4179f9 100644 --- a/packages/ses/src/whitelist.js +++ b/packages/ses/src/whitelist.js @@ -1548,6 +1548,7 @@ export default { evaluate: fn, globalThis: getter, import: asyncFn, + load: asyncFn, importNow: fn, module: fn, }, diff --git a/packages/ses/test/compartment-instance.test.js b/packages/ses/test/compartment-instance.test.js index 25977d004b..75ea471e86 100644 --- a/packages/ses/test/compartment-instance.test.js +++ b/packages/ses/test/compartment-instance.test.js @@ -43,6 +43,7 @@ test('Compartment instance', t => { 'evaluate', 'import', 'importNow', + 'load', 'module', 'globalThis', 'toString', diff --git a/packages/ses/test/compartment-prototype.test.js b/packages/ses/test/compartment-prototype.test.js index 42f168f4f5..77dcae7497 100644 --- a/packages/ses/test/compartment-prototype.test.js +++ b/packages/ses/test/compartment-prototype.test.js @@ -19,6 +19,7 @@ test('Compartment prototype', t => { 'evaluate', 'import', 'importNow', + 'load', 'module', 'globalThis', 'toString',