46 lines
1.7 KiB
JavaScript
46 lines
1.7 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.compileOperationHandler = compileOperationHandler;
|
|
const common_1 = require("../common");
|
|
const start_operation_result_1 = require("./start-operation-result");
|
|
/**
|
|
* Compiles an operation handler into a {@link CompiledOperationHandler}. A compiled operation
|
|
* handler is a single object that is both an operation definition and a full-fledged operation
|
|
* handler for that operation.
|
|
*
|
|
* @hidden
|
|
* @internal
|
|
*/
|
|
function compileOperationHandler(definition, handler) {
|
|
if (handler == null) {
|
|
throw new TypeError(`No handler registered for operation '${definition.name}' (expected property name '${definition.name}')`);
|
|
}
|
|
if (typeof handler === "function") {
|
|
// Operation handler is declared using the shortcut syntax. Wrap it into a full-fledged handler.
|
|
return {
|
|
...definition,
|
|
start: async (ctx, input) => {
|
|
return start_operation_result_1.HandlerStartOperationResult.sync(await handler(ctx, input));
|
|
},
|
|
cancel: notImplemented,
|
|
};
|
|
}
|
|
if (typeof handler.start !== "function") {
|
|
throw new TypeError(`Handler for operation '${definition.name}' has no start method`);
|
|
}
|
|
return {
|
|
...definition,
|
|
// Defensively ensure that the handler has all the required methods,
|
|
// defaulting to throwing a not implemented error if some methods are missing.
|
|
start: handler.start.bind(handler),
|
|
cancel: handler.cancel?.bind(handler) ?? notImplemented,
|
|
};
|
|
}
|
|
/**
|
|
* @internal
|
|
* @hidden
|
|
*/
|
|
function notImplemented() {
|
|
throw new common_1.HandlerError("NOT_IMPLEMENTED", "Not implemented");
|
|
}
|
|
//# sourceMappingURL=operation-handler.js.map
|