haystack-codegen
Version:
Project Haystack Core code generation tools
54 lines (53 loc) • 1.53 kB
JavaScript
;
/*
* 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;