UNPKG

recipe-ts-runtime

Version:

TypeScript run-time library for the Recipe framework

45 lines 1.66 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const Cake_1 = require("./Cake"); const AbstractOven_1 = require("./AbstractOven"); const Payload_1 = require("./Payload"); class Oven extends AbstractOven_1.AbstractOven { constructor() { super(...arguments); this.dispatchers = {}; } bake(recipe) { let promise = Promise.resolve(this.createCake()); for (const segment of recipe.segment()) { let dispatcher; if (segment.domain in this.dispatchers) { dispatcher = this.dispatchers[segment.domain]; } else if (this.defaultDispatcher) { dispatcher = this.defaultDispatcher; } else { throw new Error(`cannot dispatch ingredient; no dispatcher registered for domain '${segment.domain}'`); } promise = promise.then(cake => { const payload = new Payload_1.Payload(segment.recipe, cake); return dispatcher(JSON.stringify(payload)).then(jsonCake => Cake_1.Cake.fromJSON(JSON.parse(jsonCake))); }); } return promise; } addDispatcher(domain, dispatcher) { if (domain in this.dispatchers) { throw new Error(`oven already has a dispatcher for domain '${domain}'`); } this.dispatchers[domain] = dispatcher; } setDefaultDispatcher(dispatcher) { this._setDefaultDispatcher(dispatcher); } _setDefaultDispatcher(dispatcher) { this.defaultDispatcher = dispatcher; } } exports.Oven = Oven; //# sourceMappingURL=Oven.js.map