UNPKG

ts-simple-ast

Version:

TypeScript compiler wrapper for AST navigation and code generation.

51 lines (49 loc) 2.03 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const ts = require("typescript"); const errors = require("./../../errors"); const manipulation_1 = require("./../../manipulation"); const callBaseFill_1 = require("./../callBaseFill"); function QuestionTokenableNode(Base) { return class extends Base { hasQuestionToken() { return this.compilerNode.questionToken != null; } getQuestionTokenNode() { if (this.compilerNode.questionToken == null) return undefined; return this.global.compilerFactory.getNodeFromCompilerNode(this.compilerNode.questionToken, this.sourceFile); } getQuestionTokenNodeOrThrow() { return errors.throwIfNullOrUndefined(this.getQuestionTokenNode(), "Expected to find a question token."); } setIsOptional(value) { const questionTokenNode = this.getQuestionTokenNode(); const hasQuestionToken = questionTokenNode != null; if (value === hasQuestionToken) return this; if (value) { const colonNode = this.getFirstChildByKindOrThrow(ts.SyntaxKind.ColonToken); manipulation_1.insertIntoParent({ insertPos: colonNode.getStart(), childIndex: colonNode.getChildIndex(), insertItemsCount: 1, parent: this, newText: "?" }); } else { manipulation_1.removeChildren({ children: [questionTokenNode] }); } return this; } fill(structure) { callBaseFill_1.callBaseFill(Base.prototype, this, structure); if (structure.hasQuestionToken != null) this.setIsOptional(structure.hasQuestionToken); return this; } }; } exports.QuestionTokenableNode = QuestionTokenableNode; //# sourceMappingURL=QuestionTokenableNode.js.map