import {ScriptDef} from "../parser/definition/types/ScriptDef"; import {CompilationTargetId} from "../types/CompilationTargetId"; import {compileExports} from "./compileExports"; import {compileFactories} from "./compileFactories"; import {compileImports} from "./compileImports"; import {compileLibrary} from "./compileLibrary"; import {compileMain} from "./compileMain"; import {compileNodeDef} from "./compileNodeDef"; export function compileScriptDef( scriptDef: ScriptDef, targetId: CompilationTargetId ): string { const result: Array = []; const { mainDef, nodeDefs, nodeExports } = scriptDef; result.push(compileImports()); result.push(compileFactories(nodeDefs, targetId)); result.push(compileLibrary(nodeDefs)); result.push(compileExports(nodeExports)); if (mainDef) { // Compiled, user-defined factory names can't contain "$" result.push(compileNodeDef("$main", mainDef, targetId)); result.push(compileMain()); } return result.join("\n"); }