UNPKG

@atomist/automation-client

Version:

Atomist API for software low-level client

53 lines 2.49 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const _ = require("lodash"); exports.NoEventHandlersError = "NO_EVENT_HANDLERS"; function noEventHandlersWereFound(result) { return result.code !== 0 && !!result.message && result.message.startsWith(exports.NoEventHandlersError); } exports.noEventHandlersWereFound = noEventHandlersWereFound; /** * Support for implementing an automation server. */ class AbstractAutomationServer { invokeCommand(payload, ctx) { const h = this.validateCommandInvocation(payload); return this.invokeCommandHandler(payload, h, ctx); } onEvent(payload, ctx) { const h = this.automations.events.filter(eh => eh.subscriptionName === payload.extensions.operationName); if (!h || h.length === 0) { throw new Error(`${exports.NoEventHandlersError}: No event handler with name '${payload.extensions.operationName}'` + `: Known event handlers are '${this.automations.events.map(e => e.name)}'`); } else { return Promise.all(h.map(eh => this.invokeEventHandler(payload, eh, ctx))); } } validateCommandInvocation(payload) { const handler = this.automations.commands.find(h => h.name === payload.name); if (!handler) { throw new Error(`No command handler with name '${payload.name}'` + `: Known command handlers are '${this.automations.commands.map(c => c.name)}'`); } handler.parameters.forEach(p => { const payloadValue = payload.args ? payload.args.find(a => a.name === p.name) : undefined; if (!payloadValue || _.isNil(payloadValue.value)) { if (p.required && p.default_value === undefined) { throw new Error(`Parameter '${p.name}' required but missing in invocation to '${handler.name}'`); } } else { // We have a parameter. Validate it if (p.pattern && payloadValue.value.toString().match(new RegExp(p.pattern)) === null) { throw new Error(`Parameter '${p.name}' value of '${payloadValue.value}'` + ` invalid in invocation to '${handler.name}' with pattern '${p.pattern}'`); } } }); return handler; } } exports.AbstractAutomationServer = AbstractAutomationServer; //# sourceMappingURL=AbstractAutomationServer.js.map