UNPKG

phrase-engine

Version:

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

74 lines 2.56 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const PhraseError_1 = require("../PhraseError"); const RefableNode_1 = require("../RefableNode"); const peek_1 = require("../peek"); class DataNode extends RefableNode_1.RefableNode { validateNodeName(name) { return name === 'data'; } init(root, packet) { if (!root.hasAttribute('key')) { let err = new PhraseError_1.PhraseError(`<data /> tags must include a key attribute.`); err.node(root); throw err; } const check_arr = root .getAttribute('key') .split('|') .map(key => key.trim()); this.__check_arr = check_arr; this.__evaulator = (eval_pack) => { let key = check_arr.find(key => key in eval_pack.data); if (key === undefined) { throw new Error(`No data for keys "${check_arr.join(', ')}"`); } return eval_pack.data[key]; }; this.setNextNode(peek_1.default(packet.next_stack)); this.registararGenerate(root); } eval(packet, branch) { this.registerRender(packet); packet.sentence_components.push(this.__evaulator(packet)); return this.next().eval(packet); } *gen(packet) { this.registerRender(packet); packet.sentence_components.push(this.__evaulator(packet)); yield* this.next().gen(packet); packet.sentence_components.pop(); this.deregisterRender(packet); } vars(packet) { let check_array_copy = this.__check_arr.slice(0); if (!this.__vared) { this.__vared = true; let popped = check_array_copy.pop(); packet.vars[popped] = packet.vars[popped] || []; packet.vars[popped].push({ type: 'string', last: true }); popped = check_array_copy.pop(); while (popped) { packet.vars[popped] = packet.vars[popped] || []; packet.vars[popped].push({ type: 'string', last: false }); popped = check_array_copy.pop(); } this.next().vars(packet); } return packet; } count(e_packet) { this.registerRender(e_packet); const ret = this.next().count(e_packet); this.registerRender(e_packet); return ret; } } exports.DataNode = DataNode; //# sourceMappingURL=DataNode.js.map