every-plugin
Version:
61 lines (59 loc) • 2.15 kB
JavaScript
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