import {map} from "@cranq/object-utils"; import {CodeNodeDef} from "../parser/definition/types/CodeNodeDef"; import {CompilationTargetId} from "../types/CompilationTargetId"; import {compileCleanupHandler} from "./compileCleanupHandler"; import {compileInitHandler} from "./compileInitHandler"; import {compileInputHandler} from "./compileInputHandler"; import {compileSpreadInputHandlers} from "./compileSpreadInputHandlers"; import {compileArray} from "./utils/compileArray"; import {compileDictionary} from "./utils/compileDectionary"; export function compileCodeNodeDef( factoryId: string, codeNodeDef: CodeNodeDef, // TODO: Should be taken into account. Currently JS-compatibles only. targetId: CompilationTargetId ): string { const { cleanupHandler, initHandler, inputHandlers, inputNames, outputNames, spreadInputHandlers, spreadInputNames, spreadOutputNames } = codeNodeDef; return `const ${factoryId} = (params) => createCodeNode({ "cleanupHandler": ${cleanupHandler && compileCleanupHandler(cleanupHandler)}, "initHandler": ${initHandler && compileInitHandler(initHandler)}, "inputHandlers": ${compileDictionary( map(inputHandlers, compileInputHandler))}, "spreadInputHandlers": ${compileArray( spreadInputHandlers.map(compileSpreadInputHandlers))}, "inputNames": ${JSON.stringify(inputNames)}, "outputNames": ${JSON.stringify(outputNames)}, "spreadInputNames": ${JSON.stringify(spreadInputNames)}, "spreadOutputNames": ${JSON.stringify(spreadOutputNames)} }, params);`; }