@@ -173,25 +173,34 @@ const getGlobalsList = packagePolicy => {
173
173
. map ( ( [ key , _vvalue ] ) => key ) ;
174
174
} ;
175
175
176
+ const GLOBAL_ATTENUATOR = 'attenuateGlobals' ;
177
+ const MODULE_ATTENUATOR = 'attenuateModule' ;
176
178
/**
177
179
*
178
180
* @param {AttenuationDefinition } attenuationDefinition
179
181
* @param {DeferredAttenuatorsProvider } attenuatorsProvider
182
+ * @param {string } attenuatorExportName
180
183
* @returns {Promise<Function> }
181
184
*/
182
185
const importAttenuatorForDefinition = async (
183
186
attenuationDefinition ,
184
187
attenuatorsProvider ,
188
+ attenuatorExportName ,
185
189
) => {
186
190
if ( ! attenuatorsProvider ) {
187
191
throw Error ( `attenuatorsProvider is required to import attenuators` ) ;
188
192
}
189
- const { specifier, params } = getAttenuatorFromDefinition (
193
+ const { specifier, params, displayName } = getAttenuatorFromDefinition (
190
194
attenuationDefinition ,
191
195
) ;
192
196
const attenuator = await attenuatorsProvider . import ( specifier ) ;
197
+ if ( ! attenuator [ attenuatorExportName ] ) {
198
+ throw Error (
199
+ `Attenuator ${ q ( displayName ) } does not export ${ q ( attenuatorExportName ) } ` ,
200
+ ) ;
201
+ }
193
202
// TODO: uncurry bind for security?
194
- const attenuate = attenuator . attenuate . bind ( attenuator , params ) ;
203
+ const attenuate = attenuator [ attenuatorExportName ] . bind ( attenuator , params ) ;
195
204
return attenuate ;
196
205
} ;
197
206
@@ -235,7 +244,7 @@ export const makeDeferredAttenuatorsProvider = (
235
244
const { namespace } = await compartments [ ATTENUATORS_COMPARTMENT ] . import (
236
245
attenuatorSpecifier ,
237
246
) ;
238
- return { attenuate : namespace . attenuate } ;
247
+ return namespace ;
239
248
} ;
240
249
}
241
250
@@ -246,11 +255,11 @@ export const makeDeferredAttenuatorsProvider = (
246
255
247
256
/**
248
257
*
249
- * @param {Object } options
258
+ * @param {object } options
250
259
* @param {DeferredAttenuatorsProvider } options.attenuators
251
260
* @param {AttenuationDefinition } options.attenuationDefinition
252
- * @param {Object } options.globalThis
253
- * @param {Object } options.globals
261
+ * @param {object } options.globalThis
262
+ * @param {object } options.globals
254
263
*/
255
264
async function attenuateGlobalThis ( {
256
265
attenuators,
@@ -261,6 +270,7 @@ async function attenuateGlobalThis({
261
270
const attenuate = await importAttenuatorForDefinition (
262
271
attenuationDefinition ,
263
272
attenuators ,
273
+ GLOBAL_ATTENUATOR ,
264
274
) ;
265
275
266
276
// attenuate can either define properties on globalThis on its own,
@@ -277,9 +287,9 @@ async function attenuateGlobalThis({
277
287
/**
278
288
* Filters available globals and returns a copy according to the policy
279
289
*
280
- * @param {Object } globalThis
281
- * @param {Object } globals
282
- * @param {Object } packagePolicy
290
+ * @param {object } globalThis
291
+ * @param {object } globals
292
+ * @param {object } packagePolicy
283
293
* @param {DeferredAttenuatorsProvider } attenuators
284
294
* @param {Array<Promise> } pendingJobs
285
295
* @param {string } name
@@ -368,7 +378,7 @@ export const enforceModulePolicy = (specifier, compartmentDescriptor, info) => {
368
378
369
379
/**
370
380
*
371
- * @param {Object } options
381
+ * @param {object } options
372
382
* @param {DeferredAttenuatorsProvider } options.attenuators
373
383
* @param {AttenuationDefinition } options.attenuationDefinition
374
384
* @param {ModuleExportsNamespace } options.originalModule
@@ -388,6 +398,7 @@ function attenuateModule({
388
398
const attenuate = await importAttenuatorForDefinition (
389
399
attenuationDefinition ,
390
400
attenuators ,
401
+ MODULE_ATTENUATOR ,
391
402
) ;
392
403
const ns = await attenuate ( originalModule ) ;
393
404
const staticModuleRecord = freeze ( {
0 commit comments