recipe-ts-runtime
Version:
TypeScript run-time library for the Recipe framework
45 lines • 1.66 kB
JavaScript
;
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