MCPcopy Index your code
hub / github.com/nodejs/node / createDynamicModule

Function createDynamicModule

lib/internal/modules/esm/create_dynamic_module.js:54–98  ·  view source on GitHub ↗
(imports, exports, url = '', evaluate)

Source from the content-addressed store, hash-verified

52 * @returns {object}
53 */
54const createDynamicModule = (imports, exports, url = '', evaluate) => {
55 debug('creating ESM facade for %s with exports: %j', url, exports);
56 const source = `
57${ArrayPrototypeJoin(ArrayPrototypeMap(imports, createImport), '\n')}
58${ArrayPrototypeJoin(ArrayPrototypeMap(exports, createExport), '\n')}
59import.meta.done();
60`;
61 const {
62 registerModule, compileSourceTextModule, SourceTextModuleTypes: { kFacade },
63 } = require('internal/modules/esm/utils');
64 const m = compileSourceTextModule(`${url}`, source, kFacade);
65
66 const readyfns = new SafeSet();
67 /** @type {DynamicModuleReflect} */
68 const reflect = {
69 exports: { __proto__: null },
70 onReady: (cb) => { readyfns.add(cb); },
71 };
72
73 if (imports.length) {
74 reflect.imports = { __proto__: null };
75 }
76 registerModule(m, {
77 __proto__: null,
78 initializeImportMeta: (meta, wrap) => {
79 meta.exports = reflect.exports;
80 if (reflect.imports) {
81 meta.imports = reflect.imports;
82 }
83 meta.done = () => {
84 evaluate(reflect);
85 reflect.onReady = (cb) => cb(reflect);
86 for (const fn of readyfns) {
87 readyfns.delete(fn);
88 fn(reflect);
89 }
90 };
91 },
92 });
93
94 return {
95 module: m,
96 reflect,
97 };
98};
99
100module.exports = createDynamicModule;

Callers 2

translators.jsFile · 0.85

Calls 9

compileSourceTextModuleFunction · 0.85
registerModuleFunction · 0.85
addMethod · 0.65
deleteMethod · 0.65
debugFunction · 0.50
requireFunction · 0.50
evaluateFunction · 0.50
cbFunction · 0.50
fnFunction · 0.50

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…