UNPKG

every-plugin

Version:
61 lines (59 loc) 2.15 kB
const require_runtime = require('./_virtual/_rolldown/runtime.cjs'); const require_errors = require('./runtime/errors.cjs'); let _orpc_contract = require("@orpc/contract"); let effect = require("effect"); let _orpc_server = require("@orpc/server"); //#region src/plugin.ts const createPlugin = function createPlugin(config) { const configSchema = { variables: config.variables, secrets: config.secrets, context: config.context }; class CreatedPlugin { /** set during instantiation - registry key */ id; contract = config.contract; configSchema = configSchema; _deps = null; initialize(pluginConfig, plugins = {}) { return (config.initialize ?? (() => effect.Effect.succeed({})))(pluginConfig, plugins).pipe(effect.Effect.tap((deps) => effect.Effect.sync(() => { this._deps = deps; })), effect.Effect.map(() => this._deps), effect.Effect.mapError((error) => error)); } shutdown() { const self = this; return effect.Effect.gen(function* () { if (config.shutdown && self._deps) yield* config.shutdown(self._deps).pipe(effect.Effect.catchAll((error) => effect.Effect.logWarning(`Plugin shutdown hook failed for ${self.id}`, error))); self._deps = null; }); } createRouter(deps) { const base = (0, _orpc_server.implement)(config.contract).$context(); const errorMiddleware = (0, _orpc_server.onError)((error) => { const unwrapped = require_errors.extractFromFiberFailure(error); if (unwrapped !== error && unwrapped instanceof _orpc_contract.ORPCError) throw unwrapped; require_errors.formatORPCError(error); throw error; }); const builder = base.use(errorMiddleware); return config.createRouter(deps, builder); } } const PluginConstructor = CreatedPlugin; PluginConstructor.binding = { contract: config.contract, variables: config.variables, secrets: config.secrets, context: config.context }; return PluginConstructor; }; function withPlugins() { return (config) => createPlugin(config); } createPlugin.withPlugins = withPlugins; //#endregion exports.createPlugin = createPlugin; exports.withPlugins = withPlugins; //# sourceMappingURL=plugin.cjs.map