@decaf-ts/for-nest 0.1.7 → 0.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/README.md +1 -1
  2. package/dist/for-nest.cjs +1 -1
  3. package/dist/for-nest.cjs.map +1 -1
  4. package/dist/for-nest.js +1 -1
  5. package/dist/for-nest.js.map +1 -1
  6. package/lib/decaf-model/DecafModelModule.cjs +9 -4
  7. package/lib/decaf-model/DecafModelModule.d.ts +3 -3
  8. package/lib/decaf-model/DecafModelModule.js.map +1 -1
  9. package/lib/decaf-model/FromModelController.cjs +355 -53
  10. package/lib/decaf-model/FromModelController.d.ts +6 -2
  11. package/lib/decaf-model/FromModelController.js.map +1 -1
  12. package/lib/decaf-model/decorators/ApiOperationFromModel.cjs +22 -0
  13. package/lib/decaf-model/decorators/ApiOperationFromModel.d.ts +9 -0
  14. package/lib/decaf-model/decorators/ApiOperationFromModel.js.map +1 -1
  15. package/lib/decaf-model/decorators/ApiParamsFromModel.d.ts +2 -2
  16. package/lib/decaf-model/decorators/ApiParamsFromModel.js.map +1 -1
  17. package/lib/decaf-model/decorators/DecafParams.cjs +9 -1
  18. package/lib/decaf-model/decorators/DecafParams.d.ts +2 -2
  19. package/lib/decaf-model/decorators/DecafParams.js.map +1 -1
  20. package/lib/decaf-model/decorators/index.cjs +1 -0
  21. package/lib/decaf-model/decorators/index.d.ts +1 -0
  22. package/lib/decaf-model/decorators/index.js.map +1 -1
  23. package/lib/decaf-model/decorators/types.d.ts +5 -5
  24. package/lib/decaf-model/types.cjs +15 -0
  25. package/lib/decaf-model/types.d.ts +18 -0
  26. package/lib/decaf-model/types.js.map +1 -0
  27. package/lib/decaf-model/utils.cjs +67 -0
  28. package/lib/decaf-model/utils.d.ts +7 -0
  29. package/lib/decaf-model/utils.js.map +1 -0
  30. package/lib/esm/decaf-model/DecafModelModule.d.ts +3 -3
  31. package/lib/esm/decaf-model/DecafModelModule.js +9 -4
  32. package/lib/esm/decaf-model/DecafModelModule.js.map +1 -1
  33. package/lib/esm/decaf-model/FromModelController.d.ts +6 -2
  34. package/lib/esm/decaf-model/FromModelController.js +359 -57
  35. package/lib/esm/decaf-model/FromModelController.js.map +1 -1
  36. package/lib/esm/decaf-model/decorators/ApiOperationFromModel.d.ts +9 -0
  37. package/lib/esm/decaf-model/decorators/ApiOperationFromModel.js +22 -1
  38. package/lib/esm/decaf-model/decorators/ApiOperationFromModel.js.map +1 -1
  39. package/lib/esm/decaf-model/decorators/ApiParamsFromModel.d.ts +2 -2
  40. package/lib/esm/decaf-model/decorators/ApiParamsFromModel.js.map +1 -1
  41. package/lib/esm/decaf-model/decorators/DecafParams.d.ts +2 -2
  42. package/lib/esm/decaf-model/decorators/DecafParams.js +9 -1
  43. package/lib/esm/decaf-model/decorators/DecafParams.js.map +1 -1
  44. package/lib/esm/decaf-model/decorators/index.d.ts +1 -0
  45. package/lib/esm/decaf-model/decorators/index.js +1 -0
  46. package/lib/esm/decaf-model/decorators/index.js.map +1 -1
  47. package/lib/esm/decaf-model/decorators/types.d.ts +5 -5
  48. package/lib/esm/decaf-model/types.d.ts +18 -0
  49. package/lib/esm/decaf-model/types.js +11 -0
  50. package/lib/esm/decaf-model/types.js.map +1 -0
  51. package/lib/esm/decaf-model/utils.d.ts +7 -0
  52. package/lib/esm/decaf-model/utils.js +61 -0
  53. package/lib/esm/decaf-model/utils.js.map +1 -0
  54. package/lib/esm/factory/NestBootstraper.js +2 -10
  55. package/lib/esm/factory/NestBootstraper.js.map +1 -1
  56. package/lib/esm/factory/context.d.ts +0 -0
  57. package/lib/esm/factory/context.js +2 -0
  58. package/lib/esm/factory/context.js.map +1 -0
  59. package/lib/esm/factory/exceptions/DecafErrorFilter.d.ts +4 -0
  60. package/lib/esm/factory/exceptions/DecafErrorFilter.js +32 -0
  61. package/lib/esm/factory/exceptions/DecafErrorFilter.js.map +1 -0
  62. package/lib/esm/factory/exceptions/decorators.d.ts +1 -0
  63. package/lib/esm/factory/exceptions/decorators.js +6 -0
  64. package/lib/esm/factory/exceptions/decorators.js.map +1 -0
  65. package/lib/esm/factory/exceptions/index.d.ts +2 -7
  66. package/lib/esm/factory/exceptions/index.js +2 -7
  67. package/lib/esm/factory/exceptions/index.js.map +1 -1
  68. package/lib/esm/index.d.ts +1 -1
  69. package/lib/esm/index.js +1 -1
  70. package/lib/esm/interceptors/index.d.ts +1 -0
  71. package/lib/esm/interceptors/index.js +1 -0
  72. package/lib/esm/interceptors/index.js.map +1 -1
  73. package/lib/esm/module.js +5 -2
  74. package/lib/esm/module.js.map +1 -1
  75. package/lib/esm/types.d.ts +1 -0
  76. package/lib/factory/NestBootstraper.cjs +1 -9
  77. package/lib/factory/NestBootstraper.js.map +1 -1
  78. package/lib/factory/context.cjs +2 -0
  79. package/lib/factory/context.d.ts +0 -0
  80. package/lib/factory/context.js.map +1 -0
  81. package/lib/factory/exceptions/DecafErrorFilter.cjs +35 -0
  82. package/lib/factory/exceptions/DecafErrorFilter.d.ts +4 -0
  83. package/lib/factory/exceptions/DecafErrorFilter.js.map +1 -0
  84. package/lib/factory/exceptions/decorators.cjs +9 -0
  85. package/lib/factory/exceptions/decorators.d.ts +1 -0
  86. package/lib/factory/exceptions/decorators.js.map +1 -0
  87. package/lib/factory/exceptions/index.cjs +2 -7
  88. package/lib/factory/exceptions/index.d.ts +2 -7
  89. package/lib/factory/exceptions/index.js.map +1 -1
  90. package/lib/index.cjs +1 -1
  91. package/lib/index.d.ts +1 -1
  92. package/lib/interceptors/index.cjs +1 -0
  93. package/lib/interceptors/index.d.ts +1 -0
  94. package/lib/interceptors/index.js.map +1 -1
  95. package/lib/module.cjs +5 -2
  96. package/lib/module.js.map +1 -1
  97. package/lib/types.d.ts +1 -0
  98. package/package.json +3 -3
  99. package/lib/esm/factory/exceptions/AuthorizationExceptionFilter.d.ts +0 -9
  100. package/lib/esm/factory/exceptions/AuthorizationExceptionFilter.js +0 -35
  101. package/lib/esm/factory/exceptions/AuthorizationExceptionFilter.js.map +0 -1
  102. package/lib/esm/factory/exceptions/ConflictExceptionFilter.d.ts +0 -9
  103. package/lib/esm/factory/exceptions/ConflictExceptionFilter.js +0 -35
  104. package/lib/esm/factory/exceptions/ConflictExceptionFilter.js.map +0 -1
  105. package/lib/esm/factory/exceptions/GlobalExceptionFilter.d.ts +0 -4
  106. package/lib/esm/factory/exceptions/GlobalExceptionFilter.js +0 -39
  107. package/lib/esm/factory/exceptions/GlobalExceptionFilter.js.map +0 -1
  108. package/lib/esm/factory/exceptions/HttpExceptionFilter.d.ts +0 -4
  109. package/lib/esm/factory/exceptions/HttpExceptionFilter.js +0 -27
  110. package/lib/esm/factory/exceptions/HttpExceptionFilter.js.map +0 -1
  111. package/lib/esm/factory/exceptions/HttpResponseError.d.ts +0 -13
  112. package/lib/esm/factory/exceptions/HttpResponseError.js +0 -21
  113. package/lib/esm/factory/exceptions/HttpResponseError.js.map +0 -1
  114. package/lib/esm/factory/exceptions/NotFoundExceptionFilter.d.ts +0 -9
  115. package/lib/esm/factory/exceptions/NotFoundExceptionFilter.js +0 -35
  116. package/lib/esm/factory/exceptions/NotFoundExceptionFilter.js.map +0 -1
  117. package/lib/esm/factory/exceptions/ValidationExceptionFilter.d.ts +0 -9
  118. package/lib/esm/factory/exceptions/ValidationExceptionFilter.js +0 -35
  119. package/lib/esm/factory/exceptions/ValidationExceptionFilter.js.map +0 -1
  120. package/lib/factory/exceptions/AuthorizationExceptionFilter.cjs +0 -39
  121. package/lib/factory/exceptions/AuthorizationExceptionFilter.d.ts +0 -9
  122. package/lib/factory/exceptions/AuthorizationExceptionFilter.js.map +0 -1
  123. package/lib/factory/exceptions/ConflictExceptionFilter.cjs +0 -39
  124. package/lib/factory/exceptions/ConflictExceptionFilter.d.ts +0 -9
  125. package/lib/factory/exceptions/ConflictExceptionFilter.js.map +0 -1
  126. package/lib/factory/exceptions/GlobalExceptionFilter.cjs +0 -42
  127. package/lib/factory/exceptions/GlobalExceptionFilter.d.ts +0 -4
  128. package/lib/factory/exceptions/GlobalExceptionFilter.js.map +0 -1
  129. package/lib/factory/exceptions/HttpExceptionFilter.cjs +0 -30
  130. package/lib/factory/exceptions/HttpExceptionFilter.d.ts +0 -4
  131. package/lib/factory/exceptions/HttpExceptionFilter.js.map +0 -1
  132. package/lib/factory/exceptions/HttpResponseError.cjs +0 -25
  133. package/lib/factory/exceptions/HttpResponseError.d.ts +0 -13
  134. package/lib/factory/exceptions/HttpResponseError.js.map +0 -1
  135. package/lib/factory/exceptions/NotFoundExceptionFilter.cjs +0 -39
  136. package/lib/factory/exceptions/NotFoundExceptionFilter.d.ts +0 -9
  137. package/lib/factory/exceptions/NotFoundExceptionFilter.js.map +0 -1
  138. package/lib/factory/exceptions/ValidationExceptionFilter.cjs +0 -39
  139. package/lib/factory/exceptions/ValidationExceptionFilter.d.ts +0 -9
  140. package/lib/factory/exceptions/ValidationExceptionFilter.js.map +0 -1
@@ -23,7 +23,9 @@ const decoration_1 = require("@decaf-ts/decoration");
23
23
  const decorators_1 = require("./decorators/index.cjs");
24
24
  const request_1 = require("./../request/index.cjs");
25
25
  const constants_1 = require("./../constants.cjs");
26
+ const utils_1 = require("./utils.cjs");
26
27
  const decorators_2 = require("./decorators/decorators.cjs");
28
+ const types_1 = require("./types.cjs");
27
29
  /**
28
30
  * @description
29
31
  * Factory and utilities for generating dynamic NestJS controllers from Decaf {@link Model} definitions.
@@ -75,31 +77,123 @@ const decorators_2 = require("./decorators/decorators.cjs");
75
77
  */
76
78
  class FromModelController {
77
79
  static { this.log = logging_1.Logging.for(FromModelController.name); }
78
- static create(ModelClazz) {
79
- const log = FromModelController.log.for(FromModelController.create);
80
- const tableName = decorator_validation_1.Model.tableName(ModelClazz);
81
- const routePath = (0, logging_1.toKebabCase)(tableName);
82
- const modelClazzName = ModelClazz.name;
83
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
84
- const { description, getPK, apiProperties, path } = FromModelController.getRouteParametersFromModel(ModelClazz);
85
- log.debug(`Creating controller for model: ${modelClazzName}`);
86
- let DynamicModelController = class DynamicModelController extends logging_1.LoggedClass {
80
+ static getPersistence(ModelClazz) {
81
+ try {
82
+ return core_1.ModelService.forModel(ModelClazz);
83
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
84
+ }
85
+ catch (e) {
86
+ return core_1.Repository.forModel(ModelClazz);
87
+ }
88
+ }
89
+ static createQueryRoutesFromRepository(persistence, prefix = core_1.PersistenceKeys.STATEMENT) {
90
+ const ModelConstr = persistence.class;
91
+ const methodQueries = decoration_1.Metadata.get(persistence.constructor, decoration_1.Metadata.key(core_1.PersistenceKeys.QUERY)) ?? {};
92
+ // create base class
93
+ class QueryController extends types_1.AbstractQueryController {
87
94
  constructor(clientContext) {
88
- super();
89
- this.clientContext = clientContext;
90
- this.pk = decorator_validation_1.Model.pk(ModelClazz);
91
- log.info(`Registering dynamic controller for model: ${modelClazzName} route: /${routePath}`);
95
+ super(clientContext);
96
+ this._persistence = FromModelController.getPersistence(ModelConstr);
92
97
  }
93
98
  get persistence() {
94
- if (!this._persistence)
95
- this._persistence =
96
- core_1.ModelService.getService(ModelClazz) ||
97
- core_1.Repository.forModel(ModelClazz);
98
99
  const adapterOptions = this.clientContext.get(constants_1.DECAF_ADAPTER_OPTIONS);
99
100
  if (adapterOptions)
100
101
  return this._persistence.for(adapterOptions);
101
102
  return this._persistence;
102
103
  }
104
+ }
105
+ for (const [methodName, objValues] of Object.entries(methodQueries)) {
106
+ const fields = objValues.fields ?? [];
107
+ const routePath = [prefix, methodName, ...fields.map((f) => `:${f}`)]
108
+ .filter((segment) => segment && segment.trim())
109
+ .join("/");
110
+ const handler = (0, utils_1.createRouteHandler)(methodName);
111
+ const descriptor = (0, utils_1.defineRouteMethod)(QueryController, methodName, handler);
112
+ if (descriptor) {
113
+ const decorators = (0, utils_1.getApiDecorators)(methodName, routePath);
114
+ (0, utils_1.applyApiDecorators)(QueryController, methodName, descriptor, decorators);
115
+ }
116
+ }
117
+ return QueryController;
118
+ }
119
+ static create(ModelConstr) {
120
+ const log = FromModelController.log.for(FromModelController.create);
121
+ const tableName = decorator_validation_1.Model.tableName(ModelConstr);
122
+ const routePath = (0, logging_1.toKebabCase)(tableName);
123
+ const modelClazzName = ModelConstr.name;
124
+ const persistence = FromModelController.getPersistence(ModelConstr);
125
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
126
+ const { description, getPK, apiProperties, path } = FromModelController.getRouteParametersFromModel(ModelConstr);
127
+ log.debug(`Creating controller for model: ${modelClazzName}`);
128
+ const BaseController = FromModelController.createQueryRoutesFromRepository(persistence);
129
+ let DynamicModelController = class DynamicModelController extends BaseController {
130
+ constructor(clientContext) {
131
+ super(clientContext);
132
+ this.pk = decorator_validation_1.Model.pk(ModelConstr);
133
+ log.info(`Registering dynamic controller for model: ${modelClazzName} route: /${routePath}`);
134
+ }
135
+ //
136
+ // @ApiOperationFromModel(ModelClazz, "GET", "query/:condition/:orderBy")
137
+ // @ApiOperation({ summary: `Retrieve ${modelClazzName} records by query.` })
138
+ // @ApiParam({ name: "method", description: "Query method to be called" })
139
+ // @ApiOkResponse({
140
+ // description: `${modelClazzName} retrieved successfully.`,
141
+ // })
142
+ // @ApiNotFoundResponse({
143
+ // description: `No ${modelClazzName} records matches the query.`,
144
+ // })
145
+ // async query(
146
+ // @Param("condition") condition: Condition<any>,
147
+ // @Param("orderBy") orderBy: string,
148
+ // @QueryDetails() details: DirectionLimitOffset,
149
+ // ) {
150
+ // const {direction, limit, offset} = details;
151
+ // return this.persistence.query(condition, orderBy as keyof Model, direction, limit, offset);
152
+ // }
153
+ async listBy(key, details) {
154
+ return this.persistence.listBy(key, details.direction);
155
+ }
156
+ async paginateBy(key, page, details) {
157
+ return this.persistence.paginateBy(key, details.direction, details.limit);
158
+ }
159
+ async findOneBy(key, value) {
160
+ return this.persistence.findOneBy(key, value);
161
+ }
162
+ async findBy(key, value, details) {
163
+ return this.persistence.findBy(key, value);
164
+ }
165
+ async statement(name, args, details) {
166
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
167
+ const { direction, offset, limit } = details;
168
+ args = args.map((a) => (typeof a === "string" ? parseInt(a) : a) || a);
169
+ switch (name) {
170
+ case core_1.PreparedStatementKeys.FIND_BY:
171
+ break;
172
+ case core_1.PreparedStatementKeys.LIST_BY:
173
+ args.push(direction);
174
+ break;
175
+ case core_1.PreparedStatementKeys.PAGE_BY:
176
+ args.push(direction, limit);
177
+ break;
178
+ case core_1.PreparedStatementKeys.FIND_ONE_BY:
179
+ break;
180
+ }
181
+ return this.persistence.statement(name, ...args);
182
+ }
183
+ async createAll(data) {
184
+ const log = this.log.for(this.createAll);
185
+ log.verbose(`creating new ${modelClazzName}`);
186
+ let created;
187
+ try {
188
+ created = await this.persistence.createAll(data.map((d) => new ModelConstr(d)));
189
+ }
190
+ catch (e) {
191
+ log.error(`Failed to create new ${modelClazzName}`, e);
192
+ throw e;
193
+ }
194
+ log.info(`created new ${modelClazzName} with id ${created[this.pk]}`);
195
+ return created;
196
+ }
103
197
  async create(data) {
104
198
  const log = this.log.for(this.create);
105
199
  log.verbose(`creating new ${modelClazzName}`);
@@ -114,8 +208,22 @@ class FromModelController {
114
208
  log.info(`created new ${modelClazzName} with id ${created[this.pk]}`);
115
209
  return created;
116
210
  }
211
+ async readAll(ids) {
212
+ const log = this.log.for(this.readAll);
213
+ let read;
214
+ try {
215
+ log.debug(`reading ${ids.length} ${modelClazzName}: ${ids}`);
216
+ read = await this.persistence.readAll(ids);
217
+ }
218
+ catch (e) {
219
+ log.error(`Failed to ${modelClazzName} with id ${ids}`, e);
220
+ throw e;
221
+ }
222
+ log.info(`read ${read.length} ${modelClazzName}`);
223
+ return read;
224
+ }
117
225
  async read(routeParams) {
118
- const id = getPK(...routeParams.ordered);
226
+ const id = getPK(...routeParams.valuesInOrder);
119
227
  if (typeof id === "undefined")
120
228
  throw new db_decorators_1.ValidationError(`No ${this.pk} provided`);
121
229
  const log = this.log.for(this.read);
@@ -131,30 +239,28 @@ class FromModelController {
131
239
  log.info(`read ${modelClazzName} with id ${read[this.pk]}`);
132
240
  return read;
133
241
  }
134
- async query(method) {
135
- const log = this.log.for(this.read);
136
- let results;
242
+ async updateAll(body) {
243
+ const log = this.log.for(this.updateAll);
244
+ let updated;
137
245
  try {
138
- log.debug(`Querying ${modelClazzName} using method "${method}"`);
139
- const args = [method];
140
- results = await this.persistence.query(...args);
246
+ log.info(`updating ${body.length} ${modelClazzName}`);
247
+ updated = await this.persistence.updateAll(body);
141
248
  }
142
249
  catch (e) {
143
- log.error(`Failed to query ${modelClazzName} using method "${method}"`, e);
250
+ log.error(e);
144
251
  throw e;
145
252
  }
146
- log.info(`Successfully queried ${modelClazzName} using method "${method}"`);
147
- return results;
253
+ return updated;
148
254
  }
149
255
  async update(routeParams, body) {
150
256
  const log = this.log.for(this.update);
151
- const id = getPK(...routeParams.ordered);
257
+ const id = getPK(...routeParams.valuesInOrder);
152
258
  if (typeof id === "undefined")
153
259
  throw new db_decorators_1.ValidationError(`No ${this.pk} provided`);
154
260
  let updated;
155
261
  try {
156
262
  log.info(`updating ${modelClazzName} with ${this.pk} ${id}`);
157
- updated = await this.persistence.update(new ModelClazz({
263
+ updated = await this.persistence.update(new ModelConstr({
158
264
  ...body,
159
265
  [this.pk]: id,
160
266
  }));
@@ -165,9 +271,23 @@ class FromModelController {
165
271
  }
166
272
  return updated;
167
273
  }
274
+ async deleteAll(ids) {
275
+ const log = this.log.for(this.deleteAll);
276
+ let read;
277
+ try {
278
+ log.debug(`deleting ${ids.length} ${modelClazzName}: ${ids}`);
279
+ read = await this.persistence.deleteAll(ids);
280
+ }
281
+ catch (e) {
282
+ log.error(`Failed to delete ${modelClazzName} with id ${ids}`, e);
283
+ throw e;
284
+ }
285
+ log.info(`deleted ${read.length} ${modelClazzName}`);
286
+ return read;
287
+ }
168
288
  async delete(routeParams) {
169
289
  const log = this.log.for(this.delete);
170
- const id = getPK(...routeParams.ordered);
290
+ const id = getPK(...routeParams.valuesInOrder);
171
291
  if (typeof id === "undefined")
172
292
  throw new db_decorators_1.ValidationError(`No ${this.pk} provided`);
173
293
  let del;
@@ -184,11 +304,153 @@ class FromModelController {
184
304
  }
185
305
  };
186
306
  __decorate([
187
- (0, decorators_1.ApiOperationFromModel)(ModelClazz, "POST"),
307
+ (0, decorators_1.ApiOperationFromModel)(ModelConstr, "GET", "listBy/:key"),
308
+ (0, swagger_1.ApiOperation)({ summary: `Retrieve ${modelClazzName} records by query.` }),
309
+ (0, swagger_1.ApiParam)({ name: "key", description: "the model key to sort by" }),
310
+ (0, swagger_1.ApiQuery)({ name: "direction", required: true, enum: core_1.OrderDirection }),
311
+ (0, swagger_1.ApiOkResponse)({
312
+ description: `${modelClazzName} listed successfully.`,
313
+ }),
314
+ __param(1, (0, common_1.Query)()),
315
+ __metadata("design:type", Function),
316
+ __metadata("design:paramtypes", [String, Object]),
317
+ __metadata("design:returntype", Promise)
318
+ ], DynamicModelController.prototype, "listBy", null);
319
+ __decorate([
320
+ (0, decorators_1.ApiOperationFromModel)(ModelConstr, "GET", "paginateBy/:key/:page"),
321
+ (0, swagger_1.ApiOperation)({ summary: `Retrieve ${modelClazzName} records by query.` }),
322
+ (0, swagger_1.ApiParam)({ name: "key", description: "the model key to sort by" }),
323
+ (0, swagger_1.ApiParam)({
324
+ name: "page",
325
+ description: "the page to retrieve or the bookmark",
326
+ }),
327
+ (0, swagger_1.ApiQuery)({
328
+ name: "direction",
329
+ required: true,
330
+ enum: core_1.OrderDirection,
331
+ description: "the sort order",
332
+ }),
333
+ (0, swagger_1.ApiQuery)({ name: "limit", required: true, description: "the page size" }),
334
+ (0, swagger_1.ApiOkResponse)({
335
+ description: `${modelClazzName} listed paginated.`,
336
+ }),
337
+ __param(0, (0, common_1.Param)("key")),
338
+ __param(1, (0, common_1.Param)("page")),
339
+ __param(2, (0, common_1.Query)()),
340
+ __metadata("design:type", Function),
341
+ __metadata("design:paramtypes", [String, Object, Object]),
342
+ __metadata("design:returntype", Promise)
343
+ ], DynamicModelController.prototype, "paginateBy", null);
344
+ __decorate([
345
+ (0, decorators_1.ApiOperationFromModel)(ModelConstr, "GET", "findOneBy/:key"),
346
+ (0, swagger_1.ApiOperation)({ summary: `Retrieve ${modelClazzName} records by query.` }),
347
+ (0, swagger_1.ApiParam)({ name: "key", description: "the model key to sort by" }),
348
+ (0, swagger_1.ApiOkResponse)({
349
+ description: `${modelClazzName} listed found.`,
350
+ }),
351
+ (0, swagger_1.ApiNotFoundResponse)({
352
+ description: `No ${modelClazzName} record matches the provided identifier.`,
353
+ }),
354
+ __param(0, (0, common_1.Param)("key")),
355
+ __param(1, (0, common_1.Param)("value")),
356
+ __metadata("design:type", Function),
357
+ __metadata("design:paramtypes", [String, Object]),
358
+ __metadata("design:returntype", Promise)
359
+ ], DynamicModelController.prototype, "findOneBy", null);
360
+ __decorate([
361
+ (0, decorators_1.ApiOperationFromModel)(ModelConstr, "GET", "findBy/:key/:value"),
362
+ (0, swagger_1.ApiOperation)({ summary: `Retrieve ${modelClazzName} records by query.` }),
363
+ (0, swagger_1.ApiParam)({ name: "key", description: "the model key to compare" }),
364
+ (0, swagger_1.ApiParam)({ name: "value", description: "the value to match" }),
365
+ (0, swagger_1.ApiQuery)({
366
+ name: "direction",
367
+ required: true,
368
+ enum: core_1.OrderDirection,
369
+ description: "the sort order when applicable",
370
+ }),
371
+ (0, swagger_1.ApiOkResponse)({
372
+ description: `${modelClazzName} listed found.`,
373
+ }),
374
+ (0, swagger_1.ApiNotFoundResponse)({
375
+ description: `No ${modelClazzName} record matches the provided identifier.`,
376
+ }),
377
+ __param(0, (0, common_1.Param)("key")),
378
+ __param(1, (0, common_1.Param)("value")),
379
+ __param(2, (0, common_1.Query)()),
380
+ __metadata("design:type", Function),
381
+ __metadata("design:paramtypes", [String, Object, Object]),
382
+ __metadata("design:returntype", Promise)
383
+ ], DynamicModelController.prototype, "findBy", null);
384
+ __decorate([
385
+ (0, decorators_1.ApiOperationFromModel)(ModelConstr, "GET", "statement/:method/*args"),
386
+ (0, swagger_1.ApiOperation)({
387
+ summary: `Executes a prepared statement on ${modelClazzName}.`,
388
+ }),
389
+ (0, swagger_1.ApiParam)({
390
+ name: "method",
391
+ description: "the prepared statement to execute",
392
+ }),
393
+ (0, swagger_1.ApiParam)({
394
+ name: "args",
395
+ description: "concatenated list of arguments the prepared statement can accept",
396
+ }),
397
+ (0, swagger_1.ApiQuery)({
398
+ name: "direction",
399
+ required: true,
400
+ enum: core_1.OrderDirection,
401
+ description: "the sort order when applicable",
402
+ }),
403
+ (0, swagger_1.ApiQuery)({
404
+ name: "limit",
405
+ required: true,
406
+ description: "limit or page size when applicable",
407
+ }),
408
+ (0, swagger_1.ApiQuery)({
409
+ name: "offset",
410
+ required: true,
411
+ description: "offset or bookmark when applicable",
412
+ }),
413
+ (0, swagger_1.ApiOkResponse)({
414
+ description: `${modelClazzName} listed found.`,
415
+ }),
416
+ (0, swagger_1.ApiNotFoundResponse)({
417
+ description: `No ${modelClazzName} record matches the provided identifier.`,
418
+ }),
419
+ __param(0, (0, common_1.Param)("method")),
420
+ __param(1, (0, common_1.Param)("args")),
421
+ __param(2, (0, common_1.Query)()),
422
+ __metadata("design:type", Function),
423
+ __metadata("design:paramtypes", [String, Array, Object]),
424
+ __metadata("design:returntype", Promise)
425
+ ], DynamicModelController.prototype, "statement", null);
426
+ __decorate([
427
+ (0, decorators_1.ApiOperationFromModel)(ModelConstr, "POST", "bulk"),
428
+ (0, swagger_1.ApiOperation)({ summary: `Create a new ${modelClazzName}.` }),
429
+ (0, swagger_1.ApiBody)({
430
+ description: `Payload for ${modelClazzName}`,
431
+ schema: {
432
+ type: "array",
433
+ items: { $ref: (0, swagger_1.getSchemaPath)(ModelConstr) },
434
+ },
435
+ }),
436
+ (0, swagger_1.ApiCreatedResponse)({
437
+ description: `x ${modelClazzName} created successfully.`,
438
+ }),
439
+ (0, swagger_1.ApiBadRequestResponse)({ description: "Payload validation failed." }),
440
+ (0, swagger_1.ApiUnprocessableEntityResponse)({
441
+ description: "Repository rejected the provided payload.",
442
+ }),
443
+ __param(0, (0, common_1.Body)()),
444
+ __metadata("design:type", Function),
445
+ __metadata("design:paramtypes", [Array]),
446
+ __metadata("design:returntype", Promise)
447
+ ], DynamicModelController.prototype, "createAll", null);
448
+ __decorate([
449
+ (0, decorators_1.ApiOperationFromModel)(ModelConstr, "POST"),
188
450
  (0, swagger_1.ApiOperation)({ summary: `Create a new ${modelClazzName}.` }),
189
451
  (0, swagger_1.ApiBody)({
190
452
  description: `Payload for ${modelClazzName}`,
191
- schema: { $ref: (0, swagger_1.getSchemaPath)(ModelClazz) },
453
+ schema: { $ref: (0, swagger_1.getSchemaPath)(ModelConstr) },
192
454
  }),
193
455
  (0, swagger_1.ApiCreatedResponse)({
194
456
  description: `${modelClazzName} created successfully.`,
@@ -203,7 +465,22 @@ class FromModelController {
203
465
  __metadata("design:returntype", Promise)
204
466
  ], DynamicModelController.prototype, "create", null);
205
467
  __decorate([
206
- (0, decorators_1.ApiOperationFromModel)(ModelClazz, "GET", path),
468
+ (0, decorators_1.ApiOperationFromModel)(ModelConstr, "GET", "bulk/:ids"),
469
+ (0, swagger_1.ApiOperation)({ summary: `Retrieve a ${modelClazzName} record by id.` }),
470
+ (0, swagger_1.ApiQuery)({ name: "ids", required: true, type: "array" }),
471
+ (0, swagger_1.ApiOkResponse)({
472
+ description: `${modelClazzName} retrieved successfully.`,
473
+ }),
474
+ (0, swagger_1.ApiNotFoundResponse)({
475
+ description: `No ${modelClazzName} record matches the provided identifier.`,
476
+ }),
477
+ __param(0, (0, common_1.Query)("ids")),
478
+ __metadata("design:type", Function),
479
+ __metadata("design:paramtypes", [Array]),
480
+ __metadata("design:returntype", Promise)
481
+ ], DynamicModelController.prototype, "readAll", null);
482
+ __decorate([
483
+ (0, decorators_1.ApiOperationFromModel)(ModelConstr, "GET", path),
207
484
  (0, decorators_1.ApiParamsFromModel)(apiProperties),
208
485
  (0, swagger_1.ApiOperation)({ summary: `Retrieve a ${modelClazzName} record by id.` }),
209
486
  (0, swagger_1.ApiOkResponse)({
@@ -218,32 +495,42 @@ class FromModelController {
218
495
  __metadata("design:returntype", Promise)
219
496
  ], DynamicModelController.prototype, "read", null);
220
497
  __decorate([
221
- (0, decorators_1.ApiOperationFromModel)(ModelClazz, "GET", "query/:method"),
222
- (0, swagger_1.ApiOperation)({ summary: `Retrieve ${modelClazzName} records by query.` }),
223
- (0, swagger_1.ApiParam)({ name: "method", description: "Query method to be called" }),
498
+ (0, decorators_1.ApiOperationFromModel)(ModelConstr, "PUT", `${path}/bulk`),
499
+ (0, decorators_1.ApiParamsFromModel)(apiProperties),
500
+ (0, swagger_1.ApiOperation)({
501
+ summary: `Replace an existing ${modelClazzName} record with a new payload.`,
502
+ }),
503
+ (0, swagger_1.ApiBody)({
504
+ description: `Payload for replace a existing record of ${modelClazzName}`,
505
+ schema: {
506
+ type: "array",
507
+ items: { $ref: (0, swagger_1.getSchemaPath)(ModelConstr) },
508
+ },
509
+ }),
224
510
  (0, swagger_1.ApiOkResponse)({
225
- description: `${modelClazzName} retrieved successfully.`,
511
+ description: `${ModelConstr} record replaced successfully.`,
226
512
  }),
227
513
  (0, swagger_1.ApiNotFoundResponse)({
228
- description: `No ${modelClazzName} records matches the query.`,
514
+ description: `No ${modelClazzName} record matches the provided identifier.`,
229
515
  }),
230
- __param(0, (0, common_1.Param)("method")),
516
+ (0, swagger_1.ApiBadRequestResponse)({ description: "Payload validation failed." }),
517
+ __param(0, (0, common_1.Body)()),
231
518
  __metadata("design:type", Function),
232
- __metadata("design:paramtypes", [String]),
519
+ __metadata("design:paramtypes", [Array]),
233
520
  __metadata("design:returntype", Promise)
234
- ], DynamicModelController.prototype, "query", null);
521
+ ], DynamicModelController.prototype, "updateAll", null);
235
522
  __decorate([
236
- (0, decorators_1.ApiOperationFromModel)(ModelClazz, "PUT", path),
523
+ (0, decorators_1.ApiOperationFromModel)(ModelConstr, "PUT", path),
237
524
  (0, decorators_1.ApiParamsFromModel)(apiProperties),
238
525
  (0, swagger_1.ApiOperation)({
239
526
  summary: `Replace an existing ${modelClazzName} record with a new payload.`,
240
527
  }),
241
528
  (0, swagger_1.ApiBody)({
242
529
  description: `Payload for replace a existing record of ${modelClazzName}`,
243
- schema: { $ref: (0, swagger_1.getSchemaPath)(ModelClazz) },
530
+ schema: { $ref: (0, swagger_1.getSchemaPath)(ModelConstr) },
244
531
  }),
245
532
  (0, swagger_1.ApiOkResponse)({
246
- description: `${ModelClazz} record replaced successfully.`,
533
+ description: `${ModelConstr} record replaced successfully.`,
247
534
  }),
248
535
  (0, swagger_1.ApiNotFoundResponse)({
249
536
  description: `No ${modelClazzName} record matches the provided identifier.`,
@@ -256,7 +543,23 @@ class FromModelController {
256
543
  __metadata("design:returntype", Promise)
257
544
  ], DynamicModelController.prototype, "update", null);
258
545
  __decorate([
259
- (0, decorators_1.ApiOperationFromModel)(ModelClazz, "DELETE", path),
546
+ (0, decorators_1.ApiOperationFromModel)(ModelConstr, "DELETE", "bulk/:ids"),
547
+ (0, decorators_1.ApiParamsFromModel)(apiProperties),
548
+ (0, swagger_1.ApiOperation)({ summary: `Retrieve a ${modelClazzName} record by id.` }),
549
+ (0, swagger_1.ApiQuery)({ name: "ids", required: true, type: "array" }),
550
+ (0, swagger_1.ApiOkResponse)({
551
+ description: `${modelClazzName} retrieved successfully.`,
552
+ }),
553
+ (0, swagger_1.ApiNotFoundResponse)({
554
+ description: `No ${modelClazzName} record matches the provided identifier.`,
555
+ }),
556
+ __param(0, (0, common_1.Query)("ids")),
557
+ __metadata("design:type", Function),
558
+ __metadata("design:paramtypes", [Array]),
559
+ __metadata("design:returntype", Promise)
560
+ ], DynamicModelController.prototype, "deleteAll", null);
561
+ __decorate([
562
+ (0, decorators_1.ApiOperationFromModel)(ModelConstr, "DELETE", path),
260
563
  (0, decorators_1.ApiParamsFromModel)(apiProperties),
261
564
  (0, swagger_1.ApiOperation)({ summary: `Delete a ${modelClazzName} record by id.` }),
262
565
  (0, swagger_1.ApiOkResponse)({
@@ -273,8 +576,8 @@ class FromModelController {
273
576
  DynamicModelController = __decorate([
274
577
  (0, common_1.Controller)(routePath),
275
578
  (0, swagger_1.ApiTags)(modelClazzName),
276
- (0, swagger_1.ApiExtraModels)(ModelClazz),
277
- (0, decorators_2.Auth)(ModelClazz),
579
+ (0, swagger_1.ApiExtraModels)(ModelConstr),
580
+ (0, decorators_2.Auth)(ModelConstr),
278
581
  __metadata("design:paramtypes", [request_1.DecafRequestContext])
279
582
  ], DynamicModelController);
280
583
  return DynamicModelController;
@@ -283,13 +586,12 @@ class FromModelController {
283
586
  const pk = decorator_validation_1.Model.pk(ModelClazz);
284
587
  const composed = decoration_1.Metadata.get(ModelClazz, decoration_1.Metadata.key(db_decorators_1.DBKeys.COMPOSED, pk));
285
588
  const composedKeys = composed?.args ?? [];
286
- const keysToReturn = Array.isArray(composedKeys) && composedKeys.length > 0
287
- ? [...composedKeys]
288
- : [pk];
289
- const description = decoration_1.Metadata.description(ModelClazz);
290
589
  // remove duplicates while preserving order
291
- const uniqueKeys = Array.from(new Set(keysToReturn));
292
- const path = uniqueKeys.map((key) => `:${key}`).join("/");
590
+ const uniqueKeys = Array.isArray(composedKeys) && composedKeys.length > 0
591
+ ? Array.from(new Set([...composedKeys]))
592
+ : Array.from(new Set([pk]));
593
+ const description = decoration_1.Metadata.description(ModelClazz);
594
+ const path = `:${uniqueKeys.join("/:")}`;
293
595
  const apiProperties = uniqueKeys.map((key) => {
294
596
  return {
295
597
  name: key,
@@ -1,5 +1,7 @@
1
+ import { ModelService, type Repo } from "@decaf-ts/core";
1
2
  import { Model, ModelConstructor } from "@decaf-ts/decorator-validation";
2
- import type { DecafModelRoute } from "./decorators";
3
+ import { type DecafModelRoute } from "./decorators";
4
+ import { AbstractQueryController, ControllerConstructor } from "./types";
3
5
  /**
4
6
  * @description
5
7
  * Factory and utilities for generating dynamic NestJS controllers from Decaf {@link Model} definitions.
@@ -51,6 +53,8 @@ import type { DecafModelRoute } from "./decorators";
51
53
  */
52
54
  export declare class FromModelController {
53
55
  private static readonly log;
54
- static create<T extends Model<any>>(ModelClazz: ModelConstructor<T>): any;
56
+ static getPersistence<T extends Model<boolean>>(ModelClazz: ModelConstructor<T>): Repo<T> | ModelService<T>;
57
+ static createQueryRoutesFromRepository<T extends Model<boolean>>(persistence: Repo<T> | ModelService<T>, prefix?: string): ControllerConstructor<AbstractQueryController>;
58
+ static create<T extends Model<any>>(ModelConstr: ModelConstructor<T>): any;
55
59
  static getRouteParametersFromModel<T extends Model<any>>(ModelClazz: ModelConstructor<T>): DecafModelRoute;
56
60
  }
@@ -1 +1 @@
1
- {"version":3,"file":"FromModelController.js","sourceRoot":"","sources":["../../src/decaf-model/FromModelController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FromModelController.js","sourceRoot":"","sources":["../../src/decaf-model/FromModelController.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAgE;AAChE,6CAayB;AACzB,yCAQwB;AACxB,yEAAyE;AACzE,+CAAyD;AACzD,2DAAkE;AAClE,qDAA6D;AAM7D,uDAIsB;AACtB,oDAAiD;AACjD,kDAAqD;AACrD,uCAKiB;AACjB,4DAA+C;AAC/C,uCAAyE;AAEzE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,MAAa,mBAAmB;aACN,QAAG,GAAG,iBAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAEpE,MAAM,CAAC,cAAc,CACnB,UAA+B;QAE/B,IAAI,CAAC;YACH,OAAO,mBAAY,CAAC,QAAQ,CAAC,UAAiB,CAAoB,CAAC;YACnE,6DAA6D;QAC/D,CAAC;QAAC,OAAO,CAAU,EAAE,CAAC;YACpB,OAAO,iBAAU,CAAC,QAAQ,CAAC,UAAU,CAAY,CAAC;QACpD,CAAC;IACH,CAAC;IAED,MAAM,CAAC,+BAA+B,CACpC,WAAsC,EACtC,SAAiB,sBAAe,CAAC,SAAS;QAE1C,MAAM,WAAW,GAAgB,WAAW,CAAC,KAAK,CAAC;QACnD,MAAM,aAAa,GACjB,qBAAQ,CAAC,GAAG,CACV,WAAW,CAAC,WAA0B,EACtC,qBAAQ,CAAC,GAAG,CAAC,sBAAe,CAAC,KAAK,CAAC,CACpC,IAAI,EAAE,CAAC;QAEV,oBAAoB;QACpB,MAAM,eAAgB,SAAQ,+BAAuB;YACnD,YAAY,aAAkC;gBAC5C,KAAK,CAAC,aAAa,CAAC,CAAC;gBACrB,IAAI,CAAC,YAAY,GAAG,mBAAmB,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;YACtE,CAAC;YAED,IAAa,WAAW;gBACtB,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,iCAAqB,CAAC,CAAC;gBACrE,IAAI,cAAc;oBAAE,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,CAAQ,CAAC;gBACxE,OAAO,IAAI,CAAC,YAAY,CAAC;YAC3B,CAAC;SACF;QAED,KAAK,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;YACpE,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,IAAI,EAAE,CAAC;YACtC,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;iBAClE,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;iBAC9C,IAAI,CAAC,GAAG,CAAC,CAAC;YAEb,MAAM,OAAO,GAAG,IAAA,0BAAkB,EAAC,UAAU,CAAQ,CAAC;YACtD,MAAM,UAAU,GAAG,IAAA,yBAAiB,EAClC,eAAe,EACf,UAAU,EACV,OAAO,CACR,CAAC;YAEF,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,UAAU,GAAG,IAAA,wBAAgB,EAAC,UAAU,EAAE,SAAS,CAAC,CAAC;gBAE3D,IAAA,0BAAkB,EAAC,eAAe,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC;QAED,OAAO,eAAe,CAAC;IACzB,CAAC;IAEM,AAAP,MAAM,CAAC,MAAM,CAAuB,WAAgC;QAClE,MAAM,GAAG,GAAG,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACpE,MAAM,SAAS,GAAG,4BAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QAC/C,MAAM,SAAS,GAAG,IAAA,qBAAW,EAAC,SAAS,CAAC,CAAC;QACzC,MAAM,cAAc,GAAG,WAAW,CAAC,IAAI,CAAC;QACxC,MAAM,WAAW,GAAG,mBAAmB,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QAEpE,6DAA6D;QAC7D,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,GAC/C,mBAAmB,CAAC,2BAA2B,CAAC,WAAW,CAAC,CAAC;QAE/D,GAAG,CAAC,KAAK,CAAC,kCAAkC,cAAc,EAAE,CAAC,CAAC;QAE9D,MAAM,cAAc,GAAG,mBAAmB,CAAC,+BAA+B,CACxE,WAAW,CAC4B,CAAC;QAE1C,IAIM,sBAAsB,GAJ5B,MAIM,sBAAuB,SAAQ,cAAc;YAGjD,YAAY,aAAkC;gBAC5C,KAAK,CAAC,aAAa,CAAC,CAAC;gBAHN,OAAE,GAAW,4BAAK,CAAC,EAAE,CAAC,WAAW,CAAW,CAAC;gBAI5D,GAAG,CAAC,IAAI,CACN,6CAA6C,cAAc,YAAY,SAAS,EAAE,CACnF,CAAC;YACJ,CAAC;YAED,EAAE;YACF,yEAAyE;YACzE,6EAA6E;YAC7E,0EAA0E;YAC1E,mBAAmB;YACnB,8DAA8D;YAC9D,KAAK;YACL,yBAAyB;YACzB,oEAAoE;YACpE,KAAK;YACL,eAAe;YACf,mDAAmD;YACnD,uCAAuC;YACvC,mDAAmD;YACnD,MAAM;YACN,gDAAgD;YAChD,gGAAgG;YAChG,IAAI;YASE,AAAN,KAAK,CAAC,MAAM,CAAC,GAAW,EAAW,OAA6B;gBAC9D,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAC5B,GAAc,EACd,OAAO,CAAC,SAA2B,CACpC,CAAC;YACJ,CAAC;YAmBK,AAAN,KAAK,CAAC,UAAU,CACA,GAAW,EACV,IAAqB,EAC3B,OAA6B;gBAEtC,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,CAChC,GAAc,EACd,OAAO,CAAC,SAA2B,EACnC,OAAO,CAAC,KAAe,CACxB,CAAC;YACJ,CAAC;YAWK,AAAN,KAAK,CAAC,SAAS,CAAe,GAAW,EAAkB,KAAU;gBACnE,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAc,EAAE,KAAK,CAAC,CAAC;YAC3D,CAAC;YAkBK,AAAN,KAAK,CAAC,MAAM,CACI,GAAW,EACT,KAAU,EAEjB,OAA6B;gBAEtC,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAc,EAAE,KAAK,CAAC,CAAC;YACxD,CAAC;YAqCK,AAAN,KAAK,CAAC,SAAS,CACI,IAAY,EACd,IAAyB,EAC/B,OAA6B;gBAEtC,6DAA6D;gBAC7D,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;gBAC7C,IAAI,GAAG,IAAI,CAAC,GAAG,CACb,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAC7C,CAAC;gBACX,QAAQ,IAAI,EAAE,CAAC;oBACb,KAAK,4BAAqB,CAAC,OAAO;wBAChC,MAAM;oBACR,KAAK,4BAAqB,CAAC,OAAO;wBAChC,IAAI,CAAC,IAAI,CAAC,SAAmB,CAAC,CAAC;wBAC/B,MAAM;oBACR,KAAK,4BAAqB,CAAC,OAAO;wBAChC,IAAI,CAAC,IAAI,CAAC,SAAmB,EAAE,KAAe,CAAC,CAAC;wBAChD,MAAM;oBACR,KAAK,4BAAqB,CAAC,WAAW;wBACpC,MAAM;gBACV,CAAC;gBACD,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;YACnD,CAAC;YAkBK,AAAN,KAAK,CAAC,SAAS,CAAS,IAAS;gBAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACzC,GAAG,CAAC,OAAO,CAAC,gBAAgB,cAAc,EAAE,CAAC,CAAC;gBAC9C,IAAI,OAAY,CAAC;gBACjB,IAAI,CAAC;oBACH,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CACxC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CACpC,CAAC;gBACJ,CAAC;gBAAC,OAAO,CAAU,EAAE,CAAC;oBACpB,GAAG,CAAC,KAAK,CAAC,wBAAwB,cAAc,EAAE,EAAE,CAAU,CAAC,CAAC;oBAChE,MAAM,CAAC,CAAC;gBACV,CAAC;gBACD,GAAG,CAAC,IAAI,CACN,eAAe,cAAc,YAAa,OAAe,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CACrE,CAAC;gBACF,OAAO,OAAO,CAAC;YACjB,CAAC;YAeK,AAAN,KAAK,CAAC,MAAM,CAAS,IAAO;gBAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACtC,GAAG,CAAC,OAAO,CAAC,gBAAgB,cAAc,EAAE,CAAC,CAAC;gBAC9C,IAAI,OAAc,CAAC;gBACnB,IAAI,CAAC;oBACH,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAChD,CAAC;gBAAC,OAAO,CAAU,EAAE,CAAC;oBACpB,GAAG,CAAC,KAAK,CAAC,wBAAwB,cAAc,EAAE,EAAE,CAAU,CAAC,CAAC;oBAChE,MAAM,CAAC,CAAC;gBACV,CAAC;gBACD,GAAG,CAAC,IAAI,CACN,eAAe,cAAc,YAAa,OAAe,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CACrE,CAAC;gBACF,OAAO,OAAO,CAAC;YACjB,CAAC;YAWK,AAAN,KAAK,CAAC,OAAO,CAAe,GAAa;gBACvC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACvC,IAAI,IAAa,CAAC;gBAClB,IAAI,CAAC;oBACH,GAAG,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,MAAM,IAAI,cAAc,KAAK,GAAG,EAAE,CAAC,CAAC;oBAC7D,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAC7C,CAAC;gBAAC,OAAO,CAAU,EAAE,CAAC;oBACpB,GAAG,CAAC,KAAK,CAAC,aAAa,cAAc,YAAY,GAAG,EAAE,EAAE,CAAU,CAAC,CAAC;oBACpE,MAAM,CAAC,CAAC;gBACV,CAAC;gBAED,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM,IAAI,cAAc,EAAE,CAAC,CAAC;gBAClD,OAAO,IAAI,CAAC;YACd,CAAC;YAWK,AAAN,KAAK,CAAC,IAAI,CAA6B,WAA4B;gBACjE,MAAM,EAAE,GAAG,KAAK,CAAC,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC;gBAC/C,IAAI,OAAO,EAAE,KAAK,WAAW;oBAC3B,MAAM,IAAI,+BAAe,CAAC,MAAM,IAAI,CAAC,EAAE,WAAW,CAAC,CAAC;gBAEtD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACpC,IAAI,IAAW,CAAC;gBAChB,IAAI,CAAC;oBACH,GAAG,CAAC,KAAK,CAAC,WAAW,cAAc,SAAS,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;oBAC7D,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACzC,CAAC;gBAAC,OAAO,CAAU,EAAE,CAAC;oBACpB,GAAG,CAAC,KAAK,CACP,kBAAkB,cAAc,YAAY,EAAE,EAAE,EAChD,CAAU,CACX,CAAC;oBACF,MAAM,CAAC,CAAC;gBACV,CAAC;gBAED,GAAG,CAAC,IAAI,CAAC,QAAQ,cAAc,YAAa,IAAY,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBACrE,OAAO,IAAI,CAAC;YACd,CAAC;YAqBK,AAAN,KAAK,CAAC,SAAS,CAAS,IAAS;gBAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAEzC,IAAI,OAAgB,CAAC;gBACrB,IAAI,CAAC;oBACH,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,MAAM,IAAI,cAAc,EAAE,CAAC,CAAC;oBACtD,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBACnD,CAAC;gBAAC,OAAO,CAAU,EAAE,CAAC;oBACpB,GAAG,CAAC,KAAK,CAAC,CAAU,CAAC,CAAC;oBACtB,MAAM,CAAC,CAAC;gBACV,CAAC;gBACD,OAAO,OAAO,CAAC;YACjB,CAAC;YAkBK,AAAN,KAAK,CAAC,MAAM,CACkB,WAA4B,EAChD,IAAgB;gBAExB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACtC,MAAM,EAAE,GAAG,KAAK,CAAC,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC;gBAC/C,IAAI,OAAO,EAAE,KAAK,WAAW;oBAC3B,MAAM,IAAI,+BAAe,CAAC,MAAM,IAAI,CAAC,EAAE,WAAW,CAAC,CAAC;gBAEtD,IAAI,OAAc,CAAC;gBACnB,IAAI,CAAC;oBACH,GAAG,CAAC,IAAI,CAAC,YAAY,cAAc,SAAS,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;oBAC7D,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CACrC,IAAI,WAAW,CAAC;wBACd,GAAG,IAAI;wBACP,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;qBACd,CAAC,CACH,CAAC;gBACJ,CAAC;gBAAC,OAAO,CAAU,EAAE,CAAC;oBACpB,GAAG,CAAC,KAAK,CAAC,CAAU,CAAC,CAAC;oBACtB,MAAM,CAAC,CAAC;gBACV,CAAC;gBACD,OAAO,OAAO,CAAC;YACjB,CAAC;YAYK,AAAN,KAAK,CAAC,SAAS,CAAe,GAAa;gBACzC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACzC,IAAI,IAAa,CAAC;gBAClB,IAAI,CAAC;oBACH,GAAG,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,MAAM,IAAI,cAAc,KAAK,GAAG,EAAE,CAAC,CAAC;oBAC9D,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBAC/C,CAAC;gBAAC,OAAO,CAAU,EAAE,CAAC;oBACpB,GAAG,CAAC,KAAK,CACP,oBAAoB,cAAc,YAAY,GAAG,EAAE,EACnD,CAAU,CACX,CAAC;oBACF,MAAM,CAAC,CAAC;gBACV,CAAC;gBAED,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,MAAM,IAAI,cAAc,EAAE,CAAC,CAAC;gBACrD,OAAO,IAAI,CAAC;YACd,CAAC;YAWK,AAAN,KAAK,CAAC,MAAM,CAA6B,WAA4B;gBACnE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACtC,MAAM,EAAE,GAAG,KAAK,CAAC,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC;gBAC/C,IAAI,OAAO,EAAE,KAAK,WAAW;oBAC3B,MAAM,IAAI,+BAAe,CAAC,MAAM,IAAI,CAAC,EAAE,WAAW,CAAC,CAAC;gBAEtD,IAAI,GAAU,CAAC;gBACf,IAAI,CAAC;oBACH,GAAG,CAAC,KAAK,CACP,YAAY,cAAc,SAAS,IAAI,CAAC,EAAY,IAAI,EAAE,EAAE,CAC7D,CAAC;oBACF,GAAG,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC1C,CAAC;gBAAC,OAAO,CAAU,EAAE,CAAC;oBACpB,GAAG,CAAC,KAAK,CACP,oBAAoB,cAAc,YAAY,EAAE,EAAE,EAClD,CAAU,CACX,CAAC;oBACF,MAAM,CAAC,CAAC;gBACV,CAAC;gBACD,GAAG,CAAC,IAAI,CAAC,WAAW,cAAc,YAAY,EAAE,EAAE,CAAC,CAAC;gBACpD,OAAO,GAAG,CAAC;YACb,CAAC;SACF,CAAA;QAjYO;YAPL,IAAA,kCAAqB,EAAC,WAAW,EAAE,KAAK,EAAE,aAAa,CAAC;YACxD,IAAA,sBAAY,EAAC,EAAE,OAAO,EAAE,YAAY,cAAc,oBAAoB,EAAE,CAAC;YACzE,IAAA,kBAAQ,EAAC,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,0BAA0B,EAAE,CAAC;YAClE,IAAA,kBAAQ,EAAC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,qBAAc,EAAE,CAAC;YACrE,IAAA,uBAAa,EAAC;gBACb,WAAW,EAAE,GAAG,cAAc,uBAAuB;aACtD,CAAC;YACyB,WAAA,IAAA,cAAK,GAAE,CAAA;;;;4DAKjC;QAmBK;YAjBL,IAAA,kCAAqB,EAAC,WAAW,EAAE,KAAK,EAAE,uBAAuB,CAAC;YAClE,IAAA,sBAAY,EAAC,EAAE,OAAO,EAAE,YAAY,cAAc,oBAAoB,EAAE,CAAC;YACzE,IAAA,kBAAQ,EAAC,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,0BAA0B,EAAE,CAAC;YAClE,IAAA,kBAAQ,EAAC;gBACR,IAAI,EAAE,MAAM;gBACZ,WAAW,EAAE,sCAAsC;aACpD,CAAC;YACD,IAAA,kBAAQ,EAAC;gBACR,IAAI,EAAE,WAAW;gBACjB,QAAQ,EAAE,IAAI;gBACd,IAAI,EAAE,qBAAc;gBACpB,WAAW,EAAE,gBAAgB;aAC9B,CAAC;YACD,IAAA,kBAAQ,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC;YACzE,IAAA,uBAAa,EAAC;gBACb,WAAW,EAAE,GAAG,cAAc,oBAAoB;aACnD,CAAC;YAEC,WAAA,IAAA,cAAK,EAAC,KAAK,CAAC,CAAA;YACZ,WAAA,IAAA,cAAK,EAAC,MAAM,CAAC,CAAA;YACb,WAAA,IAAA,cAAK,GAAE,CAAA;;;;gEAOT;QAWK;YATL,IAAA,kCAAqB,EAAC,WAAW,EAAE,KAAK,EAAE,gBAAgB,CAAC;YAC3D,IAAA,sBAAY,EAAC,EAAE,OAAO,EAAE,YAAY,cAAc,oBAAoB,EAAE,CAAC;YACzE,IAAA,kBAAQ,EAAC,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,0BAA0B,EAAE,CAAC;YAClE,IAAA,uBAAa,EAAC;gBACb,WAAW,EAAE,GAAG,cAAc,gBAAgB;aAC/C,CAAC;YACD,IAAA,6BAAmB,EAAC;gBACnB,WAAW,EAAE,MAAM,cAAc,0CAA0C;aAC5E,CAAC;YACe,WAAA,IAAA,cAAK,EAAC,KAAK,CAAC,CAAA;YAAe,WAAA,IAAA,cAAK,EAAC,OAAO,CAAC,CAAA;;;;+DAEzD;QAkBK;YAhBL,IAAA,kCAAqB,EAAC,WAAW,EAAE,KAAK,EAAE,oBAAoB,CAAC;YAC/D,IAAA,sBAAY,EAAC,EAAE,OAAO,EAAE,YAAY,cAAc,oBAAoB,EAAE,CAAC;YACzE,IAAA,kBAAQ,EAAC,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,0BAA0B,EAAE,CAAC;YAClE,IAAA,kBAAQ,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,CAAC;YAC9D,IAAA,kBAAQ,EAAC;gBACR,IAAI,EAAE,WAAW;gBACjB,QAAQ,EAAE,IAAI;gBACd,IAAI,EAAE,qBAAc;gBACpB,WAAW,EAAE,iCAAiC;aAC/C,CAAC;YACD,IAAA,uBAAa,EAAC;gBACb,WAAW,EAAE,GAAG,cAAc,gBAAgB;aAC/C,CAAC;YACD,IAAA,6BAAmB,EAAC;gBACnB,WAAW,EAAE,MAAM,cAAc,0CAA0C;aAC5E,CAAC;YAEC,WAAA,IAAA,cAAK,EAAC,KAAK,CAAC,CAAA;YACZ,WAAA,IAAA,cAAK,EAAC,OAAO,CAAC,CAAA;YAEd,WAAA,IAAA,cAAK,GAAE,CAAA;;;;4DAGT;QAqCK;YAnCL,IAAA,kCAAqB,EAAC,WAAW,EAAE,KAAK,EAAE,yBAAyB,CAAC;YACpE,IAAA,sBAAY,EAAC;gBACZ,OAAO,EAAE,oCAAoC,cAAc,GAAG;aAC/D,CAAC;YACD,IAAA,kBAAQ,EAAC;gBACR,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,mCAAmC;aACjD,CAAC;YACD,IAAA,kBAAQ,EAAC;gBACR,IAAI,EAAE,MAAM;gBACZ,WAAW,EACT,kEAAkE;aACrE,CAAC;YACD,IAAA,kBAAQ,EAAC;gBACR,IAAI,EAAE,WAAW;gBACjB,QAAQ,EAAE,IAAI;gBACd,IAAI,EAAE,qBAAc;gBACpB,WAAW,EAAE,iCAAiC;aAC/C,CAAC;YACD,IAAA,kBAAQ,EAAC;gBACR,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,oCAAoC;aAClD,CAAC;YACD,IAAA,kBAAQ,EAAC;gBACR,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,oCAAoC;aAClD,CAAC;YACD,IAAA,uBAAa,EAAC;gBACb,WAAW,EAAE,GAAG,cAAc,gBAAgB;aAC/C,CAAC;YACD,IAAA,6BAAmB,EAAC;gBACnB,WAAW,EAAE,MAAM,cAAc,0CAA0C;aAC5E,CAAC;YAEC,WAAA,IAAA,cAAK,EAAC,QAAQ,CAAC,CAAA;YACf,WAAA,IAAA,cAAK,EAAC,MAAM,CAAC,CAAA;YACb,WAAA,IAAA,cAAK,GAAE,CAAA;;;;+DAoBT;QAkBK;YAhBL,IAAA,kCAAqB,EAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC;YAClD,IAAA,sBAAY,EAAC,EAAE,OAAO,EAAE,gBAAgB,cAAc,GAAG,EAAE,CAAC;YAC5D,IAAA,iBAAO,EAAC;gBACP,WAAW,EAAE,eAAe,cAAc,EAAE;gBAC5C,MAAM,EAAE;oBACN,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,EAAE,IAAI,EAAE,IAAA,uBAAa,EAAC,WAAW,CAAC,EAAE;iBAC5C;aACF,CAAC;YACD,IAAA,4BAAkB,EAAC;gBAClB,WAAW,EAAE,KAAK,cAAc,wBAAwB;aACzD,CAAC;YACD,IAAA,+BAAqB,EAAC,EAAE,WAAW,EAAE,4BAA4B,EAAE,CAAC;YACpE,IAAA,wCAA8B,EAAC;gBAC9B,WAAW,EAAE,2CAA2C;aACzD,CAAC;YACe,WAAA,IAAA,aAAI,GAAE,CAAA;;;;+DAgBtB;QAeK;YAbL,IAAA,kCAAqB,EAAC,WAAW,EAAE,MAAM,CAAC;YAC1C,IAAA,sBAAY,EAAC,EAAE,OAAO,EAAE,gBAAgB,cAAc,GAAG,EAAE,CAAC;YAC5D,IAAA,iBAAO,EAAC;gBACP,WAAW,EAAE,eAAe,cAAc,EAAE;gBAC5C,MAAM,EAAE,EAAE,IAAI,EAAE,IAAA,uBAAa,EAAC,WAAW,CAAC,EAAE;aAC7C,CAAC;YACD,IAAA,4BAAkB,EAAC;gBAClB,WAAW,EAAE,GAAG,cAAc,wBAAwB;aACvD,CAAC;YACD,IAAA,+BAAqB,EAAC,EAAE,WAAW,EAAE,4BAA4B,EAAE,CAAC;YACpE,IAAA,wCAA8B,EAAC;gBAC9B,WAAW,EAAE,2CAA2C;aACzD,CAAC;YACY,WAAA,IAAA,aAAI,GAAE,CAAA;;;;4DAcnB;QAWK;YATL,IAAA,kCAAqB,EAAC,WAAW,EAAE,KAAK,EAAE,WAAW,CAAC;YACtD,IAAA,sBAAY,EAAC,EAAE,OAAO,EAAE,cAAc,cAAc,gBAAgB,EAAE,CAAC;YACvE,IAAA,kBAAQ,EAAC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;YACxD,IAAA,uBAAa,EAAC;gBACb,WAAW,EAAE,GAAG,cAAc,0BAA0B;aACzD,CAAC;YACD,IAAA,6BAAmB,EAAC;gBACnB,WAAW,EAAE,MAAM,cAAc,0CAA0C;aAC5E,CAAC;YACa,WAAA,IAAA,cAAK,EAAC,KAAK,CAAC,CAAA;;;;6DAa1B;QAWK;YATL,IAAA,kCAAqB,EAAC,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC;YAC/C,IAAA,+BAAkB,EAAC,aAAa,CAAC;YACjC,IAAA,sBAAY,EAAC,EAAE,OAAO,EAAE,cAAc,cAAc,gBAAgB,EAAE,CAAC;YACvE,IAAA,uBAAa,EAAC;gBACb,WAAW,EAAE,GAAG,cAAc,0BAA0B;aACzD,CAAC;YACD,IAAA,6BAAmB,EAAC;gBACnB,WAAW,EAAE,MAAM,cAAc,0CAA0C;aAC5E,CAAC;YACU,WAAA,IAAA,wBAAW,EAAC,aAAa,CAAC,CAAA;;;;0DAoBrC;QAqBK;YAnBL,IAAA,kCAAqB,EAAC,WAAW,EAAE,KAAK,EAAE,GAAG,IAAI,OAAO,CAAC;YACzD,IAAA,+BAAkB,EAAC,aAAa,CAAC;YACjC,IAAA,sBAAY,EAAC;gBACZ,OAAO,EAAE,uBAAuB,cAAc,6BAA6B;aAC5E,CAAC;YACD,IAAA,iBAAO,EAAC;gBACP,WAAW,EAAE,4CAA4C,cAAc,EAAE;gBACzE,MAAM,EAAE;oBACN,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,EAAE,IAAI,EAAE,IAAA,uBAAa,EAAC,WAAW,CAAC,EAAE;iBAC5C;aACF,CAAC;YACD,IAAA,uBAAa,EAAC;gBACb,WAAW,EAAE,GAAG,WAAW,gCAAgC;aAC5D,CAAC;YACD,IAAA,6BAAmB,EAAC;gBACnB,WAAW,EAAE,MAAM,cAAc,0CAA0C;aAC5E,CAAC;YACD,IAAA,+BAAqB,EAAC,EAAE,WAAW,EAAE,4BAA4B,EAAE,CAAC;YACpD,WAAA,IAAA,aAAI,GAAE,CAAA;;;;+DAYtB;QAkBK;YAhBL,IAAA,kCAAqB,EAAC,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC;YAC/C,IAAA,+BAAkB,EAAC,aAAa,CAAC;YACjC,IAAA,sBAAY,EAAC;gBACZ,OAAO,EAAE,uBAAuB,cAAc,6BAA6B;aAC5E,CAAC;YACD,IAAA,iBAAO,EAAC;gBACP,WAAW,EAAE,4CAA4C,cAAc,EAAE;gBACzE,MAAM,EAAE,EAAE,IAAI,EAAE,IAAA,uBAAa,EAAC,WAAW,CAAC,EAAE;aAC7C,CAAC;YACD,IAAA,uBAAa,EAAC;gBACb,WAAW,EAAE,GAAG,WAAW,gCAAgC;aAC5D,CAAC;YACD,IAAA,6BAAmB,EAAC;gBACnB,WAAW,EAAE,MAAM,cAAc,0CAA0C;aAC5E,CAAC;YACD,IAAA,+BAAqB,EAAC,EAAE,WAAW,EAAE,4BAA4B,EAAE,CAAC;YAElE,WAAA,IAAA,wBAAW,EAAC,aAAa,CAAC,CAAA;YAC1B,WAAA,IAAA,aAAI,GAAE,CAAA;;qDAAO,4BAAK;;4DAqBpB;QAYK;YAVL,IAAA,kCAAqB,EAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,CAAC;YACzD,IAAA,+BAAkB,EAAC,aAAa,CAAC;YACjC,IAAA,sBAAY,EAAC,EAAE,OAAO,EAAE,cAAc,cAAc,gBAAgB,EAAE,CAAC;YACvE,IAAA,kBAAQ,EAAC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;YACxD,IAAA,uBAAa,EAAC;gBACb,WAAW,EAAE,GAAG,cAAc,0BAA0B;aACzD,CAAC;YACD,IAAA,6BAAmB,EAAC;gBACnB,WAAW,EAAE,MAAM,cAAc,0CAA0C;aAC5E,CAAC;YACe,WAAA,IAAA,cAAK,EAAC,KAAK,CAAC,CAAA;;;;+DAgB5B;QAWK;YATL,IAAA,kCAAqB,EAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC;YAClD,IAAA,+BAAkB,EAAC,aAAa,CAAC;YACjC,IAAA,sBAAY,EAAC,EAAE,OAAO,EAAE,YAAY,cAAc,gBAAgB,EAAE,CAAC;YACrE,IAAA,uBAAa,EAAC;gBACb,WAAW,EAAE,GAAG,cAAc,+BAA+B;aAC9D,CAAC;YACD,IAAA,6BAAmB,EAAC;gBACnB,WAAW,EAAE,MAAM,cAAc,0CAA0C;aAC5E,CAAC;YACY,WAAA,IAAA,wBAAW,EAAC,aAAa,CAAC,CAAA;;;;4DAqBvC;QApaG,sBAAsB;YAJ3B,IAAA,mBAAU,EAAC,SAAS,CAAC;YACrB,IAAA,iBAAO,EAAC,cAAc,CAAC;YACvB,IAAA,wBAAc,EAAC,WAAW,CAAC;YAC3B,IAAA,iBAAI,EAAC,WAAW,CAAC;6CAIW,6BAAmB;WAH1C,sBAAsB,CAqa3B;QAED,OAAO,sBAA6B,CAAC;IACvC,CAAC;IAED,MAAM,CAAC,2BAA2B,CAChC,UAA+B;QAE/B,MAAM,EAAE,GAAG,4BAAK,CAAC,EAAE,CAAC,UAAU,CAAqB,CAAC;QACpD,MAAM,QAAQ,GAAG,qBAAQ,CAAC,GAAG,CAC3B,UAAU,EACV,qBAAQ,CAAC,GAAG,CAAC,sBAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAClC,CAAC;QACF,MAAM,YAAY,GAAG,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC;QAE1C,2CAA2C;QAC3C,MAAM,UAAU,GACd,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC;YACpD,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;YACxC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAEhC,MAAM,WAAW,GAAG,qBAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QACrD,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,MAAM,aAAa,GAAuB,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YAC/D,OAAO;gBACL,IAAI,EAAE,GAAG;gBACT,WAAW,EAAE,qBAAQ,CAAC,WAAW,CAAC,UAAU,EAAE,GAAG,CAAC;gBAClD,QAAQ,EAAE,IAAI;gBACd,IAAI,EAAE,MAAM;aACb,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,OAAO;YACL,IAAI;YACJ,WAAW;YACX,aAAa;YACb,KAAK,EAAE,CAAC,GAAG,MAA8B,EAAE,EAAE,CAC3C,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;SAC1E,CAAC;IACJ,CAAC;;AA/hBH,kDAgiBC"}
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.isOperationBlocked = isOperationBlocked;
4
4
  exports.ApiOperationFromModel = ApiOperationFromModel;
5
+ exports.BulkApiOperationFromModel = BulkApiOperationFromModel;
5
6
  const decoration_1 = require("@decaf-ts/decoration");
6
7
  const common_1 = require("@nestjs/common");
7
8
  const swagger_1 = require("@nestjs/swagger");
@@ -41,4 +42,25 @@ function ApiOperationFromModel(ModelConstructor, verb, path) {
41
42
  ? (0, reflection_1.apply)((0, swagger_1.ApiExcludeEndpoint)())
42
43
  : (0, reflection_1.apply)(HttpMethodDecorator(path));
43
44
  }
45
+ /**
46
+ * @description Conditionally applies an HTTP method decorator for a given model and verb, hiding the endpoint in Swagger (and not registering the route) when the model blocks that CRUD operation.
47
+ * @summary Maps an HTTP verb to its corresponding `CrudOperations` key and Nest HTTP decorator (`@Get`, `@Post`, etc.). It checks `isOperationBlocked(ModelConstructor, crudOp)` and, if blocked, applies only `@ApiExcludeEndpoint()` (Swagger-hidden, no Nest route). If permitted, it applies the appropriate HTTP decorator with the optional `path`.
48
+ * @param {ModelConstructor<any>} ModelConstructor - The model constructor used to resolve operation-blocking rules.
49
+ * @param {HttpVerbs} verb - The HTTP verb to map (e.g., `"GET" | "POST" | "PUT" | "PATCH" | "DELETE"`).
50
+ * @param {string} [path] - Optional route path passed through to the corresponding Nest HTTP method decorator.
51
+ * @return {MethodDecorator} A method decorator that either excludes the endpoint from Swagger (and route registration) or applies the correct HTTP decorator.
52
+ */
53
+ function BulkApiOperationFromModel(ModelConstructor, verb, path) {
54
+ const httpToCrud = {
55
+ GET: [db_decorators_1.BulkCrudOperationKeys.READ_ALL, common_1.Get],
56
+ POST: [db_decorators_1.BulkCrudOperationKeys.CREATE_ALL, common_1.Post],
57
+ PUT: [db_decorators_1.BulkCrudOperationKeys.UPDATE_ALL, common_1.Put],
58
+ PATCH: [db_decorators_1.BulkCrudOperationKeys.UPDATE_ALL, common_1.Patch],
59
+ DELETE: [db_decorators_1.BulkCrudOperationKeys.DELETE_ALL, common_1.Delete],
60
+ };
61
+ const [crudOp, HttpMethodDecorator] = httpToCrud[verb];
62
+ return isOperationBlocked(ModelConstructor, crudOp)
63
+ ? (0, reflection_1.apply)((0, swagger_1.ApiExcludeEndpoint)())
64
+ : (0, reflection_1.apply)(HttpMethodDecorator(path));
65
+ }
44
66
  //# sourceMappingURL=ApiOperationFromModel.js.map