SystemJS top-level await support (#12163)

Co-authored-by: Huáng Jùnliàng <jlhwung@gmail.com>
This commit is contained in:
Guy Bedford 2020-10-14 11:14:52 -07:00 committed by GitHub
parent d0d1fdb921
commit 9c7d9c0fe5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 61 additions and 4 deletions

View File

@ -11,9 +11,7 @@ const buildTemplate = template(`
BEFORE_BODY;
return {
setters: SETTERS,
execute: function () {
BODY;
}
execute: EXECUTE,
};
});
`);
@ -601,6 +599,18 @@ export default declare((api, options) => {
path.remove();
}
let hasTLA = false;
path.traverse({
AwaitExpression(path) {
hasTLA = true;
path.stop();
},
Function(path) {
path.skip();
},
noScope: true,
});
path.node.body = [
buildTemplate({
SYSTEM_REGISTER: t.memberExpression(
@ -610,8 +620,14 @@ export default declare((api, options) => {
BEFORE_BODY: beforeBody,
MODULE_NAME: moduleName,
SETTERS: t.arrayExpression(setters),
EXECUTE: t.functionExpression(
null,
[],
t.blockStatement(path.node.body),
false,
hasTLA,
),
SOURCES: t.arrayExpression(sources),
BODY: path.node.body,
EXPORT_IDENTIFIER: t.identifier(exportIdent),
CONTEXT_IDENTIFIER: t.identifier(contextIdent),
}),

View File

@ -0,0 +1 @@
async () => await test;

View File

@ -0,0 +1,10 @@
System.register([], function (_export, _context) {
"use strict";
return {
setters: [],
execute: function () {
async () => await test;
}
};
});

View File

@ -0,0 +1,3 @@
{
"plugins": ["external-helpers", "transform-modules-systemjs", "syntax-top-level-await"]
}

View File

@ -0,0 +1,3 @@
if (maybe) {
await test;
}

View File

@ -0,0 +1,12 @@
System.register([], function (_export, _context) {
"use strict";
return {
setters: [],
execute: async function () {
if (maybe) {
await test;
}
}
};
});

View File

@ -0,0 +1,2 @@
await test;

View File

@ -0,0 +1,10 @@
System.register([], function (_export, _context) {
"use strict";
return {
setters: [],
execute: async function () {
await test;
}
};
});