UNPKG

haystack-codegen

Version:

Project Haystack Core code generation tools

54 lines (53 loc) 1.53 kB
"use strict"; /* * Copyright (c) 2021, J2 Innovations. All Rights Reserved */ Object.defineProperty(exports, "__esModule", { value: true }); exports.DocNode = void 0; const HaystackCoreImportNode_1 = require("./HaystackCoreImportNode"); const util_1 = require("./util"); const DocHeaderNode_1 = require("./DocHeaderNode"); const LibsNode_1 = require("./LibsNode"); /** * Generates a TypeScript document. * * This is the root node for a document. */ class DocNode { newLines = 0; header = new DocHeaderNode_1.DocHeaderNode(); import = new HaystackCoreImportNode_1.HaystackCoreImportNode(); libs = new LibsNode_1.LibsNode(); #nodes = new Map(); addInterface(intNode) { this.#nodes.set(intNode.name, intNode); } addNamespace(nsNode) { this.#nodes.set(`${nsNode.name}:${nsNode.intNode.name}`, nsNode); } addTypeGuard(tgNode) { this.#nodes.set(`tg-${tgNode.name}`, tgNode); } generateCode(out) { this.addAllValuesToImport(); (0, util_1.generateNodes)(out, [ this.header, this.import, this.libs, ...this.#nodes.values(), ]); } addAllValuesToImport() { const nodes = this.#nodes; const imp = this.import; if (nodes.size) { imp.types.add('HDict'); } for (const node of nodes.values()) { for (const type of node.types) { imp.types.add(type); } } } } exports.DocNode = DocNode;