adorn-api 1.1.2 → 1.1.3
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/README.md +126 -17
- package/dist/adapter/metal-orm/crud-dtos.d.ts +5 -4
- package/dist/adapter/metal-orm/crud-dtos.js +199 -6
- package/dist/adapter/metal-orm/index.d.ts +2 -1
- package/dist/adapter/metal-orm/index.js +3 -1
- package/dist/adapter/metal-orm/sort.d.ts +7 -0
- package/dist/adapter/metal-orm/sort.js +54 -0
- package/dist/adapter/metal-orm/types.d.ts +132 -5
- package/package.json +1 -1
- package/src/adapter/metal-orm/crud-dtos.ts +376 -106
- package/src/adapter/metal-orm/index.ts +25 -11
- package/src/adapter/metal-orm/sort.ts +82 -0
- package/src/adapter/metal-orm/types.ts +160 -11
- package/tests/e2e/metal-crud-openapi.e2e.test.ts +36 -19
- package/tests/unit/crud-dtos.test.ts +98 -26
- package/tests/unit/parse-filter.test.ts +1 -1
- package/tests/unit/parse-sort.test.ts +48 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { BelongsToReference, HasManyCollection, HasOneReference, ManyToManyCollection } from "metal-orm";
|
|
2
|
-
import type { DtoOptions, FieldOverride } from "../../core/decorators";
|
|
2
|
+
import type { DtoOptions, ErrorResponseOptions, FieldOverride } from "../../core/decorators";
|
|
3
3
|
import type { SchemaNode } from "../../core/schema";
|
|
4
4
|
import type { DtoConstructor } from "../../core/types";
|
|
5
5
|
/**
|
|
@@ -103,6 +103,38 @@ export interface ParseFilterOptions<T = Record<string, unknown>> {
|
|
|
103
103
|
/** Field mappings */
|
|
104
104
|
fieldMappings?: Record<string, FilterMapping<T>>;
|
|
105
105
|
}
|
|
106
|
+
/**
|
|
107
|
+
* Sort direction.
|
|
108
|
+
*/
|
|
109
|
+
export type SortDirection = "asc" | "desc";
|
|
110
|
+
/**
|
|
111
|
+
* Sort parsing options.
|
|
112
|
+
*/
|
|
113
|
+
export interface ParseSortOptions<T = Record<string, unknown>> {
|
|
114
|
+
/** Query parameters */
|
|
115
|
+
query?: Record<string, unknown>;
|
|
116
|
+
/** Allowed sortable columns */
|
|
117
|
+
sortableColumns?: Record<string, FilterFieldInput<T>>;
|
|
118
|
+
/** Sort field query key */
|
|
119
|
+
sortByKey?: string;
|
|
120
|
+
/** Sort direction query key */
|
|
121
|
+
sortDirectionKey?: string;
|
|
122
|
+
/** Default sort field */
|
|
123
|
+
defaultSortBy?: string;
|
|
124
|
+
/** Default sort direction */
|
|
125
|
+
defaultSortDirection?: SortDirection;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Parsed sort result.
|
|
129
|
+
*/
|
|
130
|
+
export interface ParsedSort<T = Record<string, unknown>> {
|
|
131
|
+
/** Requested sort key */
|
|
132
|
+
sortBy?: string;
|
|
133
|
+
/** Direction */
|
|
134
|
+
sortDirection: SortDirection;
|
|
135
|
+
/** Resolved entity field */
|
|
136
|
+
field?: FilterFieldInput<T>;
|
|
137
|
+
}
|
|
106
138
|
/**
|
|
107
139
|
* Filter operator.
|
|
108
140
|
*/
|
|
@@ -157,6 +189,73 @@ export interface FilterFieldDef {
|
|
|
157
189
|
/** Filter operator */
|
|
158
190
|
operator?: "equals" | "contains" | "startsWith" | "endsWith" | "gt" | "gte" | "lt" | "lte";
|
|
159
191
|
}
|
|
192
|
+
/**
|
|
193
|
+
* Single filter definition for CRUD query generation.
|
|
194
|
+
*/
|
|
195
|
+
export interface MetalCrudQueryFilterDef<T = Record<string, unknown>> {
|
|
196
|
+
/** Field schema for query validation/OpenAPI */
|
|
197
|
+
schema: SchemaNode;
|
|
198
|
+
/** Entity field path mapping */
|
|
199
|
+
field: FilterFieldInput<T>;
|
|
200
|
+
/** Filter operator (default: equals) */
|
|
201
|
+
operator?: FilterOperator;
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Sortable columns mapping for CRUD query generation.
|
|
205
|
+
* Key is accepted `sortBy` value and value is mapped entity field path.
|
|
206
|
+
*/
|
|
207
|
+
export type MetalCrudSortableColumns<T = Record<string, unknown>> = Record<string, FilterFieldInput<T>>;
|
|
208
|
+
/**
|
|
209
|
+
* Options-query generation options.
|
|
210
|
+
*/
|
|
211
|
+
export interface MetalCrudOptionsQueryOptions<T = Record<string, unknown>> extends PaginationConfig {
|
|
212
|
+
/** Whether options query artifacts are generated (default: true) */
|
|
213
|
+
enabled?: boolean;
|
|
214
|
+
/** Query key used for label search (default: "search") */
|
|
215
|
+
searchKey?: string;
|
|
216
|
+
/** Entity field used as option label (default: "nome") */
|
|
217
|
+
labelField?: keyof T & string;
|
|
218
|
+
/** Entity field used as option value (default: "id") */
|
|
219
|
+
valueField?: keyof T & string;
|
|
220
|
+
/** Operator used for label search (default: "contains") */
|
|
221
|
+
searchOperator?: FilterOperator;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Query generation options for CRUD DTO factory.
|
|
225
|
+
*/
|
|
226
|
+
export interface MetalCrudQueryOptions<T = Record<string, unknown>> extends PaginationConfig {
|
|
227
|
+
/** Filters in one place: schema + mapping + operator */
|
|
228
|
+
filters?: Record<string, MetalCrudQueryFilterDef<T>>;
|
|
229
|
+
/** Allowed sortBy values mapped to entity fields */
|
|
230
|
+
sortableColumns?: MetalCrudSortableColumns<T>;
|
|
231
|
+
/** Query key for sort field (default: "sortBy") */
|
|
232
|
+
sortByKey?: string;
|
|
233
|
+
/** Query key for sort direction (default: "sortDirection") */
|
|
234
|
+
sortDirectionKey?: string;
|
|
235
|
+
/** Default sort field key */
|
|
236
|
+
defaultSortBy?: string;
|
|
237
|
+
/** Default sort direction */
|
|
238
|
+
defaultSortDirection?: SortDirection;
|
|
239
|
+
/** Options endpoint query generation options */
|
|
240
|
+
options?: MetalCrudOptionsQueryOptions<T>;
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Standard CRUD errors generation options.
|
|
244
|
+
*/
|
|
245
|
+
export interface MetalCrudStandardErrorsOptions {
|
|
246
|
+
/** Enable generation (default: false) */
|
|
247
|
+
enabled?: boolean;
|
|
248
|
+
/** Reuse a specific error DTO schema */
|
|
249
|
+
schema?: DtoConstructor;
|
|
250
|
+
/** Generate default schema with details */
|
|
251
|
+
withDetails?: boolean;
|
|
252
|
+
/** Include traceId in generated schema */
|
|
253
|
+
includeTraceId?: boolean;
|
|
254
|
+
/** 400 invalid id error config (set false to disable) */
|
|
255
|
+
invalidId?: false | ErrorResponseOptions;
|
|
256
|
+
/** 404 not found error config (set false to disable) */
|
|
257
|
+
notFound?: false | ErrorResponseOptions;
|
|
258
|
+
}
|
|
160
259
|
/**
|
|
161
260
|
* Options for paged filter query DTOs.
|
|
162
261
|
* @extends PagedQueryDtoOptions
|
|
@@ -170,7 +269,7 @@ export interface PagedFilterQueryDtoOptions extends PagedQueryDtoOptions {
|
|
|
170
269
|
/**
|
|
171
270
|
* Options for Metal CRUD DTOs.
|
|
172
271
|
*/
|
|
173
|
-
export interface MetalCrudDtoOptions {
|
|
272
|
+
export interface MetalCrudDtoOptions<T = Record<string, unknown>> {
|
|
174
273
|
/** Field overrides */
|
|
175
274
|
overrides?: Record<string, FieldOverride>;
|
|
176
275
|
/** Response DTO options */
|
|
@@ -189,6 +288,10 @@ export interface MetalCrudDtoOptions {
|
|
|
189
288
|
paramsInclude?: string[];
|
|
190
289
|
/** Immutable fields */
|
|
191
290
|
immutable?: string[];
|
|
291
|
+
/** Query/options/paged artifact generation */
|
|
292
|
+
query?: MetalCrudQueryOptions<T>;
|
|
293
|
+
/** Standard CRUD errors generation */
|
|
294
|
+
errors?: boolean | MetalCrudStandardErrorsOptions;
|
|
192
295
|
/** Whether to throw errors instead of warnings for invalid metadata (default: false) */
|
|
193
296
|
strict?: boolean;
|
|
194
297
|
}
|
|
@@ -210,12 +313,20 @@ export interface MetalCrudDtoDecorators {
|
|
|
210
313
|
/**
|
|
211
314
|
* Metal CRUD DTO class names.
|
|
212
315
|
*/
|
|
213
|
-
export type
|
|
316
|
+
export type RouteErrorsDecorator = (value: unknown, context: ClassMethodDecoratorContext) => void;
|
|
317
|
+
/**
|
|
318
|
+
* Metal CRUD generated class names.
|
|
319
|
+
*/
|
|
320
|
+
export type MetalCrudDtoClassNameKey = keyof MetalCrudDtoDecorators | "queryDto" | "optionsQueryDto" | "pagedResponseDto" | "optionDto" | "optionsDto";
|
|
321
|
+
/**
|
|
322
|
+
* Metal CRUD DTO class names.
|
|
323
|
+
*/
|
|
324
|
+
export type MetalCrudDtoClassNames = Partial<Record<MetalCrudDtoClassNameKey, string>>;
|
|
214
325
|
/**
|
|
215
326
|
* Options for Metal CRUD DTO classes.
|
|
216
327
|
* @extends MetalCrudDtoOptions
|
|
217
328
|
*/
|
|
218
|
-
export interface MetalCrudDtoClassOptions extends MetalCrudDtoOptions {
|
|
329
|
+
export interface MetalCrudDtoClassOptions<T = Record<string, unknown>> extends MetalCrudDtoOptions<T> {
|
|
219
330
|
/** Base name for DTO classes */
|
|
220
331
|
baseName?: string;
|
|
221
332
|
/** Custom class names */
|
|
@@ -226,7 +337,7 @@ export interface MetalCrudDtoClassOptions extends MetalCrudDtoOptions {
|
|
|
226
337
|
/**
|
|
227
338
|
* Metal CRUD DTO classes.
|
|
228
339
|
*/
|
|
229
|
-
export interface MetalCrudDtoClasses {
|
|
340
|
+
export interface MetalCrudDtoClasses<T = Record<string, unknown>> {
|
|
230
341
|
/** Response DTO class */
|
|
231
342
|
response: DtoConstructor;
|
|
232
343
|
/** Create DTO class */
|
|
@@ -237,6 +348,22 @@ export interface MetalCrudDtoClasses {
|
|
|
237
348
|
update: DtoConstructor;
|
|
238
349
|
/** Params DTO class */
|
|
239
350
|
params: DtoConstructor;
|
|
351
|
+
/** Query DTO class (paged + filters + sort) */
|
|
352
|
+
queryDto: DtoConstructor;
|
|
353
|
+
/** Options query DTO class */
|
|
354
|
+
optionsQueryDto: DtoConstructor;
|
|
355
|
+
/** Paged response DTO class for main list endpoints */
|
|
356
|
+
pagedResponseDto: DtoConstructor;
|
|
357
|
+
/** Option DTO class (value + label fields) */
|
|
358
|
+
optionDto: DtoConstructor;
|
|
359
|
+
/** Paged response DTO class for options endpoints */
|
|
360
|
+
optionsDto: DtoConstructor;
|
|
361
|
+
/** Prebuilt CRUD error decorator (400 invalid id, 404 not found) */
|
|
362
|
+
errors?: RouteErrorsDecorator;
|
|
363
|
+
/** Execution-ready filter mappings for parseFilter */
|
|
364
|
+
filterMappings: Record<string, FilterMapping<T>>;
|
|
365
|
+
/** Execution-ready sortable column mappings */
|
|
366
|
+
sortableColumns: MetalCrudSortableColumns<T>;
|
|
240
367
|
}
|
|
241
368
|
/**
|
|
242
369
|
* Metal Tree DTO class names.
|