MCPcopy Create free account
hub / github.com/observablehq/framework / transpileJavaScript

Function transpileJavaScript

src/javascript/transpile.ts:31–55  ·  view source on GitHub ↗
(
  node: JavaScriptNode,
  {id, path, params, mode, resolveImport, resolveFile}: TranspileOptions
)

Source from the content-addressed store, hash-verified

29}
30
31export function transpileJavaScript(
32 node: JavaScriptNode,
33 {id, path, params, mode, resolveImport, resolveFile}: TranspileOptions
34): string {
35 let async = node.async;
36 const inputs = Array.from(new Set<string>(node.references.map((r) => r.name)));
37 const outputs = Array.from(new Set<string>(node.declarations?.map((r) => r.name)));
38 const display = node.expression && !inputs.includes("display") && !inputs.includes("view");
39 if (display) inputs.push("display"), (async = true);
40 if (hasImportDeclaration(node.body)) async = true;
41 const output = new Sourcemap(node.input).trim();
42 if (params) rewriteParams(output, node.body, params, node.input);
43 rewriteImportDeclarations(output, node.body, resolveImport);
44 rewriteImportExpressions(output, node.body, resolveImport, resolveFile);
45 rewriteFileExpressions(output, node.files, path);
46 if (display) output.insertLeft(0, "display(await(\n").insertRight(node.input.length, "\n))");
47 output.insertLeft(0, `, body: ${async ? "async " : ""}(${inputs}) => {\n`);
48 if (outputs.length) output.insertLeft(0, `, outputs: ${JSON.stringify(outputs)}`);
49 if (inputs.length) output.insertLeft(0, `, inputs: ${JSON.stringify(inputs)}`);
50 if (mode && mode !== "block") output.insertLeft(0, `, mode: ${JSON.stringify(mode)}`);
51 output.insertLeft(0, `define({id: ${JSON.stringify(id)}`);
52 if (outputs.length) output.insertRight(node.input.length, `\nreturn {${outputs}};`);
53 output.insertRight(node.input.length, "\n}});\n");
54 return String(output);
55}
56
57export interface TranspileModuleOptions {
58 root: string;

Callers

nothing calls this directly

Calls 9

hasImportDeclarationFunction · 0.85
rewriteParamsFunction · 0.85
rewriteImportExpressionsFunction · 0.85
rewriteFileExpressionsFunction · 0.85
fromMethod · 0.80
trimMethod · 0.80
insertRightMethod · 0.80
insertLeftMethod · 0.80

Tested by

no test coverage detected