@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
JavaScript
;
/**
* 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