hono-crud 0.9.0 → 0.10.0

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.
Files changed (42) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/README.md +65 -0
  3. package/dist/adapters/drizzle/index.d.ts +4 -4
  4. package/dist/adapters/drizzle/index.js +1 -1
  5. package/dist/adapters/memory/index.d.ts +4 -4
  6. package/dist/adapters/memory/index.js +1 -1
  7. package/dist/adapters/prisma/index.d.ts +4 -4
  8. package/dist/adapters/prisma/index.js +1 -1
  9. package/dist/audit/index.d.ts +1 -1
  10. package/dist/audit/index.js +1 -1
  11. package/dist/auth/index.d.ts +3 -3
  12. package/dist/auth/index.js +1 -1
  13. package/dist/{bulk-patch-DG_5emFi.d.ts → bulk-patch-qEj-oZiL.d.ts} +2 -2
  14. package/dist/cache/index.d.ts +2 -2
  15. package/dist/cache/index.js +1 -1
  16. package/dist/{chunk-QS6NQZH3.js → chunk-3HBOKHIU.js} +1 -1
  17. package/dist/chunk-A5UWQNQQ.js +11 -0
  18. package/dist/{chunk-ANWSQPCQ.js → chunk-IDUJWS5U.js} +1 -1
  19. package/dist/{chunk-2U5ZQ7XQ.js → chunk-MGEQVZAI.js} +1 -1
  20. package/dist/{chunk-DLD4TRHM.js → chunk-MKMSOGVE.js} +1 -1
  21. package/dist/{chunk-Z575OBLV.js → chunk-QJPUXVTT.js} +1 -1
  22. package/dist/{chunk-6P4Z6G35.js → chunk-QK65CFMV.js} +1 -1
  23. package/dist/chunk-RXUYM2KD.js +1 -0
  24. package/dist/{chunk-7NM6MBRL.js → chunk-U4PDR4P3.js} +1 -1
  25. package/dist/{chunk-5UBOPX6O.js → chunk-UQUDEKCP.js} +1 -1
  26. package/dist/chunk-VSTEFZOU.js +1 -0
  27. package/dist/{import-D8nboMpT.d.ts → import-DzAuLZQf.d.ts} +42 -12
  28. package/dist/{index-aGdjAC27.d.ts → index-BOWqsE16.d.ts} +51 -5
  29. package/dist/index.d.ts +73 -15
  30. package/dist/index.js +2 -2
  31. package/dist/logging/index.js +1 -1
  32. package/dist/rate-limit/index.js +1 -1
  33. package/dist/{route-AzM3iPZP.d.ts → route-zMPr_8wn.d.ts} +32 -1
  34. package/dist/storage/index.d.ts +1 -1
  35. package/dist/storage/index.js +1 -1
  36. package/dist/{types-tpG0M7Va.d.ts → types-CJ0rN_9M.d.ts} +120 -1
  37. package/dist/versioning/index.d.ts +1 -1
  38. package/dist/versioning/index.js +1 -1
  39. package/package.json +1 -1
  40. package/dist/chunk-3TIIYAKB.js +0 -1
  41. package/dist/chunk-KLZMYDYG.js +0 -1
  42. package/dist/chunk-TP6RZ5RR.js +0 -11
package/CHANGELOG.md CHANGED
@@ -5,6 +5,7 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ %b
8
9
  %b
9
10
  ## [0.8.0] — 2026-05-03
10
11
 
@@ -77,3 +78,4 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77
78
  [0.7.0]: https://github.com/kshdotdev/hono-crud/compare/v0.6.0...v0.7.0
78
79
  [0.8.0]: https://github.com/kshdotdev/hono-crud/compare/v0.7.0...v0.8.0
79
80
  [0.9.0]: https://github.com/kshdotdev/hono-crud/compare/v0.7.0...v0.9.0
81
+ [0.10.0]: https://github.com/kshdotdev/hono-crud/compare/v0.9.0...v0.10.0
package/README.md CHANGED
@@ -294,6 +294,71 @@ app.use('*', createLoggingMiddleware({
294
294
 
295
295
  See [docs/logging.md](./docs/logging.md).
296
296
 
297
+ ## Response shape
298
+
299
+ Every CRUD endpoint defaults to a small, predictable response envelope so consumers always know where to find `result` and `error`:
300
+
301
+ ```jsonc
302
+ // Success — single item (Create / Read / Update / Restore / Upsert / Clone / …)
303
+ { "success": true, "result": { "id": "…", … } }
304
+
305
+ // Success — list / search (with pagination metadata)
306
+ { "success": true, "result": [ … ], "result_info": { "page": 1, "per_page": 20, … } }
307
+
308
+ // Error — produced by `ApiException`s thrown from the endpoint or by
309
+ // `createErrorHandler` for everything else
310
+ { "success": false, "error": { "code": "NOT_FOUND", "message": "…", "details": … } }
311
+ ```
312
+
313
+ ### Pluggable envelope (`responseEnvelope`)
314
+
315
+ If your house API standard prefers a different shape — RFC 7807 Problem Details, JSON:API `{ data, meta }`, or any custom envelope — pass `responseEnvelope` to `registerCrud`. The two functions are the **final formatting step** before the response body is serialised:
316
+
317
+ ```typescript
318
+ import { registerCrud, type ResponseEnvelope } from 'hono-crud';
319
+
320
+ const envelope: ResponseEnvelope = {
321
+ success: (result, info) =>
322
+ info ? { data: result, meta: info } : { data: result },
323
+ error: (err) => ({
324
+ errors: [{ status: err.code, title: err.message, source: err.details }],
325
+ }),
326
+ };
327
+
328
+ registerCrud(app, '/users', endpoints, { responseEnvelope: envelope });
329
+ ```
330
+
331
+ The `info` argument is the pagination metadata for list/search responses; it's `undefined` for single-item responses, so a single envelope works across the whole CRUD surface.
332
+
333
+ ### Composition with `createErrorHandler`
334
+
335
+ For errors, the envelope composes with the existing `mappers` chain on `createErrorHandler`. The order is fixed:
336
+
337
+ 1. `mappers[]` (and the built-in `zodErrorMapper`) transform the raw `Error` into a structured `ApiException` (`{ code, message, details? }`).
338
+ 2. `responseEnvelope.error(...)` wraps that structured object into the final response body.
339
+
340
+ ```typescript
341
+ import { createErrorHandler, type ErrorMapper } from 'hono-crud';
342
+
343
+ const prismaMapper: ErrorMapper = (err) => {
344
+ if ((err as { code?: string }).code === 'P2002') {
345
+ return new ConflictException('Duplicate key', { /* … */ });
346
+ }
347
+ };
348
+
349
+ app.onError(createErrorHandler({
350
+ mappers: [prismaMapper],
351
+ // Handler-level default — applies to errors that propagate to onError
352
+ // (i.e. anything that's not already an ApiException). Per-route envelope
353
+ // set via `registerCrud({ responseEnvelope })` always wins.
354
+ responseEnvelope: envelope,
355
+ }));
356
+ ```
357
+
358
+ This split lets you keep your domain-error mappers (Prisma codes, Drizzle constraint violations, …) unchanged and layer a custom shape on top — no response-rewriting middleware required.
359
+
360
+ When `responseEnvelope` is omitted (the default), the response body is byte-identical to pre-0.10.0 — existing consumers see no behaviour change.
361
+
297
362
  ## Advanced Features
298
363
 
299
364
  - **Soft Delete & Restore** - `softDelete: true` in model, `?withDeleted=true`, restore endpoint
@@ -1,13 +1,13 @@
1
1
  import { Table, SQL, Column } from 'drizzle-orm';
2
- import { M as MetaInput, I as IncludeOptions, l as FilterCondition, f as RelationConfig, N as NestedUpdateInput, g as NestedWriteResult, L as ListFilters, P as PaginatedResult, h as AggregateOptions, i as AggregateResult, S as SearchOptions, j as SearchResult } from '../../types-tpG0M7Va.js';
2
+ import { M as MetaInput, I as IncludeOptions, n as FilterCondition, h as RelationConfig, N as NestedUpdateInput, i as NestedWriteResult, L as ListFilters, P as PaginatedResult, j as AggregateOptions, k as AggregateResult, S as SearchOptions, l as SearchResult } from '../../types-CJ0rN_9M.js';
3
3
  import { Env } from 'hono';
4
- import { a as CreateEndpoint, M as ModelObject, R as ReadEndpoint, U as UpdateEndpoint, D as DeleteEndpoint, L as ListEndpoint, b as RestoreEndpoint, B as BatchCreateEndpoint, c as BatchDeleteEndpoint, d as BatchRestoreEndpoint, e as BatchUpdateEndpoint, f as BatchUpdateItem, A as AggregateEndpoint, g as BatchUpsertEndpoint, h as CloneEndpoint, i as UpsertEndpoint, E as ExportEndpoint, I as ImportEndpoint, S as SearchEndpoint, V as VersionCompareEndpoint, j as VersionHistoryEndpoint, k as VersionReadEndpoint, l as VersionRollbackEndpoint } from '../../import-D8nboMpT.js';
4
+ import { a as CreateEndpoint, M as ModelObject, R as ReadEndpoint, U as UpdateEndpoint, D as DeleteEndpoint, L as ListEndpoint, b as RestoreEndpoint, B as BatchCreateEndpoint, c as BatchDeleteEndpoint, d as BatchRestoreEndpoint, e as BatchUpdateEndpoint, f as BatchUpdateItem, A as AggregateEndpoint, g as BatchUpsertEndpoint, h as CloneEndpoint, i as UpsertEndpoint, E as ExportEndpoint, I as ImportEndpoint, S as SearchEndpoint, V as VersionCompareEndpoint, j as VersionHistoryEndpoint, k as VersionReadEndpoint, l as VersionRollbackEndpoint } from '../../import-DzAuLZQf.js';
5
5
  import { z } from 'zod';
6
- import { A as AdapterBundle } from '../../index-aGdjAC27.js';
6
+ import { A as AdapterBundle } from '../../index-BOWqsE16.js';
7
7
  import '../../types-B5wq2iKZ.js';
8
8
  import '../../types-BAcN7U0B.js';
9
9
  import '@hono/zod-openapi';
10
- import '../../route-AzM3iPZP.js';
10
+ import '../../route-zMPr_8wn.js';
11
11
  import 'hono/utils/http-status';
12
12
  import '../../audit/index.js';
13
13
  import '../../registry-PNJjvSvm.js';
@@ -1 +1 @@
1
- export{I as DrizzleAdapters,x as DrizzleAggregateEndpoint,n as DrizzleBatchCreateEndpoint,p as DrizzleBatchDeleteEndpoint,q as DrizzleBatchRestoreEndpoint,o as DrizzleBatchUpdateEndpoint,s as DrizzleBatchUpsertEndpoint,B as DrizzleCloneEndpoint,h as DrizzleCreateEndpoint,k as DrizzleDeleteEndpoint,z as DrizzleExportEndpoint,A as DrizzleImportEndpoint,l as DrizzleListEndpoint,i as DrizzleReadEndpoint,m as DrizzleRestoreEndpoint,y as DrizzleSearchEndpoint,j as DrizzleUpdateEndpoint,r as DrizzleUpsertEndpoint,v as DrizzleVersionCompareEndpoint,t as DrizzleVersionHistoryEndpoint,u as DrizzleVersionReadEndpoint,w as DrizzleVersionRollbackEndpoint,f as batchLoadDrizzleRelations,g as buildWhereCondition,a as cast,C as createDrizzleCrud,G as createDrizzleSchemas,E as createInsertSchema,D as createSelectSchema,F as createUpdateSchema,c as getColumn,b as getTable,H as isDrizzleZodAvailable,d as loadDrizzleRelation,e as loadDrizzleRelations}from'../../chunk-5UBOPX6O.js';import'../../chunk-TP6RZ5RR.js';import'../../chunk-SDNXN7M5.js';import'../../chunk-3TIIYAKB.js';import'../../chunk-7NM6MBRL.js';import'../../chunk-FC56WWPB.js';import'../../chunk-ANWSQPCQ.js';import'../../chunk-Z575OBLV.js';import'../../chunk-GBQQ3YQX.js';import'../../chunk-QRXEQTNE.js';import'../../chunk-QXFY6NYI.js';import'../../chunk-DMGP7QDL.js';import'../../chunk-MDHMZPXK.js';import'../../chunk-VJRDAVID.js';
1
+ export{I as DrizzleAdapters,x as DrizzleAggregateEndpoint,n as DrizzleBatchCreateEndpoint,p as DrizzleBatchDeleteEndpoint,q as DrizzleBatchRestoreEndpoint,o as DrizzleBatchUpdateEndpoint,s as DrizzleBatchUpsertEndpoint,B as DrizzleCloneEndpoint,h as DrizzleCreateEndpoint,k as DrizzleDeleteEndpoint,z as DrizzleExportEndpoint,A as DrizzleImportEndpoint,l as DrizzleListEndpoint,i as DrizzleReadEndpoint,m as DrizzleRestoreEndpoint,y as DrizzleSearchEndpoint,j as DrizzleUpdateEndpoint,r as DrizzleUpsertEndpoint,v as DrizzleVersionCompareEndpoint,t as DrizzleVersionHistoryEndpoint,u as DrizzleVersionReadEndpoint,w as DrizzleVersionRollbackEndpoint,f as batchLoadDrizzleRelations,g as buildWhereCondition,a as cast,C as createDrizzleCrud,G as createDrizzleSchemas,E as createInsertSchema,D as createSelectSchema,F as createUpdateSchema,c as getColumn,b as getTable,H as isDrizzleZodAvailable,d as loadDrizzleRelation,e as loadDrizzleRelations}from'../../chunk-UQUDEKCP.js';import'../../chunk-A5UWQNQQ.js';import'../../chunk-SDNXN7M5.js';import'../../chunk-RXUYM2KD.js';import'../../chunk-U4PDR4P3.js';import'../../chunk-IDUJWS5U.js';import'../../chunk-FC56WWPB.js';import'../../chunk-QJPUXVTT.js';import'../../chunk-GBQQ3YQX.js';import'../../chunk-QRXEQTNE.js';import'../../chunk-QXFY6NYI.js';import'../../chunk-DMGP7QDL.js';import'../../chunk-MDHMZPXK.js';import'../../chunk-VJRDAVID.js';
@@ -1,9 +1,9 @@
1
1
  import { Env } from 'hono';
2
- import { a as CreateEndpoint, M as ModelObject, D as DeleteEndpoint, L as ListEndpoint, R as ReadEndpoint, b as RestoreEndpoint, U as UpdateEndpoint, B as BatchCreateEndpoint, c as BatchDeleteEndpoint, d as BatchRestoreEndpoint, e as BatchUpdateEndpoint, f as BatchUpdateItem, g as BatchUpsertEndpoint, A as AggregateEndpoint, h as CloneEndpoint, E as ExportEndpoint, I as ImportEndpoint, S as SearchEndpoint, i as UpsertEndpoint, V as VersionCompareEndpoint, j as VersionHistoryEndpoint, k as VersionReadEndpoint, l as VersionRollbackEndpoint } from '../../import-D8nboMpT.js';
3
- import { M as MetaInput, f as RelationConfig, L as ListFilters, P as PaginatedResult, I as IncludeOptions, N as NestedUpdateInput, g as NestedWriteResult, h as AggregateOptions, i as AggregateResult, S as SearchOptions, j as SearchResult } from '../../types-tpG0M7Va.js';
4
- import { B as BulkPatchEndpoint } from '../../bulk-patch-DG_5emFi.js';
2
+ import { a as CreateEndpoint, M as ModelObject, D as DeleteEndpoint, L as ListEndpoint, R as ReadEndpoint, b as RestoreEndpoint, U as UpdateEndpoint, B as BatchCreateEndpoint, c as BatchDeleteEndpoint, d as BatchRestoreEndpoint, e as BatchUpdateEndpoint, f as BatchUpdateItem, g as BatchUpsertEndpoint, A as AggregateEndpoint, h as CloneEndpoint, E as ExportEndpoint, I as ImportEndpoint, S as SearchEndpoint, i as UpsertEndpoint, V as VersionCompareEndpoint, j as VersionHistoryEndpoint, k as VersionReadEndpoint, l as VersionRollbackEndpoint } from '../../import-DzAuLZQf.js';
3
+ import { M as MetaInput, h as RelationConfig, L as ListFilters, P as PaginatedResult, I as IncludeOptions, N as NestedUpdateInput, i as NestedWriteResult, j as AggregateOptions, k as AggregateResult, S as SearchOptions, l as SearchResult } from '../../types-CJ0rN_9M.js';
4
+ import { B as BulkPatchEndpoint } from '../../bulk-patch-qEj-oZiL.js';
5
5
  import 'zod';
6
- import '../../route-AzM3iPZP.js';
6
+ import '../../route-zMPr_8wn.js';
7
7
  import 'hono/utils/http-status';
8
8
  import '../../audit/index.js';
9
9
  import '../../registry-PNJjvSvm.js';
@@ -1 +1 @@
1
- export{f as MEMORY_NOOP_TX,x as MemoryAggregateEndpoint,m as MemoryBatchCreateEndpoint,o as MemoryBatchDeleteEndpoint,p as MemoryBatchRestoreEndpoint,n as MemoryBatchUpdateEndpoint,q as MemoryBatchUpsertEndpoint,B as MemoryBulkPatchEndpoint,r as MemoryCloneEndpoint,g as MemoryCreateEndpoint,j as MemoryDeleteEndpoint,z as MemoryExportEndpoint,A as MemoryImportEndpoint,k as MemoryListEndpoint,h as MemoryReadEndpoint,l as MemoryRestoreEndpoint,y as MemorySearchEndpoint,i as MemoryUpdateEndpoint,s as MemoryUpsertEndpoint,v as MemoryVersionCompareEndpoint,t as MemoryVersionHistoryEndpoint,u as MemoryVersionReadEndpoint,w as MemoryVersionRollbackEndpoint,d as clearStorage,e as getStorage,c as getStore,b as storage}from'../../chunk-6P4Z6G35.js';import'../../chunk-TP6RZ5RR.js';import'../../chunk-SDNXN7M5.js';import'../../chunk-3TIIYAKB.js';import'../../chunk-7NM6MBRL.js';import'../../chunk-FC56WWPB.js';import'../../chunk-ANWSQPCQ.js';import'../../chunk-Z575OBLV.js';import'../../chunk-GBQQ3YQX.js';import'../../chunk-QRXEQTNE.js';import'../../chunk-QXFY6NYI.js';import'../../chunk-DMGP7QDL.js';import'../../chunk-MDHMZPXK.js';import'../../chunk-VJRDAVID.js';
1
+ export{f as MEMORY_NOOP_TX,x as MemoryAggregateEndpoint,m as MemoryBatchCreateEndpoint,o as MemoryBatchDeleteEndpoint,p as MemoryBatchRestoreEndpoint,n as MemoryBatchUpdateEndpoint,q as MemoryBatchUpsertEndpoint,B as MemoryBulkPatchEndpoint,r as MemoryCloneEndpoint,g as MemoryCreateEndpoint,j as MemoryDeleteEndpoint,z as MemoryExportEndpoint,A as MemoryImportEndpoint,k as MemoryListEndpoint,h as MemoryReadEndpoint,l as MemoryRestoreEndpoint,y as MemorySearchEndpoint,i as MemoryUpdateEndpoint,s as MemoryUpsertEndpoint,v as MemoryVersionCompareEndpoint,t as MemoryVersionHistoryEndpoint,u as MemoryVersionReadEndpoint,w as MemoryVersionRollbackEndpoint,d as clearStorage,e as getStorage,c as getStore,b as storage}from'../../chunk-QK65CFMV.js';import'../../chunk-A5UWQNQQ.js';import'../../chunk-SDNXN7M5.js';import'../../chunk-RXUYM2KD.js';import'../../chunk-U4PDR4P3.js';import'../../chunk-IDUJWS5U.js';import'../../chunk-FC56WWPB.js';import'../../chunk-QJPUXVTT.js';import'../../chunk-GBQQ3YQX.js';import'../../chunk-QRXEQTNE.js';import'../../chunk-QXFY6NYI.js';import'../../chunk-DMGP7QDL.js';import'../../chunk-MDHMZPXK.js';import'../../chunk-VJRDAVID.js';
@@ -1,9 +1,9 @@
1
1
  import { Env } from 'hono';
2
- import { a as CreateEndpoint, M as ModelObject, D as DeleteEndpoint, L as ListEndpoint, R as ReadEndpoint, U as UpdateEndpoint, B as BatchCreateEndpoint, c as BatchDeleteEndpoint, d as BatchRestoreEndpoint, e as BatchUpdateEndpoint, f as BatchUpdateItem, g as BatchUpsertEndpoint, b as RestoreEndpoint, A as AggregateEndpoint, h as CloneEndpoint, E as ExportEndpoint, I as ImportEndpoint, S as SearchEndpoint, i as UpsertEndpoint, V as VersionCompareEndpoint, j as VersionHistoryEndpoint, k as VersionReadEndpoint, l as VersionRollbackEndpoint } from '../../import-D8nboMpT.js';
3
- import { M as MetaInput, L as ListFilters, P as PaginatedResult, I as IncludeOptions, h as AggregateOptions, i as AggregateResult, k as AggregateField, S as SearchOptions, j as SearchResult } from '../../types-tpG0M7Va.js';
4
- import { A as AdapterBundle } from '../../index-aGdjAC27.js';
2
+ import { a as CreateEndpoint, M as ModelObject, D as DeleteEndpoint, L as ListEndpoint, R as ReadEndpoint, U as UpdateEndpoint, B as BatchCreateEndpoint, c as BatchDeleteEndpoint, d as BatchRestoreEndpoint, e as BatchUpdateEndpoint, f as BatchUpdateItem, g as BatchUpsertEndpoint, b as RestoreEndpoint, A as AggregateEndpoint, h as CloneEndpoint, E as ExportEndpoint, I as ImportEndpoint, S as SearchEndpoint, i as UpsertEndpoint, V as VersionCompareEndpoint, j as VersionHistoryEndpoint, k as VersionReadEndpoint, l as VersionRollbackEndpoint } from '../../import-DzAuLZQf.js';
3
+ import { M as MetaInput, L as ListFilters, P as PaginatedResult, I as IncludeOptions, j as AggregateOptions, k as AggregateResult, m as AggregateField, S as SearchOptions, l as SearchResult } from '../../types-CJ0rN_9M.js';
4
+ import { A as AdapterBundle } from '../../index-BOWqsE16.js';
5
5
  import 'zod';
6
- import '../../route-AzM3iPZP.js';
6
+ import '../../route-zMPr_8wn.js';
7
7
  import 'hono/utils/http-status';
8
8
  import '../../audit/index.js';
9
9
  import '../../registry-PNJjvSvm.js';
@@ -1 +1 @@
1
- export{y as PrismaAdapters,w as PrismaAggregateEndpoint,j as PrismaBatchCreateEndpoint,l as PrismaBatchDeleteEndpoint,m as PrismaBatchRestoreEndpoint,k as PrismaBatchUpdateEndpoint,n as PrismaBatchUpsertEndpoint,x as PrismaCloneEndpoint,d as PrismaCreateEndpoint,g as PrismaDeleteEndpoint,p as PrismaExportEndpoint,q as PrismaImportEndpoint,h as PrismaListEndpoint,e as PrismaReadEndpoint,i as PrismaRestoreEndpoint,o as PrismaSearchEndpoint,f as PrismaUpdateEndpoint,r as PrismaUpsertEndpoint,u as PrismaVersionCompareEndpoint,s as PrismaVersionHistoryEndpoint,t as PrismaVersionReadEndpoint,v as PrismaVersionRollbackEndpoint,c as clearPrismaModelMappings,a as registerPrismaModelMapping,b as registerPrismaModelMappings}from'../../chunk-DLD4TRHM.js';import'../../chunk-TP6RZ5RR.js';import'../../chunk-SDNXN7M5.js';import'../../chunk-3TIIYAKB.js';import'../../chunk-7NM6MBRL.js';import'../../chunk-FC56WWPB.js';import'../../chunk-ANWSQPCQ.js';import'../../chunk-Z575OBLV.js';import'../../chunk-GBQQ3YQX.js';import'../../chunk-QRXEQTNE.js';import'../../chunk-QXFY6NYI.js';import'../../chunk-DMGP7QDL.js';import'../../chunk-MDHMZPXK.js';import'../../chunk-VJRDAVID.js';
1
+ export{y as PrismaAdapters,w as PrismaAggregateEndpoint,j as PrismaBatchCreateEndpoint,l as PrismaBatchDeleteEndpoint,m as PrismaBatchRestoreEndpoint,k as PrismaBatchUpdateEndpoint,n as PrismaBatchUpsertEndpoint,x as PrismaCloneEndpoint,d as PrismaCreateEndpoint,g as PrismaDeleteEndpoint,p as PrismaExportEndpoint,q as PrismaImportEndpoint,h as PrismaListEndpoint,e as PrismaReadEndpoint,i as PrismaRestoreEndpoint,o as PrismaSearchEndpoint,f as PrismaUpdateEndpoint,r as PrismaUpsertEndpoint,u as PrismaVersionCompareEndpoint,s as PrismaVersionHistoryEndpoint,t as PrismaVersionReadEndpoint,v as PrismaVersionRollbackEndpoint,c as clearPrismaModelMappings,a as registerPrismaModelMapping,b as registerPrismaModelMappings}from'../../chunk-MKMSOGVE.js';import'../../chunk-A5UWQNQQ.js';import'../../chunk-SDNXN7M5.js';import'../../chunk-RXUYM2KD.js';import'../../chunk-U4PDR4P3.js';import'../../chunk-IDUJWS5U.js';import'../../chunk-FC56WWPB.js';import'../../chunk-QJPUXVTT.js';import'../../chunk-GBQQ3YQX.js';import'../../chunk-QRXEQTNE.js';import'../../chunk-QXFY6NYI.js';import'../../chunk-DMGP7QDL.js';import'../../chunk-MDHMZPXK.js';import'../../chunk-VJRDAVID.js';
@@ -1,5 +1,5 @@
1
1
  import { Context, Env } from 'hono';
2
- import { A as AuditConfig, a as AuditLogEntry, b as AuditAction } from '../types-tpG0M7Va.js';
2
+ import { A as AuditConfig, c as AuditLogEntry, d as AuditAction } from '../types-CJ0rN_9M.js';
3
3
  import { S as StorageRegistry } from '../registry-PNJjvSvm.js';
4
4
  import 'zod';
5
5
  import '../types-B5wq2iKZ.js';
@@ -1 +1 @@
1
- export{e as AuditLogger,a as MemoryAuditLogStorage,b as auditStorageRegistry,f as createAuditLogger,d as getAuditStorage,c as setAuditStorage}from'../chunk-ANWSQPCQ.js';import'../chunk-Z575OBLV.js';import'../chunk-GBQQ3YQX.js';import'../chunk-MDHMZPXK.js';import'../chunk-VJRDAVID.js';
1
+ export{e as AuditLogger,a as MemoryAuditLogStorage,b as auditStorageRegistry,f as createAuditLogger,d as getAuditStorage,c as setAuditStorage}from'../chunk-IDUJWS5U.js';import'../chunk-QJPUXVTT.js';import'../chunk-GBQQ3YQX.js';import'../chunk-MDHMZPXK.js';import'../chunk-VJRDAVID.js';
@@ -1,7 +1,7 @@
1
- import { p as AuthEnv, a5 as JWTConfig, a3 as JWTClaims, q as APIKeyConfig, r as APIKeyEntry, y as AuthConfig, W as Guard, w as ApprovalConfig, C as AuthorizationCheck, aj as OwnershipExtractor, a8 as ModelPolicies, x as ApprovalStorage, am as PendingAction, B as AuthUser, M as MetaInput, O as OpenAPIRouteSchema, aR as Constructor, Q as EndpointAuthConfig, aS as APIKeyStorage, s as APIKeyLookupResult } from '../types-tpG0M7Va.js';
2
- export { t as ActionSource, z as AuthType, a2 as JWTAlgorithm, a4 as JWTClaimsSchema, al as PathPattern, an as PendingActionStatus, ax as ValidatedJWTClaims, aO as parseJWTClaims, aQ as safeParseJWTClaims } from '../types-tpG0M7Va.js';
1
+ import { r as AuthEnv, a9 as JWTConfig, a7 as JWTClaims, s as APIKeyConfig, t as APIKeyEntry, D as AuthConfig, _ as Guard, B as ApprovalConfig, J as AuthorizationCheck, an as OwnershipExtractor, ac as ModelPolicies, C as ApprovalStorage, aq as PendingAction, G as AuthUser, M as MetaInput, O as OpenAPIRouteSchema, aX as Constructor, X as EndpointAuthConfig, aY as APIKeyStorage, u as APIKeyLookupResult } from '../types-CJ0rN_9M.js';
2
+ export { v as ActionSource, E as AuthType, a6 as JWTAlgorithm, a8 as JWTClaimsSchema, ap as PathPattern, ar as PendingActionStatus, aD as ValidatedJWTClaims, aU as parseJWTClaims, aW as safeParseJWTClaims } from '../types-CJ0rN_9M.js';
3
3
  import { MiddlewareHandler, Context } from 'hono';
4
- import { O as OpenAPIRoute } from '../route-AzM3iPZP.js';
4
+ import { O as OpenAPIRoute } from '../route-zMPr_8wn.js';
5
5
  import 'zod';
6
6
  import '../types-B5wq2iKZ.js';
7
7
  import '../types-BAcN7U0B.js';
@@ -1 +1 @@
1
- export{o as AuthenticatedEndpoint,a as JWTClaimsSchema,j as createAPIKeyMiddleware,l as createAuthMiddleware,e as createJWTMiddleware,g as decodeJWT,i as defaultHashAPIKey,m as optionalAuth,b as parseJWTClaims,n as requireAuthentication,c as safeParseJWTClaims,k as validateAPIKey,h as validateAPIKeyEntry,d as validateJWTClaims,f as verifyJWT,p as withAuth}from'../chunk-KLZMYDYG.js';export{d as MemoryApprovalStorage,e as POLICIES_CONTEXT_KEY,m as allOf,p as allowAll,n as anyOf,o as denyAll,c as parseIso8601Duration,g as requireAllRoles,i as requireAnyPermission,s as requireApproval,j as requireAuth,q as requireAuthenticated,k as requireOwnership,l as requireOwnershipOrRole,h as requirePermissions,r as requirePolicy,f as requireRoles}from'../chunk-3TIIYAKB.js';export{c as MemoryAPIKeyStorage,d as generateAPIKey,h as getAPIKeyStorage,e as hashAPIKey,f as isValidAPIKeyFormat,i as setAPIKeyStorage}from'../chunk-2M5BM4VD.js';import'../chunk-FC56WWPB.js';import'../chunk-GBQQ3YQX.js';import'../chunk-DMGP7QDL.js';import'../chunk-MDHMZPXK.js';import'../chunk-VJRDAVID.js';
1
+ export{o as AuthenticatedEndpoint,a as JWTClaimsSchema,j as createAPIKeyMiddleware,l as createAuthMiddleware,e as createJWTMiddleware,g as decodeJWT,i as defaultHashAPIKey,m as optionalAuth,b as parseJWTClaims,n as requireAuthentication,c as safeParseJWTClaims,k as validateAPIKey,h as validateAPIKeyEntry,d as validateJWTClaims,f as verifyJWT,p as withAuth}from'../chunk-VSTEFZOU.js';export{e as MemoryApprovalStorage,f as POLICIES_CONTEXT_KEY,n as allOf,q as allowAll,o as anyOf,p as denyAll,d as parseIso8601Duration,h as requireAllRoles,j as requireAnyPermission,t as requireApproval,k as requireAuth,r as requireAuthenticated,l as requireOwnership,m as requireOwnershipOrRole,i as requirePermissions,s as requirePolicy,g as requireRoles}from'../chunk-RXUYM2KD.js';export{c as MemoryAPIKeyStorage,d as generateAPIKey,h as getAPIKeyStorage,e as hashAPIKey,f as isValidAPIKeyFormat,i as setAPIKeyStorage}from'../chunk-2M5BM4VD.js';import'../chunk-FC56WWPB.js';import'../chunk-QJPUXVTT.js';import'../chunk-GBQQ3YQX.js';import'../chunk-DMGP7QDL.js';import'../chunk-MDHMZPXK.js';import'../chunk-VJRDAVID.js';
@@ -1,7 +1,7 @@
1
1
  import { ZodObject, ZodRawShape } from 'zod';
2
2
  import { Env } from 'hono';
3
- import { C as CrudEndpoint, M as ModelObject } from './import-D8nboMpT.js';
4
- import { M as MetaInput, H as HookMode, L as ListFilters, O as OpenAPIRouteSchema } from './types-tpG0M7Va.js';
3
+ import { C as CrudEndpoint, M as ModelObject } from './import-DzAuLZQf.js';
4
+ import { M as MetaInput, H as HookMode, L as ListFilters, O as OpenAPIRouteSchema } from './types-CJ0rN_9M.js';
5
5
 
6
6
  /**
7
7
  * Result of a bulk patch operation.
@@ -1,8 +1,8 @@
1
1
  import { I as InvalidationPatternOptions, d as CacheKeyOptions, C as CacheStorage, b as CacheEntry, e as CacheSetOptions, f as CacheStats, a as CacheConfig, c as CacheInvalidationConfig } from '../types-BdRvpp1z.js';
2
2
  export { g as InvalidationStrategy } from '../types-BdRvpp1z.js';
3
3
  import { K as KVNamespace } from '../cloudflare-kv-types-ByUEHhBc.js';
4
- import { aR as Constructor } from '../types-tpG0M7Va.js';
5
- import { O as OpenAPIRoute } from '../route-AzM3iPZP.js';
4
+ import { aX as Constructor } from '../types-CJ0rN_9M.js';
5
+ import { O as OpenAPIRoute } from '../route-zMPr_8wn.js';
6
6
  import 'hono';
7
7
  import 'zod';
8
8
  import '../types-B5wq2iKZ.js';
@@ -1 +1 @@
1
- export{b as KVCacheStorage,a as RedisCacheStorage}from'../chunk-H3H65KZF.js';export{C as MemoryCacheStorage,y as createInvalidationPattern,z as createRelatedPatterns,x as generateCacheKey,E as getCacheStorage,A as matchesPattern,B as parseCacheKey,D as setCacheStorage,F as withCache,G as withCacheInvalidation}from'../chunk-2U5ZQ7XQ.js';import'../chunk-7NM6MBRL.js';import'../chunk-GF2EC5G4.js';import'../chunk-2M5BM4VD.js';import'../chunk-FC56WWPB.js';import'../chunk-ANWSQPCQ.js';import'../chunk-Z575OBLV.js';import'../chunk-GBQQ3YQX.js';import'../chunk-DMGP7QDL.js';import'../chunk-MDHMZPXK.js';import'../chunk-VJRDAVID.js';
1
+ export{b as KVCacheStorage,a as RedisCacheStorage}from'../chunk-H3H65KZF.js';export{C as MemoryCacheStorage,y as createInvalidationPattern,z as createRelatedPatterns,x as generateCacheKey,E as getCacheStorage,A as matchesPattern,B as parseCacheKey,D as setCacheStorage,F as withCache,G as withCacheInvalidation}from'../chunk-MGEQVZAI.js';import'../chunk-U4PDR4P3.js';import'../chunk-GF2EC5G4.js';import'../chunk-IDUJWS5U.js';import'../chunk-2M5BM4VD.js';import'../chunk-FC56WWPB.js';import'../chunk-QJPUXVTT.js';import'../chunk-GBQQ3YQX.js';import'../chunk-DMGP7QDL.js';import'../chunk-MDHMZPXK.js';import'../chunk-VJRDAVID.js';
@@ -1 +1 @@
1
- import {d}from'./chunk-2U5ZQ7XQ.js';var m=class{entriesById=new Map;entryIds=[];maxEntries;maxAge;cleanupInterval;lastCleanup=0;constructor(e){this.maxEntries=e?.maxEntries??1e4,this.maxAge=e?.maxAge??864e5,this.cleanupInterval=e?.cleanupInterval??3e5;}maybeCleanup(){if(this.cleanupInterval<=0||this.maxAge<=0)return;let e=Date.now();e-this.lastCleanup>=this.cleanupInterval&&(this.lastCleanup=e,this.deleteOlderThanSync(this.maxAge));}deleteOlderThanSync(e){let n=Date.now()-e,a=0;for(let t=this.entryIds.length-1;t>=0;t--){let s=this.entryIds[t],r=this.entriesById.get(s);if(r)if(new Date(r.timestamp).getTime()<n)this.entriesById.delete(s),this.entryIds.splice(t,1),a++;else break}return a}async store(e){for(this.maybeCleanup();this.entryIds.length>=this.maxEntries;){let n=this.entryIds.pop();n&&this.entriesById.delete(n);}this.entriesById.set(e.id,e),this.entryIds.unshift(e.id);}async query(e){this.maybeCleanup();let n=this.getFilteredEntries(e);if(e?.sort){let{field:s,direction:r}=e.sort;n=n.sort((i,o)=>{let g,u;switch(s){case "timestamp":g=new Date(i.timestamp).getTime(),u=new Date(o.timestamp).getTime();break;case "responseTimeMs":g=i.response.responseTimeMs,u=o.response.responseTimeMs;break;case "statusCode":g=i.response.statusCode,u=o.response.statusCode;break;default:return 0}return r==="asc"?g-u:u-g});}let a=e?.offset??0,t=e?.limit??n.length;return n.slice(a,a+t)}async getById(e){return this.entriesById.get(e)??null}async count(e){return this.getFilteredEntries(e).length}async deleteOlderThan(e){return this.deleteOlderThanSync(e)}async clear(){let e=this.entriesById.size;return this.entriesById.clear(),this.entryIds=[],e}destroy(){this.entriesById.clear(),this.entryIds=[];}getSize(){return this.entriesById.size}getFilteredEntries(e){if(!e)return Array.from(this.entriesById.values());let n=[];for(let a of this.entryIds){let t=this.entriesById.get(a);if(t&&!(e.level&&!(Array.isArray(e.level)?e.level:[e.level]).includes(t.level))&&!(e.method&&!(Array.isArray(e.method)?e.method:[e.method]).map(r=>r.toUpperCase()).includes(t.request.method.toUpperCase()))&&!(e.path&&!d(t.request.path,e.path))){if(e.statusCode){let{min:s,max:r}=e.statusCode,i=t.response.statusCode;if(s!==void 0&&i<s||r!==void 0&&i>r)continue}if(e.timeRange){let s=new Date(t.timestamp).getTime(),{start:r,end:i}=e.timeRange;if(r){let o=typeof r=="string"?new Date(r).getTime():r.getTime();if(s<o)continue}if(i){let o=typeof i=="string"?new Date(i).getTime():i.getTime();if(s>o)continue}}e.userId&&t.request.userId!==e.userId||e.clientIp&&t.request.clientIp!==e.clientIp||e.requestId&&t.id!==e.requestId||e.errorMessage&&(!t.error?.message||!t.error.message.toLowerCase().includes(e.errorMessage.toLowerCase()))||n.push(t);}}return n}};export{m as a};
1
+ import {d}from'./chunk-MGEQVZAI.js';var m=class{entriesById=new Map;entryIds=[];maxEntries;maxAge;cleanupInterval;lastCleanup=0;constructor(e){this.maxEntries=e?.maxEntries??1e4,this.maxAge=e?.maxAge??864e5,this.cleanupInterval=e?.cleanupInterval??3e5;}maybeCleanup(){if(this.cleanupInterval<=0||this.maxAge<=0)return;let e=Date.now();e-this.lastCleanup>=this.cleanupInterval&&(this.lastCleanup=e,this.deleteOlderThanSync(this.maxAge));}deleteOlderThanSync(e){let n=Date.now()-e,a=0;for(let t=this.entryIds.length-1;t>=0;t--){let s=this.entryIds[t],r=this.entriesById.get(s);if(r)if(new Date(r.timestamp).getTime()<n)this.entriesById.delete(s),this.entryIds.splice(t,1),a++;else break}return a}async store(e){for(this.maybeCleanup();this.entryIds.length>=this.maxEntries;){let n=this.entryIds.pop();n&&this.entriesById.delete(n);}this.entriesById.set(e.id,e),this.entryIds.unshift(e.id);}async query(e){this.maybeCleanup();let n=this.getFilteredEntries(e);if(e?.sort){let{field:s,direction:r}=e.sort;n=n.sort((i,o)=>{let g,u;switch(s){case "timestamp":g=new Date(i.timestamp).getTime(),u=new Date(o.timestamp).getTime();break;case "responseTimeMs":g=i.response.responseTimeMs,u=o.response.responseTimeMs;break;case "statusCode":g=i.response.statusCode,u=o.response.statusCode;break;default:return 0}return r==="asc"?g-u:u-g});}let a=e?.offset??0,t=e?.limit??n.length;return n.slice(a,a+t)}async getById(e){return this.entriesById.get(e)??null}async count(e){return this.getFilteredEntries(e).length}async deleteOlderThan(e){return this.deleteOlderThanSync(e)}async clear(){let e=this.entriesById.size;return this.entriesById.clear(),this.entryIds=[],e}destroy(){this.entriesById.clear(),this.entryIds=[];}getSize(){return this.entriesById.size}getFilteredEntries(e){if(!e)return Array.from(this.entriesById.values());let n=[];for(let a of this.entryIds){let t=this.entriesById.get(a);if(t&&!(e.level&&!(Array.isArray(e.level)?e.level:[e.level]).includes(t.level))&&!(e.method&&!(Array.isArray(e.method)?e.method:[e.method]).map(r=>r.toUpperCase()).includes(t.request.method.toUpperCase()))&&!(e.path&&!d(t.request.path,e.path))){if(e.statusCode){let{min:s,max:r}=e.statusCode,i=t.response.statusCode;if(s!==void 0&&i<s||r!==void 0&&i>r)continue}if(e.timeRange){let s=new Date(t.timestamp).getTime(),{start:r,end:i}=e.timeRange;if(r){let o=typeof r=="string"?new Date(r).getTime():r.getTime();if(s<o)continue}if(i){let o=typeof i=="string"?new Date(i).getTime():i.getTime();if(s>o)continue}}e.userId&&t.request.userId!==e.userId||e.clientIp&&t.request.clientIp!==e.clientIp||e.requestId&&t.id!==e.requestId||e.errorMessage&&(!t.error?.message||!t.error.message.toLowerCase().includes(e.errorMessage.toLowerCase()))||n.push(t);}}return n}};export{m as a};
@@ -0,0 +1,11 @@
1
+ import {a as a$1,b as b$1}from'./chunk-SDNXN7M5.js';import {b,f as f$2}from'./chunk-RXUYM2KD.js';import {f as f$1}from'./chunk-U4PDR4P3.js';import {f}from'./chunk-IDUJWS5U.js';import {a as a$2,b as b$3,c as c$1,d as d$3,i as i$1}from'./chunk-FC56WWPB.js';import {e,g,n,o,p,c,j,d as d$2,k,i,r}from'./chunk-QJPUXVTT.js';import {d as d$1,e as e$1}from'./chunk-QRXEQTNE.js';import {d}from'./chunk-QXFY6NYI.js';import {b as b$4}from'./chunk-DMGP7QDL.js';import {a,b as b$2}from'./chunk-VJRDAVID.js';import {z}from'zod';import {HTTPException}from'hono/http-exception';import {stream}from'hono/streaming';function le(i){if(i===null||typeof i!="object")return i;if(Array.isArray(i))return i.map(le);let e={};for(let t of Object.keys(i).sort())e[t]=le(i[t]);return e}async function ee(i){let e=JSON.stringify(le(i)),t=new TextEncoder().encode(e),o=await crypto.subtle.digest("SHA-256",t);return `"${Array.from(new Uint8Array(o)).map(n=>n.toString(16).padStart(2,"0")).join("").substring(0,32)}"`}function de(i,e){return i?i==="*"?true:i.split(",").map(t=>t.trim()).includes(e):false}function ce(i,e){return !i||i==="*"?true:i.split(",").map(t=>t.trim()).includes(e)}function Ae(i,e){return i==="in"||i==="nin"||i==="between"?e.split(",").map(t=>t.trim()):i==="null"?e.toLowerCase()==="true":e}function Pt(i){let e=i.match(/^\[([a-z]+)\](.*)$/);if(e){let t=e[1];return {operator:t,value:Ae(t,e[2])}}return {operator:"eq",value:i}}function se(i,e){let t=[],o={},{filterFields:r=[],filterConfig:s={},searchFields:n=[],searchFieldName:u="search",sortFields:l=[],defaultSort:p,defaultPerPage:a=20,maxPerPage:c=100,cursorPaginationEnabled:d=false,softDeleteQueryParam:m="withDeleted",allowedIncludes:f=[],fieldSelectionEnabled:g=false,allowedSelectFields:j=[],blockedSelectFields:x=[],alwaysIncludeFields:k=[],defaultSelectFields:y=[]}=e,F={};for(let v of r)F[v]=["eq"];Object.assign(F,s);for(let[v,J]of Object.entries(i)){if(J==null)continue;let Z=String(J);if(d&&v==="cursor"){o.cursor=Z;continue}if(d&&v==="limit"){o.limit=Math.min(c,Math.max(1,parseInt(Z,10)||a));continue}if(v==="page"){o.page=Math.max(1,parseInt(Z,10)||1);continue}if(v==="per_page"){o.per_page=Math.min(c,Math.max(1,parseInt(Z,10)||a));continue}if(v==="sort"){(l.length===0||l.includes(Z))&&(o.order_by=Z);continue}if(v==="order"){(Z==="asc"||Z==="desc")&&(o.order_by_direction=Z);continue}if(v===u&&n.length>0){o.search=Z;continue}if(v===m){o.withDeleted=Z.toLowerCase()==="true";continue}if(v==="onlyDeleted"){o.onlyDeleted=Z.toLowerCase()==="true";continue}if(v==="include"){let Y=Z.split(",").map(D=>D.trim()).filter(Boolean);f&&f.length>0?o.include=Y.filter(D=>f.includes(D)):o.include=Y;continue}if(v==="fields"&&g){let D=Z.split(",").map(te=>te.trim()).filter(Boolean);j.length>0&&(D=D.filter(te=>j.includes(te))),x.length>0&&(D=D.filter(te=>!x.includes(te))),k.length>0&&(D=[...new Set([...k,...D])]),o.fields=D;continue}let ae=v.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\[([a-z]+)\]$/);if(ae){let Y=ae[1],D=ae[2];F[Y]?.includes(D)&&t.push({field:Y,operator:D,value:Ae(D,Z)});continue}F[v]&&t.push({field:v,operator:"eq",value:Z});}if(o.page||(o.page=1),o.per_page||(o.per_page=a),!o.order_by&&p?.field&&(o.order_by=p.field),o.order_by_direction||(o.order_by_direction=p?.order??"asc"),g&&!o.fields&&y.length>0){let v=[...y];k.length>0&&(v=[...new Set([...k,...v])]),o.fields=v;}return {filters:t,options:o}}function $(i,e=[]){if(e.length===0)return i;let t=Object.fromEntries(e.map(o=>[o,true]));return i.omit(t)}function It(i,e={},t=[],o=[],r=[]){let{allowedFields:s=[],blockedFields:n=[],alwaysIncludeFields:u=[],defaultFields:l=[],allowComputedFields:p=true,allowRelationFields:a=true}=e;if(!i||typeof i!="string"||i.trim()==="")return l.length>0?{fields:[...new Set([...u,...l])],isActive:false}:{fields:[],isActive:false};let c=i.split(",").map(g=>g.trim()).filter(Boolean),d=new Set;for(let g of t)(s.length===0||s.includes(g))&&(n.includes(g)||d.add(g));if(p)for(let g of o)(s.length===0||s.includes(g))&&(n.includes(g)||d.add(g));if(a)for(let g of r)(s.length===0||s.includes(g))&&(n.includes(g)||d.add(g));let m=c.filter(g=>d.has(g));return {fields:[...new Set([...u,...m])],isActive:true}}function ue(i,e){if(!e.isActive||e.fields.length===0)return i;let t={};for(let o of e.fields)o in i&&(t[o]=i[o]);return t}function ne(i,e){return !e.isActive||e.fields.length===0?i:i.map(t=>ue(t,e))}var Ve="__honoCrudResolvedSchema:";function gt(i){return typeof i.getBodySchema=="function"}var S=class extends b{_auditLogger;_versionManager;_tx;getAuditLogger(){return this._auditLogger||(this._auditLogger=f(this._meta.model.audit)),this._auditLogger}getAuditConfig(){return e(this._meta.model.audit)}isAuditEnabled(){return this.getAuditConfig().enabled}getAuditUserId(){let e=this.getAuditConfig();return e.getUserId&&this.context?e.getUserId(this.context):this.context?.var?.userId}getVersionManager(){return this._versionManager||(this._versionManager=f$1(this._meta.model.versioning,this._meta.model.tableName)),this._versionManager}getVersioningConfig(){return g(this._meta.model.versioning,this._meta.model.tableName)}isVersioningEnabled(){return this.getVersioningConfig().enabled}getVersioningUserId(){let e=this.getVersioningConfig();return e.getUserId&&this.context?e.getUserId(this.context):this.context?.var?.userId}getSoftDeleteConfig(){return n(this._meta.model.softDelete)}isSoftDeleteEnabled(){return this.getSoftDeleteConfig().enabled}getMultiTenantConfig(){return o(this._meta.model.multiTenant)}isMultiTenantEnabled(){return this.getMultiTenantConfig().enabled}getTenantId(){if(!this.context)return;let e=this.getMultiTenantConfig();return p(this.context,e)}validateTenantId(){let e=this.getMultiTenantConfig();if(!e.enabled)return;let t=this.getTenantId();if(!t&&e.required)throw new HTTPException(400,{message:e.errorMessage});return t}injectTenantId(e){let t=this.getMultiTenantConfig();if(!t.enabled)return e;let o=this.getTenantId();return o?{...e,[t.field]:o}:e}async emitEvent(e,t){let o=d(this.context??void 0);o&&await o.emit({type:e,table:this._meta.model.tableName,recordId:t.recordId,data:t.data??null,previousData:t.previousData,userId:this.getAuditUserId(),tenantId:this.context?this.getTenantId():void 0,organizationId:this.context?a(this.context,"organizationId"):void 0,timestamp:new Date().toISOString(),metadata:t.metadata});}async encryptOnWrite(e){let t=this._meta.model.fieldEncryption;return t?await d$1(e,t.fields,t.keyProvider):e}async decryptOnRead(e){let t=this._meta.model.fieldEncryption;return t?await e$1(e,t.fields,t.keyProvider):e}applyProfile(e){let t=this._meta.model.serializationProfile;return t?a$1(e,t):e}applyProfileToArray(e){let t=this._meta.model.serializationProfile;return t?b$1(e,t):e}getRecordId(e){if(e===null||typeof e!="object")return null;let t=this._meta.model.primaryKeys[0],o=e[t];return typeof o=="string"||typeof o=="number"?o:null}getParentId(e){return this.getRecordId(e)}getPolicies(){if(this.context){let e=a(this.context,f$2);if(e)return e}return this._meta.model.policies}buildPolicyContext(){let e=this.context;return {user:e?a(e,"user"):void 0,userId:e?a(e,"userId"):void 0,tenantId:e?a(e,"tenantId"):void 0,organizationId:e?a(e,"organizationId"):void 0,request:e?.req?.raw??new Request("http://localhost/")}}async applyReadPolicy(e){let t=this.getPolicies();if(!t)return e;let o=this.buildPolicyContext();if(t.read&&!await t.read(o,e))return null;if(t.fields){let r=t.fields(o,e);return {...e,...r}}return e}async applyReadPolicyToArray(e){if(!this.getPolicies())return e;let o=[];for(let r of e){let s=await this.applyReadPolicy(r);s!==null&&o.push(s);}return o}async applyWritePolicy(e){let t=this.getPolicies();if(!t?.write)return;if(!await t.write(this.buildPolicyContext(),e))throw new HTTPException(403,{message:"Forbidden by policy"})}applyReadPushdown(e){let t=this.getPolicies();if(!t?.readPushdown)return;let o=t.readPushdown(this.buildPolicyContext());o&&o.length>0&&e.filters.push(...o);}buildHookContext(){let e=this.context;return {db:{tx:this._tx},request:e?.req?.raw,tenantId:e?this.getTenantId():void 0,organizationId:e?a(e,"organizationId"):void 0,userId:e?a(e,"userId"):void 0,agentId:e?a(e,"agentId"):void 0,agentRunId:e?a(e,"agentRunId"):void 0}}getModelSchema(){if(this.context&&this._meta.model.resolveSchema){let e=a(this.context,Ve+this._meta.model.tableName);if(e)return e}return this._meta.model.schema}async resolveModelSchema(){let e=this._meta.model.resolveSchema;if(!e||!this.context)return this._meta.model.schema;let t=Ve+this._meta.model.tableName,o=a(this.context,t);if(o)return o;let r={tenantId:a(this.context,"tenantId"),organizationId:a(this.context,"organizationId"),request:this.context.req?.raw,env:this.context.env},s;try{s=await e(r);}catch(n){throw new a$2(n instanceof Error?n.message:"Schema resolution failed",500,"SCHEMA_RESOLVE_ERROR",n instanceof Error?{cause:n.message}:void 0)}return b$2(this.context,t,s),s}async getValidatedData(){await this.resolveModelSchema();let e=await super.getValidatedData();if(this.context&&e.body!==void 0&&gt(this)){let t=e.body;try{t=await this.context.req.json();}catch{}let r=this.getBodySchema().safeParse(t);if(!r.success)throw b$3.fromZodError(r.error);e.body=r.data;}return e}};var Ze=class extends S{beforeHookMode="sequential";afterHookMode="sequential";allowNestedCreate=[];getBodySchema(){let e,t=[...this._meta.model.primaryKeys],o=this.getMultiTenantConfig();o.enabled&&t.push(o.field),this._meta.fields?e=this._meta.fields:e=$(this.getModelSchema(),t);let r=this.getNestedWritableRelations();if(r.length===0)return e;let s={...e.shape};for(let n of r){let u=this._meta.model.relations?.[n];if(!u?.schema)continue;let l=["id",u.foreignKey],p=$(u.schema,l);u.type==="hasMany"?s[n]=z.array(p).optional():s[n]=p.optional();}return z.object(s)}getNestedWritableRelations(){if(this.allowNestedCreate.length>0)return this.allowNestedCreate;let e=this._meta.model.relations;return e?Object.entries(e).filter(([t,o])=>o.nestedWrites?.allowCreate===true).map(([t])=>t):[]}extractNestedData(e){let t=this.getNestedWritableRelations();return c(e,t)}getSchema(){let e=this.getBodySchema();return {...this.schema,request:{body:{content:{"application/json":{schema:e}},required:true}},responses:{201:{description:"Resource created successfully",content:{"application/json":{schema:z.object({success:z.literal(true),result:this.getModelSchema()})}}},400:{description:"Validation error",content:{"application/json":{schema:z.object({success:z.literal(false),error:z.object({code:z.string(),message:z.string(),details:z.unknown().optional()})})}}}}}}async getObject(){let{body:e}=await this.getValidatedData();return e}async before(e,t){return e}async after(e,t){return e}transform(e){return e}async createNested(e,t,o,r,s){return b$4().warn(`Nested writes not implemented for ${t}. Override createNested() in your adapter.`),[]}async handle(){this.validateTenantId();let e=await this.getObject(),{mainData:t,nestedData:o}=this.extractNestedData(e),r=t;r=this.injectTenantId(r);let s=this.buildHookContext();r=await this.before(r,s),r=await this.encryptOnWrite(r),r=await this.create(r,s.db.tx),r=await this.decryptOnRead(r);let n=this.getParentId(r),u={};if(Object.keys(o).length>0&&n!==null)for(let[c,d]of Object.entries(o)){if(d==null)continue;let m=this._meta.model.relations?.[c];if(!m)continue;let f=await this.createNested(n,c,m,d);u[c]=f;}if(Object.keys(u).length>0){let c={};for(let[d,m]of Object.entries(u)){let f=this._meta.model.relations?.[d];f&&(f.type==="hasMany"?c[d]=m:c[d]=m[0]||null);}r={...r,...c};}if(this.afterHookMode==="fire-and-forget"?this.runAfterResponse(Promise.resolve(this.after(r,s))):r=await this.after(r,s),this.isAuditEnabled()&&n!==null){let c=this.getAuditLogger();this.runAfterResponse(c.logCreate(this._meta.model.tableName,n,r,this.getAuditUserId()));}n!==null&&this.runAfterResponse(this.emitEvent("created",{recordId:n,data:r})),this._meta.model.computedFields&&(r=await j(r,this._meta.model.computedFields));let l=this._meta.model.serializer?this._meta.model.serializer(r):r,p=this.applyProfile(l),a=this.transform(p);return this.success(a,201)}};var Te=class extends S{lookupField="id";lookupFields;additionalFilters;etagEnabled=false;allowedIncludes=[];fieldSelectionEnabled=false;allowedSelectFields=[];blockedSelectFields=[];alwaysIncludeFields=[];defaultSelectFields=[];getParamsSchema(){return z.object({[this.lookupField]:z.string()})}getQuerySchema(){let e={};if(this.additionalFilters?.length)for(let t of this.additionalFilters)e[t]=z.string().optional();if(this.allowedIncludes.length>0&&(e.include=z.string().optional().describe(`Comma-separated list of relations to include. Allowed: ${this.allowedIncludes.join(", ")}`)),this.fieldSelectionEnabled){let t=this.getAvailableSelectFields();e.fields=z.string().optional().describe(`Comma-separated list of fields to return. Available: ${t.join(", ")}`);}if(Object.keys(e).length!==0)return z.object(e)}getAvailableSelectFields(){let e=Object.keys(this.getModelSchema().shape),t=this._meta.model.computedFields?Object.keys(this._meta.model.computedFields):[],o=this._meta.model.relations?Object.keys(this._meta.model.relations):[],r=[...e,...t,...o];return this.allowedSelectFields.length>0&&(r=r.filter(s=>this.allowedSelectFields.includes(s))),this.blockedSelectFields.length>0&&(r=r.filter(s=>!this.blockedSelectFields.includes(s))),r}getSchema(){let e=this.getQuerySchema();return {...this.schema,request:{params:this.getParamsSchema(),...e&&{query:e}},responses:{200:{description:"Resource retrieved successfully",content:{"application/json":{schema:z.object({success:z.literal(true),result:this.getModelSchema()})}}},404:{description:"Resource not found",content:{"application/json":{schema:z.object({success:z.literal(false),error:z.object({code:z.string(),message:z.string()})})}}}}}}async getLookupValue(){let{params:e}=await this.getValidatedData();return e?.[this.lookupField]||""}async getAdditionalFilters(){if(!this.additionalFilters?.length)return {};let{query:e}=await this.getValidatedData(),t={};for(let o of this.additionalFilters)e?.[o]&&(t[o]=String(e[o]));return t}async getIncludeOptions(){let{query:e}=await this.getValidatedData(),t=e?.include;if(!t||typeof t!="string")return {relations:[]};let o=t.split(",").map(r=>r.trim()).filter(Boolean);return this.allowedIncludes.length>0?{relations:o.filter(r=>this.allowedIncludes.includes(r))}:{relations:o}}async getFieldSelection(){if(!this.fieldSelectionEnabled)return {fields:[],isActive:false};let{query:e}=await this.getValidatedData(),t=e?.fields;if(!t||typeof t!="string"||t.trim()==="")return this.defaultSelectFields.length>0?{fields:[...new Set([...this.alwaysIncludeFields,...this.defaultSelectFields])],isActive:true}:{fields:[],isActive:false};let o=t.split(",").map(n=>n.trim()).filter(Boolean),r=new Set(this.getAvailableSelectFields()),s=o.filter(n=>r.has(n));return this.alwaysIncludeFields.length>0&&(s=[...new Set([...this.alwaysIncludeFields,...s])]),{fields:s,isActive:true}}async after(e){return e}transform(e){return e}async handle(){let e=this.validateTenantId(),t=await this.getLookupValue(),o=await this.getAdditionalFilters(),r=await this.getIncludeOptions(),s=await this.getFieldSelection();if(e){let d=this.getMultiTenantConfig();o[d.field]=e;}let n=await this.read(t,o,r);if(!n)throw new c$1(this._meta.model.tableName,t);n=await this.decryptOnRead(n);let u=await this.applyReadPolicy(n);if(u===null)throw new c$1(this._meta.model.tableName,t);n=u,n=await this.after(n),this._meta.model.computedFields&&(n=await j(n,this._meta.model.computedFields));let l=this._meta.model.serializer?this._meta.model.serializer(n):n,p=this.applyProfile(l),a=this.transform(p),c=s.isActive&&s.fields.length>0?ue(a,s):a;if(this.etagEnabled){let d=await ee(c),m=this.getContext(),f=m.req.header("If-None-Match");if(de(f,d))return new Response(null,{status:304,headers:{ETag:d}});m.header("ETag",d);}return this.success(c)}};var De=class extends S{lookupField="id";lookupFields;additionalFilters;allowedUpdateFields;blockedUpdateFields;beforeHookMode="sequential";afterHookMode="sequential";allowNestedWrites=[];etagEnabled=false;getParamsSchema(){return z.object({[this.lookupField]:z.string()})}getBodySchema(){let e;if(this._meta.fields)e=this._meta.fields.partial();else {let r=[...this._meta.model.primaryKeys];this.blockedUpdateFields&&(r=[...r,...this.blockedUpdateFields]);let s=$(this.getModelSchema(),r);if(this.allowedUpdateFields){let n=this.allowedUpdateFields.reduce((u,l)=>({...u,[l]:true}),{});s=s.pick(n);}e=s.partial();}let t=this.getNestedWritableRelations();if(t.length===0)return e;let o={...e.shape};for(let r of t){let s=this._meta.model.relations?.[r];if(!s?.schema)continue;let n=s.schema,u=z.object({create:z.union([n.partial(),z.array(n.partial())]).optional(),update:z.array(n.partial().extend({id:z.union([z.string(),z.number()])})).optional(),delete:z.array(z.union([z.string(),z.number()])).optional(),connect:z.array(z.union([z.string(),z.number()])).optional(),disconnect:z.array(z.union([z.string(),z.number()])).optional(),set:n.partial().nullable().optional()}).optional();o[r]=u;}return z.object(o)}getNestedWritableRelations(){if(this.allowNestedWrites.length>0)return this.allowNestedWrites;let e=this._meta.model.relations;return e?Object.entries(e).filter(([t,o])=>{let r=o.nestedWrites;return r&&(r.allowCreate||r.allowUpdate||r.allowDelete||r.allowConnect||r.allowDisconnect)}).map(([t])=>t):[]}extractNestedData(e){let t=this.getNestedWritableRelations();return c(e,t)}getSchema(){return {...this.schema,request:{params:this.getParamsSchema(),body:{content:{"application/json":{schema:this.getBodySchema()}},required:true}},responses:{200:{description:"Resource updated successfully",content:{"application/json":{schema:z.object({success:z.literal(true),result:this.getModelSchema()})}}},400:{description:"Validation error",content:{"application/json":{schema:z.object({success:z.literal(false),error:z.object({code:z.string(),message:z.string(),details:z.unknown().optional()})})}}},404:{description:"Resource not found",content:{"application/json":{schema:z.object({success:z.literal(false),error:z.object({code:z.string(),message:z.string()})})}}}}}}async getLookupValue(){let{params:e}=await this.getValidatedData();return e?.[this.lookupField]||""}async getObject(){let{body:e}=await this.getValidatedData();return e}async getAdditionalFilters(){if(!this.additionalFilters?.length)return {};let{query:e}=await this.getValidatedData(),t={};for(let o of this.additionalFilters)e?.[o]&&(t[o]=String(e[o]));return t}async before(e,t){return e}async after(e,t,o){return t}transform(e){return e}async findExisting(e,t,o){return null}async processNestedWrites(e,t,o,r,s){return b$4().warn(`Nested writes not implemented for ${t}. Override processNestedWrites() in your adapter.`),{created:[],updated:[],deleted:[],connected:[],disconnected:[]}}async handle(){let e=this.validateTenantId(),t=await this.getLookupValue(),o=await this.getAdditionalFilters();if(e){let y=this.getMultiTenantConfig();o[y.field]=e;}let r=await this.getObject(),{mainData:s,nestedData:n}=this.extractNestedData(r),u=this.getPolicies(),l=await this.findExisting(t,o,this._tx);if(l&&u?.write&&await this.applyWritePolicy(l),this.etagEnabled&&l){let y=this.getContext().req.header("If-Match");if(y){let F=await ee(l);if(!ce(y,F))return this.error("Resource has been modified by another request","CONFLICT",409)}}let p;if(this.isVersioningEnabled()&&l){let y=this.getVersionManager(),F=this.getParentId(l);F!==null&&(p=await y.saveVersion(F,l,void 0,this.getVersioningUserId()));}let a=s;if(this.isVersioningEnabled()&&p!==void 0){let y=this.getVersioningConfig().field;a[y]=p;}let c=this.buildHookContext();a=await this.before(a,c),a=await this.encryptOnWrite(a);let d=await this.update(t,a,o,c.db.tx);if(!d)throw new c$1(this._meta.model.tableName,t);d=await this.decryptOnRead(d);let m=this.getParentId(d),f={};if(Object.keys(n).length>0&&m!==null)for(let[y,F]of Object.entries(n)){if(F==null)continue;let v=this._meta.model.relations?.[y];if(!v)continue;let J;d$2(F)?J={create:F}:J=F;let Z=await this.processNestedWrites(m,y,v,J);f[y]=Z;}if(Object.keys(f).length>0)for(let[y,F]of Object.entries(f)){let v=this._meta.model.relations?.[y];v&&(v.type==="hasMany"?d[y]=[...F.created,...F.updated]:d[y]=F.created[0]||F.updated[0]||null);}let g=l??d;if(this.afterHookMode==="fire-and-forget")this.runAfterResponse(Promise.resolve(this.after(g,d,c)));else {let y=await this.after(g,d,c);y!=null&&(d=y);}if(this.isAuditEnabled()&&m!==null&&l){let y=this.getAuditLogger();this.runAfterResponse(y.logUpdate(this._meta.model.tableName,m,l,d,this.getAuditUserId()));}m!==null&&this.runAfterResponse(this.emitEvent("updated",{recordId:m,data:d,previousData:l??void 0})),this._meta.model.computedFields&&(d=await j(d,this._meta.model.computedFields));let j$1=this._meta.model.serializer?this._meta.model.serializer(d):d,x=this.applyProfile(j$1),k=this.transform(x);if(this.etagEnabled){let y=await ee(k);this.getContext().header("ETag",y);}return this.success(k)}};var ze=class extends S{lookupField="id";lookupFields;additionalFilters;beforeHookMode="sequential";afterHookMode="sequential";includeCascadeResults=false;getParamsSchema(){return z.object({[this.lookupField]:z.string()})}getCascadeRelations(e){let t=this._meta.model.relations;return t?Object.entries(t).filter(([o,r])=>{let s=r.cascade?.[e];return s&&s!=="noAction"}).map(([o,r])=>({name:o,config:r,action:r.cascade[e]})):[]}getSchema(){let e=this.includeCascadeResults?z.object({deleted:z.literal(true),cascade:z.object({deleted:z.record(z.string(),z.number()),nullified:z.record(z.string(),z.number())}).optional()}):z.object({deleted:z.literal(true)});return {...this.schema,request:{params:this.getParamsSchema()},responses:{200:{description:"Resource deleted successfully",content:{"application/json":{schema:z.object({success:z.literal(true),result:e})}}},404:{description:"Resource not found",content:{"application/json":{schema:z.object({success:z.literal(false),error:z.object({code:z.string(),message:z.string()})})}}},409:{description:"Cannot delete - related records exist (restrict)",content:{"application/json":{schema:z.object({success:z.literal(false),error:z.object({code:z.string(),message:z.string(),details:z.object({relation:z.string(),count:z.number()}).optional()})})}}}}}}async getLookupValue(){let{params:e}=await this.getValidatedData();return e?.[this.lookupField]||""}async getAdditionalFilters(){if(!this.additionalFilters?.length)return {};let{query:e}=await this.getValidatedData(),t={};for(let o of this.additionalFilters)e?.[o]&&(t[o]=String(e[o]));return t}async before(e,t){}async after(e,t){}async countRelated(e,t,o,r){return b$4().warn(`countRelated not implemented for ${t}. Override in your adapter for restrict cascade to work.`),0}async deleteRelated(e,t,o,r){return b$4().warn(`deleteRelated not implemented for ${t}. Override in your adapter for cascade delete to work.`),0}async nullifyRelated(e,t,o,r){return b$4().warn(`nullifyRelated not implemented for ${t}. Override in your adapter for setNull cascade to work.`),0}async processCascade(e,t,o){let r=t?"onSoftDelete":"onDelete",s=this.getCascadeRelations(r),n={deleted:{},nullified:{}};for(let{name:u,config:l,action:p}of s)if(p==="cascade"){let a=await this.deleteRelated(e,u,l,o);a>0&&(n.deleted[u]=a);}else if(p==="setNull"){let a=await this.nullifyRelated(e,u,l,o);a>0&&(n.nullified[u]=a);}return n}async checkRestrictConstraints(e,t,o){let r=t?"onSoftDelete":"onDelete",s=this.getCascadeRelations(r);for(let{name:n,config:u,action:l}of s)if(l==="restrict"){let p=await this.countRelated(e,n,u,o);if(p>0)throw new d$3(`Cannot delete: ${p} related ${n} record(s) exist. Remove them first or change the cascade configuration.`,{relation:n,count:p})}}async handle(){let e=this.validateTenantId(),t=await this.getLookupValue(),o=await this.getAdditionalFilters();if(e){let c=this.getMultiTenantConfig();o[c.field]=e;}let r=this.isSoftDeleteEnabled(),s=await this.findForDelete(t,o,this._tx);if(!s)throw new c$1(this._meta.model.tableName,t);let n=this.getParentId(s);n!==null&&await this.checkRestrictConstraints(n,r),await this.applyWritePolicy(s);let u=this.buildHookContext();if(await this.before(t,u),!await this.delete(t,o,u.db.tx))throw new c$1(this._meta.model.tableName,t);let p;if(n!==null&&(p=await this.processCascade(n,r)),this.afterHookMode==="fire-and-forget"?this.runAfterResponse(Promise.resolve(this.after(s,u))):await this.after(s,u),this.isAuditEnabled()&&n!==null){let c=this.getAuditLogger();this.runAfterResponse(c.logDelete(this._meta.model.tableName,n,s,this.getAuditUserId()));}n!==null&&this.runAfterResponse(this.emitEvent("deleted",{recordId:n,previousData:s}));let a={deleted:true};if(this.includeCascadeResults&&p){let c=Object.keys(p.deleted).length>0,d=Object.keys(p.nullified).length>0;(c||d)&&(a.cascade=p);}return this.success(a)}};var ie=class extends S{filterFields=[];filterConfig;searchFields=[];searchFieldName="search";sortFields=[];defaultSort;defaultPerPage=20;maxPerPage=100;cursorPaginationEnabled=false;cursorField;allowedIncludes=[];fieldSelectionEnabled=false;allowedSelectFields=[];blockedSelectFields=[];alwaysIncludeFields=[];defaultSelectFields=[];getQuerySchema(){let e={page:z.string().optional(),per_page:z.string().optional()};this.sortFields.length>0&&(e.sort=z.enum(this.sortFields).optional().describe("Field to sort by"),e.order=z.enum(["asc","desc"]).optional().describe("Sort direction (asc or desc)")),this.searchFields.length>0&&(e[this.searchFieldName]=z.string().optional());for(let o of this.filterFields)e[o]=z.string().optional();if(this.filterConfig)for(let[o,r]of Object.entries(this.filterConfig)){for(let s of r)e[`${o}[${s}]`]=z.string().optional();e[o]=z.string().optional();}let t=this.getSoftDeleteConfig();if(t.enabled&&t.allowQueryDeleted&&(e[t.queryParam]=z.enum(["true","false"]).optional(),e.onlyDeleted=z.enum(["true","false"]).optional()),this.allowedIncludes.length>0&&(e.include=z.string().optional().describe(`Comma-separated list of relations to include. Allowed: ${this.allowedIncludes.join(", ")}`)),this.fieldSelectionEnabled){let o=this.getAvailableSelectFields();e.fields=z.string().optional().describe(`Comma-separated list of fields to return. Available: ${o.join(", ")}`);}return this.cursorPaginationEnabled&&(e.cursor=z.string().optional().describe("Opaque cursor for fetching the next page"),e.limit=z.string().optional().describe("Number of items to return (cursor pagination)")),z.object(e)}getAvailableSelectFields(){let e=Object.keys(this.getModelSchema().shape),t=this._meta.model.computedFields?Object.keys(this._meta.model.computedFields):[],o=this._meta.model.relations?Object.keys(this._meta.model.relations):[],r=[...e,...t,...o];return this.allowedSelectFields.length>0&&(r=r.filter(s=>this.allowedSelectFields.includes(s))),this.blockedSelectFields.length>0&&(r=r.filter(s=>!this.blockedSelectFields.includes(s))),r}getSchema(){return {...this.schema,request:{query:this.getQuerySchema()},responses:{200:{description:"List of resources",content:{"application/json":{schema:z.object({success:z.literal(true),result:z.array(this.getModelSchema()),result_info:z.object({page:z.number(),per_page:z.number(),total_count:z.number().optional(),total_pages:z.number().optional(),has_next_page:z.boolean(),has_prev_page:z.boolean(),next_cursor:z.string().optional(),prev_cursor:z.string().optional()})})}}}}}}async getFilters(){let{query:e}=await this.getValidatedData(),t=this.getSoftDeleteConfig(),o={filterFields:this.filterFields,filterConfig:this.filterConfig,searchFields:this.searchFields,searchFieldName:this.searchFieldName,sortFields:this.sortFields,defaultSort:this.defaultSort,defaultPerPage:this.defaultPerPage,maxPerPage:this.maxPerPage,cursorPaginationEnabled:this.cursorPaginationEnabled,cursorField:this.cursorField,softDeleteQueryParam:t.queryParam,allowedIncludes:this.allowedIncludes,fieldSelectionEnabled:this.fieldSelectionEnabled,allowedSelectFields:this.allowedSelectFields,blockedSelectFields:this.blockedSelectFields,alwaysIncludeFields:this.alwaysIncludeFields,defaultSelectFields:this.defaultSelectFields};return se(e||{},o)}async after(e){return e}transform(e){return e}async handle(){let e=this.validateTenantId(),t=await this.getFilters();if(e){let a=this.getMultiTenantConfig();t.filters.push({field:a.field,operator:"eq",value:e});}this.applyReadPushdown(t);let o=await this.list(t),r=await Promise.all(o.result.map(a=>this.decryptOnRead(a))),s=await this.applyReadPolicyToArray(r),n=await this.after(s);this._meta.model.computedFields&&(n=await k(n,this._meta.model.computedFields)),this._meta.model.serializer&&(n=n.map(a=>this._meta.model.serializer(a)));let l=this.applyProfileToArray(n).map(a=>this.transform(a)),p=this.fieldSelectionEnabled&&t.options.fields&&t.options.fields.length>0?ne(l,{fields:t.options.fields,isActive:true}):l;return this.successPaginated(p,o.result_info)}};var Le=class extends S{lookupField="id";excludeFromClone=[];getParamsSchema(){return z.object({[this.lookupField]:z.string()})}getBodySchema(){let e=[...this._meta.model.primaryKeys,...this.excludeFromClone];return $(this.getModelSchema(),e).partial()}getSchema(){return {...this.schema,request:{params:this.getParamsSchema(),body:{content:{"application/json":{schema:this.getBodySchema()}},required:false}},responses:{201:{description:"Resource cloned successfully",content:{"application/json":{schema:z.object({success:z.literal(true),result:this.getModelSchema()})}}},404:{description:"Source resource not found",content:{"application/json":{schema:z.object({success:z.literal(false),error:z.object({code:z.string(),message:z.string()})})}}}}}}async getLookupValue(){let{params:e}=await this.getValidatedData();return e?.[this.lookupField]||""}async getOverrides(){let{body:e}=await this.getValidatedData();return e||{}}async before(e){return e}async after(e){return e}async handle(){let e=this.validateTenantId(),t=await this.getLookupValue(),o=await this.getOverrides(),r={};if(e){let a=this.getMultiTenantConfig();r[a.field]=e;}let s=await this.findSource(t,r);if(!s)throw new c$1(this._meta.model.tableName,t);let n={...s};for(let a of this._meta.model.primaryKeys)delete n[a];for(let a of this.excludeFromClone)delete n[a];Object.assign(n,o);let u=await this.before(n),l=await this.createClone(u);l=await this.after(l),this._meta.model.computedFields&&(l=await j(l,this._meta.model.computedFields));let p=this._meta.model.serializer?this._meta.model.serializer(l):l;return this.success(p,201)}};var qe=class extends S{lookupField="id";lookupFields;additionalFilters;beforeHookMode="sequential";afterHookMode="sequential";getParamsSchema(){return z.object({[this.lookupField]:z.string()})}getSchema(){return {...this.schema,request:{params:this.getParamsSchema()},responses:{200:{description:"Resource restored successfully",content:{"application/json":{schema:z.object({success:z.literal(true),result:this.getModelSchema()})}}},400:{description:"Soft delete not enabled or record not deleted",content:{"application/json":{schema:z.object({success:z.literal(false),error:z.object({code:z.string(),message:z.string()})})}}},404:{description:"Resource not found",content:{"application/json":{schema:z.object({success:z.literal(false),error:z.object({code:z.string(),message:z.string()})})}}}}}}async getLookupValue(){let{params:e}=await this.getValidatedData();return e?.[this.lookupField]||""}async getAdditionalFilters(){if(!this.additionalFilters?.length)return {};let{query:e}=await this.getValidatedData(),t={};for(let o of this.additionalFilters)e?.[o]&&(t[o]=String(e[o]));return t}async before(e,t){}async after(e,t){return e}async handle(){if(!this.isSoftDeleteEnabled())throw new a$2("Soft delete is not enabled for this model",400,"SOFT_DELETE_NOT_ENABLED");let e=await this.getLookupValue(),t=await this.getAdditionalFilters();await this.before(e);let o=await this.restore(e,t);if(!o)throw new c$1(this._meta.model.tableName,e);this.afterHookMode==="fire-and-forget"?this.runAfterResponse(Promise.resolve(this.after(o))):o=await this.after(o);let r=this.getRecordId(o);if(this.isAuditEnabled()&&r!==null){let n=this.getAuditLogger();this.runAfterResponse(n.logRestore(this._meta.model.tableName,r,o,this.getAuditUserId()));}r!==null&&this.runAfterResponse(this.emitEvent("restored",{recordId:r,data:o}));let s=this._meta.model.serializer?this._meta.model.serializer(o):o;return this.success(s)}};var Be=class extends S{upsertKeys;useNativeUpsert=false;createOnlyFields;updateOnlyFields;beforeHookMode="sequential";afterHookMode="sequential";allowNestedWrites=[];getUpsertKeys(){return this.upsertKeys||this._meta.model.primaryKeys}getBodySchema(){let e;if(this._meta.fields)e=this._meta.fields;else {let r=this.getUpsertKeys(),s=$(this.getModelSchema(),[]),n={};for(let[u,l]of Object.entries(s.shape))r.includes(u)?n[u]=l:n[u]=l.optional();e=z.object(n);}let t=this.getNestedWritableRelations();if(t.length===0)return e;let o={...e.shape};for(let r of t){let s=this._meta.model.relations?.[r];if(!s?.schema)continue;let n=s.schema,u=z.union([s.type==="hasMany"?z.array(n.partial()):n.partial(),z.object({create:z.union([n.partial(),z.array(n.partial())]).optional(),update:z.array(n.partial().extend({id:z.union([z.string(),z.number()])})).optional(),upsert:z.union([n.partial(),z.array(n.partial())]).optional(),delete:z.array(z.union([z.string(),z.number()])).optional(),connect:z.array(z.union([z.string(),z.number()])).optional(),disconnect:z.array(z.union([z.string(),z.number()])).optional(),set:n.partial().nullable().optional()})]).optional();o[r]=u;}return z.object(o)}getNestedWritableRelations(){if(this.allowNestedWrites.length>0)return this.allowNestedWrites;let e=this._meta.model.relations;return e?Object.entries(e).filter(([t,o])=>{let r=o.nestedWrites;return r&&(r.allowCreate||r.allowUpdate||r.allowDelete||r.allowConnect||r.allowDisconnect)}).map(([t])=>t):[]}extractNestedData(e){let t=this.getNestedWritableRelations();return c(e,t)}getSchema(){return {...this.schema,request:{body:{content:{"application/json":{schema:this.getBodySchema()}},required:true}},responses:{200:{description:"Resource updated (upsert)",content:{"application/json":{schema:z.object({success:z.literal(true),result:this.getModelSchema(),created:z.literal(false)})}}},201:{description:"Resource created (upsert)",content:{"application/json":{schema:z.object({success:z.literal(true),result:this.getModelSchema(),created:z.literal(true)})}}},400:{description:"Validation error",content:{"application/json":{schema:z.object({success:z.literal(false),error:z.object({code:z.string(),message:z.string(),details:z.unknown().optional()})})}}}}}}async getObject(){let{body:e}=await this.getValidatedData();return e}async before(e,t,o){return e}async beforeCreate(e,t){return e}async beforeUpdate(e,t,o){return e}async after(e,t,o){return e}async nativeUpsert(e,t){return b$4().warn("Native upsert not implemented for this adapter. Falling back to find-then-insert/update pattern."),this.performStandardUpsert(e,t)}async performStandardUpsert(e,t){let o=await this.findExisting(e,t);if(o){let r={...e};if(this.createOnlyFields)for(let n of this.createOnlyFields)delete r[n];return r=await this.beforeUpdate(r,o,t),{data:await this.update(o,r,t),created:false}}else {let r={...e};if(this.updateOnlyFields)for(let n of this.updateOnlyFields)delete r[n];return r=await this.beforeCreate(r,t),{data:await this.create(r,t),created:true}}}async upsert(e,t){return this.useNativeUpsert?this.nativeUpsert(e,t):this.performStandardUpsert(e,t)}async processNestedWrites(e,t,o,r,s){return b$4().warn(`Nested writes not implemented for ${t}. Override processNestedWrites() in your adapter.`),{created:[],updated:[],deleted:[],connected:[],disconnected:[]}}async handle(){this.validateTenantId();let e=await this.getObject(),{mainData:t,nestedData:o}=this.extractNestedData(e),r=t;r=this.injectTenantId(r);let s=await this.findExisting(r),n=!s;r=await this.before(r,n);let u=await this.upsert(r),l=u.data,p=this.getParentId(l),a={};if(Object.keys(o).length>0&&p!==null)for(let[d,m]of Object.entries(o)){if(m==null)continue;let f=this._meta.model.relations?.[d];if(!f)continue;let g;d$2(m)?g={create:m}:g=m;let j=await this.processNestedWrites(p,d,f,g);a[d]=j;}if(Object.keys(a).length>0)for(let[d,m]of Object.entries(a)){let f=this._meta.model.relations?.[d];f&&(f.type==="hasMany"?l[d]=[...m.created,...m.updated]:l[d]=m.created[0]||m.updated[0]||null);}if(this.afterHookMode==="fire-and-forget"?this.runAfterResponse(Promise.resolve(this.after(l,u.created))):l=await this.after(l,u.created),this.isAuditEnabled()&&p!==null){let d=this.getAuditLogger();this.runAfterResponse(d.logUpsert(this._meta.model.tableName,p,l,s,u.created,this.getAuditUserId()));}this._meta.model.computedFields&&(l=await j(l,this._meta.model.computedFields));let c=this._meta.model.serializer?this._meta.model.serializer(l):l;return this.json({success:true,result:c,created:u.created},u.created?201:200)}};var Ue=class extends S{maxBatchSize=100;stopOnError=true;beforeHookMode="sequential";afterHookMode="sequential";getBodySchema(){let e=this._meta.fields||this.getModelSchema(),t=this._meta.model.primaryKeys,o={};for(let s of t)o[s]=true;let r=e.partial(o);return z.object({items:z.array(r).min(1).max(this.maxBatchSize)})}getSchema(){return {...this.schema,request:{body:{content:{"application/json":{schema:this.getBodySchema()}}}},responses:{201:{description:"Resources created successfully",content:{"application/json":{schema:z.object({success:z.literal(true),result:z.object({created:z.array(this.getModelSchema()),count:z.number()})})}}},207:{description:"Partial success (some items failed)",content:{"application/json":{schema:z.object({success:z.literal(true),result:z.object({created:z.array(this.getModelSchema()),count:z.number(),errors:z.array(z.object({index:z.number(),error:z.string()})).optional()})})}}},400:{description:"Validation error",content:{"application/json":{schema:z.object({success:z.literal(false),error:z.object({code:z.string(),message:z.string()})})}}}}}}async getItems(){let{body:e}=await this.getValidatedData();return e?.items||[]}async before(e,t,o){return e}async after(e,t,o){return e}transform(e){return e}async handle(){let e=await this.getItems(),t=[],o=[];for(let a=0;a<e.length;a++)try{let c=await this.before(e[a],a);o.push(c);}catch(c){if(this.stopOnError)throw c;t.push({index:a,error:c instanceof Error?c.message:String(c)});}let r=await this.batchCreate(o),s=[];for(let a=0;a<r.length;a++)try{this.afterHookMode==="fire-and-forget"?(this.runAfterResponse(Promise.resolve(this.after(r[a],a))),s.push(r[a])):s.push(await this.after(r[a],a));}catch(c){if(this.stopOnError)throw c;t.push({index:a,error:c instanceof Error?c.message:String(c)}),s.push(r[a]);}if(this.isAuditEnabled()){let a=this.getAuditLogger(),c=s.map(d=>{let m=this.getRecordId(d);return m===null?null:{recordId:m,record:d}}).filter(d=>d!==null);c.length>0&&this.runAfterResponse(a.logBatch("batch_create",this._meta.model.tableName,c,this.getAuditUserId()));}let u=(this._meta.model.serializer?s.map(a=>this._meta.model.serializer(a)):s).map(a=>this.transform(a)),l={success:true,result:{created:u,count:u.length,...t.length>0&&{errors:t}}},p=t.length>0?207:201;return this.json(l,p)}};var He=class extends S{maxBatchSize=100;stopOnError=false;lookupField="id";allowedUpdateFields;blockedUpdateFields;beforeHookMode="sequential";afterHookMode="sequential";getBodySchema(){let e=this._meta.fields||this.getModelSchema();return z.object({items:z.array(z.object({id:z.string(),data:e.partial()})).min(1).max(this.maxBatchSize)})}getSchema(){return {...this.schema,request:{body:{content:{"application/json":{schema:this.getBodySchema()}}}},responses:{200:{description:"Resources updated successfully",content:{"application/json":{schema:z.object({success:z.literal(true),result:z.object({updated:z.array(this.getModelSchema()),count:z.number(),notFound:z.array(z.string()).optional()})})}}},207:{description:"Partial success (some items failed or not found)",content:{"application/json":{schema:z.object({success:z.literal(true),result:z.object({updated:z.array(this.getModelSchema()),count:z.number(),notFound:z.array(z.string()).optional(),errors:z.array(z.object({id:z.string(),error:z.string()})).optional()})})}}},400:{description:"Validation error",content:{"application/json":{schema:z.object({success:z.literal(false),error:z.object({code:z.string(),message:z.string()})})}}}}}}async getItems(){let{body:e}=await this.getValidatedData();return e?.items||[]}filterUpdateData(e){let t={...e};if(this.allowedUpdateFields){let o=new Set(this.allowedUpdateFields);t=Object.fromEntries(Object.entries(t).filter(([r])=>o.has(r)));}if(this.blockedUpdateFields)for(let o of this.blockedUpdateFields)delete t[o];for(let o of this._meta.model.primaryKeys)delete t[o];return t}async before(e,t,o){return t}async after(e,t){return e}async handle(){let e=await this.getItems(),t=[],o=[];for(let a of e)try{let c=this.filterUpdateData(a.data),d=await this.before(a.id,c);o.push({id:a.id,data:d});}catch(c){if(this.stopOnError)throw c;t.push({id:a.id,error:c instanceof Error?c.message:String(c)});}let{updated:r,notFound:s}=await this.batchUpdate(o),n=[];for(let a of r)try{this.afterHookMode==="fire-and-forget"?(this.runAfterResponse(Promise.resolve(this.after(a))),n.push(a)):n.push(await this.after(a));}catch(c){let d=String(a[this.lookupField]);if(this.stopOnError)throw c;t.push({id:d,error:c instanceof Error?c.message:String(c)}),n.push(a);}if(this.isAuditEnabled()){let a=this.getAuditLogger(),c=n.map(d=>{let m=this.getRecordId(d);return m===null?null:{recordId:m,record:d}}).filter(d=>d!==null);c.length>0&&this.runAfterResponse(a.logBatch("batch_update",this._meta.model.tableName,c,this.getAuditUserId()));}let u=this._meta.model.serializer?n.map(a=>this._meta.model.serializer(a)):n,l={success:true,result:{updated:u,count:u.length,...s.length>0&&{notFound:s},...t.length>0&&{errors:t}}},p=t.length>0||s.length>0?207:200;return this.json(l,p)}};var $e=class extends S{maxBatchSize=100;stopOnError=false;lookupField="id";beforeHookMode="sequential";afterHookMode="sequential";getBodySchema(){return z.object({ids:z.array(z.string()).min(1).max(this.maxBatchSize)})}getSchema(){let e=this.isSoftDeleteEnabled();return {...this.schema,request:{body:{content:{"application/json":{schema:this.getBodySchema()}}}},responses:{200:{description:e?"Resources soft-deleted successfully":"Resources deleted successfully",content:{"application/json":{schema:z.object({success:z.literal(true),result:z.object({deleted:z.array(this.getModelSchema()),count:z.number(),notFound:z.array(z.string()).optional()})})}}},207:{description:"Partial success (some items failed or not found)",content:{"application/json":{schema:z.object({success:z.literal(true),result:z.object({deleted:z.array(this.getModelSchema()),count:z.number(),notFound:z.array(z.string()).optional(),errors:z.array(z.object({id:z.string(),error:z.string()})).optional()})})}}},400:{description:"Validation error",content:{"application/json":{schema:z.object({success:z.literal(false),error:z.object({code:z.string(),message:z.string()})})}}}}}}async getIds(){let{body:e}=await this.getValidatedData();return e?.ids||[]}async before(e,t){}async after(e,t){return e}async handle(){let e=await this.getIds(),t=[],o=[];for(let a of e)try{await this.before(a),o.push(a);}catch(c){if(this.stopOnError)throw c;t.push({id:a,error:c instanceof Error?c.message:String(c)});}let{deleted:r,notFound:s}=await this.batchDelete(o),n=[];for(let a of r)try{this.afterHookMode==="fire-and-forget"?(this.runAfterResponse(Promise.resolve(this.after(a))),n.push(a)):n.push(await this.after(a));}catch(c){let d=String(a[this.lookupField]);if(this.stopOnError)throw c;t.push({id:d,error:c instanceof Error?c.message:String(c)}),n.push(a);}if(this.isAuditEnabled()){let a=this.getAuditLogger(),c=n.map(d=>{let m=this.getRecordId(d);return m===null?null:{recordId:m,previousRecord:d}}).filter(d=>d!==null);c.length>0&&this.runAfterResponse(a.logBatch("batch_delete",this._meta.model.tableName,c,this.getAuditUserId()));}let u=this._meta.model.serializer?n.map(a=>this._meta.model.serializer(a)):n,l={success:true,result:{deleted:u,count:u.length,...s.length>0&&{notFound:s},...t.length>0&&{errors:t}}},p=t.length>0||s.length>0?207:200;return this.json(l,p)}};var We=class extends S{maxBatchSize=100;stopOnError=false;lookupField="id";beforeHookMode="sequential";afterHookMode="sequential";getBodySchema(){return z.object({ids:z.array(z.string()).min(1).max(this.maxBatchSize)})}getSchema(){return {...this.schema,request:{body:{content:{"application/json":{schema:this.getBodySchema()}}}},responses:{200:{description:"Resources restored successfully",content:{"application/json":{schema:z.object({success:z.literal(true),result:z.object({restored:z.array(this.getModelSchema()),count:z.number(),notFound:z.array(z.string()).optional()})})}}},207:{description:"Partial success (some items failed or not found)",content:{"application/json":{schema:z.object({success:z.literal(true),result:z.object({restored:z.array(this.getModelSchema()),count:z.number(),notFound:z.array(z.string()).optional(),errors:z.array(z.object({id:z.string(),error:z.string()})).optional()})})}}},400:{description:"Soft delete not enabled or validation error",content:{"application/json":{schema:z.object({success:z.literal(false),error:z.object({code:z.string(),message:z.string()})})}}}}}}async getIds(){let{body:e}=await this.getValidatedData();return e?.ids||[]}async before(e,t){}async after(e,t){return e}async handle(){if(!this.isSoftDeleteEnabled())throw new a$2("Soft delete is not enabled for this model",400,"SOFT_DELETE_NOT_ENABLED");let e=await this.getIds(),t=[],o=[];for(let a of e)try{await this.before(a),o.push(a);}catch(c){if(this.stopOnError)throw c;t.push({id:a,error:c instanceof Error?c.message:String(c)});}let{restored:r,notFound:s}=await this.batchRestore(o),n=[];for(let a of r)try{this.afterHookMode==="fire-and-forget"?(this.runAfterResponse(Promise.resolve(this.after(a))),n.push(a)):n.push(await this.after(a));}catch(c){let d=String(a[this.lookupField]);if(this.stopOnError)throw c;t.push({id:d,error:c instanceof Error?c.message:String(c)}),n.push(a);}if(this.isAuditEnabled()){let a=this.getAuditLogger(),c=n.map(d=>{let m=this.getRecordId(d);return m===null?null:{recordId:m,record:d}}).filter(d=>d!==null);c.length>0&&this.runAfterResponse(a.logBatch("batch_restore",this._meta.model.tableName,c,this.getAuditUserId()));}let u=this._meta.model.serializer?n.map(a=>this._meta.model.serializer(a)):n,l={success:true,result:{restored:u,count:u.length,...s.length>0&&{notFound:s},...t.length>0&&{errors:t}}},p=t.length>0||s.length>0?207:200;return this.json(l,p)}};var Ke=class extends S{upsertKeys;createOnlyFields;updateOnlyFields;maxBatchSize=100;continueOnError=false;useNativeUpsert=false;beforeHookMode="sequential";afterHookMode="sequential";getUpsertKeys(){return this.upsertKeys||this._meta.model.primaryKeys}getItemSchema(){if(this._meta.fields)return this._meta.fields;let e=this.getUpsertKeys(),t=$(this.getModelSchema(),[]),o={};for(let[r,s]of Object.entries(t.shape))e.includes(r)?o[r]=s:o[r]=s.optional();return z.object(o)}getBodySchema(){return z.array(this.getItemSchema()).max(this.maxBatchSize)}getSchema(){let e=z.object({data:this.getModelSchema(),created:z.boolean(),index:z.number()});return {...this.schema,request:{body:{content:{"application/json":{schema:this.getBodySchema()}},required:true}},responses:{200:{description:"Batch upsert completed",content:{"application/json":{schema:z.object({success:z.literal(true),result:z.object({items:z.array(e),createdCount:z.number(),updatedCount:z.number(),totalCount:z.number(),errors:z.array(z.object({index:z.number(),error:z.string()})).optional()})})}}},400:{description:"Validation error",content:{"application/json":{schema:z.object({success:z.literal(false),error:z.object({code:z.string(),message:z.string(),details:z.unknown().optional()})})}}}}}}async getItems(){let{body:e}=await this.getValidatedData();return e}async beforeItem(e,t,o,r){return e}async afterItem(e,t,o,r){return e}async beforeBatch(e,t){return e}async afterBatch(e,t){return e}async upsertOne(e,t,o){let r=await this.findExisting(e,o),s=!r,n=await this.beforeItem(e,t,s,o),u;if(r){if(this.createOnlyFields)for(let l of this.createOnlyFields)delete n[l];u=await this.update(r,n,o);}else {if(this.updateOnlyFields)for(let l of this.updateOnlyFields)delete n[l];u=await this.create(n,o);}return u=await this.afterItem(u,t,s,o),{data:u,created:s,index:t}}async nativeBatchUpsert(e,t){return b$4().warn("Native batch upsert not implemented for this adapter. Falling back to item-by-item pattern."),this.performStandardBatchUpsert(e,t)}async performStandardBatchUpsert(e,t){let o=[],r=[],s=0,n=0;for(let l=0;l<e.length;l++)try{let p=await this.upsertOne(e[l],l,t);o.push(p),p.created?s++:n++;}catch(p){if(this.continueOnError)r.push({index:l,error:p instanceof Error?p.message:String(p)});else throw p}let u={items:o,createdCount:s,updatedCount:n,totalCount:o.length};return r.length>0&&(u.errors=r),u}async batchUpsert(e,t){return this.useNativeUpsert?this.nativeBatchUpsert(e,t):this.performStandardBatchUpsert(e,t)}async handle(){let e=await this.getItems();e=await this.beforeBatch(e);let t=await this.batchUpsert(e);if(t=await this.afterBatch(t),this._meta.model.computedFields&&(t.items=await Promise.all(t.items.map(async o=>({...o,data:await j(o.data,this._meta.model.computedFields)})))),this.isAuditEnabled()){let o=this.getAuditLogger(),r=t.items.map(s=>{let n=this.getRecordId(s.data);return n===null?null:{recordId:n,record:s.data}}).filter(s=>s!==null);r.length>0&&this.runAfterResponse(o.logBatch("batch_upsert",this._meta.model.tableName,r,this.getAuditUserId()));}return this._meta.model.serializer&&(t.items=t.items.map(o=>({...o,data:this._meta.model.serializer(o.data)}))),this.success(t)}};var Xe=z.object({id:z.string(),recordId:z.union([z.string(),z.number()]),version:z.number(),data:z.record(z.string(),z.unknown()),createdAt:z.date(),changedBy:z.string().optional(),changeReason:z.string().optional(),changes:z.array(z.object({field:z.string(),oldValue:z.unknown().optional(),newValue:z.unknown().optional()})).optional()}),Qe=class extends S{lookupField="id";defaultLimit=20;maxLimit=100;getParamsSchema(){return z.object({[this.lookupField]:z.string()})}getQuerySchema(){return z.object({limit:z.coerce.number().min(1).max(this.maxLimit).optional(),offset:z.coerce.number().min(0).optional()})}getSchema(){return {...this.schema,request:{params:this.getParamsSchema(),query:this.getQuerySchema()},responses:{200:{description:"Version history retrieved successfully",content:{"application/json":{schema:z.object({success:z.literal(true),result:z.object({versions:z.array(Xe),totalVersions:z.number()})})}}},400:{description:"Versioning not enabled",content:{"application/json":{schema:z.object({success:z.literal(false),error:z.object({code:z.string(),message:z.string()})})}}},404:{description:"Record not found",content:{"application/json":{schema:z.object({success:z.literal(false),error:z.object({code:z.string(),message:z.string()})})}}}}}}async getLookupValue(){let{params:e}=await this.getValidatedData();return e?.[this.lookupField]||""}async getPaginationOptions(){let{query:e}=await this.getValidatedData();return {limit:e?.limit?Number(e.limit):this.defaultLimit,offset:e?.offset?Number(e.offset):0}}async recordExists(e){return true}async handle(){if(!this.isVersioningEnabled())throw new a$2("Versioning is not enabled for this model",400,"VERSIONING_NOT_ENABLED");let e=await this.getLookupValue(),{limit:t,offset:o}=await this.getPaginationOptions();if(!await this.recordExists(e))throw new c$1(this._meta.model.tableName,e);let s=this.getVersionManager(),n=await s.getVersions(e,{limit:t,offset:o}),u=await s.getLatestVersion(e);return this.success({versions:n,totalVersions:u})}},Ge=class extends S{lookupField="id";getParamsSchema(){return z.object({[this.lookupField]:z.string(),version:z.coerce.number().min(1)})}getSchema(){return {...this.schema,request:{params:this.getParamsSchema()},responses:{200:{description:"Version retrieved successfully",content:{"application/json":{schema:z.object({success:z.literal(true),result:Xe})}}},400:{description:"Versioning not enabled",content:{"application/json":{schema:z.object({success:z.literal(false),error:z.object({code:z.string(),message:z.string()})})}}},404:{description:"Version not found",content:{"application/json":{schema:z.object({success:z.literal(false),error:z.object({code:z.string(),message:z.string()})})}}}}}}async getLookupValue(){let{params:e}=await this.getValidatedData();return e?.[this.lookupField]||""}async getVersionNumber(){let{params:e}=await this.getValidatedData();return e?.version?Number(e.version):0}async handle(){if(!this.isVersioningEnabled())throw new a$2("Versioning is not enabled for this model",400,"VERSIONING_NOT_ENABLED");let e=await this.getLookupValue(),t=await this.getVersionNumber(),r=await this.getVersionManager().getVersion(e,t);if(!r)throw new c$1(`version ${t}`,e);return this.success(r)}},Je=class extends S{lookupField="id";getParamsSchema(){return z.object({[this.lookupField]:z.string()})}getQuerySchema(){return z.object({from:z.coerce.number().min(1),to:z.coerce.number().min(1)})}getSchema(){return {...this.schema,request:{params:this.getParamsSchema(),query:this.getQuerySchema()},responses:{200:{description:"Version comparison completed",content:{"application/json":{schema:z.object({success:z.literal(true),result:z.object({from:z.number(),to:z.number(),changes:z.array(z.object({field:z.string(),oldValue:z.unknown().optional(),newValue:z.unknown().optional()}))})})}}},400:{description:"Versioning not enabled or invalid parameters",content:{"application/json":{schema:z.object({success:z.literal(false),error:z.object({code:z.string(),message:z.string()})})}}},404:{description:"Version not found",content:{"application/json":{schema:z.object({success:z.literal(false),error:z.object({code:z.string(),message:z.string()})})}}}}}}async getLookupValue(){let{params:e}=await this.getValidatedData();return e?.[this.lookupField]||""}async getVersionNumbers(){let{query:e}=await this.getValidatedData();return {from:e?.from?Number(e.from):0,to:e?.to?Number(e.to):0}}async handle(){if(!this.isVersioningEnabled())throw new a$2("Versioning is not enabled for this model",400,"VERSIONING_NOT_ENABLED");let e=await this.getLookupValue(),{from:t,to:o}=await this.getVersionNumbers(),s=await this.getVersionManager().compareVersions(e,t,o);return this.success({from:t,to:o,changes:s})}},Ye=class extends S{lookupField="id";getParamsSchema(){return z.object({[this.lookupField]:z.string(),version:z.coerce.number().min(1)})}getSchema(){return {...this.schema,request:{params:this.getParamsSchema()},responses:{200:{description:"Record rolled back successfully",content:{"application/json":{schema:z.object({success:z.literal(true),result:this.getModelSchema()})}}},400:{description:"Versioning not enabled",content:{"application/json":{schema:z.object({success:z.literal(false),error:z.object({code:z.string(),message:z.string()})})}}},404:{description:"Version not found",content:{"application/json":{schema:z.object({success:z.literal(false),error:z.object({code:z.string(),message:z.string()})})}}}}}}async getLookupValue(){let{params:e}=await this.getValidatedData();return e?.[this.lookupField]||""}async getVersionNumber(){let{params:e}=await this.getValidatedData();return e?.version?Number(e.version):0}async handle(){if(!this.isVersioningEnabled())throw new a$2("Versioning is not enabled for this model",400,"VERSIONING_NOT_ENABLED");let e=await this.getLookupValue(),t=await this.getVersionNumber(),o=this.getVersionManager(),r=await o.getVersion(e,t);if(!r)throw new c$1(`version ${t}`,e);let n=await o.getLatestVersion(e)+1,u=await this.rollback(e,r.data,n),l=this._meta.model.serializer?this._meta.model.serializer(u):u;return this.success(l)}};var ft={sumFields:[],avgFields:[],minMaxFields:[],countDistinctFields:[],groupByFields:[],defaultLimit:100,maxLimit:1e3},et=class extends S{aggregateConfig={};maxGroupByFields=5;filterFields=[];getAggregateConfig(){return {...ft,...this.aggregateConfig}}getQuerySchema(){return z.object({count:z.union([z.string(),z.array(z.string())]).optional(),sum:z.union([z.string(),z.array(z.string())]).optional(),avg:z.union([z.string(),z.array(z.string())]).optional(),min:z.union([z.string(),z.array(z.string())]).optional(),max:z.union([z.string(),z.array(z.string())]).optional(),countDistinct:z.union([z.string(),z.array(z.string())]).optional(),groupBy:z.string().optional(),orderBy:z.string().optional(),orderDirection:z.enum(["asc","desc"]).optional(),limit:z.coerce.number().optional(),offset:z.coerce.number().optional(),withDeleted:z.coerce.boolean().optional()}).passthrough()}getSchema(){let e=z.object({key:z.record(z.string(),z.unknown()),values:z.record(z.string(),z.number().nullable())});return {...this.schema,request:{query:this.getQuerySchema()},responses:{200:{description:"Aggregation result",content:{"application/json":{schema:z.object({success:z.literal(true),result:z.object({values:z.record(z.string(),z.number().nullable()).optional(),groups:z.array(e).optional(),totalGroups:z.number().optional()})})}}},400:{description:"Invalid aggregation request",content:{"application/json":{schema:z.object({success:z.literal(false),error:z.object({code:z.string(),message:z.string(),details:z.unknown().optional()})})}}}}}}async getAggregateOptions(){let{query:e}=await this.getValidatedData();return i(e||{})}validateAggregations(e){let t=this.getAggregateConfig();for(let o of e.aggregations)if(!(o.operation==="count"&&o.field==="*"))switch(o.operation){case "sum":if(t.sumFields.length>0&&!t.sumFields.includes(o.field))throw new Error(`Field '${o.field}' is not allowed for SUM aggregation`);break;case "avg":if(t.avgFields.length>0&&!t.avgFields.includes(o.field))throw new Error(`Field '${o.field}' is not allowed for AVG aggregation`);break;case "min":case "max":if(t.minMaxFields.length>0&&!t.minMaxFields.includes(o.field))throw new Error(`Field '${o.field}' is not allowed for MIN/MAX aggregation`);break;case "countDistinct":if(t.countDistinctFields.length>0&&!t.countDistinctFields.includes(o.field))throw new Error(`Field '${o.field}' is not allowed for COUNT DISTINCT aggregation`);break}if(e.groupBy){if(e.groupBy.length>this.maxGroupByFields)throw new b$3(`Maximum ${this.maxGroupByFields} GROUP BY fields allowed`);for(let o of e.groupBy)if(t.groupByFields.length>0&&!t.groupByFields.includes(o))throw new Error(`Field '${o}' is not allowed for GROUP BY`)}if(e.limit!==void 0&&e.limit>t.maxLimit)throw new Error(`Limit cannot exceed ${t.maxLimit}`)}getAggregateAlias(e){return e.alias?e.alias:e.field==="*"?e.operation:`${e.operation}${e.field.charAt(0).toUpperCase()}${e.field.slice(1)}`}async handle(){let e=await this.getAggregateOptions();e.aggregations.length===0&&e.aggregations.push({operation:"count",field:"*"}),this.validateAggregations(e);let t=this.getAggregateConfig();e.groupBy&&e.groupBy.length>0&&e.limit===void 0&&(e.limit=t.defaultLimit);let o=await this.aggregate(e);return this.success(o)}},bt={eq:(i,e)=>i===e,ne:(i,e)=>i!==e,gt:(i,e)=>i>e,gte:(i,e)=>i>=e,lt:(i,e)=>i<e,lte:(i,e)=>i<=e};function wt(i,e){let t=i.get(e);if(t)return t;let o=[];return i.set(e,o),o}function pr(i,e){let{aggregations:t,groupBy:o,having:r,orderBy:s,orderDirection:n,limit:u,offset:l}=e;if(!o||o.length===0){let d={};for(let m of t){let f=ot(m);d[f]=tt(i,m);}return {values:d}}let p=new Map;for(let d of i){let f=o.map(g=>String(d[g]??"null")).join("|");wt(p,f).push(d);}let a=[];for(let[d,m]of p){let f=d.split("|"),g={};o.forEach((x,k)=>{g[x]=f[k]==="null"?null:f[k];});let j={};for(let x of t){let k=ot(x);j[k]=tt(m,x);}a.push({key:g,values:j});}r&&(a=a.filter(d=>{for(let[m,f]of Object.entries(r)){let g=d.values[m];if(g!==null)for(let[j,x]of Object.entries(f)){let k=bt[j];if(k&&!k(g,Number(x)))return false}}return true}));let c=a.length;if(s){let d=n==="desc"?-1:1;a.sort((m,f)=>{if(s in m.values){let g=m.values[s]??0,j=f.values[s]??0;return (g-j)*d}if(s in m.key){let g=String(m.key[s]??""),j=String(f.key[s]??"");return g.localeCompare(j)*d}return 0});}if(l!==void 0||u!==void 0){let d=l||0,m=u?d+u:void 0;a=a.slice(d,m);}return {groups:a,totalGroups:c}}function pe(i,e){return i.map(t=>t[e]).filter(t=>typeof t=="number")}var yt={count:(i,e)=>e==="*"?i.length:i.filter(t=>t[e]!==null&&t[e]!==void 0).length,countDistinct:(i,e)=>new Set(i.map(o=>o[e]).filter(o=>o!=null).map(o=>String(o))).size,sum:(i,e)=>{let t=0;for(let o of i){let r=o[e];typeof r=="number"&&(t+=r);}return t},avg:(i,e)=>{let t=pe(i,e);return t.length===0?null:t.reduce((r,s)=>r+s,0)/t.length},min:(i,e)=>{let t=pe(i,e);return t.length===0?null:Math.min(...t)},max:(i,e)=>{let t=pe(i,e);return t.length===0?null:Math.max(...t)}};function tt(i,e){if(i.length===0)return e.operation==="count"?0:null;let t=yt[e.operation];return t?t(i,e.field):null}function ot(i){return i.alias?i.alias:i.field==="*"?i.operation:`${i.operation}${i.field.charAt(0).toUpperCase()}${i.field.slice(1)}`}var Mt=new Set(["a","an","and","are","as","at","be","by","for","from","has","he","in","is","it","its","of","on","or","that","the","to","was","were","will","with"]);function st(i,e=true){if(!i||typeof i!="string")return [];let t=i.toLowerCase().replace(/[^\w\s]/g," ").split(/\s+/).filter(Boolean);return e?t.filter(o=>!Mt.has(o)&&o.length>1):t}function nt(i,e){return e==="phrase"?[i.toLowerCase().trim()]:st(i)}function jt(i,e){return e.length===0?0:e.filter(o=>o===i||o.includes(i)).length/e.length}function it(i,e,t,o){if(e.length===0)return {score:0,matchedFields:[]};let r=0,s=0,n=[];for(let[l,p]of Object.entries(t)){let a=i[l];if(a==null)continue;let c=p.weight??1;s+=c;let d;p.type==="array"&&Array.isArray(a)?d=a.join(" "):d=String(a);let m=st(d,false),f=d.toLowerCase(),g=0,j=0;if(o==="phrase"){let x=e[0];f.includes(x)&&(g=1,j=1);}else {for(let x of e){let k=jt(x,m);k>0?(j++,g+=k):f.includes(x)&&(j++,g+=.5/e.length);}e.length>0&&(g=g/e.length);}o==="all"&&j<e.length&&(g=0),g>0&&(n.push(l),r+=g*c);}return {score:s>0?Math.min(1,r/s):0,matchedFields:n}}function at(i,e,t,o="mark",r=150){if(i==null)return [];let s;if(Array.isArray(i)?s=i.join(" "):s=String(i),!s||e.length===0)return [];let n=[],u=s.toLowerCase();if(t==="phrase"){let l=e[0],p=u.indexOf(l);if(p!==-1){let a=rt(s,p,l.length,r,o);a&&n.push(a);}}else {let l=[];for(let a of e){let c=0;for(;c<u.length;){let d=u.indexOf(a,c);if(d===-1)break;l.push({start:d,length:a.length}),c=d+1;}}l.sort((a,c)=>a.start-c.start);let p=new Set;for(let a of l){if(Array.from(p).some(m=>Math.abs(m-a.start)<r))continue;let d=rt(s,a.start,a.length,r,o);if(d&&(n.push(d),p.add(a.start)),n.length>=3)break}}return n}function rt(i,e,t,o,r){let s=Math.floor(o/2),n=Math.max(0,e-s),u=Math.min(i.length,e+t+s);if(n>0){let a=i.indexOf(" ",n);a!==-1&&a<e&&(n=a+1);}if(u<i.length){let a=i.lastIndexOf(" ",u);a!==-1&&a>e+t&&(u=a);}let l=i.slice(n,u);return n>0&&(l="..."+l),u<i.length&&(l=l+"..."),St(l,[i.slice(e,e+t)],r)}function St(i,e,t){let o=i,r=i.toLowerCase(),s=[...e].sort((n,u)=>u.length-n.length);for(let n of s){let u=n.toLowerCase(),l=0,p="",a=0;for(;a<r.length;){let c=r.indexOf(u,a);if(c===-1)break;p+=o.slice(l,c),p+=`<${t}>${o.slice(c,c+n.length)}</${t}>`,l=c+n.length,a=l;}p&&(p+=o.slice(l),o=p);}return o}function lt(i,e){if(!i)return Object.keys(e);let t=i.split(",").map(r=>r.trim()).filter(Boolean),o=Object.keys(e);return t.filter(r=>o.includes(r))}function dt(i,e){let t={};for(let o of i)t[o]={weight:e?.[o]??1};return t}var ct=class extends S{searchableFields={};searchFields=[];fieldWeights={};defaultMode="any";minQueryLength=2;maxQueryLength=500;highlightTag="mark";snippetLength=150;defaultMinScore=0;filterFields=[];filterConfig;sortFields=[];defaultSort;defaultPerPage=20;maxPerPage=100;allowedIncludes=[];fieldSelectionEnabled=false;allowedSelectFields=[];blockedSelectFields=[];alwaysIncludeFields=[];defaultSelectFields=[];getSearchableFields(){if(Object.keys(this.searchableFields).length>0)return this.searchableFields;if(this.searchFields.length>0)return dt(this.searchFields,this.fieldWeights);let e=this.getModelSchema().shape,t={};for(let[o,r]of Object.entries(e))r._def?.typeName==="ZodString"&&(t[o]={weight:1});return t}getQuerySchema(){let e={q:z.string().min(this.minQueryLength).max(this.maxQueryLength).describe("Search query"),fields:z.string().optional().describe(`Comma-separated fields to search. Available: ${Object.keys(this.getSearchableFields()).join(", ")}`),mode:z.enum(["any","all","phrase"]).optional().describe("Search mode: any (OR), all (AND), phrase (exact)"),highlight:z.enum(["true","false"]).optional().describe("Include highlighted snippets"),minScore:z.string().optional().describe("Minimum relevance score threshold (0-1)"),page:z.string().optional(),per_page:z.string().optional()};this.sortFields.length>0&&(e.sort=z.enum(this.sortFields).optional().describe("Field to sort by"),e.order=z.enum(["asc","desc"]).optional().describe("Sort direction (asc or desc)"));for(let o of this.filterFields)e[o]=z.string().optional();if(this.filterConfig)for(let[o,r]of Object.entries(this.filterConfig)){for(let s of r)e[`${o}[${s}]`]=z.string().optional();e[o]=z.string().optional();}let t=this.getSoftDeleteConfig();if(t.enabled&&t.allowQueryDeleted&&(e[t.queryParam]=z.enum(["true","false"]).optional(),e.onlyDeleted=z.enum(["true","false"]).optional()),this.allowedIncludes.length>0&&(e.include=z.string().optional().describe(`Comma-separated list of relations to include. Allowed: ${this.allowedIncludes.join(", ")}`)),this.fieldSelectionEnabled){let o=this.getAvailableSelectFields();e.fields=z.string().optional().describe(`Comma-separated list of fields to return. Available: ${o.join(", ")}`);}return z.object(e)}getAvailableSelectFields(){let e=Object.keys(this.getModelSchema().shape),t=this._meta.model.computedFields?Object.keys(this._meta.model.computedFields):[],o=this._meta.model.relations?Object.keys(this._meta.model.relations):[],r=[...e,...t,...o];return this.allowedSelectFields.length>0&&(r=r.filter(s=>this.allowedSelectFields.includes(s))),this.blockedSelectFields.length>0&&(r=r.filter(s=>!this.blockedSelectFields.includes(s))),r}getSchema(){let e=z.object({item:this.getModelSchema(),score:z.number().min(0).max(1),highlights:z.record(z.string(),z.array(z.string())).optional(),matchedFields:z.array(z.string())});return {...this.schema,request:{query:this.getQuerySchema()},responses:{200:{description:"Search results",content:{"application/json":{schema:z.object({success:z.literal(true),result:z.array(e),result_info:z.object({page:z.number(),per_page:z.number(),total_count:z.number().optional(),total_pages:z.number().optional(),query:z.string(),searchedFields:z.array(z.string())})})}}},400:{description:"Invalid search request",content:{"application/json":{schema:z.object({success:z.literal(false),error:z.object({code:z.string(),message:z.string(),details:z.unknown().optional()})})}}}}}}async getSearchOptions(){let{query:e}=await this.getValidatedData(),t=e?.q,o=e?.fields,r$1=r(e?.mode),s=e?.highlight==="true",n=e?.minScore?Math.max(0,Math.min(1,parseFloat(e.minScore)||0)):this.defaultMinScore,u=this.getSearchableFields(),l=lt(o,u);return {query:t,fields:l.length>0?l:Object.keys(u),mode:r$1??this.defaultMode,highlight:s,minScore:n}}async getFilters(){let{query:e}=await this.getValidatedData(),t=this.getSoftDeleteConfig(),o={filterFields:this.filterFields,filterConfig:this.filterConfig,searchFields:[],searchFieldName:"q",sortFields:this.sortFields,defaultSort:this.defaultSort,defaultPerPage:this.defaultPerPage,maxPerPage:this.maxPerPage,softDeleteQueryParam:t.queryParam,allowedIncludes:this.allowedIncludes,fieldSelectionEnabled:this.fieldSelectionEnabled,allowedSelectFields:this.allowedSelectFields,blockedSelectFields:this.blockedSelectFields,alwaysIncludeFields:this.alwaysIncludeFields,defaultSelectFields:this.defaultSelectFields};return se(e||{},o)}async beforeSearch(e){return e}async afterSearch(e){return e}async handle(){let e=await this.getSearchOptions(),t=await this.getFilters();if(!e.query||e.query.length<this.minQueryLength)return this.json({success:false,error:{code:"INVALID_QUERY",message:`Search query must be at least ${this.minQueryLength} characters`}},400);e=await this.beforeSearch(e);let o=await this.search(e,t),r=await this.afterSearch(o.items);if(this._meta.model.computedFields){let p=r.map(c=>c.item),a=await k(p,this._meta.model.computedFields);r=r.map((c,d)=>({...c,item:a[d]}));}this._meta.model.serializer&&(r=r.map(p=>({...p,item:this._meta.model.serializer(p.item)})));let s=r;this.fieldSelectionEnabled&&t.options.fields&&t.options.fields.length>0&&(s=r.map(p=>({...p,item:ne([p.item],{fields:t.options.fields,isActive:true})[0]})));let n=t.options.page||1,u=t.options.per_page||this.defaultPerPage,l=Math.ceil(o.totalCount/u);return this.successPaginated(s,{page:n,per_page:u,total_count:o.totalCount,total_pages:l,query:e.query,searchedFields:e.fields||Object.keys(this.getSearchableFields())})}};function jr(i,e,t){let o=nt(e.query,e.mode),r={},s=e.fields||Object.keys(t);for(let u of s)t[u]&&(r[u]=t[u]);let n=[];for(let u of i){let{score:l,matchedFields:p}=it(u,o,r,e.mode);if(l<e.minScore||p.length===0)continue;let a;if(e.highlight){a={};for(let c of p){let d=at(u[c],o,e.mode);d.length>0&&(a[c]=d);}}n.push({item:u,score:l,highlights:a&&Object.keys(a).length>0?a:void 0,matchedFields:p});}return n.sort((u,l)=>l.score-u.score),n}function K(i,e={}){let{delimiter:t=",",nullValue:o="",dateFormat:r="iso"}=e;if(i==null)return o;if(i instanceof Date)switch(r){case "timestamp":return String(i.getTime());case "locale":return i.toLocaleString();default:return i.toISOString()}if(typeof i=="object")return K(JSON.stringify(i),e);if(typeof i=="boolean")return i?"true":"false";let s=String(i),n=s.charAt(0);return n==="="||n==="+"||n==="-"||n==="@"||n===" "||n==="\r"?`" ${s.replace(/"/g,'""')}"`:s.includes(t)||s.includes('"')||s.includes(`
2
+ `)||s.includes("\r")?`"${s.replace(/"/g,'""')}"`:s}function me(i,e={}){let{delimiter:t=",",rowDelimiter:o=`\r
3
+ `,includeHeader:r=true,formatters:s={},excludeFields:n=[],headerLabels:u={},nullValue:l="",dateFormat:p="iso"}=e;if(i.length===0)return "";let a=e.headers;a?a=a.filter(d=>!n.includes(d)):a=Object.keys(i[0]).filter(d=>!n.includes(d));let c=[];if(r){let d=a.map(m=>{let f=u[m]||m;return K(f,{delimiter:t,nullValue:l,dateFormat:p})});c.push(d.join(t));}for(let d of i){let m=a.map(f=>{let g=d[f];return s[f]&&(g=s[f](g)),K(g,{delimiter:t,nullValue:l,dateFormat:p})});c.push(m.join(t));}return c.join(o)}function Or(i,e={}){let{delimiter:t=",",rowDelimiter:o=`\r
4
+ `,includeHeader:r=true,formatters:s={},excludeFields:n=[],headerLabels:u={},nullValue:l="",dateFormat:p="iso"}=e,a=new TextEncoder,c=0,d=false,m=e.headers;return !m&&i.length>0?m=Object.keys(i[0]).filter(f=>!n.includes(f)):m?m=m.filter(f=>!n.includes(f)):m=[],new ReadableStream({pull(f){if(r&&!d&&m.length>0){let x=m.map(k=>{let y=u[k]||k;return K(y,{delimiter:t,nullValue:l,dateFormat:p})});f.enqueue(a.encode(x.join(t)+o)),d=true;return}let g=100,j=[];for(;c<i.length&&j.length<g;){let x=i[c],k=m.map(y=>{let F=x[y];return s[y]&&(F=s[y](F)),K(F,{delimiter:t,nullValue:l,dateFormat:p})});j.push(k.join(t)),c++;}j.length>0&&f.enqueue(a.encode(j.join(o)+o)),c>=i.length&&f.close();}})}function ut(i,e){let t=[],o="",r=false,s=0;for(;s<i.length;){let n=i[s];if(r){if(n==='"'){if(s+1<i.length&&i[s+1]==='"'){o+='"',s+=2;continue}r=false,s++;continue}o+=n,s++;}else {if(n==='"'){r=true,s++;continue}if(n===e){t.push(o),o="",s++;continue}o+=n,s++;}}return t.push(o),t}function Ot(i){let e=[],t="",o=false;for(let r=0;r<i.length;r++){let s=i[r];if(s==='"'){if(o&&r+1<i.length&&i[r+1]==='"'){t+='""',r++;continue}o=!o,t+=s;continue}if(!o&&(s===`
5
+ `||s==="\r")){s==="\r"&&r+1<i.length&&i[r+1]===`
6
+ `&&r++,t.length>0&&(e.push(t),t="");continue}t+=s;}return t.length>0&&e.push(t),e}function he(i,e={}){let{delimiter:t=",",hasHeader:o=true,trimValues:r=true,skipEmptyRows:s=true,parsers:n={},emptyValue:u="empty"}=e,l={data:[],headers:[],errors:[]},p=Ot(i);if(p.length===0)return l;let a=0;if(o){let d=p[0];l.headers=ut(d,t).map(m=>r?m.trim():m),a=1;}else e.headers&&(l.headers=e.headers);let c=e.headers||l.headers;for(let d=a;d<p.length;d++){let m=p[d],f=d+1;if(!(s&&m.trim()===""))try{let g=ut(m,t),j={};for(let x=0;x<c.length;x++){let k=c[x],y=x<g.length?g[x]:"";if(r&&typeof y=="string"&&(y=y.trim()),y==="")switch(u){case "null":y=null;break;case "undefined":y=void 0;break}if(n[k]&&typeof y=="string")try{y=n[k](y);}catch(F){l.errors.push({row:f,message:`Failed to parse field "${k}": ${F instanceof Error?F.message:String(F)}`,content:m});}j[k]=y;}l.data.push(j);}catch(g){l.errors.push({row:f,message:`Failed to parse row: ${g instanceof Error?g.message:String(g)}`,content:m});}}return l}function pt(i,e,t={}){let{allowUnknownFields:o=false,optionalFields:r=[]}=t,s=e.shape,n=Object.keys(s),l=n.filter(d=>r.includes(d)?false:!s[d].isOptional()).filter(d=>!i.includes(d)),p=i.filter(d=>!n.includes(d)),a=i.filter(d=>n.includes(d));return {valid:l.length===0&&(o||p.length===0),missingFields:l,unknownFields:p,validFields:a}}function Rr(i,e){if(i){let t=i.toLowerCase().split(".").pop();if(t==="csv")return "csv";if(t==="json")return "json"}if(e){let t=e.trim();if(t.startsWith("[")||t.startsWith("{"))return "json";if(t.includes(",")||t.includes(`
7
+ `))return "csv"}return "unknown"}function kr(i,e={}){return me(i,e)}function xr(i,e={}){return he(i,e).data}var mt=class extends ie{maxExportRecords=1e4;enableStreaming=true;streamPageSize=500;excludedExportFields=[];defaultFormat="json";csvOptions={};exportFilename;getExportQuerySchema(){return this.getQuerySchema().extend({format:z.enum(["json","csv"]).optional().describe("Export format"),stream:z.enum(["true","false"]).optional().describe("Enable streaming for large exports")})}getSchema(){return {...this.schema,request:{query:this.getExportQuerySchema()},responses:{200:{description:"Export successful",content:{"application/json":{schema:z.object({success:z.literal(true),result:z.object({data:z.array(this.getModelSchema()),count:z.number(),format:z.enum(["json","csv"]),exportedAt:z.string()})})},"text/csv":{schema:z.string()}}}}}}async getExportOptions(){let{query:e}=await this.getValidatedData(),t=e?.format||this.defaultFormat,o=e?.stream==="true"&&this.enableStreaming;return {format:t,stream:o,fields:e?.fields?String(e.fields).split(","):void 0}}getExportFilename(e){let o=(this.exportFilename||this._meta.model.tableName).replace(/[^a-zA-Z0-9_-]/g,"_"),r=new Date().toISOString().replace(/[:.]/g,"-");return `${o}-export-${r}.${e}`}prepareRecordsForExport(e){return this.excludedExportFields.length===0?e:e.map(t=>{let o={};for(let[r,s]of Object.entries(t))this.excludedExportFields.includes(r)||(o[r]=s);return o})}exportAsJson(e,t){let o={data:e,count:e.length,format:t,exportedAt:new Date().toISOString()};return new Response(JSON.stringify({success:true,result:o},null,2),{status:200,headers:{"Content-Type":"application/json","Content-Disposition":`attachment; filename="${this.getExportFilename(t)}"`}})}exportAsCsv(e,t){let o=me(e,{...this.csvOptions,excludeFields:this.excludedExportFields});return new Response(o,{status:200,headers:{"Content-Type":"text/csv; charset=utf-8","Content-Disposition":`attachment; filename="${this.getExportFilename(t)}"`}})}exportAsCsvStream(e,t){let o=this.getContext(),r=this.getExportFilename(t),s=this.csvOptions,n=this.excludedExportFields;return stream(o,async u=>{if(o.header("Content-Type","text/csv; charset=utf-8"),o.header("Content-Disposition",`attachment; filename="${r}"`),e.length===0)return;let l=Object.keys(e[0]).filter(c=>!n.includes(c)),p=l.map(c=>K(c,s)).join(",")+`
8
+ `;await u.write(p);let a=100;for(let c=0;c<e.length;c+=a)for(let d of e.slice(c,c+a)){let m=l.map(f=>K(d[f],s)).join(",")+`
9
+ `;await u.write(m);}})}exportAsCsvStreamPaginated(e,t){let o=this.getExportFilename(t),r=this.streamPageSize,s=Math.min(this.maxExportRecords,1e5),n=this.excludedExportFields,u=this.csvOptions,l=null,p=new ReadableStream({start:async a=>{let c=new TextEncoder,d=1,m=0;try{for(;m<s;){let f={...e,options:{...e.options,page:d,per_page:r}},j=(await this.list(f)).result;if(j.length===0)break;j.length>s-m&&(j=j.slice(0,s-m)),j=await this.after(j),j=await this.beforeExport(j);let x=this.prepareRecordsForExport(j);if(!l&&x.length>0){l=Object.keys(x[0]).filter(y=>!n.includes(y));let k=l.map(y=>K(y,u)).join(",")+`
10
+ `;a.enqueue(c.encode(k));}if(l)for(let k of x){let y=l.map(F=>K(k[F],u)).join(",")+`
11
+ `;a.enqueue(c.encode(y));}if(m+=j.length,d++,j.length<r)break}}catch(f){a.error(f);return}a.close();}});return new Response(p,{status:200,headers:{"Content-Type":"text/csv; charset=utf-8","Content-Disposition":`attachment; filename="${o}"`}})}async beforeExport(e){return e}async fetchAllForExport(e){let t=Math.min(this.maxExportRecords,1e5),o={...e,options:{...e.options,page:1,per_page:t}};return (await this.list(o)).result}async handle(){let e=await this.getExportOptions(),t=await this.getFilters();if(e.format==="csv"&&e.stream)return this.exportAsCsvStreamPaginated(t,e.format);let o=await this.fetchAllForExport(t);o=await this.after(o),o=await this.beforeExport(o);let r=this.prepareRecordsForExport(o);return e.format==="csv"?this.exportAsCsv(r,e.format):this.exportAsJson(r,e.format)}};var ht=class extends S{maxBatchSize=1e3;importBatchSize=100;stopOnError=false;skipInvalidRows=true;defaultMode="create";upsertKeys;immutableFields=[];csvOptions={};maxBodySize=10*1024*1024;optionalImportFields=[];getUpsertKeys(){return this.upsertKeys||this._meta.model.primaryKeys}getImportSchema(){let e=this._meta.fields||this.getModelSchema();return z.object({items:z.array(e.partial()).min(1).max(this.maxBatchSize)})}getSchema(){return {...this.schema,request:{query:z.object({mode:z.enum(["create","upsert"]).optional().describe("Import mode"),skipInvalid:z.enum(["true","false"]).optional().describe("Skip invalid rows"),stopOnError:z.enum(["true","false"]).optional().describe("Stop on first error")})},responses:{200:{description:"Import completed successfully",content:{"application/json":{schema:z.object({success:z.literal(true),result:z.object({summary:z.object({total:z.number(),created:z.number(),updated:z.number(),skipped:z.number(),failed:z.number()}),results:z.array(z.object({rowNumber:z.number(),status:z.enum(["created","updated","skipped","failed"]),data:z.unknown().optional(),error:z.string().optional(),validationErrors:z.array(z.object({path:z.string(),message:z.string()})).optional()}))})})}}},207:{description:"Import completed with partial failures",content:{"application/json":{schema:z.object({success:z.literal(true),result:z.object({summary:z.object({total:z.number(),created:z.number(),updated:z.number(),skipped:z.number(),failed:z.number()}),results:z.array(z.object({rowNumber:z.number(),status:z.enum(["created","updated","skipped","failed"]),data:z.unknown().optional(),error:z.string().optional(),validationErrors:z.array(z.object({path:z.string(),message:z.string()})).optional()}))})})}}},400:{description:"Validation error",content:{"application/json":{schema:z.object({success:z.literal(false),error:z.object({code:z.string(),message:z.string(),details:z.unknown().optional()})})}}}}}}async getImportOptions(){let{query:e}=await this.getValidatedData(),t=e?.skipInvalid==="true"?true:e?.skipInvalid==="false"?false:this.skipInvalidRows,o=e?.stopOnError==="true"?true:e?.stopOnError==="false"?false:this.stopOnError;return {mode:e?.mode||this.defaultMode,skipInvalidRows:t,stopOnError:o}}async parseImportData(){let e=this.context;if(!e)throw new b$3("No request available");let t=e.req.header("content-type")||"";if(t.includes("application/json")){let o=await e.req.json();if(!o)throw new b$3("Request body is empty");if(!o.items||!Array.isArray(o.items))throw new b$3('Request body must contain an "items" array');if(o.items.length>this.maxBatchSize)throw new b$3(`Maximum ${this.maxBatchSize} items allowed per import`);return o.items}if(t.includes("text/csv")){let o=await e.req.text();if(o.length>this.maxBodySize)throw new b$3(`Request body exceeds maximum size of ${this.maxBodySize} bytes`);return this.parseCsvData(o)}if(t.includes("multipart/form-data")){let r=(await e.req.formData()).get("file");if(!r)throw new b$3("No file provided in form data");let s=await r.text();if(s.length>this.maxBodySize)throw new b$3(`Uploaded file exceeds maximum size of ${this.maxBodySize} bytes`);let n=r.name.toLowerCase();if(n.endsWith(".json")){let l;try{l=JSON.parse(s);}catch{throw new b$3("Invalid JSON content in uploaded file")}let p=Array.isArray(l)?l:l.items;if(!p||!Array.isArray(p))throw new b$3('JSON file must contain an array or an object with "items" array');if(p.length>this.maxBatchSize)throw new b$3(`Maximum ${this.maxBatchSize} items allowed per import`);return p}if(n.endsWith(".csv"))return this.parseCsvData(s);let u=s.trim();if(u.startsWith("[")||u.startsWith("{")){let l;try{l=JSON.parse(s);}catch{throw new b$3("Invalid JSON content in uploaded file")}let p=Array.isArray(l)?l:l.items;if(!p||!Array.isArray(p))throw new b$3('JSON file must contain an array or an object with "items" array');return p}return this.parseCsvData(s)}throw new b$3("Unsupported content type. Use application/json, text/csv, or multipart/form-data")}parseCsvData(e){let t=he(e,this.csvOptions);if(t.errors.length>0)throw new b$3(`CSV parsing errors: ${t.errors.map(s=>`Row ${s.row}: ${s.message}`).join("; ")}`);if(t.data.length===0)throw new b$3("CSV file is empty");if(t.data.length>this.maxBatchSize)throw new b$3(`Maximum ${this.maxBatchSize} items allowed per import`);let o=this._meta.fields||this.getModelSchema(),r=pt(t.headers,o,{allowUnknownFields:true,optionalFields:this.optionalImportFields});if(!r.valid&&r.missingFields.length>0)throw new b$3(`Missing required fields in CSV: ${r.missingFields.join(", ")}`);return t.data}validateRow(e,t){let o=this._meta.fields||this.getModelSchema(),r=this._meta.model.primaryKeys,s={};for(let u of r)s[u]=true;for(let u of this.optionalImportFields)s[u]=true;let n=o.partial(s);try{return n.parse(e),{valid:!0}}catch(u){return u instanceof z.ZodError?{valid:false,errors:u.issues.map(p=>({path:p.path.join("."),message:p.message}))}:{valid:false,errors:[{path:"",message:u instanceof Error?u.message:String(u)}]}}}removeImmutableFields(e){if(this.immutableFields.length===0)return e;let t={};for(let[o,r]of Object.entries(e))this.immutableFields.includes(o)||(t[o]=r);return t}async before(e,t,o,r){return e}async after(e,t,o,r){return e}async processRow(e,t,o,r){let s=this.validateRow(e,t);if(!s.valid)return o.skipInvalidRows?{rowNumber:t,status:"skipped",error:"Validation failed",validationErrors:s.errors}:{rowNumber:t,status:"failed",error:"Validation failed",validationErrors:s.errors};try{let n=await this.before(e,t,o.mode,r);if(o.mode==="upsert"){let l=await this.findExisting(n,r);if(l){let p=this.removeImmutableFields(n),a=await this.update(l,p,r);return {rowNumber:t,status:"updated",data:a}}}else if(await this.findExisting(n,r))return o.skipInvalidRows?{rowNumber:t,status:"skipped",error:"Record already exists"}:{rowNumber:t,status:"failed",error:"Record already exists (duplicate key)"};let u=await this.create(n,r);return {rowNumber:t,status:"created",data:u}}catch(n){return {rowNumber:t,status:"failed",error:n instanceof Error?n.message:String(n)}}}async handle(){let e=await this.getImportOptions(),t=await this.parseImportData();if(!Number.isInteger(this.importBatchSize)||this.importBatchSize<1)throw new i$1("importBatchSize must be a positive integer");let o={total:t.length,created:0,updated:0,skipped:0,failed:0},r=[],s=false,n=e.stopOnError?1:this.importBatchSize;for(let p=0;p<t.length&&!s;p+=n){let a=t.slice(p,p+n),c=await Promise.all(a.map(async(d,m)=>{let f=p+m+1,g=await this.processRow(d,f,e);return g=await this.after(g,f,e.mode),g}));for(let d of c){switch(r.push(d),d.status){case "created":o.created++;break;case "updated":o.updated++;break;case "skipped":o.skipped++;break;case "failed":o.failed++;break}if(e.stopOnError&&d.status==="failed"){s=true;break}}}if(this.isAuditEnabled()){let p=this.getAuditLogger(),a=r.filter(c=>c.status==="created"||c.status==="updated");if(a.length>0){let c=a.map(d=>{if(!d.data)return null;let m=this.getRecordId(d.data);return m===null?null:{recordId:m,record:d.data}}).filter(d=>d!==null);c.length>0&&this.runAfterResponse(p.logBatch(e.mode==="upsert"?"batch_upsert":"batch_create",this._meta.model.tableName,c,this.getAuditUserId()));}}let u={summary:o,results:r},l=o.failed>0&&o.failed<o.total?207:200;return this.json({success:true,result:u},l)}};export{Ye as A,et as B,pr as C,st as D,nt as E,jt as F,it as G,at as H,lt as I,dt as J,ct as K,jr as L,K as M,me as N,Or as O,he as P,pt as Q,Rr as R,kr as S,xr as T,mt as U,ht as V,ee as a,de as b,ce as c,S as d,Pt as e,se as f,$ as g,It as h,ue as i,ne as j,Ze as k,Te as l,De as m,ze as n,ie as o,Le as p,qe as q,Be as r,Ue as s,He as t,$e as u,We as v,Ke as w,Qe as x,Ge as y,Je as z};
@@ -1 +1 @@
1
- import {e,f}from'./chunk-Z575OBLV.js';import {c}from'./chunk-GBQQ3YQX.js';var a=class{logs=[];async store(t){this.logs.push(t);}async getByRecordId(t,e,r){let n=this.logs.filter(s=>s.tableName===t&&s.recordId===e),i=r?.offset||0,o=r?.limit||n.length;return n.slice(i,i+o)}async getAll(t){let e=[...this.logs];t?.tableName&&(e=e.filter(i=>i.tableName===t.tableName)),t?.action&&(e=e.filter(i=>i.action===t.action)),t?.userId&&(e=e.filter(i=>i.userId===t.userId)),t?.startDate&&(e=e.filter(i=>i.timestamp>=t.startDate)),t?.endDate&&(e=e.filter(i=>i.timestamp<=t.endDate));let r=t?.offset||0,n=t?.limit||e.length;return e.slice(r,r+n)}getAllLogs(){return [...this.logs]}clear(){this.logs=[];}},l=c("auditStorage",()=>new a);function A(d){l.set(d);}function R(){return l.getRequired()}var u=class{config;storage;constructor(t,e$1,r){this.config=e(t),this.storage=l.resolve(r,e$1);}getStorage(){if(!this.storage)throw new Error("Audit storage not configured. Pass storage explicitly or inject auditStorage with createCrudMiddleware().");return this.storage}isEnabled(t){return this.config.enabled&&this.config.actions.includes(t)}async logCreate(t,e,r,n,i){if(!this.isEnabled("create"))return;let o=this.createEntry("create",t,e,n,i);this.config.storeRecord&&(o.record=this.filterFields(r)),await this.getStorage().store(o);}async logUpdate(t,e,r,n,i,o){if(!this.isEnabled("update"))return;let s=this.createEntry("update",t,e,i,o);this.config.storeRecord&&(s.record=this.filterFields(n)),this.config.storePreviousRecord&&(s.previousRecord=this.filterFields(r)),this.config.trackChanges&&(s.changes=f(r,n,this.config.excludeFields)),await this.getStorage().store(s);}async logDelete(t,e,r,n,i){if(!this.isEnabled("delete"))return;let o=this.createEntry("delete",t,e,n,i);this.config.storePreviousRecord&&(o.previousRecord=this.filterFields(r)),await this.getStorage().store(o);}async logRestore(t,e,r,n,i){if(!this.isEnabled("restore"))return;let o=this.createEntry("restore",t,e,n,i);this.config.storeRecord&&(o.record=this.filterFields(r)),await this.getStorage().store(o);}async logUpsert(t,e,r,n,i,o,s){if(!this.isEnabled("upsert"))return;let g=this.createEntry("upsert",t,e,o,{...s,created:i});this.config.storeRecord&&(g.record=this.filterFields(r)),this.config.storePreviousRecord&&n&&(g.previousRecord=this.filterFields(n)),this.config.trackChanges&&n&&(g.changes=f(n,r,this.config.excludeFields)),await this.getStorage().store(g);}async logBatch(t,e,r,n,i){if(this.isEnabled(t))for(let o of r){let s=this.createEntry(t,e,o.recordId,n,i);this.config.storeRecord&&o.record&&(s.record=this.filterFields(o.record)),this.config.storePreviousRecord&&o.previousRecord&&(s.previousRecord=this.filterFields(o.previousRecord)),this.config.trackChanges&&o.previousRecord&&o.record&&(s.changes=f(o.previousRecord,o.record,this.config.excludeFields)),await this.getStorage().store(s);}}createEntry(t,e,r,n,i){return {id:crypto.randomUUID(),timestamp:new Date,action:t,tableName:e,recordId:r,userId:n,metadata:i}}filterFields(t){if(this.config.excludeFields.length===0)return t;let e={};for(let[r,n]of Object.entries(t))this.config.excludeFields.includes(r)||(e[r]=n);return e}};function b(d,t,e){return new u(d,t,e)}export{a,l as b,A as c,R as d,u as e,b as f};
1
+ import {e,f}from'./chunk-QJPUXVTT.js';import {c}from'./chunk-GBQQ3YQX.js';var a=class{logs=[];async store(t){this.logs.push(t);}async getByRecordId(t,e,r){let n=this.logs.filter(s=>s.tableName===t&&s.recordId===e),i=r?.offset||0,o=r?.limit||n.length;return n.slice(i,i+o)}async getAll(t){let e=[...this.logs];t?.tableName&&(e=e.filter(i=>i.tableName===t.tableName)),t?.action&&(e=e.filter(i=>i.action===t.action)),t?.userId&&(e=e.filter(i=>i.userId===t.userId)),t?.startDate&&(e=e.filter(i=>i.timestamp>=t.startDate)),t?.endDate&&(e=e.filter(i=>i.timestamp<=t.endDate));let r=t?.offset||0,n=t?.limit||e.length;return e.slice(r,r+n)}getAllLogs(){return [...this.logs]}clear(){this.logs=[];}},l=c("auditStorage",()=>new a);function A(d){l.set(d);}function R(){return l.getRequired()}var u=class{config;storage;constructor(t,e$1,r){this.config=e(t),this.storage=l.resolve(r,e$1);}getStorage(){if(!this.storage)throw new Error("Audit storage not configured. Pass storage explicitly or inject auditStorage with createCrudMiddleware().");return this.storage}isEnabled(t){return this.config.enabled&&this.config.actions.includes(t)}async logCreate(t,e,r,n,i){if(!this.isEnabled("create"))return;let o=this.createEntry("create",t,e,n,i);this.config.storeRecord&&(o.record=this.filterFields(r)),await this.getStorage().store(o);}async logUpdate(t,e,r,n,i,o){if(!this.isEnabled("update"))return;let s=this.createEntry("update",t,e,i,o);this.config.storeRecord&&(s.record=this.filterFields(n)),this.config.storePreviousRecord&&(s.previousRecord=this.filterFields(r)),this.config.trackChanges&&(s.changes=f(r,n,this.config.excludeFields)),await this.getStorage().store(s);}async logDelete(t,e,r,n,i){if(!this.isEnabled("delete"))return;let o=this.createEntry("delete",t,e,n,i);this.config.storePreviousRecord&&(o.previousRecord=this.filterFields(r)),await this.getStorage().store(o);}async logRestore(t,e,r,n,i){if(!this.isEnabled("restore"))return;let o=this.createEntry("restore",t,e,n,i);this.config.storeRecord&&(o.record=this.filterFields(r)),await this.getStorage().store(o);}async logUpsert(t,e,r,n,i,o,s){if(!this.isEnabled("upsert"))return;let g=this.createEntry("upsert",t,e,o,{...s,created:i});this.config.storeRecord&&(g.record=this.filterFields(r)),this.config.storePreviousRecord&&n&&(g.previousRecord=this.filterFields(n)),this.config.trackChanges&&n&&(g.changes=f(n,r,this.config.excludeFields)),await this.getStorage().store(g);}async logBatch(t,e,r,n,i){if(this.isEnabled(t))for(let o of r){let s=this.createEntry(t,e,o.recordId,n,i);this.config.storeRecord&&o.record&&(s.record=this.filterFields(o.record)),this.config.storePreviousRecord&&o.previousRecord&&(s.previousRecord=this.filterFields(o.previousRecord)),this.config.trackChanges&&o.previousRecord&&o.record&&(s.changes=f(o.previousRecord,o.record,this.config.excludeFields)),await this.getStorage().store(s);}}createEntry(t,e,r,n,i){return {id:crypto.randomUUID(),timestamp:new Date,action:t,tableName:e,recordId:r,userId:n,metadata:i}}filterFields(t){if(this.config.excludeFields.length===0)return t;let e={};for(let[r,n]of Object.entries(t))this.config.excludeFields.includes(r)||(e[r]=n);return e}};function b(d,t,e){return new u(d,t,e)}export{a,l as b,A as c,R as d,u as e,b as f};
@@ -1 +1 @@
1
- import {b as b$4}from'./chunk-7NM6MBRL.js';import {a as a$3}from'./chunk-GF2EC5G4.js';import {a,g}from'./chunk-2M5BM4VD.js';import {a as a$1,i}from'./chunk-FC56WWPB.js';import {b as b$3}from'./chunk-ANWSQPCQ.js';import {b,c}from'./chunk-GBQQ3YQX.js';import {b as b$2}from'./chunk-DMGP7QDL.js';import {e,a as a$2,b as b$1}from'./chunk-VJRDAVID.js';function B(e,t={}){let{ipHeader:n="X-Forwarded-For",trustProxy:r=true}=t;if(r){let s=e.req.header(n);if(s){let c=s.split(",")[0]?.trim();if(c)return c}let a=e.req.header("X-Real-IP")?.trim();if(a)return a;let i=e.req.header("CF-Connecting-IP")?.trim();if(i)return i}let o=e.req.raw;if(o&&typeof o.socket=="object"&&o.socket?.remoteAddress)return o.socket.remoteAddress;if(o?.cf?.ip)return o.cf.ip}function $(e){return a$2(e,"userId")}function z(e,t){let n=e.toLowerCase();for(let r of t){if(r instanceof RegExp){if(r.test(e))return true;continue}let o=r.toLowerCase();if(o.includes("*")){let s=o.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*");if(new RegExp(`^${s}$`).test(n))return true}else if(n===o)return true}return false}function j(e,t){if(e==null)return e;if(Array.isArray(e))return e.map(r=>j(r,t));if(typeof e!="object")return e;let n={};for(let[r,o]of Object.entries(e))z(r,t)?n[r]="[REDACTED]":typeof o=="object"&&o!==null?n[r]=j(o,t):n[r]=o;return n}function he(e,t){let n={};for(let[r,o]of Object.entries(e))n[r]=z(r,t)?"[REDACTED]":o;return n}function Ye(e,t){return z(e,t)}function ee(e,t){return j(e,t)}function te(e,t){return he(e,t)}function Ze(e,t){return a(e,t)}function ye(e,t,n){for(let r of n)if(a(e,r))return true;if(t.length===0)return false;for(let r of t)if(a(e,r))return false;return true}function xe(e,t="X-Forwarded-For",n=false){return B(e,{ipHeader:t,trustProxy:n||true})}function re(e){let t={};return e.forEach((n,r)=>{t[r.toLowerCase()]=n;}),t}function Ce(e){let t={};return new URL(e.req.url).searchParams.forEach((r,o)=>{t[o]=r;}),t}function D(e,t){if(typeof e=="string")return e.length>t?e.substring(0,t)+"... [TRUNCATED]":e;let n=JSON.stringify(e);return n.length>t?{_truncated:true,_originalSize:n.length,_maxSize:t}:e}function Ee(e,t){if(!e)return false;if(t.length===0)return true;let n=e.toLowerCase();for(let r of t)if(n.includes(r.toLowerCase()))return true;return false}function Se(e){return $(e)}function Re(){return e()}var U=class extends a$1{constructor(t="Too many requests",n=60){super(t,429,"RATE_LIMIT_EXCEEDED",{retryAfter:n}),this.name="RateLimitExceededException";}};function q(e,t="X-Forwarded-For",n=false){return B(e,{ipHeader:t,trustProxy:n})??"unknown"}function ne(e){return $(e)??null}function we(e,t="X-API-Key"){return e.req.header(t)||null}function st(e,t){return a(e,t)}function ve(e,t){return t.some(n=>a(e,n))}function Ie(e,...t){let n=t.filter(r=>r!==void 0&&r!=="");return `${e}:${n.join(":")}`}function V(e){return e instanceof Error?e:new Error(String(e))}function Me(e,t){let n=V(e),r=new Error(`${t}: ${n.message}`);return r.cause=n,r}function Oe(e){return e instanceof Error?e.message:String(e)}var X=b("loggingStorage");function ht(e){X.set(e);}function yt(){return X.get()}var De=["authorization","cookie","x-api-key","x-auth-token"],Fe=["password","token","secret","apiKey","api_key","accessToken","access_token","refreshToken","refresh_token","creditCard","credit_card","ssn","socialSecurityNumber"],_e=["/health","/healthz","/ready","/readyz","/live","/livez","/metrics","/favicon.ico"];function xt(e){return a$2(e,"requestId")}function Ct(e){return a$2(e,"requestStartTime")}function Et(e={}){let t=e.enabled??true,n=e.level??"info",r=e.includePaths??[],o=e.excludePaths??_e,s=e.redactHeaders??De,a=e.redactBodyFields??Fe,i=e.requestBody??{enabled:false},c=e.responseBody??{enabled:false},u=e.includeHeaders??true,d=e.includeQuery??true,g=e.includeClientIp??true,C=e.ipHeader??"X-Forwarded-For",m=e.trustProxy??false,h=e.minResponseTimeMs??0,R=e.generateRequestId??Re;return async(l,P)=>{if(!t)return P();let w=l.req.path;if(ye(w,r,o))return P();let f=R(),T=Date.now();b$1(l,"requestId",f),b$1(l,"requestStartTime",T),l.header("X-Request-ID",f);let Ae=l.req.method,qe=l.req.url,oe;if(u){let E=re(l.req.raw.headers);oe=te(E,s);}let se;d&&(se=Ce(l));let ae;g&&(ae=xe(l,C,m));let Ke=Se(l),Q;if(i.enabled){let E=l.req.header("content-type"),H=i.contentTypes??[];if(Ee(E,H))try{let L=await l.req.raw.clone().text();if(L)try{let x=JSON.parse(L);x=ee(x,a);let y=i.maxSize??10240;Q=D(x,y);}catch{let x=i.maxSize??10240;Q=D(L,x);}}catch{}}let S,Y;try{await P();}catch(E){throw S=E instanceof Error?E:new Error(String(E)),E}finally{let H=Date.now()-T;if(H<h)return;let b=l.res.status,L;if(u){let p=re(l.res.headers);L=te(p,s);}if(c.enabled&&!S){let p=c.statusCodes??[];if(p.length===0||p.includes(b))try{let Z=await l.res.clone().text();if(Z)try{let M=JSON.parse(Z);M=ee(M,a);let He=c.maxSize??10240;Y=D(M,He);}catch{let M=c.maxSize??10240;Y=D(Z,M);}}catch{}}let x=n;e.levelResolver?x=e.levelResolver(l,H,b,S):S||b>=500?x="error":b>=400&&(x="warn");let y={id:f,timestamp:new Date(T).toISOString(),level:x,request:{method:Ae,path:w,url:qe,headers:oe,query:se,body:Q,clientIp:ae,userId:Ke},response:{statusCode:b,headers:L,body:Y,responseTimeMs:H}};if(S&&(y.error={message:S.message,name:S.name,stack:S.stack}),e.metadata){let p=typeof e.metadata=="function"?e.metadata(l):e.metadata;y.metadata=p;}e.formatter&&(y=e.formatter(y));let ie=Pe(l,e.storage);(async()=>{if(ie)try{await ie.store(y);}catch(p){e.onError&&e.onError(p instanceof Error?p:new Error(String(p)),y);}if(e.handlers)for(let p of e.handlers)try{await p(y);}catch(v){e.onError&&e.onError(v instanceof Error?v:new Error(String(v)),y);}})().catch(p=>{let v=V(p);e.onError?e.onError(v,y):b$2().error("Failed to process log entry",{error:v.message});});}}}function Te(e){let{tableName:t,method:n,params:r,query:o,keyFields:s,userId:a,prefix:i}=e,c=[];if(i&&c.push(i),c.push(t),c.push(n),r&&Object.keys(r).length>0){let u=Object.keys(r).sort().map(d=>`${d}=${r[d]}`).join("&");c.push(u);}if(o&&Object.keys(o).length>0){let u=Object.keys(o).filter(d=>o[d]!==void 0&&o[d]!==null&&o[d]!=="");if(s&&s.length>0&&(u=u.filter(d=>s.includes(d))),u.length>0){let d=u.sort().map(g=>`${g}=${String(o[g])}`).join("&");c.push(d);}}return a&&c.push(`user=${a}`),c.join(":")}function K(e,t,n){let r=[];if(n&&r.push(n),r.push(e),!t)return r.push("*"),r.join(":");let{method:o,id:s,userId:a}=t;return o?(r.push(o),r.join(":")+"*"):(s!==void 0?(r.push("*"),r.push(`id=${s}*`)):a?(r.push("*"),r.push(`user=${a}`)):r.push("*"),r.join(":"))}function be(e,t,n){return t.map(r=>K(r,void 0,n))}function Le(e,t){let n=t.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*");return new RegExp(`^${n}$`).test(e)}function Rt(e){let t=e.split(":"),n=t.length>2&&!["GET","LIST"].includes(t[1]),r=0,o=n?t[r++]:void 0,s=t[r++],a=t[r++],i={tableName:s,method:a};o&&(i.prefix=o);for(let c=r;c<t.length;c++){let u=t[c];if(u.startsWith("user="))i.userId=u.substring(5);else if(u.includes("=")){let d=u.split("&"),g={};for(let C of d){let[m,h]=C.split("=");m&&h!==void 0&&(g[m]=h);}a==="GET"&&!i.params?i.params=g:a==="LIST"&&!i.query||i.params?i.query=g:i.params=g;}}return i}var W=class{storage=new Map;tagIndex=new Map;stats={hits:0,misses:0,size:0};defaultTtl;maxEntries;constructor(t){this.defaultTtl=t?.defaultTtl??300,this.maxEntries=t?.maxEntries??1e4;}async get(t){let n=this.storage.get(t);return n?n.expiresAt&&n.expiresAt<Date.now()?(await this.delete(t),this.stats.misses++,null):(this.stats.hits++,n):(this.stats.misses++,null)}async set(t,n,r){let o=r?.ttl??this.defaultTtl,s=r?.tags;this.maxEntries>0&&this.storage.size>=this.maxEntries&&!this.storage.has(t)&&this.evictOldest();let a=Date.now(),i={data:n,createdAt:a,expiresAt:o>0?a+o*1e3:null,tags:s},c=this.storage.get(t);if(c?.tags)for(let u of c.tags)this.tagIndex.get(u)?.delete(t);if(c&&this.storage.delete(t),this.storage.set(t,i),this.stats.size=this.storage.size,s)for(let u of s)this.tagIndex.has(u)||this.tagIndex.set(u,new Set),this.tagIndex.get(u).add(t);}async delete(t){let n=this.storage.get(t);if(!n)return false;if(n.tags)for(let r of n.tags)this.tagIndex.get(r)?.delete(t);return this.storage.delete(t),this.stats.size=this.storage.size,true}async deletePattern(t){let n=0,r=[];for(let o of this.storage.keys())Le(o,t)&&r.push(o);for(let o of r)await this.delete(o)&&n++;return n}async deleteByTag(t){let n=this.tagIndex.get(t);if(!n||n.size===0)return 0;let r=0,o=Array.from(n);for(let s of o)await this.delete(s)&&r++;return this.tagIndex.delete(t),r}async has(t){let n=this.storage.get(t);return n?n.expiresAt&&n.expiresAt<Date.now()?(await this.delete(t),false):true:false}async clear(){this.storage.clear(),this.tagIndex.clear(),this.stats.size=0;}getStats(){return {...this.stats}}resetStats(){this.stats.hits=0,this.stats.misses=0;}getKeys(){return Array.from(this.storage.keys())}getTags(){return Array.from(this.tagIndex.keys())}evictOldest(){let t=this.storage.keys().next().value;t!==void 0&&this.delete(t).catch(()=>{});}async cleanup(){let t=Date.now(),n=0,r=[];for(let[o,s]of this.storage.entries())s.expiresAt&&s.expiresAt<t&&r.push(o);for(let o of r)await this.delete(o),n++;return n}};function G(e){let n=e._meta?.model?.tableName;if(!n)throw new i("Cache mixin requires `_meta.model.tableName`. Declare `_meta` on the endpoint or remove the cache mixin.");return n}var J=c("cacheStorage",()=>new W);function qt(e){J.set(e);}function Kt(){return J.getRequired()}function Ht(e){class t extends e{cacheConfig;getCacheConfig(){return {enabled:true,ttl:300,perUser:false,...this.cacheConfig}}async generateCacheKey(){let r=this.getCacheConfig(),o=this.getContext(),s=G(this),a=await this.getValidatedData(),i=a.params,c=a.query,u=i&&Object.keys(i).length>0?"GET":"LIST",d;return r.perUser&&(d=o.var?.userId),Te({tableName:s,method:u,params:i,query:c,keyFields:r.keyFields,userId:d,prefix:r.prefix})}_cacheHit=false;async getCachedResponse(){if(!this.getCacheConfig().enabled)return this._cacheHit=false,null;let o=await this.generateCacheKey(),s=this.getContext(),a=F(s);if(!a)return this._cacheHit=false,null;let i=await a.get(o);return this._cacheHit=i!==null,i?.data??null}getCacheStatus(){return this._cacheHit?"HIT":"MISS"}successWithCache(r,o=200){return new Response(JSON.stringify({success:true,result:r}),{status:o,headers:{"Content-Type":"application/json","X-Cache":this.getCacheStatus()}})}jsonWithCache(r,o=200){return new Response(JSON.stringify(r),{status:o,headers:{"Content-Type":"application/json","X-Cache":this.getCacheStatus()}})}async setCachedResponse(r){let o=this.getCacheConfig();if(!o.enabled)return;let s=await this.generateCacheKey(),a=this.getContext(),i=F(a);if(!i)return;let c=o.tags?[...o.tags]:[],u=this._meta;u?.model?.tableName&&c.push(u.model.tableName),await i.set(s,r,{ttl:o.ttl,tags:c.length>0?c:void 0});}async invalidateCache(r){let o=this.getContext(),s=F(o);if(!s)return;let a=this.getCacheConfig();if(r?.pattern)await s.deletePattern(r.pattern);else if(r?.tags&&s.deleteByTag)for(let i of r.tags)await s.deleteByTag(i);else {let i=G(this),c=K(i,void 0,a.prefix);await s.deletePattern(c);}}}return t}function Mt(e){class t extends e{cacheInvalidation;getCacheInvalidationConfig(){return {strategy:"all",...this.cacheInvalidation}}async performCacheInvalidation(r){let o=this.getCacheInvalidationConfig(),s=this.getContext(),a=F(s);if(!a)return;let i=G(this);switch(o.strategy??"all"){case "single":if(r!==void 0){let g=K(i,{id:r});await a.deletePattern(g);}break;case "list":let u=K(i,{method:"LIST"});await a.deletePattern(u);break;case "all":let d=K(i);await a.deletePattern(d);break;case "pattern":o.pattern&&await a.deletePattern(o.pattern);break;case "tags":if(o.tags&&a.deleteByTag)for(let g of o.tags)await a.deleteByTag(g);break}if(o.relatedModels&&o.relatedModels.length>0){let u=be(i,o.relatedModels);for(let d of u)await a.deletePattern(d);}}async handle(){let r=await super.handle();if(r.status>=200&&r.status<300){let o;try{o=(await r.clone().json())?.result?.id;}catch{}let s=G(this);this.performCacheInvalidation(o).catch(a=>{b$2().error("Cache invalidation failed",{error:a instanceof Error?a.message:String(a),tableName:s,recordId:o});});}return r}}return t}function ke(e,t){return _.resolve(e,t)}function Pe(e,t){return X.resolve(e,t)}function F(e,t){return J.resolve(e,t)}function zt(e,t){return b$3.resolve(e,t)}function Ut(e,t){return b$4.resolve(e,t)}function Vt(e,t){return g.resolve(e,t)}function Xt(e,t){return a$3.resolve(e,t)}var _=b("rateLimitStorage");function tr(e){_.set(e);}function rr(){return _.get()}function Ne(){return {ip:e=>t=>q(t,e.ipHeader,e.trustProxy),user:e=>t=>{let n=ne(t);return n?`user:${n}`:q(t,e.ipHeader,e.trustProxy)},"api-key":e=>t=>{let n=we(t,e.apiKeyHeader);return n?`apikey:${n.substring(0,8)}`:q(t,e.ipHeader,e.trustProxy)},combined:e=>t=>{let n=q(t,e.ipHeader,e.trustProxy),r=ne(t);return r?`${n}:user:${r}`:n}}}function Be(e,t){if(typeof e=="function")return e;let r=Ne()[e];return r?r(t):o=>q(o,t.ipHeader,t.trustProxy)}async function $e(e,t,n,r){let o=await e.increment(t,r),s=Math.ceil((o.windowStart+r)/1e3),a=Math.max(0,n-o.count),i=o.count<=n;return {allowed:i,limit:n,remaining:a,resetAt:s,retryAfter:i?void 0:Math.ceil((o.windowStart+r-Date.now())/1e3)}}async function je(e,t,n,r){let o=Date.now(),s=await e.addTimestamp(t,r,o),a=s.timestamps.length,i=Math.max(0,n-a),c=a<=n,u=s.timestamps.length>0?Math.min(...s.timestamps):o,d=Math.ceil((u+r)/1e3),g;if(!c&&s.timestamps.length>0){let C=[...s.timestamps].sort((h,R)=>h-R),m=a-n;if(m>0&&C.length>=m){let h=C[m-1];g=Math.max(1,Math.ceil((h+r-o)/1e3));}}return {allowed:c,limit:n,remaining:i,resetAt:d,retryAfter:g}}function nr(e={}){let t=e.limit??100,n=e.windowSeconds??60,r=e.algorithm??"sliding-window",o=e.keyStrategy??"ip",s=e.keyPrefix??"rl",a=e.skipPaths??[],i=e.includeHeaders??true,c=e.errorMessage??"Too many requests",u=Be(o,e);return async(d,g)=>{let C=d.req.path;if(a.length>0&&ve(C,a))return g();let m=ke(d,e.storage);if(!m)return b$2().warn("Rate limit storage not configured. Skipping rate limiting."),g();let h=u(d);if(!h)return g();let R=t,l=n;if(e.getTier){let T=await e.getTier(d);R=T.limit,l=T.windowSeconds??n;}let P=l*1e3,w=Ie(s,C,h),f;if(r==="fixed-window"?f=await $e(m,w,R,P):f=await je(m,w,R,P),b$1(d,"rateLimit",f),b$1(d,"rateLimitKey",w),i&&(d.header("X-RateLimit-Limit",String(f.limit)),d.header("X-RateLimit-Remaining",String(f.remaining)),d.header("X-RateLimit-Reset",String(f.resetAt))),!f.allowed)throw f.retryAfter&&d.header("Retry-After",String(f.retryAfter)),e.onRateLimitExceeded&&await e.onRateLimitExceeded(d,f,w),new U(c,f.retryAfter??60);await g();}}async function or(e,t){let n=t??_.get();if(!n)throw new Error("Rate limit storage not configured");await n.reset(e);}export{Le as A,Rt as B,W as C,qt as D,Kt as E,Ht as F,Mt as G,ke as H,Pe as I,F as J,zt as K,Ut as L,Vt as M,Xt as N,V as O,Me as P,Oe as Q,ht as R,yt as S,xt as T,Ct as U,Et as V,Ye as a,ee as b,te as c,Ze as d,ye as e,xe as f,re as g,Ce as h,D as i,Ee as j,Se as k,Re as l,U as m,q as n,ne as o,we as p,st as q,ve as r,Ie as s,tr as t,rr as u,nr as v,or as w,Te as x,K as y,be as z};
1
+ import {b as b$4}from'./chunk-U4PDR4P3.js';import {a as a$3}from'./chunk-GF2EC5G4.js';import {b as b$3}from'./chunk-IDUJWS5U.js';import {a,g}from'./chunk-2M5BM4VD.js';import {a as a$1,i}from'./chunk-FC56WWPB.js';import {b,c}from'./chunk-GBQQ3YQX.js';import {b as b$2}from'./chunk-DMGP7QDL.js';import {e,a as a$2,b as b$1}from'./chunk-VJRDAVID.js';function B(e,t={}){let{ipHeader:n="X-Forwarded-For",trustProxy:r=true}=t;if(r){let s=e.req.header(n);if(s){let c=s.split(",")[0]?.trim();if(c)return c}let a=e.req.header("X-Real-IP")?.trim();if(a)return a;let i=e.req.header("CF-Connecting-IP")?.trim();if(i)return i}let o=e.req.raw;if(o&&typeof o.socket=="object"&&o.socket?.remoteAddress)return o.socket.remoteAddress;if(o?.cf?.ip)return o.cf.ip}function $(e){return a$2(e,"userId")}function z(e,t){let n=e.toLowerCase();for(let r of t){if(r instanceof RegExp){if(r.test(e))return true;continue}let o=r.toLowerCase();if(o.includes("*")){let s=o.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*");if(new RegExp(`^${s}$`).test(n))return true}else if(n===o)return true}return false}function j(e,t){if(e==null)return e;if(Array.isArray(e))return e.map(r=>j(r,t));if(typeof e!="object")return e;let n={};for(let[r,o]of Object.entries(e))z(r,t)?n[r]="[REDACTED]":typeof o=="object"&&o!==null?n[r]=j(o,t):n[r]=o;return n}function he(e,t){let n={};for(let[r,o]of Object.entries(e))n[r]=z(r,t)?"[REDACTED]":o;return n}function Ye(e,t){return z(e,t)}function ee(e,t){return j(e,t)}function te(e,t){return he(e,t)}function Ze(e,t){return a(e,t)}function ye(e,t,n){for(let r of n)if(a(e,r))return true;if(t.length===0)return false;for(let r of t)if(a(e,r))return false;return true}function xe(e,t="X-Forwarded-For",n=false){return B(e,{ipHeader:t,trustProxy:n||true})}function re(e){let t={};return e.forEach((n,r)=>{t[r.toLowerCase()]=n;}),t}function Ce(e){let t={};return new URL(e.req.url).searchParams.forEach((r,o)=>{t[o]=r;}),t}function D(e,t){if(typeof e=="string")return e.length>t?e.substring(0,t)+"... [TRUNCATED]":e;let n=JSON.stringify(e);return n.length>t?{_truncated:true,_originalSize:n.length,_maxSize:t}:e}function Ee(e,t){if(!e)return false;if(t.length===0)return true;let n=e.toLowerCase();for(let r of t)if(n.includes(r.toLowerCase()))return true;return false}function Se(e){return $(e)}function Re(){return e()}var U=class extends a$1{constructor(t="Too many requests",n=60){super(t,429,"RATE_LIMIT_EXCEEDED",{retryAfter:n}),this.name="RateLimitExceededException";}};function q(e,t="X-Forwarded-For",n=false){return B(e,{ipHeader:t,trustProxy:n})??"unknown"}function ne(e){return $(e)??null}function we(e,t="X-API-Key"){return e.req.header(t)||null}function st(e,t){return a(e,t)}function ve(e,t){return t.some(n=>a(e,n))}function Ie(e,...t){let n=t.filter(r=>r!==void 0&&r!=="");return `${e}:${n.join(":")}`}function V(e){return e instanceof Error?e:new Error(String(e))}function Me(e,t){let n=V(e),r=new Error(`${t}: ${n.message}`);return r.cause=n,r}function Oe(e){return e instanceof Error?e.message:String(e)}var X=b("loggingStorage");function ht(e){X.set(e);}function yt(){return X.get()}var De=["authorization","cookie","x-api-key","x-auth-token"],Fe=["password","token","secret","apiKey","api_key","accessToken","access_token","refreshToken","refresh_token","creditCard","credit_card","ssn","socialSecurityNumber"],_e=["/health","/healthz","/ready","/readyz","/live","/livez","/metrics","/favicon.ico"];function xt(e){return a$2(e,"requestId")}function Ct(e){return a$2(e,"requestStartTime")}function Et(e={}){let t=e.enabled??true,n=e.level??"info",r=e.includePaths??[],o=e.excludePaths??_e,s=e.redactHeaders??De,a=e.redactBodyFields??Fe,i=e.requestBody??{enabled:false},c=e.responseBody??{enabled:false},u=e.includeHeaders??true,d=e.includeQuery??true,g=e.includeClientIp??true,C=e.ipHeader??"X-Forwarded-For",m=e.trustProxy??false,h=e.minResponseTimeMs??0,R=e.generateRequestId??Re;return async(l,P)=>{if(!t)return P();let w=l.req.path;if(ye(w,r,o))return P();let f=R(),T=Date.now();b$1(l,"requestId",f),b$1(l,"requestStartTime",T),l.header("X-Request-ID",f);let Ae=l.req.method,qe=l.req.url,oe;if(u){let E=re(l.req.raw.headers);oe=te(E,s);}let se;d&&(se=Ce(l));let ae;g&&(ae=xe(l,C,m));let Ke=Se(l),Q;if(i.enabled){let E=l.req.header("content-type"),H=i.contentTypes??[];if(Ee(E,H))try{let L=await l.req.raw.clone().text();if(L)try{let x=JSON.parse(L);x=ee(x,a);let y=i.maxSize??10240;Q=D(x,y);}catch{let x=i.maxSize??10240;Q=D(L,x);}}catch{}}let S,Y;try{await P();}catch(E){throw S=E instanceof Error?E:new Error(String(E)),E}finally{let H=Date.now()-T;if(H<h)return;let b=l.res.status,L;if(u){let p=re(l.res.headers);L=te(p,s);}if(c.enabled&&!S){let p=c.statusCodes??[];if(p.length===0||p.includes(b))try{let Z=await l.res.clone().text();if(Z)try{let M=JSON.parse(Z);M=ee(M,a);let He=c.maxSize??10240;Y=D(M,He);}catch{let M=c.maxSize??10240;Y=D(Z,M);}}catch{}}let x=n;e.levelResolver?x=e.levelResolver(l,H,b,S):S||b>=500?x="error":b>=400&&(x="warn");let y={id:f,timestamp:new Date(T).toISOString(),level:x,request:{method:Ae,path:w,url:qe,headers:oe,query:se,body:Q,clientIp:ae,userId:Ke},response:{statusCode:b,headers:L,body:Y,responseTimeMs:H}};if(S&&(y.error={message:S.message,name:S.name,stack:S.stack}),e.metadata){let p=typeof e.metadata=="function"?e.metadata(l):e.metadata;y.metadata=p;}e.formatter&&(y=e.formatter(y));let ie=Pe(l,e.storage);(async()=>{if(ie)try{await ie.store(y);}catch(p){e.onError&&e.onError(p instanceof Error?p:new Error(String(p)),y);}if(e.handlers)for(let p of e.handlers)try{await p(y);}catch(v){e.onError&&e.onError(v instanceof Error?v:new Error(String(v)),y);}})().catch(p=>{let v=V(p);e.onError?e.onError(v,y):b$2().error("Failed to process log entry",{error:v.message});});}}}function Te(e){let{tableName:t,method:n,params:r,query:o,keyFields:s,userId:a,prefix:i}=e,c=[];if(i&&c.push(i),c.push(t),c.push(n),r&&Object.keys(r).length>0){let u=Object.keys(r).sort().map(d=>`${d}=${r[d]}`).join("&");c.push(u);}if(o&&Object.keys(o).length>0){let u=Object.keys(o).filter(d=>o[d]!==void 0&&o[d]!==null&&o[d]!=="");if(s&&s.length>0&&(u=u.filter(d=>s.includes(d))),u.length>0){let d=u.sort().map(g=>`${g}=${String(o[g])}`).join("&");c.push(d);}}return a&&c.push(`user=${a}`),c.join(":")}function K(e,t,n){let r=[];if(n&&r.push(n),r.push(e),!t)return r.push("*"),r.join(":");let{method:o,id:s,userId:a}=t;return o?(r.push(o),r.join(":")+"*"):(s!==void 0?(r.push("*"),r.push(`id=${s}*`)):a?(r.push("*"),r.push(`user=${a}`)):r.push("*"),r.join(":"))}function be(e,t,n){return t.map(r=>K(r,void 0,n))}function Le(e,t){let n=t.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*");return new RegExp(`^${n}$`).test(e)}function Rt(e){let t=e.split(":"),n=t.length>2&&!["GET","LIST"].includes(t[1]),r=0,o=n?t[r++]:void 0,s=t[r++],a=t[r++],i={tableName:s,method:a};o&&(i.prefix=o);for(let c=r;c<t.length;c++){let u=t[c];if(u.startsWith("user="))i.userId=u.substring(5);else if(u.includes("=")){let d=u.split("&"),g={};for(let C of d){let[m,h]=C.split("=");m&&h!==void 0&&(g[m]=h);}a==="GET"&&!i.params?i.params=g:a==="LIST"&&!i.query||i.params?i.query=g:i.params=g;}}return i}var W=class{storage=new Map;tagIndex=new Map;stats={hits:0,misses:0,size:0};defaultTtl;maxEntries;constructor(t){this.defaultTtl=t?.defaultTtl??300,this.maxEntries=t?.maxEntries??1e4;}async get(t){let n=this.storage.get(t);return n?n.expiresAt&&n.expiresAt<Date.now()?(await this.delete(t),this.stats.misses++,null):(this.stats.hits++,n):(this.stats.misses++,null)}async set(t,n,r){let o=r?.ttl??this.defaultTtl,s=r?.tags;this.maxEntries>0&&this.storage.size>=this.maxEntries&&!this.storage.has(t)&&this.evictOldest();let a=Date.now(),i={data:n,createdAt:a,expiresAt:o>0?a+o*1e3:null,tags:s},c=this.storage.get(t);if(c?.tags)for(let u of c.tags)this.tagIndex.get(u)?.delete(t);if(c&&this.storage.delete(t),this.storage.set(t,i),this.stats.size=this.storage.size,s)for(let u of s)this.tagIndex.has(u)||this.tagIndex.set(u,new Set),this.tagIndex.get(u).add(t);}async delete(t){let n=this.storage.get(t);if(!n)return false;if(n.tags)for(let r of n.tags)this.tagIndex.get(r)?.delete(t);return this.storage.delete(t),this.stats.size=this.storage.size,true}async deletePattern(t){let n=0,r=[];for(let o of this.storage.keys())Le(o,t)&&r.push(o);for(let o of r)await this.delete(o)&&n++;return n}async deleteByTag(t){let n=this.tagIndex.get(t);if(!n||n.size===0)return 0;let r=0,o=Array.from(n);for(let s of o)await this.delete(s)&&r++;return this.tagIndex.delete(t),r}async has(t){let n=this.storage.get(t);return n?n.expiresAt&&n.expiresAt<Date.now()?(await this.delete(t),false):true:false}async clear(){this.storage.clear(),this.tagIndex.clear(),this.stats.size=0;}getStats(){return {...this.stats}}resetStats(){this.stats.hits=0,this.stats.misses=0;}getKeys(){return Array.from(this.storage.keys())}getTags(){return Array.from(this.tagIndex.keys())}evictOldest(){let t=this.storage.keys().next().value;t!==void 0&&this.delete(t).catch(()=>{});}async cleanup(){let t=Date.now(),n=0,r=[];for(let[o,s]of this.storage.entries())s.expiresAt&&s.expiresAt<t&&r.push(o);for(let o of r)await this.delete(o),n++;return n}};function G(e){let n=e._meta?.model?.tableName;if(!n)throw new i("Cache mixin requires `_meta.model.tableName`. Declare `_meta` on the endpoint or remove the cache mixin.");return n}var J=c("cacheStorage",()=>new W);function qt(e){J.set(e);}function Kt(){return J.getRequired()}function Ht(e){class t extends e{cacheConfig;getCacheConfig(){return {enabled:true,ttl:300,perUser:false,...this.cacheConfig}}async generateCacheKey(){let r=this.getCacheConfig(),o=this.getContext(),s=G(this),a=await this.getValidatedData(),i=a.params,c=a.query,u=i&&Object.keys(i).length>0?"GET":"LIST",d;return r.perUser&&(d=o.var?.userId),Te({tableName:s,method:u,params:i,query:c,keyFields:r.keyFields,userId:d,prefix:r.prefix})}_cacheHit=false;async getCachedResponse(){if(!this.getCacheConfig().enabled)return this._cacheHit=false,null;let o=await this.generateCacheKey(),s=this.getContext(),a=F(s);if(!a)return this._cacheHit=false,null;let i=await a.get(o);return this._cacheHit=i!==null,i?.data??null}getCacheStatus(){return this._cacheHit?"HIT":"MISS"}successWithCache(r,o=200){return new Response(JSON.stringify({success:true,result:r}),{status:o,headers:{"Content-Type":"application/json","X-Cache":this.getCacheStatus()}})}jsonWithCache(r,o=200){return new Response(JSON.stringify(r),{status:o,headers:{"Content-Type":"application/json","X-Cache":this.getCacheStatus()}})}async setCachedResponse(r){let o=this.getCacheConfig();if(!o.enabled)return;let s=await this.generateCacheKey(),a=this.getContext(),i=F(a);if(!i)return;let c=o.tags?[...o.tags]:[],u=this._meta;u?.model?.tableName&&c.push(u.model.tableName),await i.set(s,r,{ttl:o.ttl,tags:c.length>0?c:void 0});}async invalidateCache(r){let o=this.getContext(),s=F(o);if(!s)return;let a=this.getCacheConfig();if(r?.pattern)await s.deletePattern(r.pattern);else if(r?.tags&&s.deleteByTag)for(let i of r.tags)await s.deleteByTag(i);else {let i=G(this),c=K(i,void 0,a.prefix);await s.deletePattern(c);}}}return t}function Mt(e){class t extends e{cacheInvalidation;getCacheInvalidationConfig(){return {strategy:"all",...this.cacheInvalidation}}async performCacheInvalidation(r){let o=this.getCacheInvalidationConfig(),s=this.getContext(),a=F(s);if(!a)return;let i=G(this);switch(o.strategy??"all"){case "single":if(r!==void 0){let g=K(i,{id:r});await a.deletePattern(g);}break;case "list":let u=K(i,{method:"LIST"});await a.deletePattern(u);break;case "all":let d=K(i);await a.deletePattern(d);break;case "pattern":o.pattern&&await a.deletePattern(o.pattern);break;case "tags":if(o.tags&&a.deleteByTag)for(let g of o.tags)await a.deleteByTag(g);break}if(o.relatedModels&&o.relatedModels.length>0){let u=be(i,o.relatedModels);for(let d of u)await a.deletePattern(d);}}async handle(){let r=await super.handle();if(r.status>=200&&r.status<300){let o;try{o=(await r.clone().json())?.result?.id;}catch{}let s=G(this);this.performCacheInvalidation(o).catch(a=>{b$2().error("Cache invalidation failed",{error:a instanceof Error?a.message:String(a),tableName:s,recordId:o});});}return r}}return t}function ke(e,t){return _.resolve(e,t)}function Pe(e,t){return X.resolve(e,t)}function F(e,t){return J.resolve(e,t)}function zt(e,t){return b$3.resolve(e,t)}function Ut(e,t){return b$4.resolve(e,t)}function Vt(e,t){return g.resolve(e,t)}function Xt(e,t){return a$3.resolve(e,t)}var _=b("rateLimitStorage");function tr(e){_.set(e);}function rr(){return _.get()}function Ne(){return {ip:e=>t=>q(t,e.ipHeader,e.trustProxy),user:e=>t=>{let n=ne(t);return n?`user:${n}`:q(t,e.ipHeader,e.trustProxy)},"api-key":e=>t=>{let n=we(t,e.apiKeyHeader);return n?`apikey:${n.substring(0,8)}`:q(t,e.ipHeader,e.trustProxy)},combined:e=>t=>{let n=q(t,e.ipHeader,e.trustProxy),r=ne(t);return r?`${n}:user:${r}`:n}}}function Be(e,t){if(typeof e=="function")return e;let r=Ne()[e];return r?r(t):o=>q(o,t.ipHeader,t.trustProxy)}async function $e(e,t,n,r){let o=await e.increment(t,r),s=Math.ceil((o.windowStart+r)/1e3),a=Math.max(0,n-o.count),i=o.count<=n;return {allowed:i,limit:n,remaining:a,resetAt:s,retryAfter:i?void 0:Math.ceil((o.windowStart+r-Date.now())/1e3)}}async function je(e,t,n,r){let o=Date.now(),s=await e.addTimestamp(t,r,o),a=s.timestamps.length,i=Math.max(0,n-a),c=a<=n,u=s.timestamps.length>0?Math.min(...s.timestamps):o,d=Math.ceil((u+r)/1e3),g;if(!c&&s.timestamps.length>0){let C=[...s.timestamps].sort((h,R)=>h-R),m=a-n;if(m>0&&C.length>=m){let h=C[m-1];g=Math.max(1,Math.ceil((h+r-o)/1e3));}}return {allowed:c,limit:n,remaining:i,resetAt:d,retryAfter:g}}function nr(e={}){let t=e.limit??100,n=e.windowSeconds??60,r=e.algorithm??"sliding-window",o=e.keyStrategy??"ip",s=e.keyPrefix??"rl",a=e.skipPaths??[],i=e.includeHeaders??true,c=e.errorMessage??"Too many requests",u=Be(o,e);return async(d,g)=>{let C=d.req.path;if(a.length>0&&ve(C,a))return g();let m=ke(d,e.storage);if(!m)return b$2().warn("Rate limit storage not configured. Skipping rate limiting."),g();let h=u(d);if(!h)return g();let R=t,l=n;if(e.getTier){let T=await e.getTier(d);R=T.limit,l=T.windowSeconds??n;}let P=l*1e3,w=Ie(s,C,h),f;if(r==="fixed-window"?f=await $e(m,w,R,P):f=await je(m,w,R,P),b$1(d,"rateLimit",f),b$1(d,"rateLimitKey",w),i&&(d.header("X-RateLimit-Limit",String(f.limit)),d.header("X-RateLimit-Remaining",String(f.remaining)),d.header("X-RateLimit-Reset",String(f.resetAt))),!f.allowed)throw f.retryAfter&&d.header("Retry-After",String(f.retryAfter)),e.onRateLimitExceeded&&await e.onRateLimitExceeded(d,f,w),new U(c,f.retryAfter??60);await g();}}async function or(e,t){let n=t??_.get();if(!n)throw new Error("Rate limit storage not configured");await n.reset(e);}export{Le as A,Rt as B,W as C,qt as D,Kt as E,Ht as F,Mt as G,ke as H,Pe as I,F as J,zt as K,Ut as L,Vt as M,Xt as N,V as O,Me as P,Oe as Q,ht as R,yt as S,xt as T,Ct as U,Et as V,Ye as a,ee as b,te as c,Ze as d,ye as e,xe as f,re as g,Ce as h,D as i,Ee as j,Se as k,Re as l,U as m,q as n,ne as o,we as p,st as q,ve as r,Ie as s,tr as t,rr as u,nr as v,or as w,Te as x,K as y,be as z};