Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 8cb1c09

Browse files
committedSep 21, 2022
add base support for exporting objects and classes in node_loader
1 parent 0bc40cd commit 8cb1c09

File tree

2 files changed

+202
-156
lines changed

2 files changed

+202
-156
lines changed
 

‎source/loaders/node_loader/bootstrap/lib/bootstrap.js

+39-3
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ function node_loader_trampoline_discover_function(func) {
276276
if (node_loader_trampoline_is_valid_symbol(node)) {
277277
const args = node_loader_trampoline_discover_arguments(node);
278278
const discover = {
279-
ptr: func,
279+
func,
280280
signature: args,
281281
async: node.async,
282282
};
@@ -293,6 +293,41 @@ function node_loader_trampoline_discover_function(func) {
293293
}
294294
}
295295

296+
function node_loader_trampoline_discover_klass(klass) {
297+
try {
298+
if (node_loader_trampoline_is_callable(klass)) {
299+
const str = klass.toString();
300+
const ast = espree.parse(`(${str})`, {
301+
ecmaVersion: 14
302+
});
303+
304+
const node = (ast.body[0].type === 'ExpressionStatement') && ast.body[0].expression;
305+
306+
if (node.type === 'ClassExpression') {
307+
const discover = {
308+
klass
309+
};
310+
311+
if (node.id && node.id.name) {
312+
discover['name'] = node.id.name;
313+
}
314+
315+
return discover;
316+
}
317+
}
318+
} catch (ex) {
319+
console.log(`Exception while parsing '${klass}' in node_loader_trampoline_discover_klass`, ex);
320+
}
321+
}
322+
323+
function node_loader_trampoline_discover_object(obj) {
324+
if (typeof obj === 'object') {
325+
return {
326+
obj
327+
};
328+
}
329+
}
330+
296331
function node_loader_trampoline_discover(handle) {
297332
const discover = {};
298333

@@ -305,8 +340,9 @@ function node_loader_trampoline_discover(handle) {
305340

306341
for (let j = 0; j < keys.length; ++j) {
307342
const key = keys[j];
308-
const func = exports[key];
309-
const descriptor = node_loader_trampoline_discover_function(func);
343+
const value = exports[key];
344+
const descriptor = node_loader_trampoline_discover_function(value)
345+
|| node_loader_trampoline_discover_klass(value) || node_loader_trampoline_discover_object(value);
310346

311347
if (descriptor !== undefined) {
312348
discover[key] = descriptor;

0 commit comments

Comments
 (0)
Please sign in to comment.