@web-ts-toolkit/access-router 0.45.0 → 0.46.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/index.d.mts CHANGED
@@ -1,193 +1,10 @@
1
1
  import mongoose, { Schema } from 'mongoose';
2
2
  import { Response, NextFunction, RequestHandler, Router } from 'express';
3
- import { ag as GlobalOptions, Z as DefaultModelRouterOptions, aI as ModelRouterOptions, V as DataRouterOptions, a5 as ExtendedDefaultModelRouterOptions, a6 as ExtendedModelRouterOptions, a4 as ExtendedDataRouterOptions, A as AccessRouterBaseRequest, ai as GuardHook, aH as ModelRequest, T as DataRequest, cR as DataService, a7 as Filter, aS as Projection, bN as Sort, aP as Populate, cS as Service, cT as PublicService, cu as Validation, bE as RootRouterOptions } from './parsers-DppKW-Fd.mjs';
4
- export { cU as AccessRouterPermissionMap, cV as AccessRouterPermissions, c as AccessRouterRequest, d as AccessRouterRequestExtensions, l as AjvErrorObjectLike, n as AjvValidatorLike, o as ArkTypeErrorsLike, p as ArkTypeLike, ah as GlobalPermissionValue, al as IoTsContextEntryLike, am as IoTsDecodeErrorLike, an as IoTsDecoderLike, ao as JoiSchemaLike, ap as JoiValidationErrorDetailLike, av as MaybePromise, aw as ModelBaseFilterHook, ay as ModelDeleteHook, az as ModelDocPermissionsHook, aB as ModelDocumentHook, aC as ModelHook, aE as ModelIdentifierHook, aF as ModelListHook, aG as ModelOverrideFilterHook, aJ as ModelValidateHook, cW as Permissions, b8 as RequestSchemaAdapter, b9 as RequestSchemaFailure, ba as RequestSchemaIssue, bb as RequestSchemaLike, bc as RequestSchemaOptions, bd as RequestSchemaResult, be as RequestSchemaSuccess, bf as RequestSchemaValidator, bH as RouteGuardAccess, bP as StandardSchemaFailure, bQ as StandardSchemaInferOutput, bR as StandardSchemaIssue, bS as StandardSchemaPathSegment, bT as StandardSchemaResult, bU as StandardSchemaSuccess, bV as StandardSchemaV1, ca as SuperstructFailureLike, cb as SuperstructValidateLike, co as ValibotIssueLike, cp as ValibotPathItemLike, cq as ValibotSafeParseLike, cr as ValibotSafeParseResult, cw as VineValidationErrorLike, cx as VineValidationMessageLike, cy as VineValidatorLike, cz as YupSchemaLike, cA as YupValidationErrorLike, cB as defineRequestSchema, cC as fromAjv, cD as fromArkType, cE as fromIoTs, cF as fromJoi, cG as fromStandardSchema, cH as fromSuperstruct, cI as fromValibot, cJ as fromVine, cK as fromYup, cL as fromZod } from './parsers-DppKW-Fd.mjs';
3
+ import { A as AccessRouterBaseRequest, ai as GuardHook, aH as ModelRequest, cR as AccessRuntime, V as DataRouterOptions, T as DataRequest, cS as DataService, a7 as Filter, aS as Projection, bN as Sort, aP as Populate, aI as ModelRouterOptions, cT as Service, cU as PublicService, a6 as ExtendedModelRouterOptions, cu as Validation, bE as RootRouterOptions, cV as OpenApiRouterOptions, cW as OpenApiRegistryOptions, cX as OpenApiRouteDescriptor, cY as OpenApiDocumentOptions, cZ as OpenApiParameter, c_ as OpenApiSchema, c$ as OpenApiResponses, ag as GlobalOptions, Z as DefaultModelRouterOptions, a5 as ExtendedDefaultModelRouterOptions } from './parsers-BKF7VX2-.mjs';
4
+ export { d0 as AccessRouterPermissionMap, d1 as AccessRouterPermissions, c as AccessRouterRequest, d as AccessRouterRequestExtensions, l as AjvErrorObjectLike, n as AjvValidatorLike, o as ArkTypeErrorsLike, p as ArkTypeLike, ah as GlobalPermissionValue, al as IoTsContextEntryLike, am as IoTsDecodeErrorLike, an as IoTsDecoderLike, ao as JoiSchemaLike, ap as JoiValidationErrorDetailLike, av as MaybePromise, aw as ModelBaseFilterHook, ay as ModelDeleteHook, az as ModelDocPermissionsHook, aB as ModelDocumentHook, aC as ModelHook, aE as ModelIdentifierHook, aF as ModelListHook, aG as ModelOverrideFilterHook, aJ as ModelValidateHook, d2 as OpenApiMethod, d3 as Permissions, b8 as RequestSchemaAdapter, b9 as RequestSchemaFailure, ba as RequestSchemaIssue, bb as RequestSchemaLike, bc as RequestSchemaOptions, bd as RequestSchemaResult, be as RequestSchemaSuccess, bf as RequestSchemaValidator, bH as RouteGuardAccess, bP as StandardSchemaFailure, bQ as StandardSchemaInferOutput, bR as StandardSchemaIssue, bS as StandardSchemaPathSegment, bT as StandardSchemaResult, bU as StandardSchemaSuccess, bV as StandardSchemaV1, ca as SuperstructFailureLike, cb as SuperstructValidateLike, co as ValibotIssueLike, cp as ValibotPathItemLike, cq as ValibotSafeParseLike, cr as ValibotSafeParseResult, cw as VineValidationErrorLike, cx as VineValidationMessageLike, cy as VineValidatorLike, cz as YupSchemaLike, cA as YupValidationErrorLike, d4 as defaultRuntime, cB as defineRequestSchema, cC as fromAjv, cD as fromArkType, cE as fromIoTs, cF as fromJoi, cG as fromStandardSchema, cH as fromSuperstruct, cI as fromValibot, cJ as fromVine, cK as fromYup, cL as fromZod } from './parsers-BKF7VX2-.mjs';
5
5
  import JsonRouter from '@web-ts-toolkit/express-json-router';
6
6
  import 'zod';
7
7
 
8
- type OpenApiMethod = 'get' | 'post' | 'put' | 'patch' | 'delete';
9
- type OpenApiSchema = Record<string, unknown>;
10
- type OpenApiSchemaSource = unknown;
11
- type OpenApiParameter = {
12
- name: string;
13
- in: 'path' | 'query';
14
- required?: boolean;
15
- description?: string;
16
- schema?: OpenApiSchema;
17
- };
18
- type OpenApiResponse = {
19
- description: string;
20
- content?: Record<string, {
21
- schema: OpenApiSchema;
22
- }>;
23
- };
24
- type OpenApiResponses = Record<string, OpenApiResponse>;
25
- type OpenApiRouteDescriptor = {
26
- method: OpenApiMethod;
27
- path: string;
28
- operationId?: string;
29
- summary?: string;
30
- description?: string;
31
- tags?: string[];
32
- acl?: string;
33
- deprecated?: boolean;
34
- query?: OpenApiSchemaSource;
35
- body?: OpenApiSchemaSource;
36
- pathParams?: Record<string, OpenApiSchemaSource>;
37
- responses?: OpenApiResponses;
38
- /**
39
- * When true, replaces an existing registration with the same method/path
40
- * even when the descriptors differ. When false (default), conflicting
41
- * registrations throw at registration time so consumers can detect
42
- * accidental route shadowing.
43
- */
44
- allowReplace?: boolean;
45
- /**
46
- * When true, this exact descriptor is idempotent and registering the same
47
- * method/path with an equivalent descriptor again is silently accepted.
48
- * Differing re-registrations still throw unless {@link allowReplace} is set.
49
- * Additionally, an idempotent descriptor may share its operationId with
50
- * another idempotent descriptor mounted at a different path on the same
51
- * registry, so reserved operations (e.g. the root batch route) can be
52
- * exposed from multiple base paths without triggering strict-mode
53
- * duplicate-operationId rejection.
54
- */
55
- idempotent?: boolean;
56
- };
57
- type OpenApiRegistryOptions = {
58
- /**
59
- * Throw when the same method/path is registered twice with differing
60
- * descriptors, instead of silently replacing. Default: true (strict).
61
- * The {@link AccessRuntime} registry is constructed in strict mode by
62
- * default; construct {@link OpenApiRegistry} directly with
63
- * `rejectConflicts: false` for legacy replacement semantics.
64
- */
65
- rejectConflicts?: boolean;
66
- /**
67
- * Throw when the same operationId is registered more than once, including
68
- * when {@link OpenApiRouteDescriptor.allowReplace} is set. Default: true.
69
- */
70
- rejectDuplicateOperationIds?: boolean;
71
- };
72
- type OpenApiDocumentOptions = {
73
- title: string;
74
- version: string;
75
- description?: string;
76
- servers?: Array<{
77
- url: string;
78
- description?: string;
79
- }>;
80
- };
81
- type OpenApiRouterOptions = Partial<OpenApiDocumentOptions> & {
82
- jsonPath?: string;
83
- docsPath?: string | false;
84
- swaggerUiCssUrl?: string;
85
- swaggerUiBundleUrl?: string;
86
- };
87
-
88
- type ModelReferenceMap = {
89
- [key: string]: string | ModelReferenceMap;
90
- };
91
- declare class AccessRuntime {
92
- private readonly allowGlobalModelLookup;
93
- constructor(options?: {
94
- allowGlobalModelLookup?: boolean;
95
- });
96
- private readonly globalOptions;
97
- private readonly defaultModelOptions;
98
- private readonly modelOptions;
99
- private readonly modelJsonSchemas;
100
- private readonly dataOptions;
101
- private readonly modelRefs;
102
- private readonly modelSubs;
103
- private readonly modelAtts;
104
- private readonly modelInstances;
105
- private readonly openApiRegistry;
106
- registerModelInstance<TModel>(modelName: string, model: mongoose.Model<TModel>): void;
107
- hasModelInstance(modelName: string): boolean;
108
- getModelInstance<TModel = unknown>(modelName: string): mongoose.Model<TModel> | null;
109
- registerOpenApiRoute(route: OpenApiRouteDescriptor): void;
110
- /**
111
- * Enable strict OpenAPI collision detection for the remainder of this
112
- * runtime's lifetime. After this call, conflicting method/path
113
- * registrations and duplicate operationIds throw {@link OpenApiCollisionError}
114
- * instead of silently replacing. Existing already-registered routes are
115
- * not retroactively re-validated.
116
- */
117
- enableOpenApiCollisionDetection(): void;
118
- getOpenApiRoutes(): OpenApiRouteDescriptor[];
119
- clearOpenApiRoutes(): void;
120
- getOpenApiSpec(info: OpenApiDocumentOptions): {
121
- openapi: string;
122
- info: Omit<OpenApiDocumentOptions, "servers">;
123
- servers?: OpenApiDocumentOptions["servers"];
124
- paths: Record<string, Record<string, {
125
- [key: `x-${string}`]: unknown;
126
- operationId?: string;
127
- summary?: string;
128
- description?: string;
129
- tags?: string[];
130
- deprecated?: boolean;
131
- parameters?: OpenApiParameter[];
132
- requestBody?: {
133
- required?: boolean;
134
- content: Record<string, {
135
- schema: OpenApiSchema;
136
- }>;
137
- };
138
- responses: OpenApiResponses;
139
- }>>;
140
- };
141
- createBootstrapSnapshot(): {
142
- globalOptions: GlobalOptions;
143
- defaultModelOptions: DefaultModelRouterOptions;
144
- modelOptions: Record<string, ModelRouterOptions>;
145
- dataOptions: Record<string, DataRouterOptions>;
146
- modelInstances: Record<string, mongoose.Model<unknown>>;
147
- modelJsonSchemas: Record<string, Record<string, unknown>>;
148
- modelRefs: Record<string, ModelReferenceMap>;
149
- modelSubs: Record<string, string[]>;
150
- modelAtts: Record<string, string[]>;
151
- openApi: {
152
- routes: OpenApiRouteDescriptor[];
153
- options: Required<OpenApiRegistryOptions>;
154
- };
155
- };
156
- restoreBootstrapSnapshot(snapshot: ReturnType<AccessRuntime['createBootstrapSnapshot']>): void;
157
- setGlobalOptions(options: GlobalOptions): void;
158
- setGlobalOption<K extends keyof GlobalOptions>(key: K, value: GlobalOptions[K]): void;
159
- getGlobalOptions(): GlobalOptions;
160
- getGlobalOption<K extends keyof GlobalOptions>(key: K, defaultValue?: GlobalOptions[K]): GlobalOptions[K];
161
- setDefaultModelOptions(options: DefaultModelRouterOptions): void;
162
- setDefaultModelOption<K extends keyof ExtendedDefaultModelRouterOptions>(key: K, value: ExtendedDefaultModelRouterOptions[K]): void;
163
- getDefaultModelOptions(): DefaultModelRouterOptions<unknown>;
164
- getDefaultModelOption<K extends keyof ExtendedDefaultModelRouterOptions>(key: K, defaultValue?: ExtendedDefaultModelRouterOptions[K]): ExtendedDefaultModelRouterOptions<unknown>[K];
165
- private createModelOptions;
166
- private getOrCreateModelOptions;
167
- setModelOptions<TModel = unknown>(modelName: string, options: ModelRouterOptions<TModel>): void;
168
- setModelOption<K extends keyof ExtendedModelRouterOptions<TModel>, TModel = unknown>(modelName: string, key: K, value: ExtendedModelRouterOptions<TModel>[K]): void;
169
- getModelOptions<TModel = unknown>(modelName: string): ModelRouterOptions<TModel>;
170
- getModelOption<K extends keyof ExtendedModelRouterOptions<TModel>, TModel = unknown>(modelName: string, key: K | string, defaultValue?: ExtendedModelRouterOptions<TModel>[K]): ExtendedModelRouterOptions<TModel>[K];
171
- getExactModelOption<K extends keyof ExtendedModelRouterOptions<TModel>, TModel = unknown>(modelName: string, key: K | string): ExtendedModelRouterOptions<TModel>[K];
172
- getModelNames(): string[];
173
- hasModel(modelName: string): boolean;
174
- getModelJsonSchema(modelName: string): Record<string, unknown>;
175
- private createDataOptions;
176
- private getOrCreateDataOptions;
177
- setDataOptions<TData = unknown>(dataName: string, options: DataRouterOptions<TData>): void;
178
- setDataOption<K extends keyof DataRouterOptions<TData>, TData = unknown>(dataName: string, key: K, value: DataRouterOptions<TData>[K]): void;
179
- getDataOptions<TData = unknown>(dataName: string): DataRouterOptions<TData>;
180
- getDataSnapshot<TData = unknown>(dataName: string): readonly TData[];
181
- getDataOption<K extends keyof DataRouterOptions<TData>, TData = unknown>(dataName: string, key: K | string, defaultValue?: DataRouterOptions<TData>[K]): DataRouterOptions<TData>[K];
182
- getExactDataOption<K extends keyof ExtendedDataRouterOptions<TData>, TData = unknown>(dataName: string, key: K | string): ExtendedDataRouterOptions<TData>[K];
183
- getDataNames(): string[];
184
- ensureModelMeta(modelName: string): void;
185
- getModelRef(modelName: string, refPath: string): string | null;
186
- getModelSub(modelName: string): string[];
187
- getModelAtt(modelName: string): string[];
188
- }
189
- declare const defaultRuntime: AccessRuntime;
190
-
191
8
  declare function macl(): (req: AccessRouterBaseRequest, res: Response, next: NextFunction) => Promise<void>;
192
9
  interface GuardModelConditionID {
193
10
  type: 'param' | 'query';
@@ -271,6 +88,8 @@ declare class Model {
271
88
  findOne({ filter, select, sort, populate, lean }: FindOneProps): mongoose.Query<any, any>;
272
89
  exists(filter: Filter): ReturnType<typeof Model.prototype.findOne> | null;
273
90
  countDocuments(filter?: {}): mongoose.Query<number, any>;
91
+ /** Cast a copy using this model's query schema/setters, without executing query middleware or persistence. */
92
+ castFilter(filter: Record<string, unknown>): Record<string, unknown>;
274
93
  distinct(field: string, conditions?: {}): mongoose.Query<any[], any>;
275
94
  aggregate(pipeline: unknown[]): mongoose.Aggregate<any[]>;
276
95
  }
@@ -609,4 +428,4 @@ type AccessRuntimeApi = typeof macl & Wtt;
609
428
  declare function createAccessRuntime(): AccessRuntimeApi;
610
429
  declare const acl: AccessRuntimeApi;
611
430
 
612
- export { AccessRuntime, type AccessRuntimeApi, type CombinedRouteInput, DataRouter, DataRouterOptions, ExtendedDefaultModelRouterOptions, ExtendedModelRouterOptions, GlobalOptions, GuardHook, type GuardModelCondition, type GuardModelConditionID, ModelRouter, ModelRouterOptions, type OpLogContext, OpenApiCollisionError, type OpenApiDocumentOptions, type OpenApiMethod, OpenApiRegistry, type OpenApiRegistryOptions, type OpenApiRouteDescriptor, type OpenApiRouterOptions, RootRouter, RootRouterOptions, Validation, acl, combineRoutes, createAccessRuntime, createOpenApiRouter, acl as default, defaultRuntime, getDefaultModelOption, getDefaultModelOptions, getGlobalOption, getGlobalOptions, getModelInstance, getModelJsonSchema, getModelNames, getModelOption, getModelOptions, guard, hasModelInstance, isLevelEnabled, permissionsPlugin, redactFilter, redactPayload, registerModelInstance, safeStringify, setDefaultModelOption, setDefaultModelOptions, setGlobalOption, setGlobalOptions, setModelOption, setModelOptions };
431
+ export { AccessRuntime, type AccessRuntimeApi, type CombinedRouteInput, DataRouter, DataRouterOptions, ExtendedDefaultModelRouterOptions, ExtendedModelRouterOptions, GlobalOptions, GuardHook, type GuardModelCondition, type GuardModelConditionID, ModelRouter, ModelRouterOptions, type OpLogContext, OpenApiCollisionError, OpenApiDocumentOptions, OpenApiRegistry, OpenApiRegistryOptions, OpenApiRouteDescriptor, OpenApiRouterOptions, RootRouter, RootRouterOptions, Validation, acl, combineRoutes, createAccessRuntime, createOpenApiRouter, acl as default, getDefaultModelOption, getDefaultModelOptions, getGlobalOption, getGlobalOptions, getModelInstance, getModelJsonSchema, getModelNames, getModelOption, getModelOptions, guard, hasModelInstance, isLevelEnabled, permissionsPlugin, redactFilter, redactPayload, registerModelInstance, safeStringify, setDefaultModelOption, setDefaultModelOptions, setGlobalOption, setGlobalOptions, setModelOption, setModelOptions };
package/index.d.ts CHANGED
@@ -1,193 +1,10 @@
1
1
  import mongoose, { Schema } from 'mongoose';
2
2
  import { Response, NextFunction, RequestHandler, Router } from 'express';
3
- import { ag as GlobalOptions, Z as DefaultModelRouterOptions, aI as ModelRouterOptions, V as DataRouterOptions, a5 as ExtendedDefaultModelRouterOptions, a6 as ExtendedModelRouterOptions, a4 as ExtendedDataRouterOptions, A as AccessRouterBaseRequest, ai as GuardHook, aH as ModelRequest, T as DataRequest, cR as DataService, a7 as Filter, aS as Projection, bN as Sort, aP as Populate, cS as Service, cT as PublicService, cu as Validation, bE as RootRouterOptions } from './parsers-DppKW-Fd.js';
4
- export { cU as AccessRouterPermissionMap, cV as AccessRouterPermissions, c as AccessRouterRequest, d as AccessRouterRequestExtensions, l as AjvErrorObjectLike, n as AjvValidatorLike, o as ArkTypeErrorsLike, p as ArkTypeLike, ah as GlobalPermissionValue, al as IoTsContextEntryLike, am as IoTsDecodeErrorLike, an as IoTsDecoderLike, ao as JoiSchemaLike, ap as JoiValidationErrorDetailLike, av as MaybePromise, aw as ModelBaseFilterHook, ay as ModelDeleteHook, az as ModelDocPermissionsHook, aB as ModelDocumentHook, aC as ModelHook, aE as ModelIdentifierHook, aF as ModelListHook, aG as ModelOverrideFilterHook, aJ as ModelValidateHook, cW as Permissions, b8 as RequestSchemaAdapter, b9 as RequestSchemaFailure, ba as RequestSchemaIssue, bb as RequestSchemaLike, bc as RequestSchemaOptions, bd as RequestSchemaResult, be as RequestSchemaSuccess, bf as RequestSchemaValidator, bH as RouteGuardAccess, bP as StandardSchemaFailure, bQ as StandardSchemaInferOutput, bR as StandardSchemaIssue, bS as StandardSchemaPathSegment, bT as StandardSchemaResult, bU as StandardSchemaSuccess, bV as StandardSchemaV1, ca as SuperstructFailureLike, cb as SuperstructValidateLike, co as ValibotIssueLike, cp as ValibotPathItemLike, cq as ValibotSafeParseLike, cr as ValibotSafeParseResult, cw as VineValidationErrorLike, cx as VineValidationMessageLike, cy as VineValidatorLike, cz as YupSchemaLike, cA as YupValidationErrorLike, cB as defineRequestSchema, cC as fromAjv, cD as fromArkType, cE as fromIoTs, cF as fromJoi, cG as fromStandardSchema, cH as fromSuperstruct, cI as fromValibot, cJ as fromVine, cK as fromYup, cL as fromZod } from './parsers-DppKW-Fd.js';
3
+ import { A as AccessRouterBaseRequest, ai as GuardHook, aH as ModelRequest, cR as AccessRuntime, V as DataRouterOptions, T as DataRequest, cS as DataService, a7 as Filter, aS as Projection, bN as Sort, aP as Populate, aI as ModelRouterOptions, cT as Service, cU as PublicService, a6 as ExtendedModelRouterOptions, cu as Validation, bE as RootRouterOptions, cV as OpenApiRouterOptions, cW as OpenApiRegistryOptions, cX as OpenApiRouteDescriptor, cY as OpenApiDocumentOptions, cZ as OpenApiParameter, c_ as OpenApiSchema, c$ as OpenApiResponses, ag as GlobalOptions, Z as DefaultModelRouterOptions, a5 as ExtendedDefaultModelRouterOptions } from './parsers-BKF7VX2-.js';
4
+ export { d0 as AccessRouterPermissionMap, d1 as AccessRouterPermissions, c as AccessRouterRequest, d as AccessRouterRequestExtensions, l as AjvErrorObjectLike, n as AjvValidatorLike, o as ArkTypeErrorsLike, p as ArkTypeLike, ah as GlobalPermissionValue, al as IoTsContextEntryLike, am as IoTsDecodeErrorLike, an as IoTsDecoderLike, ao as JoiSchemaLike, ap as JoiValidationErrorDetailLike, av as MaybePromise, aw as ModelBaseFilterHook, ay as ModelDeleteHook, az as ModelDocPermissionsHook, aB as ModelDocumentHook, aC as ModelHook, aE as ModelIdentifierHook, aF as ModelListHook, aG as ModelOverrideFilterHook, aJ as ModelValidateHook, d2 as OpenApiMethod, d3 as Permissions, b8 as RequestSchemaAdapter, b9 as RequestSchemaFailure, ba as RequestSchemaIssue, bb as RequestSchemaLike, bc as RequestSchemaOptions, bd as RequestSchemaResult, be as RequestSchemaSuccess, bf as RequestSchemaValidator, bH as RouteGuardAccess, bP as StandardSchemaFailure, bQ as StandardSchemaInferOutput, bR as StandardSchemaIssue, bS as StandardSchemaPathSegment, bT as StandardSchemaResult, bU as StandardSchemaSuccess, bV as StandardSchemaV1, ca as SuperstructFailureLike, cb as SuperstructValidateLike, co as ValibotIssueLike, cp as ValibotPathItemLike, cq as ValibotSafeParseLike, cr as ValibotSafeParseResult, cw as VineValidationErrorLike, cx as VineValidationMessageLike, cy as VineValidatorLike, cz as YupSchemaLike, cA as YupValidationErrorLike, d4 as defaultRuntime, cB as defineRequestSchema, cC as fromAjv, cD as fromArkType, cE as fromIoTs, cF as fromJoi, cG as fromStandardSchema, cH as fromSuperstruct, cI as fromValibot, cJ as fromVine, cK as fromYup, cL as fromZod } from './parsers-BKF7VX2-.js';
5
5
  import JsonRouter from '@web-ts-toolkit/express-json-router';
6
6
  import 'zod';
7
7
 
8
- type OpenApiMethod = 'get' | 'post' | 'put' | 'patch' | 'delete';
9
- type OpenApiSchema = Record<string, unknown>;
10
- type OpenApiSchemaSource = unknown;
11
- type OpenApiParameter = {
12
- name: string;
13
- in: 'path' | 'query';
14
- required?: boolean;
15
- description?: string;
16
- schema?: OpenApiSchema;
17
- };
18
- type OpenApiResponse = {
19
- description: string;
20
- content?: Record<string, {
21
- schema: OpenApiSchema;
22
- }>;
23
- };
24
- type OpenApiResponses = Record<string, OpenApiResponse>;
25
- type OpenApiRouteDescriptor = {
26
- method: OpenApiMethod;
27
- path: string;
28
- operationId?: string;
29
- summary?: string;
30
- description?: string;
31
- tags?: string[];
32
- acl?: string;
33
- deprecated?: boolean;
34
- query?: OpenApiSchemaSource;
35
- body?: OpenApiSchemaSource;
36
- pathParams?: Record<string, OpenApiSchemaSource>;
37
- responses?: OpenApiResponses;
38
- /**
39
- * When true, replaces an existing registration with the same method/path
40
- * even when the descriptors differ. When false (default), conflicting
41
- * registrations throw at registration time so consumers can detect
42
- * accidental route shadowing.
43
- */
44
- allowReplace?: boolean;
45
- /**
46
- * When true, this exact descriptor is idempotent and registering the same
47
- * method/path with an equivalent descriptor again is silently accepted.
48
- * Differing re-registrations still throw unless {@link allowReplace} is set.
49
- * Additionally, an idempotent descriptor may share its operationId with
50
- * another idempotent descriptor mounted at a different path on the same
51
- * registry, so reserved operations (e.g. the root batch route) can be
52
- * exposed from multiple base paths without triggering strict-mode
53
- * duplicate-operationId rejection.
54
- */
55
- idempotent?: boolean;
56
- };
57
- type OpenApiRegistryOptions = {
58
- /**
59
- * Throw when the same method/path is registered twice with differing
60
- * descriptors, instead of silently replacing. Default: true (strict).
61
- * The {@link AccessRuntime} registry is constructed in strict mode by
62
- * default; construct {@link OpenApiRegistry} directly with
63
- * `rejectConflicts: false` for legacy replacement semantics.
64
- */
65
- rejectConflicts?: boolean;
66
- /**
67
- * Throw when the same operationId is registered more than once, including
68
- * when {@link OpenApiRouteDescriptor.allowReplace} is set. Default: true.
69
- */
70
- rejectDuplicateOperationIds?: boolean;
71
- };
72
- type OpenApiDocumentOptions = {
73
- title: string;
74
- version: string;
75
- description?: string;
76
- servers?: Array<{
77
- url: string;
78
- description?: string;
79
- }>;
80
- };
81
- type OpenApiRouterOptions = Partial<OpenApiDocumentOptions> & {
82
- jsonPath?: string;
83
- docsPath?: string | false;
84
- swaggerUiCssUrl?: string;
85
- swaggerUiBundleUrl?: string;
86
- };
87
-
88
- type ModelReferenceMap = {
89
- [key: string]: string | ModelReferenceMap;
90
- };
91
- declare class AccessRuntime {
92
- private readonly allowGlobalModelLookup;
93
- constructor(options?: {
94
- allowGlobalModelLookup?: boolean;
95
- });
96
- private readonly globalOptions;
97
- private readonly defaultModelOptions;
98
- private readonly modelOptions;
99
- private readonly modelJsonSchemas;
100
- private readonly dataOptions;
101
- private readonly modelRefs;
102
- private readonly modelSubs;
103
- private readonly modelAtts;
104
- private readonly modelInstances;
105
- private readonly openApiRegistry;
106
- registerModelInstance<TModel>(modelName: string, model: mongoose.Model<TModel>): void;
107
- hasModelInstance(modelName: string): boolean;
108
- getModelInstance<TModel = unknown>(modelName: string): mongoose.Model<TModel> | null;
109
- registerOpenApiRoute(route: OpenApiRouteDescriptor): void;
110
- /**
111
- * Enable strict OpenAPI collision detection for the remainder of this
112
- * runtime's lifetime. After this call, conflicting method/path
113
- * registrations and duplicate operationIds throw {@link OpenApiCollisionError}
114
- * instead of silently replacing. Existing already-registered routes are
115
- * not retroactively re-validated.
116
- */
117
- enableOpenApiCollisionDetection(): void;
118
- getOpenApiRoutes(): OpenApiRouteDescriptor[];
119
- clearOpenApiRoutes(): void;
120
- getOpenApiSpec(info: OpenApiDocumentOptions): {
121
- openapi: string;
122
- info: Omit<OpenApiDocumentOptions, "servers">;
123
- servers?: OpenApiDocumentOptions["servers"];
124
- paths: Record<string, Record<string, {
125
- [key: `x-${string}`]: unknown;
126
- operationId?: string;
127
- summary?: string;
128
- description?: string;
129
- tags?: string[];
130
- deprecated?: boolean;
131
- parameters?: OpenApiParameter[];
132
- requestBody?: {
133
- required?: boolean;
134
- content: Record<string, {
135
- schema: OpenApiSchema;
136
- }>;
137
- };
138
- responses: OpenApiResponses;
139
- }>>;
140
- };
141
- createBootstrapSnapshot(): {
142
- globalOptions: GlobalOptions;
143
- defaultModelOptions: DefaultModelRouterOptions;
144
- modelOptions: Record<string, ModelRouterOptions>;
145
- dataOptions: Record<string, DataRouterOptions>;
146
- modelInstances: Record<string, mongoose.Model<unknown>>;
147
- modelJsonSchemas: Record<string, Record<string, unknown>>;
148
- modelRefs: Record<string, ModelReferenceMap>;
149
- modelSubs: Record<string, string[]>;
150
- modelAtts: Record<string, string[]>;
151
- openApi: {
152
- routes: OpenApiRouteDescriptor[];
153
- options: Required<OpenApiRegistryOptions>;
154
- };
155
- };
156
- restoreBootstrapSnapshot(snapshot: ReturnType<AccessRuntime['createBootstrapSnapshot']>): void;
157
- setGlobalOptions(options: GlobalOptions): void;
158
- setGlobalOption<K extends keyof GlobalOptions>(key: K, value: GlobalOptions[K]): void;
159
- getGlobalOptions(): GlobalOptions;
160
- getGlobalOption<K extends keyof GlobalOptions>(key: K, defaultValue?: GlobalOptions[K]): GlobalOptions[K];
161
- setDefaultModelOptions(options: DefaultModelRouterOptions): void;
162
- setDefaultModelOption<K extends keyof ExtendedDefaultModelRouterOptions>(key: K, value: ExtendedDefaultModelRouterOptions[K]): void;
163
- getDefaultModelOptions(): DefaultModelRouterOptions<unknown>;
164
- getDefaultModelOption<K extends keyof ExtendedDefaultModelRouterOptions>(key: K, defaultValue?: ExtendedDefaultModelRouterOptions[K]): ExtendedDefaultModelRouterOptions<unknown>[K];
165
- private createModelOptions;
166
- private getOrCreateModelOptions;
167
- setModelOptions<TModel = unknown>(modelName: string, options: ModelRouterOptions<TModel>): void;
168
- setModelOption<K extends keyof ExtendedModelRouterOptions<TModel>, TModel = unknown>(modelName: string, key: K, value: ExtendedModelRouterOptions<TModel>[K]): void;
169
- getModelOptions<TModel = unknown>(modelName: string): ModelRouterOptions<TModel>;
170
- getModelOption<K extends keyof ExtendedModelRouterOptions<TModel>, TModel = unknown>(modelName: string, key: K | string, defaultValue?: ExtendedModelRouterOptions<TModel>[K]): ExtendedModelRouterOptions<TModel>[K];
171
- getExactModelOption<K extends keyof ExtendedModelRouterOptions<TModel>, TModel = unknown>(modelName: string, key: K | string): ExtendedModelRouterOptions<TModel>[K];
172
- getModelNames(): string[];
173
- hasModel(modelName: string): boolean;
174
- getModelJsonSchema(modelName: string): Record<string, unknown>;
175
- private createDataOptions;
176
- private getOrCreateDataOptions;
177
- setDataOptions<TData = unknown>(dataName: string, options: DataRouterOptions<TData>): void;
178
- setDataOption<K extends keyof DataRouterOptions<TData>, TData = unknown>(dataName: string, key: K, value: DataRouterOptions<TData>[K]): void;
179
- getDataOptions<TData = unknown>(dataName: string): DataRouterOptions<TData>;
180
- getDataSnapshot<TData = unknown>(dataName: string): readonly TData[];
181
- getDataOption<K extends keyof DataRouterOptions<TData>, TData = unknown>(dataName: string, key: K | string, defaultValue?: DataRouterOptions<TData>[K]): DataRouterOptions<TData>[K];
182
- getExactDataOption<K extends keyof ExtendedDataRouterOptions<TData>, TData = unknown>(dataName: string, key: K | string): ExtendedDataRouterOptions<TData>[K];
183
- getDataNames(): string[];
184
- ensureModelMeta(modelName: string): void;
185
- getModelRef(modelName: string, refPath: string): string | null;
186
- getModelSub(modelName: string): string[];
187
- getModelAtt(modelName: string): string[];
188
- }
189
- declare const defaultRuntime: AccessRuntime;
190
-
191
8
  declare function macl(): (req: AccessRouterBaseRequest, res: Response, next: NextFunction) => Promise<void>;
192
9
  interface GuardModelConditionID {
193
10
  type: 'param' | 'query';
@@ -271,6 +88,8 @@ declare class Model {
271
88
  findOne({ filter, select, sort, populate, lean }: FindOneProps): mongoose.Query<any, any>;
272
89
  exists(filter: Filter): ReturnType<typeof Model.prototype.findOne> | null;
273
90
  countDocuments(filter?: {}): mongoose.Query<number, any>;
91
+ /** Cast a copy using this model's query schema/setters, without executing query middleware or persistence. */
92
+ castFilter(filter: Record<string, unknown>): Record<string, unknown>;
274
93
  distinct(field: string, conditions?: {}): mongoose.Query<any[], any>;
275
94
  aggregate(pipeline: unknown[]): mongoose.Aggregate<any[]>;
276
95
  }
@@ -609,4 +428,4 @@ type AccessRuntimeApi = typeof macl & Wtt;
609
428
  declare function createAccessRuntime(): AccessRuntimeApi;
610
429
  declare const acl: AccessRuntimeApi;
611
430
 
612
- export { AccessRuntime, type AccessRuntimeApi, type CombinedRouteInput, DataRouter, DataRouterOptions, ExtendedDefaultModelRouterOptions, ExtendedModelRouterOptions, GlobalOptions, GuardHook, type GuardModelCondition, type GuardModelConditionID, ModelRouter, ModelRouterOptions, type OpLogContext, OpenApiCollisionError, type OpenApiDocumentOptions, type OpenApiMethod, OpenApiRegistry, type OpenApiRegistryOptions, type OpenApiRouteDescriptor, type OpenApiRouterOptions, RootRouter, RootRouterOptions, Validation, acl, combineRoutes, createAccessRuntime, createOpenApiRouter, acl as default, defaultRuntime, getDefaultModelOption, getDefaultModelOptions, getGlobalOption, getGlobalOptions, getModelInstance, getModelJsonSchema, getModelNames, getModelOption, getModelOptions, guard, hasModelInstance, isLevelEnabled, permissionsPlugin, redactFilter, redactPayload, registerModelInstance, safeStringify, setDefaultModelOption, setDefaultModelOptions, setGlobalOption, setGlobalOptions, setModelOption, setModelOptions };
431
+ export { AccessRuntime, type AccessRuntimeApi, type CombinedRouteInput, DataRouter, DataRouterOptions, ExtendedDefaultModelRouterOptions, ExtendedModelRouterOptions, GlobalOptions, GuardHook, type GuardModelCondition, type GuardModelConditionID, ModelRouter, ModelRouterOptions, type OpLogContext, OpenApiCollisionError, OpenApiDocumentOptions, OpenApiRegistry, OpenApiRegistryOptions, OpenApiRouteDescriptor, OpenApiRouterOptions, RootRouter, RootRouterOptions, Validation, acl, combineRoutes, createAccessRuntime, createOpenApiRouter, acl as default, getDefaultModelOption, getDefaultModelOptions, getGlobalOption, getGlobalOptions, getModelInstance, getModelJsonSchema, getModelNames, getModelOption, getModelOptions, guard, hasModelInstance, isLevelEnabled, permissionsPlugin, redactFilter, redactPayload, registerModelInstance, safeStringify, setDefaultModelOption, setDefaultModelOptions, setGlobalOption, setGlobalOptions, setModelOption, setModelOptions };