UNPKG

phrase-engine

Version:

Language files on steroids for conversational UIs that aren't boring.

58 lines 1.92 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const Node_1 = require("../Node"); const mapFilter_1 = require("../mapFilter"); const factories_1 = require("../factories"); const PhraseError_1 = require("../PhraseError"); class RefNode extends Node_1.PhraseNode { validateNodeName(name) { return name === 'ref'; } init(root, packet) { const support = mapFilter_1.default(factories_1.default, [ 'if', 'text', 'maybe', 'either', 'select', 'spaceless', 'unless', 'data' ]); if (!root.hasAttribute('id')) { let err = new PhraseError_1.PhraseError(`<ref>...</ref> must have an ID attribute.`); err.node(root); throw err; } if (!root.getAttribute('id').trim()) { let err = new PhraseError_1.PhraseError(`<ref>...</ref> must have an non empty ID attribute.`); err.node(root); throw err; } const id = root.getAttribute('id'); if (!(id in packet.id_map)) { let err = new PhraseError_1.PhraseError(`Element with ID "${id}" not found.`); err.node(root); throw err; } const node = packet.id_map[id]; if (!(node.nodeName in support)) { let err = new PhraseError_1.PhraseError(`<${node.nodeName}>...</${node.nodeName}> cannot be reffered to.`); err.node(root); throw err; } this.setNextNode(support[node.nodeName](node, packet)); } eval(packet, branch) { return this.next().eval(packet); } *gen(packet) { yield* this.next().gen(packet); } count(e_packet) { const ret = this.next().count(e_packet); return ret; } } exports.RefNode = RefNode; //# sourceMappingURL=RefNode.js.map