@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
125 lines • 3.97 kB
TypeScript
import { CacheOptions } from './runtime/cache';
import { GeneratedClient } from './client/generated-client';
import { Middleware, MiddlewareChain, QueryContext } from './types/middleware';
/**
* ORM Client Factory - Used to generate type-safe clients from schema
*
* Usage:
* ```typescript
* import { ORMClient } from '@your-org/orm';
* import * as fs from 'fs';
*
* const schema = fs.readFileSync('./schema.prisma', 'utf-8');
* const orm = new ORMClient(schema);
* const client = orm.generate();
*
* // Now use type-safe methods
* const users = await client.User.findMany({ where: { active: true } });
* ```
*/
export declare class ORMClient {
private ir;
private stitcher;
private adapters;
private schemaPath?;
private middlewareChain;
private queryContext;
constructor(schema: string, options?: {
schemaPath?: string;
cache?: CacheOptions;
});
/**
* Register middleware for query interception
*
* Example:
* ```typescript
* client.use({
* name: 'tenant-isolation',
* beforeQuery: ({ model, args, context }) => {
* if (context.user?.tenantId) {
* args.where = { ...args.where, tenant_id: context.user.tenantId };
* }
* return args;
* }
* });
* ```
*/
use(middleware: Middleware): void;
/**
* Set query context (user, tenantId, etc.)
* This context is available to all middleware hooks
*
* Example:
* ```typescript
* client.setContext({
* user: { id: 123, tenantId: 456, role: 'admin' }
* });
* ```
*/
setContext(context: QueryContext): void;
/**
* Get current query context
*/
getContext(): QueryContext;
/**
* Get middleware chain (for GeneratedClient to use)
*/
getMiddlewareChain(): MiddlewareChain;
/**
* Generate a type-safe client with model delegates
* This is similar to Prisma's generated client pattern
*
* Checks if TypeScript types have been generated and suggests running
* the generator if they don't exist or are out of date.
*/
generate(): GeneratedClient;
/**
* Check if generated types exist and if they're up to date
*/
private checkGeneratedTypes;
private initializeAdapters;
private parseMSSQLConnectionString;
private resolveEnvVar;
/**
* @deprecated Use generate() to create a type-safe client instead
* @example
* const client = orm.generate();
* await client.User.findMany({ ... });
*/
findMany(model: string, args?: any): Promise<any>;
/**
* @deprecated Use generate() to create a type-safe client instead
*/
findUnique(model: string, args: any): Promise<any>;
/**
* @deprecated Use generate() to create a type-safe client instead
*/
count(model: string, args?: any): Promise<number>;
/**
* @deprecated Use generate() to create a type-safe client instead
*/
create(model: string, args: any): Promise<any>;
/**
* @deprecated Use generate() to create a type-safe client instead
*/
update(model: string, args: any): Promise<any>;
/**
* @deprecated Use generate() to create a type-safe client instead
*/
delete(model: string, args: any): Promise<any>;
/**
* @deprecated Use client.$disconnect() instead
*/
close(): Promise<void>;
}
export * from './types/ir';
export * from './types/adapter';
export { DSLParser } from './parser';
export { PostgresAdapter } from './adapters/postgres';
export { HttpApiAdapter } from './adapters/http';
export { MSSQLAdapter } from './adapters/mssql';
export { MSSQLNativeAdapter } from './adapters/mssql';
export { Stitcher } from './runtime/stitcher';
export { GeneratedClient, ModelDelegate } from './client/generated-client';
export { TypeGenerator, generateTypes } from './generator/typegen';
//# sourceMappingURL=index.d.ts.map