UNPKG

@aradox/multi-orm

Version:

Type-safe ORM with multi-datasource support, row-level security, and Prisma-like API for PostgreSQL, SQL Server, and HTTP APIs

84 lines 2.49 kB
"use strict"; /** * Middleware and Hooks System for Row-Level Security * * This module defines the types and interfaces for query middleware, * enabling features like: * - Row-level security (RLS) / tenant isolation * - Audit logging * - Query caching * - Performance monitoring * - Data sanitization */ Object.defineProperty(exports, "__esModule", { value: true }); exports.MiddlewareChain = void 0; /** * Middleware chain executor */ class MiddlewareChain { middlewares = []; /** * Register a middleware */ use(middleware) { this.middlewares.push(middleware); } /** * Execute beforeQuery hooks in order */ async executeBeforeQuery(model, operation, args, context) { let modifiedArgs = args; for (const middleware of this.middlewares) { if (middleware.beforeQuery) { modifiedArgs = await middleware.beforeQuery({ model, operation, args: modifiedArgs, context }); } } return modifiedArgs; } /** * Execute afterQuery hooks in order */ async executeAfterQuery(model, operation, args, result, context) { let modifiedResult = result; for (const middleware of this.middlewares) { if (middleware.afterQuery) { modifiedResult = await middleware.afterQuery({ model, operation, args, result: modifiedResult, context }); } } return modifiedResult; } /** * Execute error hooks (all run, errors are logged but not thrown) */ async executeOnError(model, operation, args, error, context) { for (const middleware of this.middlewares) { if (middleware.onError) { try { await middleware.onError({ model, operation, args, error, context }); } catch (hookError) { console.error(`Error in middleware "${middleware.name || 'anonymous'}" onError hook:`, hookError); } } } } } exports.MiddlewareChain = MiddlewareChain; //# sourceMappingURL=middleware.js.map