hono-crud 0.7.0 → 0.9.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.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,18 @@ 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
9
+ ## [0.8.0] — 2026-05-03
10
+
11
+ ### Added
12
+ - `middlewares?: MiddlewareHandler[]` slot on every per-endpoint config in `EndpointsConfig<M>` (`create`, `list`, `read`, `update`, `delete`, `search`, `aggregate`, `restore`, `batchCreate`, `batchUpdate`, `batchDelete`, `batchRestore`, `batchUpsert`, `export`, `import`, `upsert`, `clone`). Middleware listed here runs before the endpoint handler. The existing `RegisterCrudOptions.endpointMiddlewares` continues to work and overrides config-API middlewares for the same verb. Coverage: `tests/per-endpoint-middlewares.test.ts`.
13
+
14
+ ### Fixed
15
+ - `HonoOpenAPIHandler.registerRoute` was passing the OpenAPI-style path (`/widgets/{id}`) to `app.use(...)` for per-route middleware. Hono's `use` expects the route-syntax form (`/widgets/:id`), so middleware on dynamic-segment routes (e.g., `delete`, `read`, `update`, `restore`, `clone`) silently never fired. The fix passes the raw path to `app.use(...)` and keeps the OpenAPI conversion only for `createRoute({ path })`. This unblocks both the new config-API `middlewares` slot and the existing `RegisterCrudOptions.endpointMiddlewares` option on `:id` routes.
16
+
17
+ ### Compatibility
18
+ - Additive. Existing consumers see no behaviour change other than the bugfix above (middleware that previously was silently dropped on `:id` routes will now run as documented).
19
+
8
20
  %b
9
21
  %b
10
22
  %b
@@ -63,3 +75,5 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
63
75
  [0.5.3]: https://github.com/kshdotdev/hono-crud/compare/v0.5.2...v0.5.3
64
76
  [0.6.0]: https://github.com/kshdotdev/hono-crud/compare/v0.5.3...v0.6.0
65
77
  [0.7.0]: https://github.com/kshdotdev/hono-crud/compare/v0.6.0...v0.7.0
78
+ [0.8.0]: https://github.com/kshdotdev/hono-crud/compare/v0.7.0...v0.8.0
79
+ [0.9.0]: https://github.com/kshdotdev/hono-crud/compare/v0.7.0...v0.9.0
@@ -3,7 +3,7 @@ import { M as MetaInput, I as IncludeOptions, l as FilterCondition, f as Relatio
3
3
  import { Env } from 'hono';
4
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';
5
5
  import { z } from 'zod';
6
- import { A as AdapterBundle } from '../../index-EYmyKrzX.js';
6
+ import { A as AdapterBundle } from '../../index-aGdjAC27.js';
7
7
  import '../../types-B5wq2iKZ.js';
8
8
  import '../../types-BAcN7U0B.js';
9
9
  import '@hono/zod-openapi';
@@ -1,7 +1,7 @@
1
1
  import { Env } from 'hono';
2
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
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-EYmyKrzX.js';
4
+ import { A as AdapterBundle } from '../../index-aGdjAC27.js';
5
5
  import 'zod';
6
6
  import '../../route-AzM3iPZP.js';
7
7
  import 'hono/utils/http-status';
@@ -249,6 +249,8 @@ interface CreateHooks<M extends MetaInput> extends HookConfig {
249
249
  */
250
250
  interface CreateEndpointConfig<M extends MetaInput> {
251
251
  openapi?: OpenAPIConfig;
252
+ /** Middleware applied to this endpoint route. Runs before the handler. */
253
+ middlewares?: MiddlewareHandler[];
252
254
  hooks?: CreateHooks<M>;
253
255
  nestedCreate?: string[];
254
256
  /**
@@ -320,6 +322,8 @@ interface ListHooks<M extends MetaInput> {
320
322
  */
321
323
  interface ListEndpointConfig<M extends MetaInput> {
322
324
  openapi?: OpenAPIConfig;
325
+ /** Middleware applied to this endpoint route. Runs before the handler. */
326
+ middlewares?: MiddlewareHandler[];
323
327
  filtering?: FilteringConfig;
324
328
  search?: SearchConfig;
325
329
  sorting?: SortingConfig;
@@ -340,6 +344,8 @@ interface ReadHooks<M extends MetaInput> {
340
344
  */
341
345
  interface ReadEndpointConfig<M extends MetaInput> {
342
346
  openapi?: OpenAPIConfig;
347
+ /** Middleware applied to this endpoint route. Runs before the handler. */
348
+ middlewares?: MiddlewareHandler[];
343
349
  lookupField?: string;
344
350
  additionalFilters?: string[];
345
351
  includes?: string[];
@@ -366,6 +372,8 @@ interface UpdateHooks<M extends MetaInput> extends HookConfig {
366
372
  */
367
373
  interface UpdateEndpointConfig<M extends MetaInput> {
368
374
  openapi?: OpenAPIConfig;
375
+ /** Middleware applied to this endpoint route. Runs before the handler. */
376
+ middlewares?: MiddlewareHandler[];
369
377
  lookupField?: string;
370
378
  additionalFilters?: string[];
371
379
  fields?: UpdateFieldConfig;
@@ -394,6 +402,8 @@ interface DeleteHooks<M extends MetaInput> extends HookConfig {
394
402
  */
395
403
  interface DeleteEndpointConfig<M extends MetaInput> {
396
404
  openapi?: OpenAPIConfig;
405
+ /** Middleware applied to this endpoint route. Runs before the handler. */
406
+ middlewares?: MiddlewareHandler[];
397
407
  lookupField?: string;
398
408
  additionalFilters?: string[];
399
409
  includeCascadeResults?: boolean;
@@ -417,6 +427,8 @@ interface SearchHooks<M extends MetaInput> {
417
427
  */
418
428
  interface SearchEndpointConfig<M extends MetaInput> {
419
429
  openapi?: OpenAPIConfig;
430
+ /** Middleware applied to this endpoint route. Runs before the handler. */
431
+ middlewares?: MiddlewareHandler[];
420
432
  /** Fields included in the search index (maps to SearchEndpoint.searchFields). */
421
433
  fields?: string[];
422
434
  /** Reserved — currently unused; SearchEndpoint reads `q` by default. */
@@ -436,6 +448,8 @@ interface AggregateHooks {
436
448
  */
437
449
  interface AggregateEndpointConfig<_M extends MetaInput> {
438
450
  openapi?: OpenAPIConfig;
451
+ /** Middleware applied to this endpoint route. Runs before the handler. */
452
+ middlewares?: MiddlewareHandler[];
439
453
  /** Fields the client may filter aggregations by (maps to AggregateEndpoint.filterFields). */
440
454
  fields?: string[];
441
455
  hooks?: AggregateHooks;
@@ -452,6 +466,8 @@ interface RestoreHooks<M extends MetaInput> extends HookConfig {
452
466
  */
453
467
  interface RestoreEndpointConfig<M extends MetaInput> {
454
468
  openapi?: OpenAPIConfig;
469
+ /** Middleware applied to this endpoint route. Runs before the handler. */
470
+ middlewares?: MiddlewareHandler[];
455
471
  hooks?: RestoreHooks<M>;
456
472
  }
457
473
  /**
@@ -466,6 +482,8 @@ interface BatchCreateHooks<M extends MetaInput> extends HookConfig {
466
482
  */
467
483
  interface BatchCreateEndpointConfig<M extends MetaInput> {
468
484
  openapi?: OpenAPIConfig;
485
+ /** Middleware applied to this endpoint route. Runs before the handler. */
486
+ middlewares?: MiddlewareHandler[];
469
487
  hooks?: BatchCreateHooks<M>;
470
488
  bodySchema?: ZodObject<ZodRawShape>;
471
489
  maxBatchSize?: number;
@@ -482,6 +500,8 @@ interface BatchUpdateHooks<M extends MetaInput> extends HookConfig {
482
500
  */
483
501
  interface BatchUpdateEndpointConfig<M extends MetaInput> {
484
502
  openapi?: OpenAPIConfig;
503
+ /** Middleware applied to this endpoint route. Runs before the handler. */
504
+ middlewares?: MiddlewareHandler[];
485
505
  hooks?: BatchUpdateHooks<M>;
486
506
  maxBatchSize?: number;
487
507
  }
@@ -497,6 +517,8 @@ interface BatchDeleteHooks<M extends MetaInput> extends HookConfig {
497
517
  */
498
518
  interface BatchDeleteEndpointConfig<M extends MetaInput> {
499
519
  openapi?: OpenAPIConfig;
520
+ /** Middleware applied to this endpoint route. Runs before the handler. */
521
+ middlewares?: MiddlewareHandler[];
500
522
  hooks?: BatchDeleteHooks<M>;
501
523
  maxBatchSize?: number;
502
524
  }
@@ -512,6 +534,8 @@ interface BatchRestoreHooks<M extends MetaInput> extends HookConfig {
512
534
  */
513
535
  interface BatchRestoreEndpointConfig<M extends MetaInput> {
514
536
  openapi?: OpenAPIConfig;
537
+ /** Middleware applied to this endpoint route. Runs before the handler. */
538
+ middlewares?: MiddlewareHandler[];
515
539
  hooks?: BatchRestoreHooks<M>;
516
540
  maxBatchSize?: number;
517
541
  }
@@ -527,6 +551,8 @@ interface BatchUpsertHooks<M extends MetaInput> extends HookConfig {
527
551
  */
528
552
  interface BatchUpsertEndpointConfig<M extends MetaInput> {
529
553
  openapi?: OpenAPIConfig;
554
+ /** Middleware applied to this endpoint route. Runs before the handler. */
555
+ middlewares?: MiddlewareHandler[];
530
556
  hooks?: BatchUpsertHooks<M>;
531
557
  bodySchema?: ZodObject<ZodRawShape>;
532
558
  /** Conflict-target column(s) for the upsert. String is normalized to single-element array. */
@@ -543,6 +569,8 @@ interface BatchUpsertEndpointConfig<M extends MetaInput> {
543
569
  */
544
570
  interface ExportEndpointConfig<_M extends MetaInput> {
545
571
  openapi?: OpenAPIConfig;
572
+ /** Middleware applied to this endpoint route. Runs before the handler. */
573
+ middlewares?: MiddlewareHandler[];
546
574
  formats?: ('csv' | 'json')[];
547
575
  /** Maximum rows to export (maps to ExportEndpoint.maxExportRecords). */
548
576
  maxRows?: number;
@@ -563,6 +591,8 @@ interface ImportHooks<M extends MetaInput> {
563
591
  */
564
592
  interface ImportEndpointConfig<M extends MetaInput> {
565
593
  openapi?: OpenAPIConfig;
594
+ /** Middleware applied to this endpoint route. Runs before the handler. */
595
+ middlewares?: MiddlewareHandler[];
566
596
  hooks?: ImportHooks<M>;
567
597
  /** Maximum rows accepted per request (maps to ImportEndpoint.maxBatchSize). */
568
598
  maxRows?: number;
@@ -579,6 +609,8 @@ interface UpsertHooks<M extends MetaInput> extends HookConfig {
579
609
  */
580
610
  interface UpsertEndpointConfig<M extends MetaInput> {
581
611
  openapi?: OpenAPIConfig;
612
+ /** Middleware applied to this endpoint route. Runs before the handler. */
613
+ middlewares?: MiddlewareHandler[];
582
614
  hooks?: UpsertHooks<M>;
583
615
  bodySchema?: ZodObject<ZodRawShape>;
584
616
  /** Conflict-target column(s) for the upsert. String is normalized to single-element array. */
@@ -596,6 +628,8 @@ interface CloneHooks<M extends MetaInput> {
596
628
  */
597
629
  interface CloneEndpointConfig<M extends MetaInput> {
598
630
  openapi?: OpenAPIConfig;
631
+ /** Middleware applied to this endpoint route. Runs before the handler. */
632
+ middlewares?: MiddlewareHandler[];
599
633
  hooks?: CloneHooks<M>;
600
634
  /** Field names to strip from the cloned record (maps to CloneEndpoint.excludeFromClone). */
601
635
  fieldsToReset?: string[];
package/dist/index.d.ts CHANGED
@@ -24,7 +24,7 @@ export { a as CrudEventListener, E as EventSubscription } from './types-rJSyOxkJ
24
24
  import { C as CrudEventEmitter } from './emitter-vW4MflrJ.js';
25
25
  export { g as getEventEmitter, r as resolveEventEmitter, s as setEventEmitter } from './emitter-vW4MflrJ.js';
26
26
  export { B as BulkPatchEndpoint, a as BulkPatchResult } from './bulk-patch-DG_5emFi.js';
27
- export { A as AdapterBundle, a as ConfigAggregateEndpoint, B as ConfigBatchCreateEndpoint, b as ConfigBatchDeleteEndpoint, c as ConfigBatchRestoreEndpoint, d as ConfigBatchUpdateEndpoint, e as ConfigBatchUpsertEndpoint, C as ConfigCloneEndpoint, f as ConfigCreateEndpoint, D as ConfigDeleteEndpoint, E as ConfigExportEndpoint, I as ConfigImportEndpoint, L as ConfigListEndpoint, R as ConfigReadEndpoint, g as ConfigRestoreEndpoint, S as ConfigSearchEndpoint, U as ConfigUpdateEndpoint, h as ConfigUpsertEndpoint, i as CrudEndpointName, j as CrudEndpoints, k as EndpointClass, l as EndpointMiddlewares, m as EndpointsConfig, G as GeneratedEndpoints, H as HonoOpenAPIApp, M as MemoryAdapters, n as RegisterCrudOptions, o as contentJson, p as defineEndpoints, q as errorResponse, r as registerCrud, s as successResponse } from './index-EYmyKrzX.js';
27
+ export { A as AdapterBundle, a as ConfigAggregateEndpoint, B as ConfigBatchCreateEndpoint, b as ConfigBatchDeleteEndpoint, c as ConfigBatchRestoreEndpoint, d as ConfigBatchUpdateEndpoint, e as ConfigBatchUpsertEndpoint, C as ConfigCloneEndpoint, f as ConfigCreateEndpoint, D as ConfigDeleteEndpoint, E as ConfigExportEndpoint, I as ConfigImportEndpoint, L as ConfigListEndpoint, R as ConfigReadEndpoint, g as ConfigRestoreEndpoint, S as ConfigSearchEndpoint, U as ConfigUpdateEndpoint, h as ConfigUpsertEndpoint, i as CrudEndpointName, j as CrudEndpoints, k as EndpointClass, l as EndpointMiddlewares, m as EndpointsConfig, G as GeneratedEndpoints, H as HonoOpenAPIApp, M as MemoryAdapters, n as RegisterCrudOptions, o as contentJson, p as defineEndpoints, q as errorResponse, r as registerCrud, s as successResponse } from './index-aGdjAC27.js';
28
28
  export { S as ScalarConfig, a as ScalarTheme, U as UIOptions, s as scalarUI, b as setupDocs, c as setupDocsIndex, d as setupReDoc, e as setupScalar, f as setupSwaggerUI } from './ui-CNJUoCg1.js';
29
29
  import { z } from 'zod';
30
30
  export { AuthEndpointMethods, AuthenticatedEndpoint, JWTClaimsValidationOptions, MemoryAPIKeyStorage, MemoryApprovalStorage, POLICIES_CONTEXT_KEY, allOf, allowAll, anyOf, createAPIKeyMiddleware, createAuthMiddleware, createJWTMiddleware, decodeJWT, defaultHashAPIKey, denyAll, generateAPIKey, getAPIKeyStorage, hashAPIKey, isValidAPIKeyFormat, optionalAuth, parseIso8601Duration, requireAllRoles, requireAnyPermission, requireApproval, requireAuth, requireAuthenticated, requireAuthentication, requireOwnership, requireOwnershipOrRole, requirePermissions, requirePolicy, requireRoles, setAPIKeyStorage, validateAPIKey, validateAPIKeyEntry, validateJWTClaims, verifyJWT, withAuth } from './auth/index.js';
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- export{I as DrizzleAdapters}from'./chunk-5UBOPX6O.js';import {r,s,A as A$1,z as z$1,q,p,o,n,m,l,x,y as y$1,j,i,h,k,g}from'./chunk-6P4Z6G35.js';export{a as BulkPatchEndpoint}from'./chunk-6P4Z6G35.js';export{y as PrismaAdapters}from'./chunk-DLD4TRHM.js';export{B as AggregateEndpoint,s as BatchCreateEndpoint,u as BatchDeleteEndpoint,v as BatchRestoreEndpoint,t as BatchUpdateEndpoint,w as BatchUpsertEndpoint,p as CloneEndpoint,k as CreateEndpoint,n as DeleteEndpoint,U as ExportEndpoint,V as ImportEndpoint,o as ListEndpoint,l as ReadEndpoint,q as RestoreEndpoint,K as SearchEndpoint,m as UpdateEndpoint,r as UpsertEndpoint,z as VersionCompareEndpoint,x as VersionHistoryEndpoint,y as VersionReadEndpoint,A as VersionRollbackEndpoint,i as applyFieldSelection,j as applyFieldSelectionToArray,J as buildSearchConfig,G as calculateScore,C as computeAggregations,O as createCsvStream,T as csvToJson,M as escapeCsvValue,N as generateCsv,a as generateETag,H as generateHighlights,g as getSchemaFields,R as inferCsvContentType,S as jsonToCsv,c as matchesIfMatch,b as matchesIfNoneMatch,P as parseCsv,h as parseFieldSelection,e as parseFilterValue,f as parseListFilters,I as parseSearchFields,L as searchInMemory,F as termFrequency,D as tokenize,E as tokenizeQuery,Q as validateCsvHeaders}from'./chunk-TP6RZ5RR.js';export{a as createHealthEndpoints,b as createHealthHandler}from'./chunk-XH7DEPW2.js';export{a as MemoryIdempotencyStorage}from'./chunk-FXIMMYFV.js';export{a as MemoryLoggingStorage}from'./chunk-QS6NQZH3.js';export{a as multiTenant}from'./chunk-L4X7KFWN.js';export{c as KVRateLimitStorage,a as MemoryRateLimitStorage,b as RedisRateLimitStorage}from'./chunk-EWKQ6BPV.js';import'./chunk-BJTWQHEV.js';export{a as applyProfile,b as applyProfileToArray,e as createArraySerializer,d as createSerializer,c as resolveProfile}from'./chunk-SDNXN7M5.js';export{g as createAPIKeyStorageMiddleware,e as createAuditStorageMiddleware,d as createCacheStorageMiddleware,c as createLoggingStorageMiddleware,b as createRateLimitStorageMiddleware,a as createStorageMiddleware,f as createVersioningStorageMiddleware}from'./chunk-R3WESU6C.js';export{a as scalarUI,e as setupDocs,f as setupDocsIndex,d as setupReDoc,b as setupScalar,c as setupSwaggerUI}from'./chunk-SPICOFUM.js';export{a as apiVersion,b as getApiVersion,c as getApiVersionConfig,d as versionedResponse}from'./chunk-KKLMXJY4.js';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';import {b as b$1}from'./chunk-3TIIYAKB.js';export{d as MemoryApprovalStorage,a as OpenAPIRoute,e as POLICIES_CONTEXT_KEY,m as allOf,p as allowAll,n as anyOf,o as denyAll,b as isRouteClass,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{b as KVCacheStorage,a as RedisCacheStorage}from'./chunk-H3H65KZF.js';import {T as T$1}from'./chunk-2U5ZQ7XQ.js';export{C as MemoryCacheStorage,m as RateLimitExceededException,y as createInvalidationPattern,V as createLoggingMiddleware,v as createRateLimitMiddleware,z as createRelatedPatterns,p as extractAPIKey,f as extractClientIp,g as extractHeaders,n as extractIP,k as extractLoggingUserId,h as extractQuery,o as extractUserId,x as generateCacheKey,s as generateKey,l as generateRequestId,E as getCacheStorage,Q as getErrorMessage,S as getLoggingStorage,u as getRateLimitStorage,T as getRequestId,U as getRequestStartTime,j as isAllowedContentType,d as matchLoggingPath,q as matchPath,A as matchesPattern,B as parseCacheKey,c as redactHeaders,b as redactObject,w as resetRateLimit,M as resolveAPIKeyStorage,K as resolveAuditStorage,J as resolveCacheStorage,N as resolveIdempotencyStorage,I as resolveLoggingStorage,H as resolveRateLimitStorage,L as resolveVersioningStorage,D as setCacheStorage,R as setLoggingStorage,t as setRateLimitStorage,e as shouldExcludePath,a as shouldRedact,r as shouldSkipPath,O as toError,i as truncateBody,F as withCache,G as withCacheInvalidation,P as wrapError}from'./chunk-2U5ZQ7XQ.js';export{a as MemoryVersioningStorage,e as VersionManager,f as createVersionManager,d as getVersioningStorage,c as setVersioningStorage}from'./chunk-7NM6MBRL.js';export{c as getIdempotencyStorage,d as idempotency,b as setIdempotencyStorage}from'./chunk-GF2EC5G4.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 {a,b as b$2}from'./chunk-FC56WWPB.js';export{g as AggregationException,a as ApiException,h as CacheException,i as ConfigurationException,d as ConflictException,f as ForbiddenException,b as InputValidationException,c as NotFoundException,e as UnauthorizedException}from'./chunk-FC56WWPB.js';export{e as AuditLogger,a as MemoryAuditLogStorage,f as createAuditLogger,d as getAuditStorage,c as setAuditStorage}from'./chunk-ANWSQPCQ.js';export{j as applyComputedFields,k as applyComputedFieldsToArray,f as calculateChanges,b as decodeCursor,m as defineMeta,l as defineModel,a as encodeCursor,c as extractNestedData,p as extractTenantId,e as getAuditConfig,o as getMultiTenantConfig,n as getSoftDeleteConfig,g as getVersioningConfig,d as isDirectNestedData,h as parseAggregateField,i as parseAggregateQuery,q as parseSearchMode}from'./chunk-Z575OBLV.js';export{a as StorageRegistry,b as createNullableRegistry,c as createRegistryWithDefault}from'./chunk-GBQQ3YQX.js';import'./chunk-CCGZ5UPB.js';export{f as StaticKeyProvider,e as decryptFields,b as decryptValue,d as encryptFields,a as encryptValue,c as isEncryptedValue}from'./chunk-QRXEQTNE.js';export{a as registerWebhooks}from'./chunk-7DDNX2F2.js';import {d as d$1}from'./chunk-QXFY6NYI.js';export{a as CrudEventEmitter,b as getEventEmitter,d as resolveEventEmitter,c as setEventEmitter}from'./chunk-QXFY6NYI.js';import {b as b$3}from'./chunk-DMGP7QDL.js';export{b as getLogger,a as setLogger}from'./chunk-DMGP7QDL.js';export{e as getAuthType,b as getUser,a as getUserId,d as getUserPermissions,c as getUserRoles,j as hasAllPermissions,h as hasAllRoles,i as hasAnyRole,g as hasPermission,f as hasRole}from'./chunk-MDHMZPXK.js';export{c as getContextRequestId,a as getContextVar,d as getTenantId,b as setContextVar}from'./chunk-VJRDAVID.js';import {OpenAPIHono,createRoute}from'@hono/zod-openapi';import {z,ZodError}from'zod';import {HTTPException}from'hono/http-exception';import {streamSSE}from'hono/streaming';var ae=new WeakMap;function T(t){return ae.get(t)}var y=class{app;options;routes=new Map;constructor(e,n={}){this.app=e,this.options={docs_url:"/docs",redoc_url:"/redoc",openapi_url:"/openapi.json",...n};}registerRoute(e,n,o,r=[]){let p=`${e.toUpperCase()} ${n}`,f=o,c=new f().getSchema();this.routes.set(p,{method:e,path:n,schema:c,routeClass:o});let a$1=createRoute({method:e,path:this.convertPath(n),...c,responses:c.responses||{200:{description:"Success",content:{"application/json":{schema:{type:"object"}}}}}});if(r.length>0){let i=this.convertPath(n);for(let l of r)this.app.use(i,async(s,g)=>{if(s.req.method.toLowerCase()===e)return l(s,g);await g();});}this.app.openapi(a$1,async i=>{let l=new f;l.setContext(i);try{return await l.handle()}catch(s){if(s instanceof a)return i.json(s.toJSON(),s.status);throw s}});}convertPath(e){return e.replace(/:([a-zA-Z_][a-zA-Z0-9_]*)/g,"{$1}")}setupDocs(e,n){let o=e??this.options.openapi_url??"/openapi.json";this.app.doc(o,{openapi:n.openapi||"3.1.0",info:n.info,servers:n.servers,security:n.security});}getApp(){return this.app}getRegisteredRoutes(){return this.routes}toOpenApiPath(e){return this.convertPath(e)}};function Hr(t=new OpenAPIHono,e={}){let n="openAPIRegistry"in t?t:new OpenAPIHono,o=new y(n,e),r=["get","post","put","patch","delete","options","head"],p=new Proxy(n,{get(f,m){if(r.includes(m))return (a,...i)=>{let l=i[i.length-1];if(b$1(l)){let s=i.slice(0,-1);return o.registerRoute(m,a,l,s),p}return f[m](a,...i)};if(m==="doc")return (a,i)=>{o.setupDocs(a,i);};if(m==="use")return (...a)=>(f[m](...a),p);let c=f[m];return typeof c=="function"?c.bind(f):c}});return ae.set(p,o),p}var Br=6e4,Ur={openapi:"3.1.0",info:{title:"API",version:"1.0.0"}};async function Tr(t,e,n={}){let o=T(t);if(!o)throw new Error("buildPerTenantOpenApi: app was not produced by fromHono(...). Cannot find route registry.");let r=n.config??Ur,p=`openapi:${e.tenantId??"global"}:${r.info.version}`;if(n.cache){let a=await n.cache.get(p);if(a!=null)return a}let f=new OpenAPIHono;for(let a of o.getRegisteredRoutes().values()){let i=a.routeClass,l=new i,s=Lr(e);l.setContext(s),typeof l.resolveModelSchema=="function"&&await l.resolveModelSchema();let g=l.getSchema(),M=createRoute({...g,method:a.method,path:o.toOpenApiPath(a.path),responses:g.responses??{200:{description:"Success",content:{"application/json":{schema:z.unknown()}}}}});f.openapi(M,()=>new Response);}let m={openapi:r.openapi??"3.1.0",info:r.info,servers:r.servers,security:r.security},c=n.spec==="3.0"?f.getOpenAPIDocument(m):f.getOpenAPI31Document(m);return n.cache&&await n.cache.set(p,c,n.cacheTtlMs??Br),c}function Lr(t){let e={};t.tenantId!==void 0&&(e.tenantId=t.tenantId),t.organizationId!==void 0&&(e.organizationId=t.organizationId);let n=t.request??new Request("http://localhost/");return {var:e,env:t.env,req:{raw:n,header:()=>{},query:()=>{},param:()=>{}},set(o,r){e[o]=r;},get(o){return e[o]},executionCtx:void 0}}function Dr(t){return {async get(e){let n=await t.get(e);return n?n.data:void 0},async set(e,n,o){let r=o?Math.ceil(o/1e3):void 0;await t.set(e,n,r?{ttl:r}:void 0);}}}var ie=t=>{if(t instanceof ZodError)return b$2.fromZodError(t)};function Vr(t={}){let{mappers:e=[],hooks:n=[],includeRequestId:o=true,includeStackTrace:r=false,defaultErrorCode:p="INTERNAL_ERROR",defaultErrorMessage:f="An internal error occurred",logUnmappedErrors:m=true,onHookError:c}=t,a$1=[...e,ie];return async(i,l)=>{let s,g=false;if(i instanceof a)s=i,g=true;else if(i instanceof HTTPException)s=new a(i.message,i.status,"HTTP_ERROR"),g=true;else {for(let E of a$1)try{let w=await E(i,l);if(w){s=w,g=!0;break}}catch{}g||(m&&b$3().error("Unmapped error",{error:i instanceof Error?i.message:String(i)}),s=new a(f,500,p));}for(let E of n)try{let w=E(i,l,s);w instanceof Promise&&w.catch(x=>{c&&c(x,i,l);});}catch(w){c&&c(w,i,l);}let M=s.toJSON();if(o){let E=T$1(l);E&&(M.error.requestId=E);}return r&&i.stack&&(M.error.stack=i.stack),l.json(M,s.status)}}var b=new Map,Zr=["password","token","secret","apiKey","creditCard","ssn"];function S(t,e){if(t==null||typeof t!="object")return t;if(Array.isArray(t))return t.map(o=>S(o,e));let n={};for(let[o,r]of Object.entries(t))e.includes(o)||(n[o]=typeof r=="object"&&r!==null?S(r,e):r);return n}function Wr(t){let{table:e,events:n,emitter:o,filter:r,heartbeatInterval:p=3e4,maxConnections:f=1e3,connectionTimeout:m=3e5,excludeFields:c=Zr}=t;return a=>{let i=d$1(a,o);if(!i)return a.json({success:false,error:{code:"EVENT_EMITTER_NOT_CONFIGURED",message:"Event emitter not configured"}},500);let l=b.get(e)||0;return l>=f?a.json({success:false,error:{code:"TOO_MANY_CONNECTIONS",message:"Too many SSE connections"}},503):(b.set(e,l+1),streamSSE(a,async s=>{let g,M=async u=>{if(n&&n.length>0&&!n.includes(u.type)||r&&!r(u,a))return;let le=c.length>0?S(u.data,c):u.data,pe=u.previousData&&c.length>0?S(u.previousData,c):u.previousData;try{await s.writeSSE({event:`${u.table}.${u.type}`,data:JSON.stringify({type:u.type,table:u.table,recordId:u.recordId,data:le,previousData:pe,timestamp:u.timestamp}),id:`${u.table}-${u.recordId}-${Date.now()}`});}catch{}};g=i.onTable(e,M);let E=()=>{g.unsubscribe();let u=b.get(e)||1;u<=1?b.delete(e):b.set(e,u-1);};s.onAbort(()=>{E();});let w=Date.now(),x=w;for(;!s.closed;){await s.sleep(1e3);let u=Date.now();if(u-w>=m){s.abort();break}if(u-x>=p){x=u;try{await s.writeSSE({event:"heartbeat",data:JSON.stringify({timestamp:new Date().toISOString()})});}catch{break}}}}))}}function Kr(t,e,n,o={}){let r=e.endsWith("/")?e.slice(0,-1):e,p=t,{middlewares:f=[],endpointMiddlewares:m={}}=o,c=i=>{let l=n[i],s=l&&"_middlewares"in l?l._middlewares||[]:[];return [...f,...m[i]||[],...s]},a=(i,l,s,g)=>{let M=c(s),E=p[i];M.length>0?E(l,...M,g):E(l,g);};n.create&&a("post",r,"create",n.create),n.list&&a("get",r,"list",n.list),n.batchCreate&&a("post",`${r}/batch`,"batchCreate",n.batchCreate),n.batchUpdate&&a("patch",`${r}/batch`,"batchUpdate",n.batchUpdate),n.batchDelete&&a("delete",`${r}/batch`,"batchDelete",n.batchDelete),n.batchRestore&&a("post",`${r}/batch/restore`,"batchRestore",n.batchRestore),n.batchUpsert&&a("post",`${r}/batch/upsert`,"batchUpsert",n.batchUpsert),n.search&&a("get",`${r}/search`,"search",n.search),n.aggregate&&a("get",`${r}/aggregate`,"aggregate",n.aggregate),n.export&&a("get",`${r}/export`,"export",n.export),n.import&&a("post",`${r}/import`,"import",n.import),n.upsert&&a("post",`${r}/upsert`,"upsert",n.upsert),n.read&&a("get",`${r}/:id`,"read",n.read),n.update&&a("patch",`${r}/:id`,"update",n.update),n.delete&&a("delete",`${r}/:id`,"delete",n.delete),n.restore&&a("post",`${r}/:id/restore`,"restore",n.restore),n.clone&&a("post",`${r}/:id/clone`,"clone",n.clone);}function L(t){return {content:{"application/json":{schema:t}}}}function $r(t){return {description:"Success",...L({type:"object",properties:{success:{type:"boolean",enum:[true]},result:t},required:["success","result"]})}}function Gr(t="Error"){return {description:t,...L({type:"object",properties:{success:{type:"boolean",enum:[false]},error:{type:"object",properties:{code:{type:"string"},message:{type:"string"},details:{}},required:["code","message"]}},required:["success","error"]})}}function D(t,e){return {content:{"application/json":{schema:t}},description:e}}function Jr(t,e){return {content:{"application/json":{schema:t}},description:e,required:true}}var se=z.object({code:z.string(),path:z.array(z.union([z.string(),z.number()])),message:z.string()}),I=z.object({success:z.literal(false),error:z.object({name:z.literal("ZodError"),issues:z.array(se)})});function Qr(t){return I}function Yr(...t){return I}var Xr=(t,e)=>{if(!t.success)return e.json({success:false,error:{name:"ZodError",issues:t.error.issues}},422)};function ea(t,e=422){return (n,o)=>{if(!n.success)return o.json(t(n.error),e)}}var de=z.object({success:z.literal(false),error:z.object({message:z.string(),code:z.string().optional()})});function C(t){return D(de,t)}var ta={badRequest:C("Bad request"),unauthorized:C("Unauthorized"),forbidden:C("Forbidden"),notFound:C("Resource not found"),conflict:C("Resource conflict"),validationError:D(I,"Validation error"),internalError:C("Internal server error")};function oa(t){return async(e,n)=>{t.cache&&e.set("cacheStorage",t.cache),t.rateLimit&&e.set("rateLimitStorage",t.rateLimit),t.audit&&e.set("auditStorage",t.audit),t.versioning&&e.set("versioningStorage",t.versioning),t.logging&&e.set("loggingStorage",t.logging),t.idempotency&&e.set("idempotencyStorage",t.idempotency),t.events&&e.set("eventEmitter",t.events),await n();}}function d(t,e){let n=e.middlewares??[],o=e.extras;return class extends t{static _middlewares=n;constructor(){super(),o&&Object.assign(this,o);}_meta=e.meta;schema=e.schema??{};beforeHookMode=e.beforeHookMode??"sequential";afterHookMode=e.afterHookMode??"sequential";allowNestedCreate=e.allowNestedCreate??[];lookupField=e.lookupField??"id";additionalFilters=e.additionalFilters;allowedUpdateFields=e.allowedUpdateFields;blockedUpdateFields=e.blockedUpdateFields;allowNestedWrites=e.allowNestedWrites??[];includeCascadeResults=e.includeCascadeResults??false;filterFields=e.filterFields??[];filterConfig=e.filterConfig;searchFields=e.searchFields??[];searchFieldName=e.searchFieldName??"search";sortFields=e.sortFields??[];defaultSort=e.defaultSort;defaultPerPage=e.defaultPerPage??20;maxPerPage=e.maxPerPage??100;allowedIncludes=e.allowedIncludes??[];fieldSelectionEnabled=e.fieldSelectionEnabled??false;allowedSelectFields=e.allowedSelectFields??[];blockedSelectFields=e.blockedSelectFields??[];alwaysIncludeFields=e.alwaysIncludeFields??[];defaultSelectFields=e.defaultSelectFields??[];getBodySchema(){return e.bodySchema?e.bodySchema:super.getBodySchema()}async before(...p){return e.before?e.before(...p):super.before(...p)}async after(...p){return e.after?e.after(...p):super.after(...p)}transform(p){return e.transform?e.transform(p):super.transform(p)}}}function na(t,e){return d(e,{meta:t.meta,schema:t.schema,middlewares:t.middlewares,before:t.before,after:t.after,beforeHookMode:t.beforeHookMode,afterHookMode:t.afterHookMode,allowNestedCreate:t.allowNestedCreate})}function ra(t,e){let n=t.defaultSort??(t.defaultOrderBy?{field:t.defaultOrderBy,order:t.defaultOrderDirection??"asc"}:void 0);return d(e,{meta:t.meta,schema:t.schema,middlewares:t.middlewares,after:t.after,transform:t.transform,filterFields:t.filterFields,filterConfig:t.filterConfig,searchFields:t.searchFields,searchFieldName:t.searchFieldName,sortFields:t.sortFields??t.orderByFields,defaultSort:n,defaultPerPage:t.defaultPerPage,maxPerPage:t.maxPerPage,allowedIncludes:t.allowedIncludes,fieldSelectionEnabled:t.fieldSelectionEnabled,allowedSelectFields:t.allowedSelectFields,blockedSelectFields:t.blockedSelectFields,alwaysIncludeFields:t.alwaysIncludeFields,defaultSelectFields:t.defaultSelectFields})}function aa(t,e){return d(e,{meta:t.meta,schema:t.schema,middlewares:t.middlewares,after:t.after,transform:t.transform,lookupField:t.lookupField,additionalFilters:t.additionalFilters,allowedIncludes:t.allowedIncludes,fieldSelectionEnabled:t.fieldSelectionEnabled,allowedSelectFields:t.allowedSelectFields,blockedSelectFields:t.blockedSelectFields,alwaysIncludeFields:t.alwaysIncludeFields,defaultSelectFields:t.defaultSelectFields})}function ia(t,e){return d(e,{meta:t.meta,schema:t.schema,middlewares:t.middlewares,before:t.before,after:t.after,transform:t.transform,beforeHookMode:t.beforeHookMode,afterHookMode:t.afterHookMode,lookupField:t.lookupField,additionalFilters:t.additionalFilters,allowedUpdateFields:t.allowedUpdateFields,blockedUpdateFields:t.blockedUpdateFields,allowNestedWrites:t.allowNestedWrites})}function sa(t,e){return d(e,{meta:t.meta,schema:t.schema,middlewares:t.middlewares,before:t.before,after:t.after,beforeHookMode:t.beforeHookMode,afterHookMode:t.afterHookMode,lookupField:t.lookupField,additionalFilters:t.additionalFilters,includeCascadeResults:t.includeCascadeResults})}var O=class{constructor(e){this.meta=e;}_schema={};_before;_after;_beforeHookMode="sequential";_afterHookMode="sequential";_allowNestedCreate=[];_middlewares=[];middleware(...e){return this._middlewares.push(...e),this}tags(...e){return this._schema.tags=e,this}summary(e){return this._schema.summary=e,this}description(e){return this._schema.description=e,this}before(e){return this._before=e,this}after(e){return this._after=e,this}beforeMode(e){return this._beforeHookMode=e,this}afterMode(e){return this._afterHookMode=e,this}nestedCreate(...e){return this._allowNestedCreate=e,this}build(e){return d(e,{meta:this.meta,schema:this._schema,before:this._before,after:this._after,beforeHookMode:this._beforeHookMode,afterHookMode:this._afterHookMode,allowNestedCreate:this._allowNestedCreate,middlewares:this._middlewares})}},P=class{constructor(e){this.meta=e;}_schema={};_filterFields=[];_filterConfig;_searchFields=[];_searchFieldName="search";_sortFields=[];_defaultSort;_defaultPerPage=20;_maxPerPage=100;_allowedIncludes=[];_fieldSelectionEnabled=false;_allowedSelectFields=[];_blockedSelectFields=[];_alwaysIncludeFields=[];_defaultSelectFields=[];_after;_transform;_middlewares=[];middleware(...e){return this._middlewares.push(...e),this}tags(...e){return this._schema.tags=e,this}summary(e){return this._schema.summary=e,this}description(e){return this._schema.description=e,this}filter(...e){return this._filterFields=e,this}filterWith(e){return this._filterConfig=e,this}search(...e){return this._searchFields=e,this}searchParam(e){return this._searchFieldName=e,this}sortable(...e){return this._sortFields=e,this}orderBy(...e){return this.sortable(...e)}defaultSort(e,n="asc"){return this._defaultSort={field:e,order:n},this}defaultOrder(e,n="asc"){return this.defaultSort(e,n)}pagination(e,n){return this._defaultPerPage=e,n!==void 0&&(this._maxPerPage=n),this}include(...e){return this._allowedIncludes=e,this}fieldSelection(e){return this._fieldSelectionEnabled=true,e?.allowed&&(this._allowedSelectFields=e.allowed),e?.blocked&&(this._blockedSelectFields=e.blocked),e?.alwaysInclude&&(this._alwaysIncludeFields=e.alwaysInclude),e?.defaults&&(this._defaultSelectFields=e.defaults),this}after(e){return this._after=e,this}transform(e){return this._transform=e,this}build(e){return d(e,{meta:this.meta,schema:this._schema,filterFields:this._filterFields,filterConfig:this._filterConfig,searchFields:this._searchFields,searchFieldName:this._searchFieldName,sortFields:this._sortFields,defaultSort:this._defaultSort,defaultPerPage:this._defaultPerPage,maxPerPage:this._maxPerPage,allowedIncludes:this._allowedIncludes,fieldSelectionEnabled:this._fieldSelectionEnabled,allowedSelectFields:this._allowedSelectFields,blockedSelectFields:this._blockedSelectFields,alwaysIncludeFields:this._alwaysIncludeFields,defaultSelectFields:this._defaultSelectFields,after:this._after,transform:this._transform,middlewares:this._middlewares})}},R=class{constructor(e){this.meta=e;}_schema={};_lookupField="id";_additionalFilters;_allowedIncludes=[];_fieldSelectionEnabled=false;_allowedSelectFields=[];_blockedSelectFields=[];_alwaysIncludeFields=[];_defaultSelectFields=[];_after;_transform;_middlewares=[];middleware(...e){return this._middlewares.push(...e),this}tags(...e){return this._schema.tags=e,this}summary(e){return this._schema.summary=e,this}description(e){return this._schema.description=e,this}lookupField(e){return this._lookupField=e,this}additionalFilters(...e){return this._additionalFilters=e,this}include(...e){return this._allowedIncludes=e,this}fieldSelection(e){return this._fieldSelectionEnabled=true,e?.allowed&&(this._allowedSelectFields=e.allowed),e?.blocked&&(this._blockedSelectFields=e.blocked),e?.alwaysInclude&&(this._alwaysIncludeFields=e.alwaysInclude),e?.defaults&&(this._defaultSelectFields=e.defaults),this}after(e){return this._after=e,this}transform(e){return this._transform=e,this}build(e){return d(e,{meta:this.meta,schema:this._schema,lookupField:this._lookupField,additionalFilters:this._additionalFilters,allowedIncludes:this._allowedIncludes,fieldSelectionEnabled:this._fieldSelectionEnabled,allowedSelectFields:this._allowedSelectFields,blockedSelectFields:this._blockedSelectFields,alwaysIncludeFields:this._alwaysIncludeFields,defaultSelectFields:this._defaultSelectFields,after:this._after,transform:this._transform,middlewares:this._middlewares})}},v=class{constructor(e){this.meta=e;}_schema={};_lookupField="id";_additionalFilters;_allowedUpdateFields;_blockedUpdateFields;_allowNestedWrites=[];_before;_after;_beforeHookMode="sequential";_afterHookMode="sequential";_transform;_middlewares=[];middleware(...e){return this._middlewares.push(...e),this}tags(...e){return this._schema.tags=e,this}summary(e){return this._schema.summary=e,this}description(e){return this._schema.description=e,this}lookupField(e){return this._lookupField=e,this}additionalFilters(...e){return this._additionalFilters=e,this}allowedFields(...e){return this._allowedUpdateFields=e,this}blockedFields(...e){return this._blockedUpdateFields=e,this}nestedWrites(...e){return this._allowNestedWrites=e,this}before(e){return this._before=e,this}after(e){return this._after=e,this}beforeMode(e){return this._beforeHookMode=e,this}afterMode(e){return this._afterHookMode=e,this}transform(e){return this._transform=e,this}build(e){return d(e,{meta:this.meta,schema:this._schema,lookupField:this._lookupField,additionalFilters:this._additionalFilters,allowedUpdateFields:this._allowedUpdateFields,blockedUpdateFields:this._blockedUpdateFields,allowNestedWrites:this._allowNestedWrites,before:this._before,after:this._after,beforeHookMode:this._beforeHookMode,afterHookMode:this._afterHookMode,transform:this._transform,middlewares:this._middlewares})}},A=class{constructor(e){this.meta=e;}_schema={};_lookupField="id";_additionalFilters;_includeCascadeResults=false;_before;_after;_beforeHookMode="sequential";_afterHookMode="sequential";_middlewares=[];middleware(...e){return this._middlewares.push(...e),this}tags(...e){return this._schema.tags=e,this}summary(e){return this._schema.summary=e,this}description(e){return this._schema.description=e,this}lookupField(e){return this._lookupField=e,this}additionalFilters(...e){return this._additionalFilters=e,this}includeCascade(e=true){return this._includeCascadeResults=e,this}before(e){return this._before=e,this}after(e){return this._after=e,this}beforeMode(e){return this._beforeHookMode=e,this}afterMode(e){return this._afterHookMode=e,this}build(e){return d(e,{meta:this.meta,schema:this._schema,lookupField:this._lookupField,additionalFilters:this._additionalFilters,includeCascadeResults:this._includeCascadeResults,before:this._before,after:this._after,beforeHookMode:this._beforeHookMode,afterHookMode:this._afterHookMode,middlewares:this._middlewares})}},H=class{constructor(e){this.meta=e;}create(){return new O(this.meta)}list(){return new P(this.meta)}read(){return new R(this.meta)}update(){return new v(this.meta)}delete(){return new A(this.meta)}};function da(t){return new H(t)}var la={CreateEndpoint:g,ListEndpoint:k,ReadEndpoint:h,UpdateEndpoint:i,DeleteEndpoint:j,SearchEndpoint:y$1,AggregateEndpoint:x,RestoreEndpoint:l,BatchCreateEndpoint:m,BatchUpdateEndpoint:n,BatchDeleteEndpoint:o,BatchRestoreEndpoint:p,BatchUpsertEndpoint:q,ExportEndpoint:z$1,ImportEndpoint:A$1,UpsertEndpoint:s,CloneEndpoint:r};function pa(t,e){let n={};if(t.create!==void 0){let o=t.create;n.create=d(e.CreateEndpoint,{meta:t.meta,schema:o.openapi,bodySchema:o.bodySchema,beforeHookMode:o.hooks?.beforeMode,afterHookMode:o.hooks?.afterMode,allowNestedCreate:o.nestedCreate,before:o.hooks?.before,after:o.hooks?.after});}if(t.list!==void 0){let o=t.list;n.list=d(e.ListEndpoint,{meta:t.meta,schema:o.openapi,filterFields:o.filtering?.fields,filterConfig:o.filtering?.config,searchFields:o.search?.fields,searchFieldName:o.search?.paramName,sortFields:o.sorting?.fields,defaultSort:o.sorting?.default?{field:o.sorting.default,order:o.sorting.defaultOrder??o.sorting.defaultDirection??"asc"}:void 0,defaultPerPage:o.pagination?.defaultPerPage,maxPerPage:o.pagination?.maxPerPage,allowedIncludes:o.includes,fieldSelectionEnabled:o.fieldSelection?.enabled,allowedSelectFields:o.fieldSelection?.allowed,blockedSelectFields:o.fieldSelection?.blocked,alwaysIncludeFields:o.fieldSelection?.alwaysInclude,defaultSelectFields:o.fieldSelection?.defaults,after:o.hooks?.after,transform:o.hooks?.transform});}if(t.read!==void 0){let o=t.read;n.read=d(e.ReadEndpoint,{meta:t.meta,schema:o.openapi,lookupField:o.lookupField,additionalFilters:o.additionalFilters,allowedIncludes:o.includes,fieldSelectionEnabled:o.fieldSelection?.enabled,allowedSelectFields:o.fieldSelection?.allowed,blockedSelectFields:o.fieldSelection?.blocked,alwaysIncludeFields:o.fieldSelection?.alwaysInclude,defaultSelectFields:o.fieldSelection?.defaults,after:o.hooks?.after,transform:o.hooks?.transform});}if(t.update!==void 0){let o=t.update;n.update=d(e.UpdateEndpoint,{meta:t.meta,schema:o.openapi,bodySchema:o.bodySchema,lookupField:o.lookupField,additionalFilters:o.additionalFilters,allowedUpdateFields:o.fields?.allowed,blockedUpdateFields:o.fields?.blocked,allowNestedWrites:o.nestedWrites,beforeHookMode:o.hooks?.beforeMode,afterHookMode:o.hooks?.afterMode,before:o.hooks?.before,after:o.hooks?.after,transform:o.hooks?.transform});}if(t.delete!==void 0){let o=t.delete;n.delete=d(e.DeleteEndpoint,{meta:t.meta,schema:o.openapi,lookupField:o.lookupField,additionalFilters:o.additionalFilters,includeCascadeResults:o.includeCascadeResults,beforeHookMode:o.hooks?.beforeMode,afterHookMode:o.hooks?.afterMode,before:o.hooks?.before,after:o.hooks?.after});}if(t.search!==void 0&&e.SearchEndpoint){let o=t.search;n.search=d(e.SearchEndpoint,{meta:t.meta,schema:o.openapi,after:o.hooks?.after,extras:{...o.fields!==void 0?{searchFields:o.fields}:{},...o.mode!==void 0?{defaultMode:o.mode}:{}}});}if(t.aggregate!==void 0&&e.AggregateEndpoint){let o=t.aggregate;n.aggregate=d(e.AggregateEndpoint,{meta:t.meta,schema:o.openapi,after:o.hooks?.after,extras:{...o.fields!==void 0?{filterFields:o.fields}:{}}});}if(t.restore!==void 0&&e.RestoreEndpoint){let o=t.restore;n.restore=d(e.RestoreEndpoint,{meta:t.meta,schema:o.openapi,beforeHookMode:o.hooks?.beforeMode,afterHookMode:o.hooks?.afterMode,before:o.hooks?.before,after:o.hooks?.after});}if(t.batchCreate!==void 0&&e.BatchCreateEndpoint){let o=t.batchCreate;n.batchCreate=d(e.BatchCreateEndpoint,{meta:t.meta,schema:o.openapi,bodySchema:o.bodySchema,beforeHookMode:o.hooks?.beforeMode,afterHookMode:o.hooks?.afterMode,before:o.hooks?.before,after:o.hooks?.after,extras:{...o.maxBatchSize!==void 0?{maxBatchSize:o.maxBatchSize}:{}}});}if(t.batchUpdate!==void 0&&e.BatchUpdateEndpoint){let o=t.batchUpdate;n.batchUpdate=d(e.BatchUpdateEndpoint,{meta:t.meta,schema:o.openapi,beforeHookMode:o.hooks?.beforeMode,afterHookMode:o.hooks?.afterMode,before:o.hooks?.before,after:o.hooks?.after,extras:{...o.maxBatchSize!==void 0?{maxBatchSize:o.maxBatchSize}:{}}});}if(t.batchDelete!==void 0&&e.BatchDeleteEndpoint){let o=t.batchDelete;n.batchDelete=d(e.BatchDeleteEndpoint,{meta:t.meta,schema:o.openapi,beforeHookMode:o.hooks?.beforeMode,afterHookMode:o.hooks?.afterMode,before:o.hooks?.before,after:o.hooks?.after,extras:{...o.maxBatchSize!==void 0?{maxBatchSize:o.maxBatchSize}:{}}});}if(t.batchRestore!==void 0&&e.BatchRestoreEndpoint){let o=t.batchRestore;n.batchRestore=d(e.BatchRestoreEndpoint,{meta:t.meta,schema:o.openapi,beforeHookMode:o.hooks?.beforeMode,afterHookMode:o.hooks?.afterMode,before:o.hooks?.before,after:o.hooks?.after,extras:{...o.maxBatchSize!==void 0?{maxBatchSize:o.maxBatchSize}:{}}});}if(t.batchUpsert!==void 0&&e.BatchUpsertEndpoint){let o=t.batchUpsert,r=typeof o.conflictTarget=="string"?[o.conflictTarget]:o.conflictTarget;n.batchUpsert=d(e.BatchUpsertEndpoint,{meta:t.meta,schema:o.openapi,bodySchema:o.bodySchema,beforeHookMode:o.hooks?.beforeMode,afterHookMode:o.hooks?.afterMode,before:o.hooks?.before,after:o.hooks?.after,extras:{...o.maxBatchSize!==void 0?{maxBatchSize:o.maxBatchSize}:{},...r!==void 0?{upsertKeys:r}:{}}});}if(t.export!==void 0&&e.ExportEndpoint){let o=t.export;n.export=d(e.ExportEndpoint,{meta:t.meta,schema:o.openapi,extras:{...o.maxRows!==void 0?{maxExportRecords:o.maxRows}:{},...o.formats!==void 0&&o.formats.length>0?{defaultFormat:o.formats[0]}:{}}});}if(t.import!==void 0&&e.ImportEndpoint){let o=t.import;n.import=d(e.ImportEndpoint,{meta:t.meta,schema:o.openapi,before:o.hooks?.before,after:o.hooks?.after,extras:{...o.maxRows!==void 0?{maxBatchSize:o.maxRows}:{}}});}if(t.upsert!==void 0&&e.UpsertEndpoint){let o=t.upsert,r=typeof o.conflictTarget=="string"?[o.conflictTarget]:o.conflictTarget;n.upsert=d(e.UpsertEndpoint,{meta:t.meta,schema:o.openapi,bodySchema:o.bodySchema,beforeHookMode:o.hooks?.beforeMode,afterHookMode:o.hooks?.afterMode,before:o.hooks?.before,after:o.hooks?.after,extras:{...r!==void 0?{upsertKeys:r}:{}}});}if(t.clone!==void 0&&e.CloneEndpoint){let o=t.clone;n.clone=d(e.CloneEndpoint,{meta:t.meta,schema:o.openapi,before:o.hooks?.before,after:o.hooks?.after,extras:{...o.fieldsToReset!==void 0?{excludeFromClone:o.fieldsToReset}:{}}});}return n}
1
+ export{I as DrizzleAdapters}from'./chunk-5UBOPX6O.js';import {r,s,A as A$1,z as z$1,q,p,o,n,m,l as l$1,x,y as y$1,j,i,h,k,g}from'./chunk-6P4Z6G35.js';export{a as BulkPatchEndpoint}from'./chunk-6P4Z6G35.js';export{y as PrismaAdapters}from'./chunk-DLD4TRHM.js';export{B as AggregateEndpoint,s as BatchCreateEndpoint,u as BatchDeleteEndpoint,v as BatchRestoreEndpoint,t as BatchUpdateEndpoint,w as BatchUpsertEndpoint,p as CloneEndpoint,k as CreateEndpoint,n as DeleteEndpoint,U as ExportEndpoint,V as ImportEndpoint,o as ListEndpoint,l as ReadEndpoint,q as RestoreEndpoint,K as SearchEndpoint,m as UpdateEndpoint,r as UpsertEndpoint,z as VersionCompareEndpoint,x as VersionHistoryEndpoint,y as VersionReadEndpoint,A as VersionRollbackEndpoint,i as applyFieldSelection,j as applyFieldSelectionToArray,J as buildSearchConfig,G as calculateScore,C as computeAggregations,O as createCsvStream,T as csvToJson,M as escapeCsvValue,N as generateCsv,a as generateETag,H as generateHighlights,g as getSchemaFields,R as inferCsvContentType,S as jsonToCsv,c as matchesIfMatch,b as matchesIfNoneMatch,P as parseCsv,h as parseFieldSelection,e as parseFilterValue,f as parseListFilters,I as parseSearchFields,L as searchInMemory,F as termFrequency,D as tokenize,E as tokenizeQuery,Q as validateCsvHeaders}from'./chunk-TP6RZ5RR.js';export{a as createHealthEndpoints,b as createHealthHandler}from'./chunk-XH7DEPW2.js';export{a as MemoryIdempotencyStorage}from'./chunk-FXIMMYFV.js';export{a as MemoryLoggingStorage}from'./chunk-QS6NQZH3.js';export{a as multiTenant}from'./chunk-L4X7KFWN.js';export{c as KVRateLimitStorage,a as MemoryRateLimitStorage,b as RedisRateLimitStorage}from'./chunk-EWKQ6BPV.js';import'./chunk-BJTWQHEV.js';export{a as applyProfile,b as applyProfileToArray,e as createArraySerializer,d as createSerializer,c as resolveProfile}from'./chunk-SDNXN7M5.js';export{g as createAPIKeyStorageMiddleware,e as createAuditStorageMiddleware,d as createCacheStorageMiddleware,c as createLoggingStorageMiddleware,b as createRateLimitStorageMiddleware,a as createStorageMiddleware,f as createVersioningStorageMiddleware}from'./chunk-R3WESU6C.js';export{a as scalarUI,e as setupDocs,f as setupDocsIndex,d as setupReDoc,b as setupScalar,c as setupSwaggerUI}from'./chunk-SPICOFUM.js';export{a as apiVersion,b as getApiVersion,c as getApiVersionConfig,d as versionedResponse}from'./chunk-KKLMXJY4.js';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';import {b as b$1}from'./chunk-3TIIYAKB.js';export{d as MemoryApprovalStorage,a as OpenAPIRoute,e as POLICIES_CONTEXT_KEY,m as allOf,p as allowAll,n as anyOf,o as denyAll,b as isRouteClass,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{b as KVCacheStorage,a as RedisCacheStorage}from'./chunk-H3H65KZF.js';import {T as T$1}from'./chunk-2U5ZQ7XQ.js';export{C as MemoryCacheStorage,m as RateLimitExceededException,y as createInvalidationPattern,V as createLoggingMiddleware,v as createRateLimitMiddleware,z as createRelatedPatterns,p as extractAPIKey,f as extractClientIp,g as extractHeaders,n as extractIP,k as extractLoggingUserId,h as extractQuery,o as extractUserId,x as generateCacheKey,s as generateKey,l as generateRequestId,E as getCacheStorage,Q as getErrorMessage,S as getLoggingStorage,u as getRateLimitStorage,T as getRequestId,U as getRequestStartTime,j as isAllowedContentType,d as matchLoggingPath,q as matchPath,A as matchesPattern,B as parseCacheKey,c as redactHeaders,b as redactObject,w as resetRateLimit,M as resolveAPIKeyStorage,K as resolveAuditStorage,J as resolveCacheStorage,N as resolveIdempotencyStorage,I as resolveLoggingStorage,H as resolveRateLimitStorage,L as resolveVersioningStorage,D as setCacheStorage,R as setLoggingStorage,t as setRateLimitStorage,e as shouldExcludePath,a as shouldRedact,r as shouldSkipPath,O as toError,i as truncateBody,F as withCache,G as withCacheInvalidation,P as wrapError}from'./chunk-2U5ZQ7XQ.js';export{a as MemoryVersioningStorage,e as VersionManager,f as createVersionManager,d as getVersioningStorage,c as setVersioningStorage}from'./chunk-7NM6MBRL.js';export{c as getIdempotencyStorage,d as idempotency,b as setIdempotencyStorage}from'./chunk-GF2EC5G4.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 {a,b as b$2}from'./chunk-FC56WWPB.js';export{g as AggregationException,a as ApiException,h as CacheException,i as ConfigurationException,d as ConflictException,f as ForbiddenException,b as InputValidationException,c as NotFoundException,e as UnauthorizedException}from'./chunk-FC56WWPB.js';export{e as AuditLogger,a as MemoryAuditLogStorage,f as createAuditLogger,d as getAuditStorage,c as setAuditStorage}from'./chunk-ANWSQPCQ.js';export{j as applyComputedFields,k as applyComputedFieldsToArray,f as calculateChanges,b as decodeCursor,m as defineMeta,l as defineModel,a as encodeCursor,c as extractNestedData,p as extractTenantId,e as getAuditConfig,o as getMultiTenantConfig,n as getSoftDeleteConfig,g as getVersioningConfig,d as isDirectNestedData,h as parseAggregateField,i as parseAggregateQuery,q as parseSearchMode}from'./chunk-Z575OBLV.js';export{a as StorageRegistry,b as createNullableRegistry,c as createRegistryWithDefault}from'./chunk-GBQQ3YQX.js';import'./chunk-CCGZ5UPB.js';export{f as StaticKeyProvider,e as decryptFields,b as decryptValue,d as encryptFields,a as encryptValue,c as isEncryptedValue}from'./chunk-QRXEQTNE.js';export{a as registerWebhooks}from'./chunk-7DDNX2F2.js';import {d}from'./chunk-QXFY6NYI.js';export{a as CrudEventEmitter,b as getEventEmitter,d as resolveEventEmitter,c as setEventEmitter}from'./chunk-QXFY6NYI.js';import {b as b$3}from'./chunk-DMGP7QDL.js';export{b as getLogger,a as setLogger}from'./chunk-DMGP7QDL.js';export{e as getAuthType,b as getUser,a as getUserId,d as getUserPermissions,c as getUserRoles,j as hasAllPermissions,h as hasAllRoles,i as hasAnyRole,g as hasPermission,f as hasRole}from'./chunk-MDHMZPXK.js';export{c as getContextRequestId,a as getContextVar,d as getTenantId,b as setContextVar}from'./chunk-VJRDAVID.js';import {OpenAPIHono,createRoute}from'@hono/zod-openapi';import {z,ZodError}from'zod';import {HTTPException}from'hono/http-exception';import {streamSSE}from'hono/streaming';var ae=new WeakMap;function T(o){return ae.get(o)}var y=class{app;options;routes=new Map;constructor(e,n={}){this.app=e,this.options={docs_url:"/docs",redoc_url:"/redoc",openapi_url:"/openapi.json",...n};}registerRoute(e,n,t,r=[]){let p=`${e.toUpperCase()} ${n}`,m=t,c=new m().getSchema();this.routes.set(p,{method:e,path:n,schema:c,routeClass:t});let a$1=createRoute({method:e,path:this.convertPath(n),...c,responses:c.responses||{200:{description:"Success",content:{"application/json":{schema:{type:"object"}}}}}});if(r.length>0)for(let i of r)this.app.use(n,async(d,s)=>{if(d.req.method.toLowerCase()===e)return i(d,s);await s();});this.app.openapi(a$1,async i=>{let d=new m;d.setContext(i);try{return await d.handle()}catch(s){if(s instanceof a)return i.json(s.toJSON(),s.status);throw s}});}convertPath(e){return e.replace(/:([a-zA-Z_][a-zA-Z0-9_]*)/g,"{$1}")}setupDocs(e,n){let t=e??this.options.openapi_url??"/openapi.json";this.app.doc(t,{openapi:n.openapi||"3.1.0",info:n.info,servers:n.servers,security:n.security});}getApp(){return this.app}getRegisteredRoutes(){return this.routes}toOpenApiPath(e){return this.convertPath(e)}};function Hr(o=new OpenAPIHono,e={}){let n="openAPIRegistry"in o?o:new OpenAPIHono,t=new y(n,e),r=["get","post","put","patch","delete","options","head"],p=new Proxy(n,{get(m,f){if(r.includes(f))return (a,...i)=>{let d=i[i.length-1];if(b$1(d)){let s=i.slice(0,-1);return t.registerRoute(f,a,d,s),p}return m[f](a,...i)};if(f==="doc")return (a,i)=>{t.setupDocs(a,i);};if(f==="use")return (...a)=>(m[f](...a),p);let c=m[f];return typeof c=="function"?c.bind(m):c}});return ae.set(p,t),p}var Br=6e4,Ur={openapi:"3.1.0",info:{title:"API",version:"1.0.0"}};async function Tr(o,e,n={}){let t=T(o);if(!t)throw new Error("buildPerTenantOpenApi: app was not produced by fromHono(...). Cannot find route registry.");let r=n.config??Ur,p=`openapi:${e.tenantId??"global"}:${r.info.version}`;if(n.cache){let a=await n.cache.get(p);if(a!=null)return a}let m=new OpenAPIHono;for(let a of t.getRegisteredRoutes().values()){let i=a.routeClass,d=new i,s=Lr(e);d.setContext(s),typeof d.resolveModelSchema=="function"&&await d.resolveModelSchema();let g=d.getSchema(),M=createRoute({...g,method:a.method,path:t.toOpenApiPath(a.path),responses:g.responses??{200:{description:"Success",content:{"application/json":{schema:z.unknown()}}}}});m.openapi(M,()=>new Response);}let f={openapi:r.openapi??"3.1.0",info:r.info,servers:r.servers,security:r.security},c=n.spec==="3.0"?m.getOpenAPIDocument(f):m.getOpenAPI31Document(f);return n.cache&&await n.cache.set(p,c,n.cacheTtlMs??Br),c}function Lr(o){let e={};o.tenantId!==void 0&&(e.tenantId=o.tenantId),o.organizationId!==void 0&&(e.organizationId=o.organizationId);let n=o.request??new Request("http://localhost/");return {var:e,env:o.env,req:{raw:n,header:()=>{},query:()=>{},param:()=>{}},set(t,r){e[t]=r;},get(t){return e[t]},executionCtx:void 0}}function Dr(o){return {async get(e){let n=await o.get(e);return n?n.data:void 0},async set(e,n,t){let r=t?Math.ceil(t/1e3):void 0;await o.set(e,n,r?{ttl:r}:void 0);}}}var ie=o=>{if(o instanceof ZodError)return b$2.fromZodError(o)};function Vr(o={}){let{mappers:e=[],hooks:n=[],includeRequestId:t=true,includeStackTrace:r=false,defaultErrorCode:p="INTERNAL_ERROR",defaultErrorMessage:m="An internal error occurred",logUnmappedErrors:f=true,onHookError:c}=o,a$1=[...e,ie];return async(i,d)=>{let s,g=false;if(i instanceof a)s=i,g=true;else if(i instanceof HTTPException)s=new a(i.message,i.status,"HTTP_ERROR"),g=true;else {for(let E of a$1)try{let w=await E(i,d);if(w){s=w,g=!0;break}}catch{}g||(f&&b$3().error("Unmapped error",{error:i instanceof Error?i.message:String(i)}),s=new a(m,500,p));}for(let E of n)try{let w=E(i,d,s);w instanceof Promise&&w.catch(x=>{c&&c(x,i,d);});}catch(w){c&&c(w,i,d);}let M=s.toJSON();if(t){let E=T$1(d);E&&(M.error.requestId=E);}return r&&i.stack&&(M.error.stack=i.stack),d.json(M,s.status)}}var b=new Map,Zr=["password","token","secret","apiKey","creditCard","ssn"];function S(o,e){if(o==null||typeof o!="object")return o;if(Array.isArray(o))return o.map(t=>S(t,e));let n={};for(let[t,r]of Object.entries(o))e.includes(t)||(n[t]=typeof r=="object"&&r!==null?S(r,e):r);return n}function Wr(o){let{table:e,events:n,emitter:t,filter:r,heartbeatInterval:p=3e4,maxConnections:m=1e3,connectionTimeout:f=3e5,excludeFields:c=Zr}=o;return a=>{let i=d(a,t);if(!i)return a.json({success:false,error:{code:"EVENT_EMITTER_NOT_CONFIGURED",message:"Event emitter not configured"}},500);let d$1=b.get(e)||0;return d$1>=m?a.json({success:false,error:{code:"TOO_MANY_CONNECTIONS",message:"Too many SSE connections"}},503):(b.set(e,d$1+1),streamSSE(a,async s=>{let g,M=async u=>{if(n&&n.length>0&&!n.includes(u.type)||r&&!r(u,a))return;let le=c.length>0?S(u.data,c):u.data,pe=u.previousData&&c.length>0?S(u.previousData,c):u.previousData;try{await s.writeSSE({event:`${u.table}.${u.type}`,data:JSON.stringify({type:u.type,table:u.table,recordId:u.recordId,data:le,previousData:pe,timestamp:u.timestamp}),id:`${u.table}-${u.recordId}-${Date.now()}`});}catch{}};g=i.onTable(e,M);let E=()=>{g.unsubscribe();let u=b.get(e)||1;u<=1?b.delete(e):b.set(e,u-1);};s.onAbort(()=>{E();});let w=Date.now(),x=w;for(;!s.closed;){await s.sleep(1e3);let u=Date.now();if(u-w>=f){s.abort();break}if(u-x>=p){x=u;try{await s.writeSSE({event:"heartbeat",data:JSON.stringify({timestamp:new Date().toISOString()})});}catch{break}}}}))}}function Kr(o,e,n,t={}){let r=e.endsWith("/")?e.slice(0,-1):e,p=o,{middlewares:m=[],endpointMiddlewares:f={}}=t,c=i=>{let d=n[i],s=d&&"_middlewares"in d?d._middlewares||[]:[];return [...m,...f[i]||[],...s]},a=(i,d,s,g)=>{let M=c(s),E=p[i];M.length>0?E(d,...M,g):E(d,g);};n.create&&a("post",r,"create",n.create),n.list&&a("get",r,"list",n.list),n.batchCreate&&a("post",`${r}/batch`,"batchCreate",n.batchCreate),n.batchUpdate&&a("patch",`${r}/batch`,"batchUpdate",n.batchUpdate),n.batchDelete&&a("delete",`${r}/batch`,"batchDelete",n.batchDelete),n.batchRestore&&a("post",`${r}/batch/restore`,"batchRestore",n.batchRestore),n.batchUpsert&&a("post",`${r}/batch/upsert`,"batchUpsert",n.batchUpsert),n.search&&a("get",`${r}/search`,"search",n.search),n.aggregate&&a("get",`${r}/aggregate`,"aggregate",n.aggregate),n.export&&a("get",`${r}/export`,"export",n.export),n.import&&a("post",`${r}/import`,"import",n.import),n.upsert&&a("post",`${r}/upsert`,"upsert",n.upsert),n.read&&a("get",`${r}/:id`,"read",n.read),n.update&&a("patch",`${r}/:id`,"update",n.update),n.delete&&a("delete",`${r}/:id`,"delete",n.delete),n.restore&&a("post",`${r}/:id/restore`,"restore",n.restore),n.clone&&a("post",`${r}/:id/clone`,"clone",n.clone);}function L(o){return {content:{"application/json":{schema:o}}}}function $r(o){return {description:"Success",...L({type:"object",properties:{success:{type:"boolean",enum:[true]},result:o},required:["success","result"]})}}function Gr(o="Error"){return {description:o,...L({type:"object",properties:{success:{type:"boolean",enum:[false]},error:{type:"object",properties:{code:{type:"string"},message:{type:"string"},details:{}},required:["code","message"]}},required:["success","error"]})}}function D(o,e){return {content:{"application/json":{schema:o}},description:e}}function Jr(o,e){return {content:{"application/json":{schema:o}},description:e,required:true}}var se=z.object({code:z.string(),path:z.array(z.union([z.string(),z.number()])),message:z.string()}),I=z.object({success:z.literal(false),error:z.object({name:z.literal("ZodError"),issues:z.array(se)})});function Qr(o){return I}function Yr(...o){return I}var Xr=(o,e)=>{if(!o.success)return e.json({success:false,error:{name:"ZodError",issues:o.error.issues}},422)};function ea(o,e=422){return (n,t)=>{if(!n.success)return t.json(o(n.error),e)}}var de=z.object({success:z.literal(false),error:z.object({message:z.string(),code:z.string().optional()})});function C(o){return D(de,o)}var ta={badRequest:C("Bad request"),unauthorized:C("Unauthorized"),forbidden:C("Forbidden"),notFound:C("Resource not found"),conflict:C("Resource conflict"),validationError:D(I,"Validation error"),internalError:C("Internal server error")};function oa(o){return async(e,n)=>{o.cache&&e.set("cacheStorage",o.cache),o.rateLimit&&e.set("rateLimitStorage",o.rateLimit),o.audit&&e.set("auditStorage",o.audit),o.versioning&&e.set("versioningStorage",o.versioning),o.logging&&e.set("loggingStorage",o.logging),o.idempotency&&e.set("idempotencyStorage",o.idempotency),o.events&&e.set("eventEmitter",o.events),await n();}}function l(o,e){let n=e.middlewares??[],t=e.extras;return class extends o{static _middlewares=n;constructor(){super(),t&&Object.assign(this,t);}_meta=e.meta;schema=e.schema??{};beforeHookMode=e.beforeHookMode??"sequential";afterHookMode=e.afterHookMode??"sequential";allowNestedCreate=e.allowNestedCreate??[];lookupField=e.lookupField??"id";additionalFilters=e.additionalFilters;allowedUpdateFields=e.allowedUpdateFields;blockedUpdateFields=e.blockedUpdateFields;allowNestedWrites=e.allowNestedWrites??[];includeCascadeResults=e.includeCascadeResults??false;filterFields=e.filterFields??[];filterConfig=e.filterConfig;searchFields=e.searchFields??[];searchFieldName=e.searchFieldName??"search";sortFields=e.sortFields??[];defaultSort=e.defaultSort;defaultPerPage=e.defaultPerPage??20;maxPerPage=e.maxPerPage??100;allowedIncludes=e.allowedIncludes??[];fieldSelectionEnabled=e.fieldSelectionEnabled??false;allowedSelectFields=e.allowedSelectFields??[];blockedSelectFields=e.blockedSelectFields??[];alwaysIncludeFields=e.alwaysIncludeFields??[];defaultSelectFields=e.defaultSelectFields??[];getBodySchema(){return e.bodySchema?e.bodySchema:super.getBodySchema()}async before(...p){return e.before?e.before(...p):super.before(...p)}async after(...p){return e.after?e.after(...p):super.after(...p)}transform(p){return e.transform?e.transform(p):super.transform(p)}}}function na(o,e){return l(e,{meta:o.meta,schema:o.schema,middlewares:o.middlewares,before:o.before,after:o.after,beforeHookMode:o.beforeHookMode,afterHookMode:o.afterHookMode,allowNestedCreate:o.allowNestedCreate})}function ra(o,e){let n=o.defaultSort??(o.defaultOrderBy?{field:o.defaultOrderBy,order:o.defaultOrderDirection??"asc"}:void 0);return l(e,{meta:o.meta,schema:o.schema,middlewares:o.middlewares,after:o.after,transform:o.transform,filterFields:o.filterFields,filterConfig:o.filterConfig,searchFields:o.searchFields,searchFieldName:o.searchFieldName,sortFields:o.sortFields??o.orderByFields,defaultSort:n,defaultPerPage:o.defaultPerPage,maxPerPage:o.maxPerPage,allowedIncludes:o.allowedIncludes,fieldSelectionEnabled:o.fieldSelectionEnabled,allowedSelectFields:o.allowedSelectFields,blockedSelectFields:o.blockedSelectFields,alwaysIncludeFields:o.alwaysIncludeFields,defaultSelectFields:o.defaultSelectFields})}function aa(o,e){return l(e,{meta:o.meta,schema:o.schema,middlewares:o.middlewares,after:o.after,transform:o.transform,lookupField:o.lookupField,additionalFilters:o.additionalFilters,allowedIncludes:o.allowedIncludes,fieldSelectionEnabled:o.fieldSelectionEnabled,allowedSelectFields:o.allowedSelectFields,blockedSelectFields:o.blockedSelectFields,alwaysIncludeFields:o.alwaysIncludeFields,defaultSelectFields:o.defaultSelectFields})}function ia(o,e){return l(e,{meta:o.meta,schema:o.schema,middlewares:o.middlewares,before:o.before,after:o.after,transform:o.transform,beforeHookMode:o.beforeHookMode,afterHookMode:o.afterHookMode,lookupField:o.lookupField,additionalFilters:o.additionalFilters,allowedUpdateFields:o.allowedUpdateFields,blockedUpdateFields:o.blockedUpdateFields,allowNestedWrites:o.allowNestedWrites})}function sa(o,e){return l(e,{meta:o.meta,schema:o.schema,middlewares:o.middlewares,before:o.before,after:o.after,beforeHookMode:o.beforeHookMode,afterHookMode:o.afterHookMode,lookupField:o.lookupField,additionalFilters:o.additionalFilters,includeCascadeResults:o.includeCascadeResults})}var O=class{constructor(e){this.meta=e;}_schema={};_before;_after;_beforeHookMode="sequential";_afterHookMode="sequential";_allowNestedCreate=[];_middlewares=[];middleware(...e){return this._middlewares.push(...e),this}tags(...e){return this._schema.tags=e,this}summary(e){return this._schema.summary=e,this}description(e){return this._schema.description=e,this}before(e){return this._before=e,this}after(e){return this._after=e,this}beforeMode(e){return this._beforeHookMode=e,this}afterMode(e){return this._afterHookMode=e,this}nestedCreate(...e){return this._allowNestedCreate=e,this}build(e){return l(e,{meta:this.meta,schema:this._schema,before:this._before,after:this._after,beforeHookMode:this._beforeHookMode,afterHookMode:this._afterHookMode,allowNestedCreate:this._allowNestedCreate,middlewares:this._middlewares})}},P=class{constructor(e){this.meta=e;}_schema={};_filterFields=[];_filterConfig;_searchFields=[];_searchFieldName="search";_sortFields=[];_defaultSort;_defaultPerPage=20;_maxPerPage=100;_allowedIncludes=[];_fieldSelectionEnabled=false;_allowedSelectFields=[];_blockedSelectFields=[];_alwaysIncludeFields=[];_defaultSelectFields=[];_after;_transform;_middlewares=[];middleware(...e){return this._middlewares.push(...e),this}tags(...e){return this._schema.tags=e,this}summary(e){return this._schema.summary=e,this}description(e){return this._schema.description=e,this}filter(...e){return this._filterFields=e,this}filterWith(e){return this._filterConfig=e,this}search(...e){return this._searchFields=e,this}searchParam(e){return this._searchFieldName=e,this}sortable(...e){return this._sortFields=e,this}orderBy(...e){return this.sortable(...e)}defaultSort(e,n="asc"){return this._defaultSort={field:e,order:n},this}defaultOrder(e,n="asc"){return this.defaultSort(e,n)}pagination(e,n){return this._defaultPerPage=e,n!==void 0&&(this._maxPerPage=n),this}include(...e){return this._allowedIncludes=e,this}fieldSelection(e){return this._fieldSelectionEnabled=true,e?.allowed&&(this._allowedSelectFields=e.allowed),e?.blocked&&(this._blockedSelectFields=e.blocked),e?.alwaysInclude&&(this._alwaysIncludeFields=e.alwaysInclude),e?.defaults&&(this._defaultSelectFields=e.defaults),this}after(e){return this._after=e,this}transform(e){return this._transform=e,this}build(e){return l(e,{meta:this.meta,schema:this._schema,filterFields:this._filterFields,filterConfig:this._filterConfig,searchFields:this._searchFields,searchFieldName:this._searchFieldName,sortFields:this._sortFields,defaultSort:this._defaultSort,defaultPerPage:this._defaultPerPage,maxPerPage:this._maxPerPage,allowedIncludes:this._allowedIncludes,fieldSelectionEnabled:this._fieldSelectionEnabled,allowedSelectFields:this._allowedSelectFields,blockedSelectFields:this._blockedSelectFields,alwaysIncludeFields:this._alwaysIncludeFields,defaultSelectFields:this._defaultSelectFields,after:this._after,transform:this._transform,middlewares:this._middlewares})}},R=class{constructor(e){this.meta=e;}_schema={};_lookupField="id";_additionalFilters;_allowedIncludes=[];_fieldSelectionEnabled=false;_allowedSelectFields=[];_blockedSelectFields=[];_alwaysIncludeFields=[];_defaultSelectFields=[];_after;_transform;_middlewares=[];middleware(...e){return this._middlewares.push(...e),this}tags(...e){return this._schema.tags=e,this}summary(e){return this._schema.summary=e,this}description(e){return this._schema.description=e,this}lookupField(e){return this._lookupField=e,this}additionalFilters(...e){return this._additionalFilters=e,this}include(...e){return this._allowedIncludes=e,this}fieldSelection(e){return this._fieldSelectionEnabled=true,e?.allowed&&(this._allowedSelectFields=e.allowed),e?.blocked&&(this._blockedSelectFields=e.blocked),e?.alwaysInclude&&(this._alwaysIncludeFields=e.alwaysInclude),e?.defaults&&(this._defaultSelectFields=e.defaults),this}after(e){return this._after=e,this}transform(e){return this._transform=e,this}build(e){return l(e,{meta:this.meta,schema:this._schema,lookupField:this._lookupField,additionalFilters:this._additionalFilters,allowedIncludes:this._allowedIncludes,fieldSelectionEnabled:this._fieldSelectionEnabled,allowedSelectFields:this._allowedSelectFields,blockedSelectFields:this._blockedSelectFields,alwaysIncludeFields:this._alwaysIncludeFields,defaultSelectFields:this._defaultSelectFields,after:this._after,transform:this._transform,middlewares:this._middlewares})}},v=class{constructor(e){this.meta=e;}_schema={};_lookupField="id";_additionalFilters;_allowedUpdateFields;_blockedUpdateFields;_allowNestedWrites=[];_before;_after;_beforeHookMode="sequential";_afterHookMode="sequential";_transform;_middlewares=[];middleware(...e){return this._middlewares.push(...e),this}tags(...e){return this._schema.tags=e,this}summary(e){return this._schema.summary=e,this}description(e){return this._schema.description=e,this}lookupField(e){return this._lookupField=e,this}additionalFilters(...e){return this._additionalFilters=e,this}allowedFields(...e){return this._allowedUpdateFields=e,this}blockedFields(...e){return this._blockedUpdateFields=e,this}nestedWrites(...e){return this._allowNestedWrites=e,this}before(e){return this._before=e,this}after(e){return this._after=e,this}beforeMode(e){return this._beforeHookMode=e,this}afterMode(e){return this._afterHookMode=e,this}transform(e){return this._transform=e,this}build(e){return l(e,{meta:this.meta,schema:this._schema,lookupField:this._lookupField,additionalFilters:this._additionalFilters,allowedUpdateFields:this._allowedUpdateFields,blockedUpdateFields:this._blockedUpdateFields,allowNestedWrites:this._allowNestedWrites,before:this._before,after:this._after,beforeHookMode:this._beforeHookMode,afterHookMode:this._afterHookMode,transform:this._transform,middlewares:this._middlewares})}},A=class{constructor(e){this.meta=e;}_schema={};_lookupField="id";_additionalFilters;_includeCascadeResults=false;_before;_after;_beforeHookMode="sequential";_afterHookMode="sequential";_middlewares=[];middleware(...e){return this._middlewares.push(...e),this}tags(...e){return this._schema.tags=e,this}summary(e){return this._schema.summary=e,this}description(e){return this._schema.description=e,this}lookupField(e){return this._lookupField=e,this}additionalFilters(...e){return this._additionalFilters=e,this}includeCascade(e=true){return this._includeCascadeResults=e,this}before(e){return this._before=e,this}after(e){return this._after=e,this}beforeMode(e){return this._beforeHookMode=e,this}afterMode(e){return this._afterHookMode=e,this}build(e){return l(e,{meta:this.meta,schema:this._schema,lookupField:this._lookupField,additionalFilters:this._additionalFilters,includeCascadeResults:this._includeCascadeResults,before:this._before,after:this._after,beforeHookMode:this._beforeHookMode,afterHookMode:this._afterHookMode,middlewares:this._middlewares})}},H=class{constructor(e){this.meta=e;}create(){return new O(this.meta)}list(){return new P(this.meta)}read(){return new R(this.meta)}update(){return new v(this.meta)}delete(){return new A(this.meta)}};function da(o){return new H(o)}var la={CreateEndpoint:g,ListEndpoint:k,ReadEndpoint:h,UpdateEndpoint:i,DeleteEndpoint:j,SearchEndpoint:y$1,AggregateEndpoint:x,RestoreEndpoint:l$1,BatchCreateEndpoint:m,BatchUpdateEndpoint:n,BatchDeleteEndpoint:o,BatchRestoreEndpoint:p,BatchUpsertEndpoint:q,ExportEndpoint:z$1,ImportEndpoint:A$1,UpsertEndpoint:s,CloneEndpoint:r};function pa(o,e){let n={};if(o.create!==void 0){let t=o.create;n.create=l(e.CreateEndpoint,{meta:o.meta,schema:t.openapi,middlewares:t.middlewares,bodySchema:t.bodySchema,beforeHookMode:t.hooks?.beforeMode,afterHookMode:t.hooks?.afterMode,allowNestedCreate:t.nestedCreate,before:t.hooks?.before,after:t.hooks?.after});}if(o.list!==void 0){let t=o.list;n.list=l(e.ListEndpoint,{meta:o.meta,schema:t.openapi,middlewares:t.middlewares,filterFields:t.filtering?.fields,filterConfig:t.filtering?.config,searchFields:t.search?.fields,searchFieldName:t.search?.paramName,sortFields:t.sorting?.fields,defaultSort:t.sorting?.default?{field:t.sorting.default,order:t.sorting.defaultOrder??t.sorting.defaultDirection??"asc"}:void 0,defaultPerPage:t.pagination?.defaultPerPage,maxPerPage:t.pagination?.maxPerPage,allowedIncludes:t.includes,fieldSelectionEnabled:t.fieldSelection?.enabled,allowedSelectFields:t.fieldSelection?.allowed,blockedSelectFields:t.fieldSelection?.blocked,alwaysIncludeFields:t.fieldSelection?.alwaysInclude,defaultSelectFields:t.fieldSelection?.defaults,after:t.hooks?.after,transform:t.hooks?.transform});}if(o.read!==void 0){let t=o.read;n.read=l(e.ReadEndpoint,{meta:o.meta,schema:t.openapi,middlewares:t.middlewares,lookupField:t.lookupField,additionalFilters:t.additionalFilters,allowedIncludes:t.includes,fieldSelectionEnabled:t.fieldSelection?.enabled,allowedSelectFields:t.fieldSelection?.allowed,blockedSelectFields:t.fieldSelection?.blocked,alwaysIncludeFields:t.fieldSelection?.alwaysInclude,defaultSelectFields:t.fieldSelection?.defaults,after:t.hooks?.after,transform:t.hooks?.transform});}if(o.update!==void 0){let t=o.update;n.update=l(e.UpdateEndpoint,{meta:o.meta,schema:t.openapi,middlewares:t.middlewares,bodySchema:t.bodySchema,lookupField:t.lookupField,additionalFilters:t.additionalFilters,allowedUpdateFields:t.fields?.allowed,blockedUpdateFields:t.fields?.blocked,allowNestedWrites:t.nestedWrites,beforeHookMode:t.hooks?.beforeMode,afterHookMode:t.hooks?.afterMode,before:t.hooks?.before,after:t.hooks?.after,transform:t.hooks?.transform});}if(o.delete!==void 0){let t=o.delete;n.delete=l(e.DeleteEndpoint,{meta:o.meta,schema:t.openapi,middlewares:t.middlewares,lookupField:t.lookupField,additionalFilters:t.additionalFilters,includeCascadeResults:t.includeCascadeResults,beforeHookMode:t.hooks?.beforeMode,afterHookMode:t.hooks?.afterMode,before:t.hooks?.before,after:t.hooks?.after});}if(o.search!==void 0&&e.SearchEndpoint){let t=o.search;n.search=l(e.SearchEndpoint,{meta:o.meta,schema:t.openapi,middlewares:t.middlewares,after:t.hooks?.after,extras:{...t.fields!==void 0?{searchFields:t.fields}:{},...t.mode!==void 0?{defaultMode:t.mode}:{}}});}if(o.aggregate!==void 0&&e.AggregateEndpoint){let t=o.aggregate;n.aggregate=l(e.AggregateEndpoint,{meta:o.meta,schema:t.openapi,middlewares:t.middlewares,after:t.hooks?.after,extras:{...t.fields!==void 0?{filterFields:t.fields}:{}}});}if(o.restore!==void 0&&e.RestoreEndpoint){let t=o.restore;n.restore=l(e.RestoreEndpoint,{meta:o.meta,schema:t.openapi,middlewares:t.middlewares,beforeHookMode:t.hooks?.beforeMode,afterHookMode:t.hooks?.afterMode,before:t.hooks?.before,after:t.hooks?.after});}if(o.batchCreate!==void 0&&e.BatchCreateEndpoint){let t=o.batchCreate;n.batchCreate=l(e.BatchCreateEndpoint,{meta:o.meta,schema:t.openapi,middlewares:t.middlewares,bodySchema:t.bodySchema,beforeHookMode:t.hooks?.beforeMode,afterHookMode:t.hooks?.afterMode,before:t.hooks?.before,after:t.hooks?.after,extras:{...t.maxBatchSize!==void 0?{maxBatchSize:t.maxBatchSize}:{}}});}if(o.batchUpdate!==void 0&&e.BatchUpdateEndpoint){let t=o.batchUpdate;n.batchUpdate=l(e.BatchUpdateEndpoint,{meta:o.meta,schema:t.openapi,middlewares:t.middlewares,beforeHookMode:t.hooks?.beforeMode,afterHookMode:t.hooks?.afterMode,before:t.hooks?.before,after:t.hooks?.after,extras:{...t.maxBatchSize!==void 0?{maxBatchSize:t.maxBatchSize}:{}}});}if(o.batchDelete!==void 0&&e.BatchDeleteEndpoint){let t=o.batchDelete;n.batchDelete=l(e.BatchDeleteEndpoint,{meta:o.meta,schema:t.openapi,middlewares:t.middlewares,beforeHookMode:t.hooks?.beforeMode,afterHookMode:t.hooks?.afterMode,before:t.hooks?.before,after:t.hooks?.after,extras:{...t.maxBatchSize!==void 0?{maxBatchSize:t.maxBatchSize}:{}}});}if(o.batchRestore!==void 0&&e.BatchRestoreEndpoint){let t=o.batchRestore;n.batchRestore=l(e.BatchRestoreEndpoint,{meta:o.meta,schema:t.openapi,middlewares:t.middlewares,beforeHookMode:t.hooks?.beforeMode,afterHookMode:t.hooks?.afterMode,before:t.hooks?.before,after:t.hooks?.after,extras:{...t.maxBatchSize!==void 0?{maxBatchSize:t.maxBatchSize}:{}}});}if(o.batchUpsert!==void 0&&e.BatchUpsertEndpoint){let t=o.batchUpsert,r=typeof t.conflictTarget=="string"?[t.conflictTarget]:t.conflictTarget;n.batchUpsert=l(e.BatchUpsertEndpoint,{meta:o.meta,schema:t.openapi,middlewares:t.middlewares,bodySchema:t.bodySchema,beforeHookMode:t.hooks?.beforeMode,afterHookMode:t.hooks?.afterMode,before:t.hooks?.before,after:t.hooks?.after,extras:{...t.maxBatchSize!==void 0?{maxBatchSize:t.maxBatchSize}:{},...r!==void 0?{upsertKeys:r}:{}}});}if(o.export!==void 0&&e.ExportEndpoint){let t=o.export;n.export=l(e.ExportEndpoint,{meta:o.meta,schema:t.openapi,middlewares:t.middlewares,extras:{...t.maxRows!==void 0?{maxExportRecords:t.maxRows}:{},...t.formats!==void 0&&t.formats.length>0?{defaultFormat:t.formats[0]}:{}}});}if(o.import!==void 0&&e.ImportEndpoint){let t=o.import;n.import=l(e.ImportEndpoint,{meta:o.meta,schema:t.openapi,middlewares:t.middlewares,before:t.hooks?.before,after:t.hooks?.after,extras:{...t.maxRows!==void 0?{maxBatchSize:t.maxRows}:{}}});}if(o.upsert!==void 0&&e.UpsertEndpoint){let t=o.upsert,r=typeof t.conflictTarget=="string"?[t.conflictTarget]:t.conflictTarget;n.upsert=l(e.UpsertEndpoint,{meta:o.meta,schema:t.openapi,middlewares:t.middlewares,bodySchema:t.bodySchema,beforeHookMode:t.hooks?.beforeMode,afterHookMode:t.hooks?.afterMode,before:t.hooks?.before,after:t.hooks?.after,extras:{...r!==void 0?{upsertKeys:r}:{}}});}if(o.clone!==void 0&&e.CloneEndpoint){let t=o.clone;n.clone=l(e.CloneEndpoint,{meta:o.meta,schema:t.openapi,middlewares:t.middlewares,before:t.hooks?.before,after:t.hooks?.after,extras:{...t.fieldsToReset!==void 0?{excludeFromClone:t.fieldsToReset}:{}}});}return n}
2
2
  export{O as CreateBuilder,H as CrudBuilder,A as DeleteBuilder,y as HonoOpenAPIHandler,de as HttpErrorSchema,P as ListBuilder,la as MemoryAdapters,R as ReadBuilder,v as UpdateBuilder,I as ZodErrorSchema,se as ZodIssueSchema,Tr as buildPerTenantOpenApi,ta as commonResponses,L as contentJson,na as createCreate,oa as createCrudMiddleware,sa as createDelete,Vr as createErrorHandler,Qr as createErrorSchema,ra as createList,Yr as createOneOfErrorSchema,aa as createRead,Wr as createSubscribeHandler,ia as createUpdate,ea as createValidationHook,da as crud,pa as defineEndpoints,Gr as errorResponse,Hr as fromHono,T as getHandlerForApp,C as httpErrorContent,D as jsonContent,Jr as jsonContentRequired,Xr as openApiValidationHook,Kr as registerCrud,$r as successResponse,Dr as wrapCacheStorageForOpenApi,ie as zodErrorMapper};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hono-crud",
3
- "version": "0.7.0",
3
+ "version": "0.9.0",
4
4
  "description": "CRUD generator for Hono with Zod validation and OpenAPI generation",
5
5
  "author": "Kauan Guesser <contato@kauan.net>",
6
6
  "license": "MIT",