schemock 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +82 -0
- package/dist/adapters/index.d.mts +1364 -0
- package/dist/adapters/index.d.ts +1364 -0
- package/dist/adapters/index.js +36988 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/index.mjs +36972 -0
- package/dist/adapters/index.mjs.map +1 -0
- package/dist/cli/index.d.mts +831 -0
- package/dist/cli/index.d.ts +831 -0
- package/dist/cli/index.js +4425 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/index.mjs +4401 -0
- package/dist/cli/index.mjs.map +1 -0
- package/dist/cli.js +6776 -0
- package/dist/index.d.mts +8 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +39439 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +39367 -0
- package/dist/index.mjs.map +1 -0
- package/dist/middleware/index.d.mts +688 -0
- package/dist/middleware/index.d.ts +688 -0
- package/dist/middleware/index.js +921 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/index.mjs +899 -0
- package/dist/middleware/index.mjs.map +1 -0
- package/dist/react/index.d.mts +316 -0
- package/dist/react/index.d.ts +316 -0
- package/dist/react/index.js +466 -0
- package/dist/react/index.js.map +1 -0
- package/dist/react/index.mjs +456 -0
- package/dist/react/index.mjs.map +1 -0
- package/dist/runtime/index.d.mts +814 -0
- package/dist/runtime/index.d.ts +814 -0
- package/dist/runtime/index.js +1270 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/index.mjs +1246 -0
- package/dist/runtime/index.mjs.map +1 -0
- package/dist/schema/index.d.mts +838 -0
- package/dist/schema/index.d.ts +838 -0
- package/dist/schema/index.js +696 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/index.mjs +681 -0
- package/dist/schema/index.mjs.map +1 -0
- package/dist/types-C1MiZh1d.d.ts +96 -0
- package/dist/types-C2bd2vgy.d.mts +773 -0
- package/dist/types-C2bd2vgy.d.ts +773 -0
- package/dist/types-C9VMgu3E.d.mts +289 -0
- package/dist/types-DV2DS7wj.d.mts +96 -0
- package/dist/types-c2AN3vky.d.ts +289 -0
- package/package.json +116 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/middleware/chain.ts","../../src/middleware/auth.ts","../../src/middleware/retry.ts","../../src/middleware/cache.ts","../../src/middleware/logger.ts","../../src/middleware/context.ts","../../src/middleware/rls-middleware.ts","../../src/middleware/defaults.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * MiddlewareChain - Executor for composable middleware\n *\n * Chains middleware in order, executing before hooks, the handler,\n * and after hooks in sequence.\n *\n * @module middleware/chain\n * @category Middleware\n */\n\nimport type { AdapterResponse } from '../adapters/types';\nimport type { Middleware, MiddlewareContext, MiddlewareResult } from './types';\n\n/**\n * MiddlewareChain class for executing middleware in sequence.\n *\n * Supports both hook-based middleware (before/after/onError) and\n * function-based middleware (Koa-style handler).\n *\n * @example\n * ```typescript\n * const chain = new MiddlewareChain([\n * createAuthMiddleware({ getToken: () => 'token' }),\n * createLoggerMiddleware(),\n * createCacheMiddleware({ ttl: 60000 }),\n * ]);\n *\n * const result = await chain.execute(ctx, async () => {\n * return adapter.findMany(ctx);\n * });\n * ```\n */\nexport class MiddlewareChain {\n /** The middleware stack */\n private middlewares: Middleware[];\n\n /**\n * Create a new MiddlewareChain.\n *\n * @param middlewares - Array of middleware to execute in order\n */\n constructor(middlewares: Middleware[]) {\n this.middlewares = middlewares.filter((m) => m.enabled !== false);\n }\n\n /**\n * Execute the middleware chain with the given handler.\n *\n * @param ctx - The middleware context\n * @param handler - The final handler (adapter call)\n * @returns The response after all middleware processing\n *\n * @example\n * ```typescript\n * const result = await chain.execute<User[]>(\n * { entity: 'user', operation: 'findMany', metadata: {} },\n * () => adapter.findMany({ entity: 'user' })\n * );\n * ```\n */\n async execute<T>(\n ctx: MiddlewareContext,\n handler: () => Promise<AdapterResponse<T>>\n ): Promise<AdapterResponse<T>> {\n // Set start time for timing middleware\n ctx.startTime = Date.now();\n ctx.metadata = ctx.metadata ?? {};\n\n // Check if any middleware uses function-style handlers\n const hasFunctionHandlers = this.middlewares.some((m) => m.handler);\n\n if (hasFunctionHandlers) {\n return this.executeFunctionStyle(ctx, handler);\n }\n\n return this.executeHookStyle(ctx, handler);\n }\n\n /**\n * Execute middleware using hook-style (before/after/onError).\n */\n private async executeHookStyle<T>(\n ctx: MiddlewareContext,\n handler: () => Promise<AdapterResponse<T>>\n ): Promise<AdapterResponse<T>> {\n // Execute all 'before' hooks\n for (const middleware of this.middlewares) {\n if (middleware.before) {\n const result = await middleware.before(ctx);\n if (result && !result.continue) {\n // Short-circuit with provided response\n if (result.response) {\n return result.response as AdapterResponse<T>;\n }\n if (result.error) {\n throw result.error;\n }\n }\n }\n }\n\n // Execute the main handler\n let response: AdapterResponse<T>;\n try {\n response = await handler();\n } catch (error) {\n // Execute onError hooks\n for (const middleware of this.middlewares) {\n if (middleware.onError) {\n const result = await middleware.onError(\n ctx,\n error instanceof Error ? error : new Error(String(error))\n );\n if (result && !result.continue) {\n if (result.response) {\n return result.response as AdapterResponse<T>;\n }\n if (result.error) {\n throw result.error;\n }\n }\n }\n }\n // Re-throw if not handled\n throw error;\n }\n\n // Execute all 'after' hooks in reverse order\n for (let i = this.middlewares.length - 1; i >= 0; i--) {\n const middleware = this.middlewares[i];\n if (middleware.after) {\n response = await middleware.after(ctx, response);\n }\n }\n\n return response;\n }\n\n /**\n * Execute middleware using function-style (Koa-like compose).\n */\n private async executeFunctionStyle<T>(\n ctx: MiddlewareContext,\n handler: () => Promise<AdapterResponse<T>>\n ): Promise<AdapterResponse<T>> {\n // Build the middleware stack from right to left\n let index = -1;\n\n const dispatch = async (i: number): Promise<AdapterResponse<T>> => {\n if (i <= index) {\n throw new Error('next() called multiple times');\n }\n index = i;\n\n if (i >= this.middlewares.length) {\n // End of middleware chain, execute handler\n return handler();\n }\n\n const middleware = this.middlewares[i];\n\n if (middleware.handler) {\n // Function-style middleware\n return middleware.handler(ctx, () => dispatch(i + 1));\n }\n\n // Hook-style middleware in function chain\n if (middleware.before) {\n const result = await middleware.before(ctx);\n if (result && !result.continue) {\n if (result.response) {\n return result.response as AdapterResponse<T>;\n }\n if (result.error) {\n throw result.error;\n }\n }\n }\n\n let response: AdapterResponse<T>;\n try {\n response = await dispatch(i + 1);\n } catch (error) {\n if (middleware.onError) {\n const result = await middleware.onError(\n ctx,\n error instanceof Error ? error : new Error(String(error))\n );\n if (result && !result.continue) {\n if (result.response) {\n return result.response as AdapterResponse<T>;\n }\n if (result.error) {\n throw result.error;\n }\n }\n }\n throw error;\n }\n\n if (middleware.after) {\n response = await middleware.after(ctx, response);\n }\n\n return response;\n };\n\n return dispatch(0);\n }\n\n /**\n * Add middleware to the chain.\n *\n * @param middleware - Middleware to add\n */\n use(middleware: Middleware): this {\n if (middleware.enabled !== false) {\n this.middlewares.push(middleware);\n }\n return this;\n }\n\n /**\n * Remove middleware by name.\n *\n * @param name - Name of middleware to remove\n */\n remove(name: string): this {\n this.middlewares = this.middlewares.filter((m) => m.name !== name);\n return this;\n }\n\n /**\n * Get middleware by name.\n *\n * @param name - Middleware name\n * @returns The middleware or undefined\n */\n get(name: string): Middleware | undefined {\n return this.middlewares.find((m) => m.name === name);\n }\n\n /**\n * Get all middleware names.\n *\n * @returns Array of middleware names\n */\n names(): string[] {\n return this.middlewares.map((m) => m.name);\n }\n\n /**\n * Get the middleware count.\n */\n get length(): number {\n return this.middlewares.length;\n }\n}\n\n/**\n * Create a middleware chain from an array of middleware.\n *\n * @param middlewares - Array of middleware\n * @returns A configured MiddlewareChain\n *\n * @example\n * ```typescript\n * const chain = createMiddlewareChain([\n * createAuthMiddleware({ getToken: () => token }),\n * createLoggerMiddleware(),\n * ]);\n * ```\n */\nexport function createMiddlewareChain(middlewares: Middleware[]): MiddlewareChain {\n return new MiddlewareChain(middlewares);\n}\n","/**\n * Auth Middleware - Authentication token management\n *\n * Automatically attaches authentication tokens to requests\n * and handles token refresh on 401 responses.\n *\n * @module middleware/auth\n * @category Middleware\n */\n\nimport type { AdapterResponse } from '../adapters/types';\nimport type { Middleware, MiddlewareContext } from './types';\n\n/**\n * Configuration options for auth middleware.\n */\nexport interface AuthMiddlewareConfig {\n /** Function to get the current auth token */\n getToken: () => string | null | Promise<string | null>;\n /** Function to refresh the token (optional) */\n refreshToken?: () => Promise<string>;\n /** Callback when user is unauthorized (optional) */\n onUnauthorized?: () => void;\n /** Header name for the token (default: 'Authorization') */\n headerName?: string;\n /** Token prefix (default: 'Bearer ') */\n tokenPrefix?: string;\n /** Whether to skip auth for certain operations */\n skipOperations?: string[];\n}\n\n/**\n * Create an authentication middleware.\n *\n * Attaches auth tokens to requests and handles 401 responses\n * with optional token refresh.\n *\n * @param config - Auth middleware configuration\n * @returns A configured Middleware instance\n *\n * @example\n * ```typescript\n * const authMiddleware = createAuthMiddleware({\n * getToken: () => localStorage.getItem('token'),\n * refreshToken: async () => {\n * const response = await fetch('/auth/refresh');\n * const { token } = await response.json();\n * localStorage.setItem('token', token);\n * return token;\n * },\n * onUnauthorized: () => {\n * window.location.href = '/login';\n * },\n * });\n * ```\n */\nexport function createAuthMiddleware(config: AuthMiddlewareConfig): Middleware {\n const {\n getToken,\n refreshToken,\n onUnauthorized,\n headerName = 'Authorization',\n tokenPrefix = 'Bearer ',\n skipOperations = [],\n } = config;\n\n // Track if we're currently refreshing to prevent multiple refreshes\n let isRefreshing = false;\n let refreshPromise: Promise<string> | null = null;\n\n return {\n name: 'auth',\n\n async before(ctx: MiddlewareContext) {\n // Skip auth for certain operations\n if (skipOperations.includes(ctx.operation)) {\n return;\n }\n\n // Get the current token\n const token = await getToken();\n\n if (token) {\n // Initialize headers if not present\n ctx.headers = ctx.headers ?? {};\n ctx.headers[headerName] = `${tokenPrefix}${token}`;\n }\n\n // Add auth metadata\n ctx.metadata.authenticated = !!token;\n },\n\n async after<T>(ctx: MiddlewareContext, response: AdapterResponse<T>) {\n // Check for 401 Unauthorized\n const isUnauthorized =\n response.error?.message?.includes('401') ||\n response.error?.message?.includes('Unauthorized');\n\n if (!isUnauthorized) {\n return response;\n }\n\n // Attempt token refresh if available\n if (refreshToken && !ctx.metadata.tokenRefreshAttempted) {\n ctx.metadata.tokenRefreshAttempted = true;\n\n try {\n // Handle concurrent refresh requests\n if (!isRefreshing) {\n isRefreshing = true;\n refreshPromise = refreshToken();\n }\n\n const newToken = await refreshPromise;\n isRefreshing = false;\n refreshPromise = null;\n\n // Update context with new token\n ctx.headers = ctx.headers ?? {};\n ctx.headers[headerName] = `${tokenPrefix}${newToken}`;\n\n // Mark for retry\n return {\n ...response,\n meta: {\n ...response.meta,\n shouldRetry: true,\n newToken,\n },\n };\n } catch (refreshError) {\n isRefreshing = false;\n refreshPromise = null;\n\n // Token refresh failed, user is unauthorized\n if (onUnauthorized) {\n onUnauthorized();\n }\n }\n } else if (onUnauthorized) {\n // No refresh function or already attempted, notify unauthorized\n onUnauthorized();\n }\n\n return response;\n },\n\n async onError(ctx: MiddlewareContext, error: Error) {\n // Check if error is a 401\n const isUnauthorized =\n error.message.includes('401') ||\n error.message.includes('Unauthorized');\n\n if (isUnauthorized && onUnauthorized) {\n onUnauthorized();\n }\n\n // Let the error propagate\n return { continue: true };\n },\n };\n}\n","/**\n * Retry Middleware - Automatic retry with exponential backoff\n *\n * Automatically retries failed requests with configurable\n * retry count and exponential backoff delay.\n *\n * @module middleware/retry\n * @category Middleware\n */\n\nimport type { AdapterResponse } from '../adapters/types';\nimport type { Middleware, MiddlewareContext } from './types';\n\n/**\n * Configuration options for retry middleware.\n */\nexport interface RetryMiddlewareConfig {\n /** Maximum number of retry attempts (default: 3) */\n maxRetries?: number;\n /** Initial delay between retries in ms (default: 1000) */\n retryDelay?: number;\n /** Whether to use exponential backoff (default: true) */\n exponentialBackoff?: boolean;\n /** Maximum delay in ms (default: 30000) */\n maxDelay?: number;\n /** HTTP status codes that should trigger a retry */\n retryableStatuses?: number[];\n /** Custom function to determine if an error is retryable */\n isRetryable?: (error: Error) => boolean;\n /** Callback when a retry is attempted */\n onRetry?: (attempt: number, error: Error, ctx: MiddlewareContext) => void;\n}\n\n/**\n * Default retryable HTTP status codes.\n */\nconst DEFAULT_RETRYABLE_STATUSES = [408, 429, 500, 502, 503, 504];\n\n/**\n * Create a retry middleware with exponential backoff.\n *\n * @param config - Retry middleware configuration\n * @returns A configured Middleware instance\n *\n * @example\n * ```typescript\n * const retryMiddleware = createRetryMiddleware({\n * maxRetries: 3,\n * retryDelay: 1000,\n * onRetry: (attempt, error) => {\n * console.log(`Retry attempt ${attempt}: ${error.message}`);\n * },\n * });\n * ```\n */\nexport function createRetryMiddleware(config?: RetryMiddlewareConfig): Middleware {\n const {\n maxRetries = 3,\n retryDelay = 1000,\n exponentialBackoff = true,\n maxDelay = 30000,\n retryableStatuses = DEFAULT_RETRYABLE_STATUSES,\n isRetryable,\n onRetry,\n } = config ?? {};\n\n /**\n * Check if an error should trigger a retry.\n */\n function shouldRetry(error: Error): boolean {\n // Custom retry logic\n if (isRetryable) {\n return isRetryable(error);\n }\n\n // Check for retryable HTTP status codes\n const message = error.message;\n for (const status of retryableStatuses) {\n if (message.includes(String(status))) {\n return true;\n }\n }\n\n // Network errors\n if (\n message.includes('Network') ||\n message.includes('ECONNREFUSED') ||\n message.includes('ETIMEDOUT') ||\n message.includes('timeout') ||\n message.includes('fetch failed')\n ) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Calculate delay for a retry attempt.\n */\n function calculateDelay(attempt: number): number {\n if (!exponentialBackoff) {\n return retryDelay;\n }\n\n // Exponential backoff: delay * 2^attempt with jitter\n const exponentialDelay = retryDelay * Math.pow(2, attempt);\n const jitter = Math.random() * 0.1 * exponentialDelay;\n return Math.min(exponentialDelay + jitter, maxDelay);\n }\n\n /**\n * Sleep for a specified duration.\n */\n function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n return {\n name: 'retry',\n\n async before(ctx: MiddlewareContext) {\n // Initialize retry count\n ctx.retryCount = ctx.retryCount ?? 0;\n },\n\n async onError(ctx: MiddlewareContext, error: Error) {\n const attempt = ctx.retryCount ?? 0;\n\n // Check if we should retry\n if (attempt >= maxRetries || !shouldRetry(error)) {\n // Max retries exceeded or non-retryable error\n return { continue: true };\n }\n\n // Notify about retry\n if (onRetry) {\n onRetry(attempt + 1, error, ctx);\n }\n\n // Calculate and wait for backoff delay\n const delay = calculateDelay(attempt);\n await sleep(delay);\n\n // Increment retry count for next attempt\n ctx.retryCount = attempt + 1;\n\n // Add retry metadata\n ctx.metadata.lastRetryError = error.message;\n ctx.metadata.retryAttempt = attempt + 1;\n\n // Signal that we should retry (not continue to error handlers)\n return {\n continue: false,\n response: {\n data: null,\n meta: { shouldRetry: true, retryAttempt: attempt + 1 },\n },\n };\n },\n\n async after<T>(ctx: MiddlewareContext, response: AdapterResponse<T>) {\n // Add retry info to response metadata\n if (ctx.retryCount && ctx.retryCount > 0) {\n response.meta = {\n ...response.meta,\n retryCount: ctx.retryCount,\n };\n }\n return response;\n },\n };\n}\n","/**\n * Cache Middleware - Response caching with TTL\n *\n * Caches successful responses to reduce API calls\n * and improve performance.\n *\n * @module middleware/cache\n * @category Middleware\n */\n\nimport type { AdapterResponse } from '../adapters/types';\nimport type { Middleware, MiddlewareContext } from './types';\n\n/**\n * Configuration options for cache middleware.\n */\nexport interface CacheMiddlewareConfig {\n /** Time-to-live for cache entries in ms (default: 60000 = 1 minute) */\n ttl?: number;\n /** Operations to cache (default: ['findOne', 'findMany']) */\n cacheOperations?: string[];\n /** Maximum number of cached entries (default: 1000) */\n maxSize?: number;\n /** Custom cache key generator */\n getCacheKey?: (ctx: MiddlewareContext) => string;\n /** Whether to cache errors (default: false) */\n cacheErrors?: boolean;\n /** Storage backend (default: in-memory Map) */\n storage?: CacheStorage;\n}\n\n/**\n * Cache storage interface.\n */\nexport interface CacheStorage {\n get<T>(key: string): Promise<CacheEntry<T> | undefined>;\n set<T>(key: string, entry: CacheEntry<T>): Promise<void>;\n delete(key: string): Promise<void>;\n clear(): Promise<void>;\n size(): Promise<number>;\n}\n\n/**\n * Cache entry structure.\n */\nexport interface CacheEntry<T> {\n /** Cached response data */\n data: AdapterResponse<T>;\n /** Timestamp when cached */\n timestamp: number;\n /** TTL for this entry */\n ttl: number;\n}\n\n/**\n * Default in-memory cache storage.\n */\nclass MemoryCacheStorage implements CacheStorage {\n private cache = new Map<string, CacheEntry<unknown>>();\n private maxSize: number;\n\n constructor(maxSize: number = 1000) {\n this.maxSize = maxSize;\n }\n\n async get<T>(key: string): Promise<CacheEntry<T> | undefined> {\n return this.cache.get(key) as CacheEntry<T> | undefined;\n }\n\n async set<T>(key: string, entry: CacheEntry<T>): Promise<void> {\n // Evict oldest entries if at max size\n if (this.cache.size >= this.maxSize) {\n const firstKey = this.cache.keys().next().value;\n if (firstKey) {\n this.cache.delete(firstKey);\n }\n }\n this.cache.set(key, entry);\n }\n\n async delete(key: string): Promise<void> {\n this.cache.delete(key);\n }\n\n async clear(): Promise<void> {\n this.cache.clear();\n }\n\n async size(): Promise<number> {\n return this.cache.size;\n }\n}\n\n/**\n * Default operations to cache.\n */\nconst DEFAULT_CACHE_OPERATIONS = ['findOne', 'findMany'];\n\n/**\n * Create a cache middleware with TTL.\n *\n * @param config - Cache middleware configuration\n * @returns A configured Middleware instance\n *\n * @example\n * ```typescript\n * const cacheMiddleware = createCacheMiddleware({\n * ttl: 60000, // 1 minute\n * cacheOperations: ['findOne', 'findMany'],\n * });\n * ```\n *\n * @example\n * ```typescript\n * // With custom cache key\n * const cacheMiddleware = createCacheMiddleware({\n * ttl: 300000, // 5 minutes\n * getCacheKey: (ctx) => `${ctx.entity}:${ctx.params?.id}:${ctx.filter?.status}`,\n * });\n * ```\n */\nexport function createCacheMiddleware(config?: CacheMiddlewareConfig): Middleware {\n const {\n ttl = 60000,\n cacheOperations = DEFAULT_CACHE_OPERATIONS,\n maxSize = 1000,\n getCacheKey,\n cacheErrors = false,\n storage,\n } = config ?? {};\n\n // Use provided storage or create in-memory storage\n const cacheStorage = storage ?? new MemoryCacheStorage(maxSize);\n\n /**\n * Generate a cache key from context.\n */\n function generateCacheKey(ctx: MiddlewareContext): string {\n if (getCacheKey) {\n return getCacheKey(ctx);\n }\n\n // Default key: operation:entity:params:filter\n const parts = [ctx.operation, ctx.entity];\n\n if (ctx.params) {\n parts.push(JSON.stringify(ctx.params));\n }\n\n if (ctx.filter) {\n parts.push(JSON.stringify(ctx.filter));\n }\n\n if (ctx.orderBy) {\n parts.push(JSON.stringify(ctx.orderBy));\n }\n\n if (ctx.limit !== undefined) {\n parts.push(`limit:${ctx.limit}`);\n }\n\n if (ctx.offset !== undefined) {\n parts.push(`offset:${ctx.offset}`);\n }\n\n return parts.join(':');\n }\n\n /**\n * Check if an entry is still valid.\n */\n function isValid<T>(entry: CacheEntry<T>): boolean {\n return Date.now() - entry.timestamp < entry.ttl;\n }\n\n return {\n name: 'cache',\n\n async before(ctx: MiddlewareContext) {\n // Skip caching if explicitly disabled\n if (ctx.skipCache) {\n return;\n }\n\n // Only cache specified operations\n if (!cacheOperations.includes(ctx.operation)) {\n return;\n }\n\n const key = generateCacheKey(ctx);\n const entry = await cacheStorage.get(key);\n\n if (entry && isValid(entry)) {\n // Cache hit - return cached response\n ctx.metadata.cacheHit = true;\n ctx.metadata.cacheKey = key;\n\n return {\n continue: false,\n response: {\n ...entry.data,\n meta: {\n ...entry.data.meta,\n cached: true,\n cachedAt: entry.timestamp,\n },\n },\n };\n }\n\n // Cache miss - continue with request\n ctx.metadata.cacheHit = false;\n ctx.metadata.cacheKey = key;\n },\n\n async after<T>(ctx: MiddlewareContext, response: AdapterResponse<T>) {\n // Skip caching if explicitly disabled\n if (ctx.skipCache) {\n return response;\n }\n\n // Only cache specified operations\n if (!cacheOperations.includes(ctx.operation)) {\n return response;\n }\n\n // Don't cache errors (unless configured to)\n if (response.error && !cacheErrors) {\n return response;\n }\n\n // Cache the response\n const key = ctx.metadata.cacheKey as string;\n if (key) {\n await cacheStorage.set(key, {\n data: response,\n timestamp: Date.now(),\n ttl,\n });\n }\n\n return response;\n },\n };\n}\n\n/**\n * Create a utility to invalidate cache entries.\n *\n * @param storage - The cache storage to invalidate\n * @returns Invalidation functions\n *\n * @example\n * ```typescript\n * const storage = new MemoryCacheStorage();\n * const cache = createCacheInvalidator(storage);\n *\n * // Clear all cache\n * await cache.clear();\n *\n * // Invalidate specific entry\n * await cache.invalidate('findMany:user');\n * ```\n */\nexport function createCacheInvalidator(storage: CacheStorage) {\n return {\n invalidate: (key: string) => storage.delete(key),\n clear: () => storage.clear(),\n size: () => storage.size(),\n };\n}\n\n// Export the storage class for custom implementations\nexport { MemoryCacheStorage };\n","/**\n * Logger Middleware - Request/response logging\n *\n * Logs request and response information for debugging\n * and monitoring purposes.\n *\n * @module middleware/logger\n * @category Middleware\n */\n\nimport type { AdapterResponse } from '../adapters/types';\nimport type { Middleware, MiddlewareContext } from './types';\n\n/**\n * Log level type.\n */\nexport type LogLevel = 'debug' | 'info' | 'warn' | 'error';\n\n/**\n * Configuration options for logger middleware.\n */\nexport interface LoggerMiddlewareConfig {\n /** Custom log function (default: console.log) */\n log?: (message: string, data?: unknown) => void;\n /** Whether to log requests (default: true) */\n logRequest?: boolean;\n /** Whether to log responses (default: true) */\n logResponse?: boolean;\n /** Whether to log errors (default: true) */\n logErrors?: boolean;\n /** Whether to log timing information (default: true) */\n logTiming?: boolean;\n /** Minimum log level (default: 'debug') */\n level?: LogLevel;\n /** Custom formatter for log messages */\n formatter?: (type: 'request' | 'response' | 'error', ctx: MiddlewareContext, data?: unknown) => string;\n /** Whether to include request data in logs (be careful with sensitive data) */\n includeData?: boolean;\n /** Fields to redact from logs */\n redactFields?: string[];\n}\n\n/**\n * Default fields to redact from logs.\n */\nconst DEFAULT_REDACT_FIELDS = ['password', 'token', 'secret', 'apiKey', 'authorization'];\n\n/**\n * Log level priorities.\n */\nconst LOG_LEVELS: Record<LogLevel, number> = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n};\n\n/**\n * Create a logger middleware.\n *\n * @param config - Logger middleware configuration\n * @returns A configured Middleware instance\n *\n * @example\n * ```typescript\n * const loggerMiddleware = createLoggerMiddleware({\n * log: console.log,\n * logRequest: true,\n * logResponse: true,\n * });\n * ```\n *\n * @example\n * ```typescript\n * // With custom logger\n * const loggerMiddleware = createLoggerMiddleware({\n * log: (msg, data) => winston.info(msg, data),\n * formatter: (type, ctx) => `[${type.toUpperCase()}] ${ctx.entity}.${ctx.operation}`,\n * });\n * ```\n */\nexport function createLoggerMiddleware(config?: LoggerMiddlewareConfig): Middleware {\n const {\n log = console.log.bind(console),\n logRequest = true,\n logResponse = true,\n logErrors = true,\n logTiming = true,\n level = 'debug',\n formatter,\n includeData = false,\n redactFields = DEFAULT_REDACT_FIELDS,\n } = config ?? {};\n\n /**\n * Check if a log level should be logged.\n */\n function shouldLog(msgLevel: LogLevel): boolean {\n return LOG_LEVELS[msgLevel] >= LOG_LEVELS[level];\n }\n\n /**\n * Redact sensitive fields from an object.\n */\n function redact(obj: unknown): unknown {\n if (!obj || typeof obj !== 'object') {\n return obj;\n }\n\n if (Array.isArray(obj)) {\n return obj.map(redact);\n }\n\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj as Record<string, unknown>)) {\n if (redactFields.some((field) => key.toLowerCase().includes(field.toLowerCase()))) {\n result[key] = '[REDACTED]';\n } else if (typeof value === 'object') {\n result[key] = redact(value);\n } else {\n result[key] = value;\n }\n }\n return result;\n }\n\n /**\n * Format a log message.\n */\n function format(\n type: 'request' | 'response' | 'error',\n ctx: MiddlewareContext,\n data?: unknown\n ): string {\n if (formatter) {\n return formatter(type, ctx, data);\n }\n\n const timestamp = new Date().toISOString();\n const prefix = `[${timestamp}] [schemock]`;\n\n switch (type) {\n case 'request':\n return `${prefix} → ${ctx.operation.toUpperCase()} ${ctx.entity}`;\n case 'response': {\n const duration = ctx.startTime ? Date.now() - ctx.startTime : 0;\n const timing = logTiming ? ` (${duration}ms)` : '';\n return `${prefix} ← ${ctx.operation.toUpperCase()} ${ctx.entity}${timing}`;\n }\n case 'error':\n return `${prefix} ✗ ${ctx.operation.toUpperCase()} ${ctx.entity} ERROR`;\n }\n }\n\n return {\n name: 'logger',\n\n async before(ctx: MiddlewareContext) {\n if (!logRequest || !shouldLog('debug')) {\n return;\n }\n\n const message = format('request', ctx);\n const data: Record<string, unknown> = {\n entity: ctx.entity,\n operation: ctx.operation,\n };\n\n if (ctx.params) {\n data.params = redact(ctx.params);\n }\n\n if (ctx.filter) {\n data.filter = redact(ctx.filter);\n }\n\n if (includeData && ctx.data) {\n data.data = redact(ctx.data);\n }\n\n log(message, data);\n },\n\n async after<T>(ctx: MiddlewareContext, response: AdapterResponse<T>) {\n if (!logResponse || !shouldLog('info')) {\n return response;\n }\n\n const message = format('response', ctx);\n const data: Record<string, unknown> = {\n entity: ctx.entity,\n operation: ctx.operation,\n success: !response.error,\n };\n\n if (logTiming && ctx.startTime) {\n data.duration = Date.now() - ctx.startTime;\n }\n\n if (response.meta) {\n data.meta = response.meta;\n }\n\n // Include cached status if available\n if (ctx.metadata.cacheHit !== undefined) {\n data.cached = ctx.metadata.cacheHit;\n }\n\n // Include retry count if any\n if (ctx.retryCount && ctx.retryCount > 0) {\n data.retryCount = ctx.retryCount;\n }\n\n log(message, data);\n\n return response;\n },\n\n async onError(ctx: MiddlewareContext, error: Error) {\n if (!logErrors || !shouldLog('error')) {\n return { continue: true };\n }\n\n const message = format('error', ctx);\n const data: Record<string, unknown> = {\n entity: ctx.entity,\n operation: ctx.operation,\n error: error.message,\n };\n\n if (logTiming && ctx.startTime) {\n data.duration = Date.now() - ctx.startTime;\n }\n\n log(message, data);\n\n // Continue error propagation\n return { continue: true };\n },\n };\n}\n\n/**\n * Create a silent logger (logs nothing).\n * Useful for testing.\n */\nexport function createSilentLogger(): Middleware {\n return createLoggerMiddleware({\n log: () => {},\n logRequest: false,\n logResponse: false,\n logErrors: false,\n });\n}\n\n/**\n * Create a verbose logger (logs everything).\n * Useful for debugging.\n */\nexport function createVerboseLogger(): Middleware {\n return createLoggerMiddleware({\n logRequest: true,\n logResponse: true,\n logErrors: true,\n logTiming: true,\n includeData: true,\n level: 'debug',\n });\n}\n","/**\n * Context Middleware - Extract execution context from headers\n *\n * Extracts user information, tenant IDs, and other context from\n * request headers (Authorization, custom headers) and populates\n * ctx.context for use by RLS and other middleware.\n *\n * @module middleware/context\n * @category Middleware\n */\n\nimport type { Middleware, MiddlewareContext } from './types';\n\n/**\n * Configuration options for context middleware.\n */\nexport interface ContextMiddlewareConfig {\n /**\n * Function to decode/validate token and extract user info.\n * In production, this would validate the JWT signature.\n *\n * @param token - The JWT token (without 'Bearer ' prefix)\n * @returns Decoded token payload or null if invalid\n */\n decodeToken?: (token: string) => Record<string, unknown> | null;\n\n /**\n * Additional headers to extract as context.\n * Headers will be converted to camelCase context keys.\n *\n * @example ['X-Tenant-ID', 'X-Request-ID']\n */\n extractHeaders?: string[];\n\n /**\n * Mock mode: decode JWT without validation.\n * In mock mode, the JWT payload is decoded without signature validation.\n * This is useful for development/testing where tokens may be self-signed.\n *\n * @default true\n */\n mockMode?: boolean;\n\n /**\n * Header name for the Authorization token.\n *\n * @default 'Authorization'\n */\n authHeaderName?: string;\n\n /**\n * Token prefix to strip (e.g., 'Bearer ').\n *\n * @default 'Bearer '\n */\n tokenPrefix?: string;\n}\n\n/**\n * Decode a JWT payload without validation.\n * Extracts the payload from the second segment of the token.\n *\n * @param token - The JWT token\n * @returns Decoded payload or empty object if invalid\n */\nfunction decodeJwtPayload(token: string): Record<string, unknown> {\n try {\n const parts = token.split('.');\n if (parts.length !== 3) {\n return {};\n }\n\n // Decode base64url to base64, then to string\n const payload = parts[1]\n .replace(/-/g, '+')\n .replace(/_/g, '/');\n\n // Handle browser and Node.js environments\n let decoded: string;\n if (typeof atob === 'function') {\n decoded = atob(payload);\n } else {\n decoded = Buffer.from(payload, 'base64').toString('utf-8');\n }\n\n return JSON.parse(decoded);\n } catch {\n return {};\n }\n}\n\n/**\n * Convert a header name to a camelCase context key.\n *\n * @example\n * headerToContextKey('X-Tenant-ID') // => 'tenantId'\n * headerToContextKey('X-Request-ID') // => 'requestId'\n * headerToContextKey('Content-Type') // => 'contentType'\n */\nfunction headerToContextKey(header: string): string {\n return header\n .replace(/^X-/i, '') // Remove X- prefix\n .split('-')\n .map((part, i) =>\n i === 0 ? part.toLowerCase() : part.charAt(0).toUpperCase() + part.slice(1).toLowerCase()\n )\n .join('');\n}\n\n/**\n * Create a context middleware that extracts execution context from headers.\n *\n * This middleware:\n * 1. Extracts JWT payload from Authorization header\n * 2. Extracts additional values from custom headers\n * 3. Populates ctx.context for use by RLS middleware\n *\n * @param config - Context middleware configuration\n * @returns A configured Middleware instance\n *\n * @example\n * ```typescript\n * const contextMiddleware = createContextMiddleware({\n * mockMode: true, // Decode JWT without validation\n * extractHeaders: ['X-Tenant-ID', 'X-Request-ID'],\n * });\n *\n * // With custom decoder\n * const contextMiddleware = createContextMiddleware({\n * decodeToken: (token) => {\n * // Validate and decode the token\n * return jwt.verify(token, secret);\n * },\n * });\n * ```\n */\nexport function createContextMiddleware(config?: ContextMiddlewareConfig): Middleware {\n const {\n decodeToken,\n extractHeaders = [],\n mockMode = true,\n authHeaderName = 'Authorization',\n tokenPrefix = 'Bearer ',\n } = config || {};\n\n return {\n name: 'context',\n\n async before(ctx: MiddlewareContext) {\n // Initialize context\n ctx.context = ctx.context || {};\n\n // Extract from Authorization header\n const authHeader =\n ctx.headers?.[authHeaderName] ||\n ctx.headers?.[authHeaderName.toLowerCase()];\n\n if (authHeader) {\n // Strip token prefix (e.g., 'Bearer ')\n let token = authHeader;\n if (tokenPrefix && authHeader.toLowerCase().startsWith(tokenPrefix.toLowerCase())) {\n token = authHeader.slice(tokenPrefix.length);\n }\n\n if (token) {\n if (decodeToken) {\n // Use custom decoder (production mode)\n const decoded = decodeToken(token);\n if (decoded) {\n ctx.context = { ...ctx.context, ...decoded };\n }\n } else if (mockMode) {\n // In mock mode, decode without validation\n const decoded = decodeJwtPayload(token);\n ctx.context = { ...ctx.context, ...decoded };\n }\n }\n }\n\n // Extract additional headers\n for (const header of extractHeaders) {\n const value =\n ctx.headers?.[header] ||\n ctx.headers?.[header.toLowerCase()];\n\n if (value) {\n const key = headerToContextKey(header);\n ctx.context[key] = value;\n }\n }\n\n // Store extracted context in metadata for debugging\n ctx.metadata.contextExtracted = Object.keys(ctx.context).length > 0;\n },\n };\n}\n\n/**\n * Create a mock JWT token for testing.\n * Encodes the payload as a JWT without signing.\n *\n * @param payload - The token payload\n * @returns A mock JWT token string\n *\n * @example\n * ```typescript\n * const token = createMockJwt({\n * sub: 'user-123',\n * userId: 'user-123',\n * role: 'admin',\n * tenantId: 'tenant-456',\n * });\n *\n * // Use in headers\n * api._setHeaders({ Authorization: `Bearer ${token}` });\n * ```\n */\nexport function createMockJwt(payload: Record<string, unknown>): string {\n // Create a minimal JWT header\n const header = { alg: 'none', typ: 'JWT' };\n\n // Add standard claims if not present\n const fullPayload = {\n iat: Math.floor(Date.now() / 1000),\n exp: Math.floor(Date.now() / 1000) + 3600, // 1 hour\n ...payload,\n };\n\n // Encode parts\n const encodeBase64Url = (obj: object): string => {\n const json = JSON.stringify(obj);\n // Handle browser and Node.js environments\n let base64: string;\n if (typeof btoa === 'function') {\n base64 = btoa(json);\n } else {\n base64 = Buffer.from(json).toString('base64');\n }\n // Convert to base64url\n return base64.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=/g, '');\n };\n\n const headerPart = encodeBase64Url(header);\n const payloadPart = encodeBase64Url(fullPayload);\n\n // No signature in mock mode\n return `${headerPart}.${payloadPart}.`;\n}\n","/**\n * RLS Middleware - Row-Level Security enforcement in middleware chain\n *\n * Applies row-level security policies before and after storage operations.\n * Works with ctx.context populated by the context middleware.\n *\n * @module middleware/rls-middleware\n * @category Middleware\n */\n\nimport type { AdapterResponse } from '../adapters/types';\nimport type { EntitySchema } from '../schema/types';\nimport type { Middleware, MiddlewareContext } from './types';\n\n/**\n * RLS filter function type.\n * Returns true if the row passes the security check.\n */\nexport type RLSFilter = (\n row: Record<string, unknown>,\n ctx: Record<string, unknown> | null\n) => boolean;\n\n/**\n * RLS filters for a single entity.\n */\nexport interface RLSFilters {\n /** Filter for SELECT/read operations */\n select?: RLSFilter;\n /** Filter for INSERT operations */\n insert?: RLSFilter;\n /** Filter for UPDATE operations */\n update?: RLSFilter;\n /** Filter for DELETE operations */\n delete?: RLSFilter;\n}\n\n/**\n * Configuration options for RLS middleware.\n */\nexport interface RLSMiddlewareConfig {\n /**\n * Entity schemas with RLS configuration.\n * Used for schema lookup during operations.\n */\n schemas: Map<string, EntitySchema>;\n\n /**\n * Function to get RLS filters for all entities.\n * Typically returns generated RLS filter functions.\n *\n * @returns Map of entity names to RLS filters\n */\n getFilters: () => Record<string, RLSFilters>;\n\n /**\n * Enable debug logging.\n *\n * @default false\n */\n debug?: boolean;\n}\n\n/**\n * RLS Error thrown when a security check fails.\n */\nexport class RLSError extends Error {\n /** Error code for programmatic handling */\n readonly code = 'RLS_DENIED';\n\n /** The entity that was accessed */\n readonly entity: string;\n\n /** The operation that was attempted */\n readonly operation: string;\n\n constructor(operation: string, entity: string) {\n super(`Access denied: ${operation} on ${entity}`);\n this.name = 'RLSError';\n this.entity = entity;\n this.operation = operation;\n }\n}\n\n/**\n * Map operation names to RLS filter keys.\n */\nfunction operationToRLSKey(operation: string): keyof RLSFilters | null {\n switch (operation) {\n case 'findOne':\n case 'findMany':\n case 'list':\n case 'get':\n return 'select';\n case 'create':\n return 'insert';\n case 'update':\n case 'patch':\n return 'update';\n case 'delete':\n return 'delete';\n default:\n return null;\n }\n}\n\n/**\n * Create an RLS middleware that enforces row-level security.\n *\n * This middleware:\n * 1. Pre-checks write operations (insert, update, delete) before execution\n * 2. Post-filters read operations (select) after execution\n * 3. Uses ctx.context populated by context middleware\n *\n * @param config - RLS middleware configuration\n * @returns A configured Middleware instance\n *\n * @example\n * ```typescript\n * const rlsMiddleware = createRLSMiddleware({\n * schemas: schemaMap,\n * getFilters: () => ({\n * post: {\n * select: (row, ctx) => row.published || row.authorId === ctx?.userId,\n * insert: (row, ctx) => row.authorId === ctx?.userId,\n * update: (row, ctx) => row.authorId === ctx?.userId,\n * delete: (row, ctx) => row.authorId === ctx?.userId,\n * },\n * }),\n * });\n * ```\n */\nexport function createRLSMiddleware(config: RLSMiddlewareConfig): Middleware {\n const { getFilters, debug = false } = config;\n\n return {\n name: 'rls',\n\n async before(ctx: MiddlewareContext) {\n const { entity, operation, data } = ctx;\n const filters = getFilters()[entity];\n\n // No RLS configured for this entity\n if (!filters) {\n return;\n }\n\n const context = ctx.context || null;\n const rlsKey = operationToRLSKey(operation);\n\n if (!rlsKey) {\n return;\n }\n\n // Pre-check for INSERT operations\n if (rlsKey === 'insert' && filters.insert && data) {\n const allowed = filters.insert(data as Record<string, unknown>, context);\n\n if (debug) {\n console.log(`[RLS] Pre-check ${operation} on ${entity}:`, allowed);\n }\n\n if (!allowed) {\n throw new RLSError('insert', entity);\n }\n }\n\n // Mark for post-check on UPDATE and DELETE\n // We need to check the target row after fetching it\n if (rlsKey === 'update' && filters.update) {\n ctx.metadata.rlsUpdateCheck = true;\n }\n\n if (rlsKey === 'delete' && filters.delete) {\n ctx.metadata.rlsDeleteCheck = true;\n }\n },\n\n async after<T>(ctx: MiddlewareContext, response: AdapterResponse<T>): Promise<AdapterResponse<T>> {\n const { entity, operation } = ctx;\n const filters = getFilters()[entity];\n\n // No RLS configured for this entity\n if (!filters) {\n return response;\n }\n\n const context = ctx.context || null;\n const rlsKey = operationToRLSKey(operation);\n\n if (!rlsKey) {\n return response;\n }\n\n // Post-filter for SELECT operations\n if (rlsKey === 'select' && filters.select) {\n if (Array.isArray(response.data)) {\n // Filter array results\n const original = response.data as unknown[];\n const filtered = original.filter((row) =>\n filters.select!(row as Record<string, unknown>, context)\n );\n\n if (debug) {\n console.log(`[RLS] Post-filter ${operation} on ${entity}: ${original.length} -> ${filtered.length}`);\n }\n\n return {\n ...response,\n data: filtered as T,\n meta: {\n ...response.meta,\n total: filtered.length,\n },\n };\n } else if (response.data) {\n // Check single result\n const allowed = filters.select(response.data as Record<string, unknown>, context);\n\n if (debug) {\n console.log(`[RLS] Post-check ${operation} on ${entity}:`, allowed);\n }\n\n if (!allowed) {\n return {\n ...response,\n data: null as T,\n };\n }\n }\n }\n\n // Post-check for UPDATE operations\n if (ctx.metadata.rlsUpdateCheck && response.data && filters.update) {\n const allowed = filters.update(response.data as Record<string, unknown>, context);\n\n if (debug) {\n console.log(`[RLS] Post-check update on ${entity}:`, allowed);\n }\n\n if (!allowed) {\n throw new RLSError('update', entity);\n }\n }\n\n // Post-check for DELETE operations\n if (ctx.metadata.rlsDeleteCheck && ctx.metadata.deletedRow && filters.delete) {\n const allowed = filters.delete(ctx.metadata.deletedRow as Record<string, unknown>, context);\n\n if (debug) {\n console.log(`[RLS] Post-check delete on ${entity}:`, allowed);\n }\n\n if (!allowed) {\n throw new RLSError('delete', entity);\n }\n }\n\n return response;\n },\n };\n}\n\n/**\n * Create a bypass check function from bypass conditions.\n * Returns a function that checks if the context matches any bypass condition.\n *\n * @param bypassConditions - Array of { contextKey, values } conditions\n * @returns A function that returns true if bypass should occur\n *\n * @example\n * ```typescript\n * const checkBypass = createBypassCheck([\n * { contextKey: 'role', values: ['admin', 'superuser'] },\n * ]);\n *\n * checkBypass({ role: 'admin' }); // true\n * checkBypass({ role: 'user' }); // false\n * ```\n */\nexport function createBypassCheck(\n bypassConditions: Array<{ contextKey: string; values: string[] }>\n): (ctx: Record<string, unknown> | null) => boolean {\n if (bypassConditions.length === 0) {\n return () => false;\n }\n\n return (ctx) => {\n if (!ctx) return false;\n\n for (const condition of bypassConditions) {\n const value = ctx[condition.contextKey];\n if (typeof value === 'string' && condition.values.includes(value)) {\n return true;\n }\n }\n\n return false;\n };\n}\n","/**\n * Middleware Defaults - Default ordering and configuration\n *\n * Provides sensible defaults for middleware ordering and common\n * middleware chain configurations.\n *\n * @module middleware/defaults\n * @category Middleware\n */\n\nimport type { Middleware } from './types';\n\n/**\n * Default middleware execution order.\n *\n * The order is designed for optimal security and performance:\n * 1. auth - Add authentication token to headers (must be first)\n * 2. logger - Log request start (early for timing)\n * 3. context - Extract context from headers (after auth adds token)\n * 4. rls - Apply row-level security (needs context)\n * 5. retry - Handle retries (wraps actual request)\n * 6. cache - Check cache (before hitting storage)\n *\n * After hooks execute in reverse order.\n */\nexport const DEFAULT_MIDDLEWARE_ORDER = [\n 'auth', // 1. Add token to headers\n 'logger', // 2. Log request start\n 'context', // 3. Extract context from headers\n 'rls', // 4. Apply RLS pre-checks\n 'retry', // 5. Handle retries\n 'cache', // 6. Check cache\n // [adapter call happens here]\n // After hooks in reverse:\n // 6. cache - Store in cache\n // 5. retry - Handle retry logic\n // 4. rls - Post-filter results\n // 3. context - (no after hook)\n // 2. logger - Log response\n // 1. auth - Handle 401\n];\n\n/**\n * Sort middleware array according to a specified order.\n * Unknown middleware are placed at the end in their original order.\n *\n * @param middlewares - Array of middleware to sort\n * @param customOrder - Optional custom order array (defaults to DEFAULT_MIDDLEWARE_ORDER)\n * @returns Sorted middleware array\n *\n * @example\n * ```typescript\n * const sorted = orderMiddleware([\n * createCacheMiddleware(),\n * createAuthMiddleware(),\n * createLoggerMiddleware(),\n * ]);\n * // => [auth, logger, cache]\n * ```\n */\nexport function orderMiddleware(\n middlewares: Middleware[],\n customOrder?: string[]\n): Middleware[] {\n const order = customOrder || DEFAULT_MIDDLEWARE_ORDER;\n\n // Create a map of middleware name to index in order array\n const orderMap = new Map<string, number>();\n order.forEach((name, index) => {\n orderMap.set(name, index);\n });\n\n // Sort middleware by their position in the order array\n return [...middlewares].sort((a, b) => {\n const aIndex = orderMap.get(a.name);\n const bIndex = orderMap.get(b.name);\n\n // Both have defined positions\n if (aIndex !== undefined && bIndex !== undefined) {\n return aIndex - bIndex;\n }\n\n // Only a has a defined position - put it first\n if (aIndex !== undefined) {\n return -1;\n }\n\n // Only b has a defined position - put it first\n if (bIndex !== undefined) {\n return 1;\n }\n\n // Neither has a defined position - maintain original order\n return 0;\n });\n}\n\n/**\n * Filter middleware by enabled/disabled state and names.\n *\n * @param middlewares - Array of middleware to filter\n * @param enabled - Middleware names to enable (if empty, all are enabled)\n * @param disabled - Middleware names to disable\n * @returns Filtered middleware array\n *\n * @example\n * ```typescript\n * const filtered = filterMiddleware(\n * middlewares,\n * [], // Enable all\n * ['cache'] // But disable cache\n * );\n * ```\n */\nexport function filterMiddleware(\n middlewares: Middleware[],\n enabled: string[] = [],\n disabled: string[] = []\n): Middleware[] {\n return middlewares.filter((m) => {\n // Check explicit enabled property\n if (m.enabled === false) {\n return false;\n }\n\n // Check disabled list\n if (disabled.includes(m.name)) {\n return false;\n }\n\n // If enabled list is provided and non-empty, only include those\n if (enabled.length > 0 && !enabled.includes(m.name)) {\n return false;\n }\n\n return true;\n });\n}\n\n/**\n * Middleware configuration preset for mock/development mode.\n * Includes auth, context, and logger.\n */\nexport const MOCK_MIDDLEWARE_PRESET = ['auth', 'context', 'logger'];\n\n/**\n * Middleware configuration preset for production mode.\n * Includes all middleware with caching and retries.\n */\nexport const PRODUCTION_MIDDLEWARE_PRESET = ['auth', 'context', 'rls', 'cache', 'retry', 'logger'];\n\n/**\n * Middleware configuration preset for testing.\n * Minimal middleware for fast test execution.\n */\nexport const TEST_MIDDLEWARE_PRESET = ['context', 'rls'];\n"]}
|
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import react__default, { ReactNode } from 'react';
|
|
3
|
+
import { QueryClient, UseQueryResult, UseMutationResult } from '@tanstack/react-query';
|
|
4
|
+
import { A as Adapter } from '../types-C9VMgu3E.mjs';
|
|
5
|
+
import { M as Middleware } from '../types-DV2DS7wj.mjs';
|
|
6
|
+
import { o as EntitySchema, s as ViewSchema } from '../types-C2bd2vgy.mjs';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Value provided by the DataLayer context.
|
|
10
|
+
*/
|
|
11
|
+
interface DataLayerContextValue {
|
|
12
|
+
/** The adapter to use for data operations */
|
|
13
|
+
adapter: Adapter;
|
|
14
|
+
/** React Query client instance */
|
|
15
|
+
queryClient: QueryClient;
|
|
16
|
+
/** Registered entity schemas */
|
|
17
|
+
schemas: Map<string, EntitySchema>;
|
|
18
|
+
/** Middleware chain */
|
|
19
|
+
middleware: Middleware[];
|
|
20
|
+
/** Get schema by entity name */
|
|
21
|
+
getSchema: (name: string) => EntitySchema | undefined;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* React context for the data layer.
|
|
25
|
+
*
|
|
26
|
+
* Holds the adapter, query client, and schema registry.
|
|
27
|
+
*/
|
|
28
|
+
declare const DataLayerContext: react.Context<DataLayerContextValue | null>;
|
|
29
|
+
/**
|
|
30
|
+
* Hook to access the DataLayer context.
|
|
31
|
+
*
|
|
32
|
+
* @returns The DataLayer context value
|
|
33
|
+
* @throws Error if used outside of DataLayerProvider
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```typescript
|
|
37
|
+
* function MyComponent() {
|
|
38
|
+
* const { adapter, queryClient } = useDataLayerContext();
|
|
39
|
+
*
|
|
40
|
+
* const handleRefresh = () => {
|
|
41
|
+
* queryClient.invalidateQueries();
|
|
42
|
+
* };
|
|
43
|
+
*
|
|
44
|
+
* return <button onClick={handleRefresh}>Refresh</button>;
|
|
45
|
+
* }
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
declare function useDataLayerContext(): DataLayerContextValue;
|
|
49
|
+
/**
|
|
50
|
+
* Hook to get the current adapter.
|
|
51
|
+
*
|
|
52
|
+
* @returns The adapter instance
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* ```typescript
|
|
56
|
+
* function MyComponent() {
|
|
57
|
+
* const adapter = useAdapter();
|
|
58
|
+
* // Use adapter directly for custom operations
|
|
59
|
+
* }
|
|
60
|
+
* ```
|
|
61
|
+
*/
|
|
62
|
+
declare function useAdapter(): Adapter;
|
|
63
|
+
/**
|
|
64
|
+
* Hook to get the query client.
|
|
65
|
+
*
|
|
66
|
+
* @returns The QueryClient instance
|
|
67
|
+
*/
|
|
68
|
+
declare function useQueryClientFromContext(): QueryClient;
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* DataLayerProvider - React context provider for data layer
|
|
72
|
+
*
|
|
73
|
+
* Wraps your application to provide adapter and query client
|
|
74
|
+
* to all data hooks.
|
|
75
|
+
*
|
|
76
|
+
* @module react/provider
|
|
77
|
+
* @category React
|
|
78
|
+
*/
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Props for the DataLayerProvider component.
|
|
82
|
+
*/
|
|
83
|
+
interface DataLayerProviderProps {
|
|
84
|
+
/** The adapter to use for data operations */
|
|
85
|
+
adapter: Adapter;
|
|
86
|
+
/** Entity schemas to register */
|
|
87
|
+
schemas?: EntitySchema[];
|
|
88
|
+
/** Middleware chain to apply */
|
|
89
|
+
middleware?: Middleware[];
|
|
90
|
+
/** Custom QueryClient (optional, will create one if not provided) */
|
|
91
|
+
queryClient?: QueryClient;
|
|
92
|
+
/** Default query options */
|
|
93
|
+
defaultOptions?: {
|
|
94
|
+
/** Default stale time in ms */
|
|
95
|
+
staleTime?: number;
|
|
96
|
+
/** Default cache time in ms */
|
|
97
|
+
cacheTime?: number;
|
|
98
|
+
/** Default retry count */
|
|
99
|
+
retry?: number;
|
|
100
|
+
};
|
|
101
|
+
/** Child components */
|
|
102
|
+
children: ReactNode;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* DataLayerProvider component.
|
|
106
|
+
*
|
|
107
|
+
* Provides the data layer context to all child components,
|
|
108
|
+
* enabling the use of useData, useMutate, and useView hooks.
|
|
109
|
+
*
|
|
110
|
+
* @example
|
|
111
|
+
* ```typescript
|
|
112
|
+
* import { DataLayerProvider } from 'schemock/react';
|
|
113
|
+
* import { createMockAdapter } from 'schemock/adapters';
|
|
114
|
+
*
|
|
115
|
+
* const adapter = createMockAdapter([userSchema, postSchema]);
|
|
116
|
+
*
|
|
117
|
+
* function App() {
|
|
118
|
+
* return (
|
|
119
|
+
* <DataLayerProvider adapter={adapter} schemas={[userSchema, postSchema]}>
|
|
120
|
+
* <MyApp />
|
|
121
|
+
* </DataLayerProvider>
|
|
122
|
+
* );
|
|
123
|
+
* }
|
|
124
|
+
* ```
|
|
125
|
+
*
|
|
126
|
+
* @example
|
|
127
|
+
* ```typescript
|
|
128
|
+
* // With custom query client and middleware
|
|
129
|
+
* const queryClient = new QueryClient({
|
|
130
|
+
* defaultOptions: { queries: { staleTime: 5000 } },
|
|
131
|
+
* });
|
|
132
|
+
*
|
|
133
|
+
* function App() {
|
|
134
|
+
* return (
|
|
135
|
+
* <DataLayerProvider
|
|
136
|
+
* adapter={adapter}
|
|
137
|
+
* schemas={schemas}
|
|
138
|
+
* queryClient={queryClient}
|
|
139
|
+
* middleware={[authMiddleware, loggerMiddleware]}
|
|
140
|
+
* >
|
|
141
|
+
* <MyApp />
|
|
142
|
+
* </DataLayerProvider>
|
|
143
|
+
* );
|
|
144
|
+
* }
|
|
145
|
+
* ```
|
|
146
|
+
*/
|
|
147
|
+
declare const DataLayerProvider: react__default.FC<DataLayerProviderProps>;
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* React Hooks - Data fetching and mutation hooks
|
|
151
|
+
*
|
|
152
|
+
* Provides useData, useMutate, and useView hooks for
|
|
153
|
+
* React Query integration with Schemock.
|
|
154
|
+
*
|
|
155
|
+
* @module react/hooks
|
|
156
|
+
* @category React
|
|
157
|
+
*/
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Options for useData hook.
|
|
161
|
+
*/
|
|
162
|
+
interface UseDataOptions<T> {
|
|
163
|
+
/** Fetch single entity by ID */
|
|
164
|
+
id?: string;
|
|
165
|
+
/** Relations to include */
|
|
166
|
+
include?: string[];
|
|
167
|
+
/** Filter conditions */
|
|
168
|
+
where?: Record<string, unknown>;
|
|
169
|
+
/** Number of items to fetch */
|
|
170
|
+
limit?: number;
|
|
171
|
+
/** Pagination offset */
|
|
172
|
+
offset?: number;
|
|
173
|
+
/** Ordering */
|
|
174
|
+
orderBy?: Record<string, 'asc' | 'desc'>;
|
|
175
|
+
/** Fields to select */
|
|
176
|
+
select?: string[];
|
|
177
|
+
/** Whether the query is enabled */
|
|
178
|
+
enabled?: boolean;
|
|
179
|
+
/** Stale time in ms */
|
|
180
|
+
staleTime?: number;
|
|
181
|
+
/** Placeholder data */
|
|
182
|
+
placeholderData?: T | T[];
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* useData hook for fetching entities.
|
|
186
|
+
*
|
|
187
|
+
* Fetches single or multiple entities based on options.
|
|
188
|
+
*
|
|
189
|
+
* @param entity - The entity schema to fetch
|
|
190
|
+
* @param options - Query options
|
|
191
|
+
* @returns React Query result
|
|
192
|
+
*
|
|
193
|
+
* @example
|
|
194
|
+
* ```typescript
|
|
195
|
+
* // Fetch single entity
|
|
196
|
+
* const { data: user } = useData(userSchema, { id: '123' });
|
|
197
|
+
*
|
|
198
|
+
* // Fetch multiple entities
|
|
199
|
+
* const { data: users } = useData(userSchema, {
|
|
200
|
+
* where: { role: 'admin' },
|
|
201
|
+
* limit: 10,
|
|
202
|
+
* orderBy: { createdAt: 'desc' },
|
|
203
|
+
* });
|
|
204
|
+
*
|
|
205
|
+
* // Fetch with relations
|
|
206
|
+
* const { data: user } = useData(userSchema, {
|
|
207
|
+
* id: '123',
|
|
208
|
+
* include: ['posts', 'comments'],
|
|
209
|
+
* });
|
|
210
|
+
* ```
|
|
211
|
+
*/
|
|
212
|
+
declare function useData<T>(entity: EntitySchema<T>, options?: UseDataOptions<T>): UseQueryResult<T | T[]>;
|
|
213
|
+
/**
|
|
214
|
+
* Result from useMutate hook.
|
|
215
|
+
*/
|
|
216
|
+
interface UseMutateResult<T> {
|
|
217
|
+
/** Create mutation */
|
|
218
|
+
create: UseMutationResult<T, Error, Partial<T>>;
|
|
219
|
+
/** Update mutation */
|
|
220
|
+
update: UseMutationResult<T, Error, {
|
|
221
|
+
id: string;
|
|
222
|
+
data: Partial<T>;
|
|
223
|
+
}>;
|
|
224
|
+
/** Delete mutation */
|
|
225
|
+
remove: UseMutationResult<void, Error, string>;
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Options for useMutate hook.
|
|
229
|
+
*/
|
|
230
|
+
interface UseMutateOptions {
|
|
231
|
+
/** Invalidate queries on success */
|
|
232
|
+
invalidateOnSuccess?: boolean;
|
|
233
|
+
/** Specific query keys to invalidate */
|
|
234
|
+
invalidateQueries?: unknown[][];
|
|
235
|
+
/** Optimistic update function */
|
|
236
|
+
onOptimisticUpdate?: () => void;
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* useMutate hook for CRUD mutations.
|
|
240
|
+
*
|
|
241
|
+
* Provides create, update, and delete mutations for an entity.
|
|
242
|
+
*
|
|
243
|
+
* @param entity - The entity schema
|
|
244
|
+
* @param options - Mutation options
|
|
245
|
+
* @returns Object with create, update, and remove mutations
|
|
246
|
+
*
|
|
247
|
+
* @example
|
|
248
|
+
* ```typescript
|
|
249
|
+
* const { create, update, remove } = useMutate(userSchema);
|
|
250
|
+
*
|
|
251
|
+
* // Create
|
|
252
|
+
* const handleCreate = async () => {
|
|
253
|
+
* await create.mutateAsync({ name: 'John', email: 'john@example.com' });
|
|
254
|
+
* };
|
|
255
|
+
*
|
|
256
|
+
* // Update
|
|
257
|
+
* const handleUpdate = async (id: string) => {
|
|
258
|
+
* await update.mutateAsync({ id, data: { name: 'Jane' } });
|
|
259
|
+
* };
|
|
260
|
+
*
|
|
261
|
+
* // Delete
|
|
262
|
+
* const handleDelete = async (id: string) => {
|
|
263
|
+
* await remove.mutateAsync(id);
|
|
264
|
+
* };
|
|
265
|
+
* ```
|
|
266
|
+
*/
|
|
267
|
+
declare function useMutate<T>(entity: EntitySchema<T>, options?: UseMutateOptions): UseMutateResult<T>;
|
|
268
|
+
/**
|
|
269
|
+
* Options for useView hook.
|
|
270
|
+
*/
|
|
271
|
+
interface UseViewOptions<T> {
|
|
272
|
+
/** URL parameters for the view */
|
|
273
|
+
params?: Record<string, string>;
|
|
274
|
+
/** Whether the query is enabled */
|
|
275
|
+
enabled?: boolean;
|
|
276
|
+
/** Stale time in ms */
|
|
277
|
+
staleTime?: number;
|
|
278
|
+
/** Placeholder data */
|
|
279
|
+
placeholderData?: T;
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* useView hook for fetching computed views.
|
|
283
|
+
*
|
|
284
|
+
* Fetches data from a view schema endpoint.
|
|
285
|
+
*
|
|
286
|
+
* @param view - The view schema
|
|
287
|
+
* @param options - View options
|
|
288
|
+
* @returns React Query result
|
|
289
|
+
*
|
|
290
|
+
* @example
|
|
291
|
+
* ```typescript
|
|
292
|
+
* const userFullView = defineView('user-full', ...);
|
|
293
|
+
*
|
|
294
|
+
* const { data } = useView(userFullView, { params: { id: '123' } });
|
|
295
|
+
* ```
|
|
296
|
+
*/
|
|
297
|
+
declare function useView<T>(view: ViewSchema, options?: UseViewOptions<T>): UseQueryResult<T>;
|
|
298
|
+
/**
|
|
299
|
+
* Hook to prefetch data.
|
|
300
|
+
*
|
|
301
|
+
* @param entity - The entity schema
|
|
302
|
+
* @param options - Data options
|
|
303
|
+
*
|
|
304
|
+
* @example
|
|
305
|
+
* ```typescript
|
|
306
|
+
* const prefetchUser = usePrefetch(userSchema);
|
|
307
|
+
*
|
|
308
|
+
* // Prefetch on hover
|
|
309
|
+
* <div onMouseEnter={() => prefetchUser({ id: '123' })}>
|
|
310
|
+
* User Profile
|
|
311
|
+
* </div>
|
|
312
|
+
* ```
|
|
313
|
+
*/
|
|
314
|
+
declare function usePrefetch<T>(entity: EntitySchema<T>): (options?: UseDataOptions<T>) => Promise<void>;
|
|
315
|
+
|
|
316
|
+
export { DataLayerContext, type DataLayerContextValue, DataLayerProvider, type DataLayerProviderProps, type UseDataOptions, type UseMutateOptions, type UseMutateResult, type UseViewOptions, useAdapter, useData, useDataLayerContext, useMutate, usePrefetch, useQueryClientFromContext, useView };
|