UNPKG

phrase-engine

Version:

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

68 lines 2.34 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const RefableNode_1 = require("../RefableNode"); const mapFilter_1 = require("../mapFilter"); const factories_1 = require("../factories"); const PhraseError_1 = require("../PhraseError"); class EitherNode extends RefableNode_1.RefableNode { validateNodeName(name) { return name === 'either'; } init(root, packet) { const routes = []; const type_support = mapFilter_1.default(factories_1.default, [ 'this', 'or' ]); const length = root.childNodes.length; for (let i = length - 1; i > -1; i--) { let node = root.childNodes.item(i); if (node.nodeName === '#text') { continue; } if (!(node.nodeName in type_support)) { let err = new PhraseError_1.PhraseError(`Unrecognized tag <${node.nodeName}>...</${node.nodeName}> under <either>...</either>`); err.node(root); throw err; } routes.push(type_support[node.nodeName](node, packet)); this.__routes = routes; } if (routes.length === 0) { let err = new PhraseError_1.PhraseError(`Either should always have atleast one path.`); err.node(root); throw err; } this.registararGenerate(root); } eval(packet, branch = Math.round(Math.random() * (Math.pow(2, 16)))) { this.registerRender(packet); return this.__routes[branch % this.__routes.length].eval(packet); } *gen(packet) { this.registerRender(packet); for (let route of this.__routes) { yield* route.gen(packet); } this.deregisterRender(packet); } vars(packet) { if (!this.__vared) { this.__routes.forEach(route => { route.vars(packet); }); this.__vared = true; } return packet; } count(e_packet) { this.registerRender(e_packet); const ret = this.__routes.map(route => { return route.count(e_packet); }).reduce((a, b) => a + b); this.deregisterRender(e_packet); return ret; } } exports.EitherNode = EitherNode; //# sourceMappingURL=EitherNode.js.map