const doNotModify =
"/* DO NOT MODIFY: use rebuild_async_stubs.js to regenerate */\n";
function __TEMPLATE__(__ARGS_PARAM__) {
const id = nextPromiseId;
try {
const maybeResult = __OP__(__ARGS__);
if (maybeResult !== undefined) {
return PromiseResolve(maybeResult);
}
} catch (err) {
__ERR__;
ErrorCaptureStackTrace(err, __TEMPLATE__);
return PromiseReject(err);
}
if (isLeakTracingEnabled) {
submitLeakTrace(id);
}
nextPromiseId = (id + 1) & 0xffffffff;
return setPromise(id);
}
const infraJsPath = new URL("00_infra.js", import.meta.url);
const infraJs = Deno.readTextFileSync(infraJsPath);
const infraPristine = infraJs.replaceAll(
/\/\* BEGIN TEMPLATE ([^ ]+) \*\/.*?\/\* END TEMPLATE \*\//smg,
"TEMPLATE-$1",
);
const templateString = __TEMPLATE__.toString();
let asyncStubCases = "/* BEGIN TEMPLATE setUpAsyncStub */\n";
asyncStubCases += doNotModify;
const vars = "abcdefghijklm";
for (let i = 0; i < 10; i++) {
let args = "id";
for (let j = 0; j < i; j++) {
args += `, ${vars[j]}`;
}
const name = `async_op_${i}`;
const func = `fn = ${templateString}`
.replaceAll(/__TEMPLATE__/g, name)
.replaceAll(/__ARGS__/g, args)
.replaceAll(/__ARGS_PARAM__/g, args.replace(/id(, )?/, ""))
.replaceAll(/__OP__/g, "originalOp")
.replaceAll(/[\s]*__ERR__;/g, "")
.replaceAll(/^/gm, " ");
asyncStubCases += `
case ${i}:
${func};
break;
`.trim() + "\n";
}
asyncStubCases += "/* END TEMPLATE */";
const asyncStubIndent =
infraPristine.match(/^([\t ]+)(?=TEMPLATE-setUpAsyncStub)/m)[0];
const infraOutput = infraPristine
.replace(
/[\t ]+TEMPLATE-setUpAsyncStub/,
asyncStubCases.replaceAll(/^/gm, asyncStubIndent),
);
if (Deno.args[0] === "--check") {
if (infraOutput !== infraJs) {
Deno.writeTextFileSync("/tmp/mismatch.txt", infraOutput);
throw new Error(
"Mismatch between pristine and updated source (wrote mismatch to /tmp/mismatch.txt)",
);
} else {
console.log("✅ Templated sections would not change");
}
} else {
Deno.writeTextFileSync(infraJsPath, infraOutput);
}