import {CompilationTargetId} from "../../types/CompilationTargetId"; import {ChunkType} from "../chunks/types/ChunkType"; import {ScriptChunk} from "../chunks/types/ScriptChunk"; import {includeChunkToIncludeDef} from "./includeChunkToIncludeDef"; import {nodeChunkToNodeDef} from "./nodeChunkToNodeDef"; import {IncludeDef} from "./types/IncludeDef"; import {NodeDefs} from "./types/NodeDefs"; import {ScriptDef} from "./types/ScriptDef"; import {getIsExportedFromNodeChunk} from "./utils/getIsExportedFromNodeChunk"; import {getNodeNameFromNodeChunk} from "./utils/getNodeNameFromNodeChunk"; export function scriptChunkToScriptDef( scriptChunk: ScriptChunk, targetId: CompilationTargetId ): ScriptDef { const {children = []} = scriptChunk; const includeDefs: Array = []; const nodeDefs: NodeDefs = {}; const nodeExports: Array = []; const result: ScriptDef = { includeDefs, nodeDefs, nodeExports }; for (const chunk of children) { switch (chunk.type) { case ChunkType.Include: includeDefs.push(includeChunkToIncludeDef(chunk)); break; case ChunkType.Node: const nodeName = getNodeNameFromNodeChunk(chunk); if (nodeName) { nodeDefs[nodeName] = nodeChunkToNodeDef(chunk, targetId); const isExported = getIsExportedFromNodeChunk(chunk); if (isExported) { nodeExports.push(nodeName); } } else { result.mainDef = nodeChunkToNodeDef(chunk, targetId); } break; } } return result; }