@opra/common 0.28.1 → 0.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/browser.js +200 -100
  2. package/cjs/document/data-type/complex-type-class.js +36 -13
  3. package/cjs/document/factory/api-document-factory.js +26 -3
  4. package/cjs/document/factory/type-document-factory.js +6 -3
  5. package/cjs/document/index.js +1 -1
  6. package/cjs/document/resource/collection-class.js +31 -27
  7. package/cjs/document/resource/collection-decorator.js +61 -33
  8. package/cjs/document/resource/{operation-decorator.js → crud-operation-decorator.js} +3 -2
  9. package/cjs/document/resource/crud-operation.js +49 -0
  10. package/cjs/document/resource/crud-resource.js +2 -2
  11. package/cjs/document/resource/endpoint.js +11 -3
  12. package/cjs/document/resource/singleton-class.js +20 -15
  13. package/cjs/document/resource/storage-decorator.js +10 -10
  14. package/esm/document/data-type/complex-type-class.js +36 -13
  15. package/esm/document/factory/api-document-factory.js +26 -3
  16. package/esm/document/factory/type-document-factory.js +6 -3
  17. package/esm/document/index.js +1 -1
  18. package/esm/document/resource/collection-class.js +31 -27
  19. package/esm/document/resource/collection-decorator.js +54 -26
  20. package/esm/document/resource/{operation-decorator.js → crud-operation-decorator.js} +3 -2
  21. package/esm/document/resource/crud-operation.js +44 -0
  22. package/esm/document/resource/crud-resource.js +2 -2
  23. package/esm/document/resource/endpoint.js +11 -3
  24. package/esm/document/resource/singleton-class.js +20 -15
  25. package/esm/document/resource/storage-decorator.js +7 -7
  26. package/package.json +3 -2
  27. package/types/document/data-type/complex-type-class.d.ts +1 -1
  28. package/types/document/data-type/complex-type.d.ts +7 -3
  29. package/types/document/data-type/data-type.d.ts +3 -0
  30. package/types/document/data-type/field-class.d.ts +0 -2
  31. package/types/document/index.d.ts +1 -1
  32. package/types/document/resource/collection-class.d.ts +0 -9
  33. package/types/document/resource/collection-decorator.d.ts +12 -0
  34. package/types/document/resource/crud-operation-decorator.d.ts +6 -0
  35. package/types/document/resource/{operation.d.ts → crud-operation.d.ts} +12 -4
  36. package/types/document/resource/crud-resource.d.ts +3 -3
  37. package/types/document/resource/endpoint.d.ts +1 -1
  38. package/types/document/resource/resource-decorator.d.ts +3 -2
  39. package/types/document/resource/resource.d.ts +2 -2
  40. package/types/document/resource/singleton-class.d.ts +5 -5
  41. package/types/document/resource/singleton-decorator.d.ts +6 -0
  42. package/types/document/resource/storage-class.d.ts +4 -4
  43. package/types/schema/data-type/complex-type.interface.d.ts +1 -1
  44. package/types/schema/resource/collection.interface.d.ts +7 -7
  45. package/types/schema/resource/endpoint.interface.d.ts +2 -1
  46. package/types/schema/resource/singleton.interface.d.ts +0 -2
  47. package/cjs/document/resource/operation.js +0 -25
  48. package/esm/document/resource/operation.js +0 -20
  49. package/types/document/resource/operation-decorator.d.ts +0 -6
package/browser.js CHANGED
@@ -1074,6 +1074,7 @@ var Endpoint = class {
1074
1074
  constructor(resource, name, init) {
1075
1075
  this.resource = resource;
1076
1076
  this.name = name;
1077
+ this.options = {};
1077
1078
  Object.assign(this, init);
1078
1079
  this.parameters = new ResponsiveMap();
1079
1080
  if (init.parameters) {
@@ -1098,12 +1099,19 @@ var Endpoint = class {
1098
1099
  const schema = omitUndefined({
1099
1100
  description: this.description
1100
1101
  });
1102
+ if (Object.keys(this.options).length)
1103
+ schema.options = { ...this.options };
1101
1104
  if (this.parameters.size) {
1102
- schema.parameters = {};
1105
+ let i = 0;
1106
+ const parameters = {};
1103
1107
  for (const [name, param] of this.parameters.entries()) {
1104
- if (!param.isBuiltin)
1105
- schema.parameters[name] = param.exportSchema(options);
1108
+ if (!param.isBuiltin) {
1109
+ parameters[name] = param.exportSchema(options);
1110
+ i++;
1111
+ }
1106
1112
  }
1113
+ if (i)
1114
+ schema.parameters = parameters;
1107
1115
  }
1108
1116
  return schema;
1109
1117
  }
@@ -1477,6 +1485,7 @@ var ComplexTypeClass = class extends DataType {
1477
1485
  constructor(document, init) {
1478
1486
  super(document, init);
1479
1487
  this.kind = opra_schema_ns_exports.ComplexType.Kind;
1488
+ this.fields = new ResponsiveMap();
1480
1489
  const own = this.own = {};
1481
1490
  own.ctor = init.ctor;
1482
1491
  if (init.base) {
@@ -1495,7 +1504,6 @@ var ComplexTypeClass = class extends DataType {
1495
1504
  this.additionalFields = true;
1496
1505
  else if (this.base?.additionalFields === "error" && !this.additionalFields)
1497
1506
  this.additionalFields = "error";
1498
- this.fields = new ResponsiveMap();
1499
1507
  if (this.base) {
1500
1508
  if (this.base.fields)
1501
1509
  for (const [k, el] of this.base.fields.entries()) {
@@ -1592,7 +1600,7 @@ var ComplexTypeClass = class extends DataType {
1592
1600
  Object.assign(out, omitUndefined({
1593
1601
  base: this.base ? this.base.name ? this.base.name : this.base.exportSchema(options) : void 0,
1594
1602
  abstract: this.abstract,
1595
- additionalFields: this.own.additionalFields
1603
+ additionalFields: this.own.additionalFields instanceof DataType ? this.own.additionalFields.name ? this.own.additionalFields.name : this.own.additionalFields.exportSchema(options) : this.own.additionalFields
1596
1604
  }));
1597
1605
  if (this.own.fields.size) {
1598
1606
  const fields = out.fields = {};
@@ -1616,9 +1624,10 @@ var ComplexTypeClass = class extends DataType {
1616
1624
  }
1617
1625
  generateCodec(codec, options) {
1618
1626
  const schema = this._generateCodecSchema(codec, options);
1627
+ const additionalFields = this.additionalFields instanceof DataType ? this.additionalFields.generateCodec(codec, options) : this.additionalFields;
1619
1628
  return vg4.isObject(schema, {
1620
1629
  ctor: this.ctor,
1621
- additionalFields: this.additionalFields ?? false,
1630
+ additionalFields,
1622
1631
  name: this.name,
1623
1632
  caseInSensitive: !options?.caseSensitive
1624
1633
  });
@@ -1627,16 +1636,24 @@ var ComplexTypeClass = class extends DataType {
1627
1636
  const schema = {};
1628
1637
  const pickOption = (options?.pick || []).map((x) => x.toLowerCase());
1629
1638
  const omitOption = (options?.omit || []).map((x) => x.toLowerCase());
1630
- for (const f of this.fields.values()) {
1631
- const nameLower = f.name.toLowerCase();
1632
- if (omitOption.find((x) => x === nameLower))
1639
+ const dedupedFieldNames = (options?.overwriteFields ? Array.from(/* @__PURE__ */ new Set([...this.fields.keys(), ...options?.overwriteFields.keys()])) : Array.from(this.fields.keys())).map((x) => x.toLocaleString());
1640
+ for (const nameLower of dedupedFieldNames) {
1641
+ const overwriteField = options?.overwriteFields?.get(nameLower);
1642
+ const field = this.fields.get(nameLower);
1643
+ if (!(field || overwriteField))
1633
1644
  continue;
1634
- if (pickOption.length && !pickOption.find((x) => x === nameLower || x.startsWith(nameLower + ".")))
1645
+ if (!overwriteField && (omitOption.find((x) => x === nameLower) || pickOption.length && !pickOption.find((x) => x === nameLower || x.startsWith(nameLower + "."))))
1635
1646
  continue;
1647
+ let f;
1648
+ if (overwriteField) {
1649
+ f = { ...overwriteField };
1650
+ Object.setPrototypeOf(f, field || ApiField.prototype);
1651
+ } else
1652
+ f = field;
1636
1653
  schema[f.name] = f.generateCodec(codec, {
1637
1654
  ...options,
1638
- pick: pickOption.filter((x) => x.startsWith(nameLower + ".")).map((x) => x.substring(x.indexOf(".") + 1)),
1639
- omit: omitOption.filter((x) => x.startsWith(nameLower + ".")).map((x) => x.substring(x.indexOf(".") + 1))
1655
+ pick: overwriteField ? [] : pickOption.filter((x) => x.startsWith(nameLower + ".")).map((x) => x.substring(x.indexOf(".") + 1)),
1656
+ omit: overwriteField ? [] : omitOption.filter((x) => x.startsWith(nameLower + ".")).map((x) => x.substring(x.indexOf(".") + 1))
1640
1657
  });
1641
1658
  }
1642
1659
  return schema;
@@ -2640,7 +2657,7 @@ var TypeDocumentFactory = class _TypeDocumentFactory {
2640
2657
  return dataType;
2641
2658
  throw new TypeError(`Class "${thunk.name}" doesn't have a valid DataType metadata`);
2642
2659
  }
2643
- name = metadata.name;
2660
+ name = metadata.anonymous ? void 0 : metadata.name;
2644
2661
  initArguments = cloneObject(metadata);
2645
2662
  ctor = thunk;
2646
2663
  } else if (typeof thunk === "object") {
@@ -2652,7 +2669,7 @@ var TypeDocumentFactory = class _TypeDocumentFactory {
2652
2669
  const metadata = thunk[DATATYPE_METADATA];
2653
2670
  if (!metadata)
2654
2671
  throw new TypeError(`No EnumType metadata found for object ${JSON.stringify(thunk).substring(0, 20)}...`);
2655
- name = metadata.name;
2672
+ name = metadata.anonymous ? void 0 : metadata.name;
2656
2673
  initArguments = cloneObject(metadata);
2657
2674
  initArguments.enumObject = thunk;
2658
2675
  }
@@ -2682,9 +2699,11 @@ var TypeDocumentFactory = class _TypeDocumentFactory {
2682
2699
  if (name)
2683
2700
  this.document.types.set(name, instance);
2684
2701
  await this.prepareDataTypeInitArguments(initArguments, ctor);
2685
- if (initArguments.kind === "ComplexType")
2702
+ if (initArguments.kind === "ComplexType") {
2703
+ if (typeof initArguments.additionalFields === "function")
2704
+ initArguments.additionalFields = await this.importDataType(initArguments.additionalFields);
2686
2705
  ComplexType2.apply(instance, [this.document, initArguments]);
2687
- else if (initArguments.kind === "SimpleType")
2706
+ } else if (initArguments.kind === "SimpleType")
2688
2707
  SimpleType2.apply(instance, [this.document, initArguments]);
2689
2708
  else if (initArguments.kind === "EnumType")
2690
2709
  EnumType2.apply(instance, [this.document, initArguments]);
@@ -10320,11 +10339,11 @@ var _wrapEntryValue = /* @__PURE__ */ __name((v) => {
10320
10339
  return new StringLiteral("" + v);
10321
10340
  }, "_wrapEntryValue");
10322
10341
 
10323
- // ../../build/common/esm/document/resource/operation.js
10342
+ // ../../build/common/esm/document/resource/crud-operation.js
10324
10343
  import * as vg7 from "valgen";
10325
- var Operation = class extends Endpoint {
10344
+ var CrudOperation = class extends Endpoint {
10326
10345
  static {
10327
- __name(this, "Operation");
10346
+ __name(this, "CrudOperation");
10328
10347
  }
10329
10348
  constructor(resource, name, init) {
10330
10349
  super(resource, name, init);
@@ -10335,6 +10354,26 @@ var Operation = class extends Endpoint {
10335
10354
  this.encodeReturning = vg7.isAny();
10336
10355
  this.returnType = init.returnType instanceof DataType ? init.returnType : this.resource.document.getDataType(init.returnType || "any");
10337
10356
  this.encodeReturning = this.returnType.generateCodec("encode", { operation: "read" });
10357
+ if (init.options.inputOverwriteFields)
10358
+ this.inputOverwriteFields = new ResponsiveMap(init.options.inputOverwriteFields);
10359
+ if (init.options.outputOverwriteFields)
10360
+ this.outputOverwriteFields = new ResponsiveMap(init.options.outputOverwriteFields);
10361
+ }
10362
+ exportSchema(options) {
10363
+ const schema = super.exportSchema(options);
10364
+ if (this.inputOverwriteFields) {
10365
+ const trg = schema.options.inputOverwriteFields = {};
10366
+ Array.from(this.inputOverwriteFields.entries()).forEach(([k, o]) => {
10367
+ trg[k] = ApiField.prototype.exportSchema.call(o, options);
10368
+ });
10369
+ }
10370
+ if (this.outputOverwriteFields) {
10371
+ const trg = schema.options.outputOverwriteFields = {};
10372
+ Array.from(this.outputOverwriteFields.entries()).forEach(([k, o]) => {
10373
+ trg[k] = ApiField.prototype.exportSchema.call(o, options);
10374
+ });
10375
+ }
10376
+ return schema;
10338
10377
  }
10339
10378
  };
10340
10379
 
@@ -10348,7 +10387,7 @@ var CrudResource = class extends Resource {
10348
10387
  this.operations = new ResponsiveMap();
10349
10388
  if (init.operations) {
10350
10389
  for (const [name, meta] of Object.entries(init.operations)) {
10351
- this.operations.set(name, new Operation(this, name, meta));
10390
+ this.operations.set(name, new CrudOperation(this, name, meta));
10352
10391
  }
10353
10392
  }
10354
10393
  }
@@ -10391,16 +10430,18 @@ var CollectionClass = class extends CrudResource {
10391
10430
  endpoint.defineParameter("include", { type: "string", isArray: true, isBuiltin: true });
10392
10431
  endpoint.decodeInput = this.type.generateCodec("decode", {
10393
10432
  partial: true,
10394
- pick: endpoint.inputPickFields,
10395
- omit: endpoint.inputOmitFields,
10396
- operation: "write"
10433
+ pick: endpoint.options.inputPickFields,
10434
+ omit: endpoint.options.inputOmitFields,
10435
+ operation: "write",
10436
+ overwriteFields: endpoint.inputOverwriteFields
10397
10437
  });
10398
10438
  endpoint.returnType = this.type;
10399
10439
  endpoint.encodeReturning = endpoint.returnType.generateCodec("encode", {
10400
10440
  partial: true,
10401
- pick: endpoint.outputPickFields,
10402
- omit: endpoint.outputOmitFields,
10403
- operation: "read"
10441
+ pick: endpoint.options.outputPickFields,
10442
+ omit: endpoint.options.outputOmitFields,
10443
+ operation: "read",
10444
+ overwriteFields: endpoint.outputOverwriteFields
10404
10445
  });
10405
10446
  }
10406
10447
  endpoint = this.operations.get("deleteMany");
@@ -10415,9 +10456,10 @@ var CollectionClass = class extends CrudResource {
10415
10456
  endpoint.returnType = this.type;
10416
10457
  endpoint.encodeReturning = endpoint.returnType.generateCodec("encode", {
10417
10458
  partial: true,
10418
- pick: endpoint.outputPickFields,
10419
- omit: endpoint.outputOmitFields,
10420
- operation: "read"
10459
+ pick: endpoint.options.outputPickFields,
10460
+ omit: endpoint.options.outputOmitFields,
10461
+ operation: "read",
10462
+ overwriteFields: endpoint.outputOverwriteFields
10421
10463
  });
10422
10464
  }
10423
10465
  endpoint = this.operations.get("findMany");
@@ -10434,9 +10476,10 @@ var CollectionClass = class extends CrudResource {
10434
10476
  endpoint.returnType = this.type;
10435
10477
  endpoint.encodeReturning = vg8.isArray(this.type.generateCodec("encode", {
10436
10478
  partial: true,
10437
- pick: endpoint.outputPickFields,
10438
- omit: endpoint.outputOmitFields,
10439
- operation: "read"
10479
+ pick: endpoint.options.outputPickFields,
10480
+ omit: endpoint.options.outputOmitFields,
10481
+ operation: "read",
10482
+ overwriteFields: endpoint.outputOverwriteFields
10440
10483
  }));
10441
10484
  }
10442
10485
  endpoint = this.operations.get("update");
@@ -10445,31 +10488,31 @@ var CollectionClass = class extends CrudResource {
10445
10488
  endpoint.defineParameter("omit", { type: "string", isArray: true, isBuiltin: true });
10446
10489
  endpoint.defineParameter("include", { type: "string", isArray: true, isBuiltin: true });
10447
10490
  endpoint.decodeInput = this.type.generateCodec("decode", {
10448
- pick: endpoint.inputPickFields,
10449
- omit: endpoint.inputOmitFields,
10450
- operation: "write"
10491
+ pick: endpoint.options.inputPickFields,
10492
+ omit: endpoint.options.inputOmitFields,
10493
+ operation: "write",
10494
+ overwriteFields: endpoint.inputOverwriteFields
10451
10495
  });
10452
10496
  endpoint.returnType = this.type;
10453
10497
  endpoint.encodeReturning = endpoint.returnType.generateCodec("encode", {
10454
10498
  partial: true,
10455
- pick: endpoint.outputPickFields,
10456
- omit: endpoint.outputOmitFields,
10457
- operation: "read"
10499
+ pick: endpoint.options.outputPickFields,
10500
+ omit: endpoint.options.outputOmitFields,
10501
+ operation: "read",
10502
+ overwriteFields: endpoint.outputOverwriteFields
10458
10503
  });
10459
10504
  }
10460
10505
  endpoint = this.operations.get("updateMany");
10461
10506
  if (endpoint) {
10462
10507
  endpoint.defineParameter("filter", { type: "string", isBuiltin: true });
10463
10508
  endpoint.decodeInput = this.type.generateCodec("decode", {
10464
- pick: endpoint.inputPickFields,
10465
- omit: endpoint.inputOmitFields,
10466
- operation: "write"
10509
+ pick: endpoint.options.inputPickFields,
10510
+ omit: endpoint.options.inputOmitFields,
10511
+ operation: "write",
10512
+ overwriteFields: endpoint.inputOverwriteFields
10467
10513
  });
10468
10514
  }
10469
10515
  }
10470
- getOperation(name) {
10471
- return super.getOperation(name);
10472
- }
10473
10516
  exportSchema(options) {
10474
10517
  return {
10475
10518
  ...super.exportSchema(options),
@@ -10516,7 +10559,7 @@ var CollectionClass = class extends CrudResource {
10516
10559
  if (!normalized)
10517
10560
  return;
10518
10561
  const findManyOp = this.getOperation("findMany");
10519
- const sortFields = findManyOp && findManyOp.sortFields;
10562
+ const sortFields = findManyOp && findManyOp.options.sortFields;
10520
10563
  (Array.isArray(normalized) ? normalized : [normalized]).forEach((field) => {
10521
10564
  if (!sortFields?.find((x) => x === field))
10522
10565
  throw new BadRequestError({
@@ -10535,13 +10578,13 @@ var CollectionClass = class extends CrudResource {
10535
10578
  throw new TypeError(`Invalid filter query. Left side should be a data field.`);
10536
10579
  const findManyOp = this.getOperation("findMany");
10537
10580
  const fieldLower = ast.left.value.toLowerCase();
10538
- const filterDef = (findManyOp && findManyOp.filters || []).find((f) => f.field.toLowerCase() === fieldLower);
10581
+ const filterDef = (findManyOp && findManyOp.options.filters || []).find((f) => f.field.toLowerCase() === fieldLower);
10539
10582
  if (!filterDef) {
10540
10583
  throw new BadRequestError({
10541
10584
  message: translate("error:UNACCEPTED_FILTER_FIELD", { field: ast.left.value })
10542
10585
  });
10543
10586
  }
10544
- if (!filterDef.operators?.includes(ast.op))
10587
+ if (filterDef.operators && !filterDef.operators.includes(ast.op))
10545
10588
  throw new BadRequestError({
10546
10589
  message: translate("error:UNACCEPTED_FILTER_OPERATION", { field: ast.left.value })
10547
10590
  });
@@ -10575,14 +10618,15 @@ var CollectionClass = class extends CrudResource {
10575
10618
  }
10576
10619
  };
10577
10620
 
10578
- // ../../build/common/esm/document/resource/operation-decorator.js
10579
- function createOperationDecorator(operation, options, list) {
10621
+ // ../../build/common/esm/document/resource/crud-operation-decorator.js
10622
+ function createOperationDecorator(operation, init, list) {
10580
10623
  const decorator = /* @__PURE__ */ __name((target, propertyKey) => {
10581
10624
  if (propertyKey !== operation)
10582
10625
  throw new TypeError(`Name of the handler name should be '${operation}'`);
10583
10626
  const resourceMetadata = Reflect.getOwnMetadata(RESOURCE_METADATA, target.constructor) || {};
10584
10627
  resourceMetadata.operations = resourceMetadata.operations || {};
10585
- const operationMeta = { ...options };
10628
+ const operationMeta = { ...init };
10629
+ operationMeta.options = operationMeta.options || {};
10586
10630
  resourceMetadata.operations[operation] = operationMeta;
10587
10631
  for (const fn of list)
10588
10632
  fn(operationMeta, target, propertyKey);
@@ -10618,23 +10662,31 @@ Object.assign(CollectionDecorator, ResourceDecorator);
10618
10662
  const list = [];
10619
10663
  const decorator = createOperationDecorator("create", options, list);
10620
10664
  decorator.InputMaxContentSize = (sizeInBytes) => {
10621
- list.push((operationMeta) => operationMeta.inputMaxContentSize = sizeInBytes);
10665
+ list.push((operationMeta) => operationMeta.options.inputMaxContentSize = sizeInBytes);
10622
10666
  return decorator;
10623
10667
  };
10624
10668
  decorator.InputPickFields = (...fields) => {
10625
- list.push((operationMeta) => operationMeta.inputPickFields = fields);
10669
+ list.push((operationMeta) => operationMeta.options.inputPickFields = fields);
10626
10670
  return decorator;
10627
10671
  };
10628
10672
  decorator.InputOmitFields = (...fields) => {
10629
- list.push((operationMeta) => operationMeta.inputOmitFields = fields);
10673
+ list.push((operationMeta) => operationMeta.options.inputOmitFields = fields);
10674
+ return decorator;
10675
+ };
10676
+ decorator.InputOverwriteFields = (fields) => {
10677
+ list.push((operationMeta) => operationMeta.options.inputOverwriteFields = fields);
10630
10678
  return decorator;
10631
10679
  };
10632
10680
  decorator.OutputPickFields = (...fields) => {
10633
- list.push((operationMeta) => operationMeta.outputPickFields = fields);
10681
+ list.push((operationMeta) => operationMeta.options.outputPickFields = fields);
10634
10682
  return decorator;
10635
10683
  };
10636
10684
  decorator.OutputOmitFields = (...fields) => {
10637
- list.push((operationMeta) => operationMeta.outputOmitFields = fields);
10685
+ list.push((operationMeta) => operationMeta.options.outputOmitFields = fields);
10686
+ return decorator;
10687
+ };
10688
+ decorator.OutputOverwriteFields = (fields) => {
10689
+ list.push((operationMeta) => operationMeta.options.outputOverwriteFields = fields);
10638
10690
  return decorator;
10639
10691
  };
10640
10692
  return decorator;
@@ -10654,8 +10706,8 @@ Object.assign(CollectionDecorator, ResourceDecorator);
10654
10706
  if (typeof operators === "string")
10655
10707
  operators = operators.split(/\s*[,| ]\s*/);
10656
10708
  list.push((operationMeta) => {
10657
- operationMeta.filters = operationMeta.filters || [];
10658
- operationMeta.filters.push(omitUndefined({ field, operators, notes }));
10709
+ operationMeta.options.filters = operationMeta.options.filters || [];
10710
+ operationMeta.options.filters.push(omitUndefined({ field, operators, notes }));
10659
10711
  });
10660
10712
  return decorator;
10661
10713
  };
@@ -10667,11 +10719,15 @@ Object.assign(CollectionDecorator, ResourceDecorator);
10667
10719
  const list = [];
10668
10720
  const decorator = createOperationDecorator("get", options, list);
10669
10721
  decorator.OutputPickFields = (...fields) => {
10670
- list.push((operationMeta) => operationMeta.outputPickFields = fields);
10722
+ list.push((operationMeta) => operationMeta.options.outputPickFields = fields);
10671
10723
  return decorator;
10672
10724
  };
10673
10725
  decorator.OutputOmitFields = (...fields) => {
10674
- list.push((operationMeta) => operationMeta.outputOmitFields = fields);
10726
+ list.push((operationMeta) => operationMeta.options.outputOmitFields = fields);
10727
+ return decorator;
10728
+ };
10729
+ decorator.OutputOverwriteFields = (fields) => {
10730
+ list.push((operationMeta) => operationMeta.options.outputOverwriteFields = fields);
10675
10731
  return decorator;
10676
10732
  };
10677
10733
  return decorator;
@@ -10682,28 +10738,32 @@ Object.assign(CollectionDecorator, ResourceDecorator);
10682
10738
  const list = [];
10683
10739
  const decorator = createOperationDecorator("findMany", options, list);
10684
10740
  decorator.SortFields = (...fields) => {
10685
- list.push((operationMeta) => operationMeta.sortFields = fields);
10741
+ list.push((operationMeta) => operationMeta.options.sortFields = fields);
10686
10742
  return decorator;
10687
10743
  };
10688
10744
  decorator.DefaultSort = (...fields) => {
10689
- list.push((operationMeta) => operationMeta.defaultSort = fields);
10745
+ list.push((operationMeta) => operationMeta.options.defaultSort = fields);
10690
10746
  return decorator;
10691
10747
  };
10692
10748
  decorator.Filter = (field, operators, notes) => {
10693
10749
  if (typeof operators === "string")
10694
10750
  operators = operators.split(/\s*[,| ]\s*/);
10695
10751
  list.push((operationMeta) => {
10696
- operationMeta.filters = operationMeta.filters || [];
10697
- operationMeta.filters.push(omitUndefined({ field, operators, notes }));
10752
+ operationMeta.options.filters = operationMeta.options.filters || [];
10753
+ operationMeta.options.filters.push(omitUndefined({ field, operators, notes }));
10698
10754
  });
10699
10755
  return decorator;
10700
10756
  };
10701
10757
  decorator.OutputPickFields = (...fields) => {
10702
- list.push((operationMeta) => operationMeta.outputPickFields = fields);
10758
+ list.push((operationMeta) => operationMeta.options.outputPickFields = fields);
10703
10759
  return decorator;
10704
10760
  };
10705
10761
  decorator.OutputOmitFields = (...fields) => {
10706
- list.push((operationMeta) => operationMeta.outputOmitFields = fields);
10762
+ list.push((operationMeta) => operationMeta.options.outputOmitFields = fields);
10763
+ return decorator;
10764
+ };
10765
+ decorator.OutputOverwriteFields = (fields) => {
10766
+ list.push((operationMeta) => operationMeta.options.outputOverwriteFields = fields);
10707
10767
  return decorator;
10708
10768
  };
10709
10769
  return decorator;
@@ -10716,23 +10776,31 @@ Object.assign(CollectionDecorator, ResourceDecorator);
10716
10776
  const list = [];
10717
10777
  const decorator = createOperationDecorator("update", options, list);
10718
10778
  decorator.InputMaxContentSize = (sizeInBytes) => {
10719
- list.push((operationMeta) => operationMeta.inputMaxContentSize = sizeInBytes);
10779
+ list.push((operationMeta) => operationMeta.options.inputMaxContentSize = sizeInBytes);
10720
10780
  return decorator;
10721
10781
  };
10722
10782
  decorator.InputPickFields = (...fields) => {
10723
- list.push((operationMeta) => operationMeta.inputPickFields = fields);
10783
+ list.push((operationMeta) => operationMeta.options.inputPickFields = fields);
10724
10784
  return decorator;
10725
10785
  };
10726
10786
  decorator.InputOmitFields = (...fields) => {
10727
- list.push((operationMeta) => operationMeta.inputOmitFields = fields);
10787
+ list.push((operationMeta) => operationMeta.options.inputOmitFields = fields);
10788
+ return decorator;
10789
+ };
10790
+ decorator.InputOverwriteFields = (fields) => {
10791
+ list.push((operationMeta) => operationMeta.options.inputOverwriteFields = fields);
10728
10792
  return decorator;
10729
10793
  };
10730
10794
  decorator.OutputPickFields = (...fields) => {
10731
- list.push((operationMeta) => operationMeta.outputPickFields = fields);
10795
+ list.push((operationMeta) => operationMeta.options.outputPickFields = fields);
10732
10796
  return decorator;
10733
10797
  };
10734
10798
  decorator.OutputOmitFields = (...fields) => {
10735
- list.push((operationMeta) => operationMeta.outputOmitFields = fields);
10799
+ list.push((operationMeta) => operationMeta.options.outputOmitFields = fields);
10800
+ return decorator;
10801
+ };
10802
+ decorator.OutputOverwriteFields = (fields) => {
10803
+ list.push((operationMeta) => operationMeta.options.outputOverwriteFields = fields);
10736
10804
  return decorator;
10737
10805
  };
10738
10806
  return decorator;
@@ -10746,23 +10814,27 @@ Object.assign(CollectionDecorator, ResourceDecorator);
10746
10814
  const options = typeof arg0 === "string" ? { description: arg0 } : { ...arg0 };
10747
10815
  const decorator = createOperationDecorator("updateMany", options, list);
10748
10816
  decorator.InputMaxContentSize = (sizeInBytes) => {
10749
- list.push((operationMeta) => operationMeta.inputMaxContentSize = sizeInBytes);
10817
+ list.push((operationMeta) => operationMeta.options.inputMaxContentSize = sizeInBytes);
10750
10818
  return decorator;
10751
10819
  };
10752
10820
  decorator.InputPickFields = (...fields) => {
10753
- list.push((operationMeta) => operationMeta.inputPickFields = fields);
10821
+ list.push((operationMeta) => operationMeta.options.inputPickFields = fields);
10754
10822
  return decorator;
10755
10823
  };
10756
10824
  decorator.InputOmitFields = (...fields) => {
10757
- list.push((operationMeta) => operationMeta.inputOmitFields = fields);
10825
+ list.push((operationMeta) => operationMeta.options.inputOmitFields = fields);
10826
+ return decorator;
10827
+ };
10828
+ decorator.InputOverwriteFields = (fields) => {
10829
+ list.push((operationMeta) => operationMeta.options.inputOverwriteFields = fields);
10758
10830
  return decorator;
10759
10831
  };
10760
10832
  decorator.Filter = (field, operators, notes) => {
10761
10833
  if (typeof operators === "string")
10762
10834
  operators = operators.split(/\s*[,| ]\s*/);
10763
10835
  list.push((operationMeta) => {
10764
- operationMeta.filters = operationMeta.filters || [];
10765
- operationMeta.filters.push(omitUndefined({ field, operators, notes }));
10836
+ operationMeta.options.filters = operationMeta.options.filters || [];
10837
+ operationMeta.options.filters.push(omitUndefined({ field, operators, notes }));
10766
10838
  });
10767
10839
  return decorator;
10768
10840
  };
@@ -10804,16 +10876,18 @@ var SingletonClass = class extends CrudResource {
10804
10876
  endpoint.defineParameter("include", { type: "string", isArray: true, isBuiltin: true });
10805
10877
  endpoint.decodeInput = this.type.generateCodec("decode", {
10806
10878
  partial: true,
10807
- pick: endpoint.inputPickFields,
10808
- omit: endpoint.inputOmitFields,
10809
- operation: "write"
10879
+ pick: endpoint.options.inputPickFields,
10880
+ omit: endpoint.options.inputOmitFields,
10881
+ operation: "write",
10882
+ overwriteFields: endpoint.inputOverwriteFields
10810
10883
  });
10811
10884
  endpoint.returnType = this.type;
10812
10885
  endpoint.encodeReturning = endpoint.returnType.generateCodec("encode", {
10813
10886
  partial: true,
10814
- pick: endpoint.outputPickFields,
10815
- omit: endpoint.outputOmitFields,
10816
- operation: "read"
10887
+ pick: endpoint.options.outputPickFields,
10888
+ omit: endpoint.options.outputOmitFields,
10889
+ operation: "read",
10890
+ overwriteFields: endpoint.outputOverwriteFields
10817
10891
  });
10818
10892
  }
10819
10893
  endpoint = this.operations.get("get");
@@ -10824,9 +10898,10 @@ var SingletonClass = class extends CrudResource {
10824
10898
  endpoint.returnType = this.type;
10825
10899
  endpoint.encodeReturning = endpoint.returnType.generateCodec("encode", {
10826
10900
  partial: true,
10827
- pick: endpoint.outputPickFields,
10828
- omit: endpoint.outputOmitFields,
10829
- operation: "read"
10901
+ pick: endpoint.options.outputPickFields,
10902
+ omit: endpoint.options.outputOmitFields,
10903
+ operation: "read",
10904
+ overwriteFields: endpoint.outputOverwriteFields
10830
10905
  });
10831
10906
  }
10832
10907
  endpoint = this.operations.get("update");
@@ -10835,16 +10910,18 @@ var SingletonClass = class extends CrudResource {
10835
10910
  endpoint.defineParameter("omit", { type: "string", isArray: true, isBuiltin: true });
10836
10911
  endpoint.defineParameter("include", { type: "string", isArray: true, isBuiltin: true });
10837
10912
  endpoint.decodeInput = this.type.generateCodec("decode", {
10838
- pick: endpoint.inputPickFields,
10839
- omit: endpoint.inputOmitFields,
10840
- operation: "write"
10913
+ pick: endpoint.options.inputPickFields,
10914
+ omit: endpoint.options.inputOmitFields,
10915
+ operation: "write",
10916
+ overwriteFields: endpoint.inputOverwriteFields
10841
10917
  });
10842
10918
  endpoint.returnType = this.type;
10843
10919
  endpoint.encodeReturning = endpoint.returnType.generateCodec("encode", {
10844
10920
  partial: true,
10845
- pick: endpoint.outputPickFields,
10846
- omit: endpoint.outputOmitFields,
10847
- operation: "read"
10921
+ pick: endpoint.options.outputPickFields,
10922
+ omit: endpoint.options.outputOmitFields,
10923
+ operation: "read",
10924
+ overwriteFields: endpoint.outputOverwriteFields
10848
10925
  });
10849
10926
  }
10850
10927
  }
@@ -10967,27 +11044,27 @@ Object.assign(StorageDecorator, ResourceDecorator);
10967
11044
  const list = [];
10968
11045
  const decorator = createOperationDecorator("post", options, list);
10969
11046
  decorator.MaxFields = (amount) => {
10970
- list.push((operationMeta) => operationMeta.maxFields = amount);
11047
+ list.push((operationMeta) => operationMeta.options.maxFields = amount);
10971
11048
  return decorator;
10972
11049
  };
10973
11050
  decorator.MaxFieldSize = (amount) => {
10974
- list.push((operationMeta) => operationMeta.maxFieldsSize = amount);
11051
+ list.push((operationMeta) => operationMeta.options.maxFieldsSize = amount);
10975
11052
  return decorator;
10976
11053
  };
10977
11054
  decorator.MaxFiles = (amount) => {
10978
- list.push((operationMeta) => operationMeta.maxFiles = amount);
11055
+ list.push((operationMeta) => operationMeta.options.maxFiles = amount);
10979
11056
  return decorator;
10980
11057
  };
10981
11058
  decorator.MaxFileSize = (sizeInBytes) => {
10982
- list.push((operationMeta) => operationMeta.maxFileSize = sizeInBytes);
11059
+ list.push((operationMeta) => operationMeta.options.maxFileSize = sizeInBytes);
10983
11060
  return decorator;
10984
11061
  };
10985
11062
  decorator.MaxTotalFileSize = (sizeInBytes) => {
10986
- list.push((operationMeta) => operationMeta.maxTotalFileSize = sizeInBytes);
11063
+ list.push((operationMeta) => operationMeta.options.maxTotalFileSize = sizeInBytes);
10987
11064
  return decorator;
10988
11065
  };
10989
11066
  decorator.MinFileSize = (sizeInBytes) => {
10990
- list.push((operationMeta) => operationMeta.minFileSize = sizeInBytes);
11067
+ list.push((operationMeta) => operationMeta.options.minFileSize = sizeInBytes);
10991
11068
  return decorator;
10992
11069
  };
10993
11070
  return decorator;
@@ -11153,9 +11230,9 @@ var ApiDocumentFactory = class _ApiDocumentFactory extends TypeDocumentFactory {
11153
11230
  return;
11154
11231
  const output = {};
11155
11232
  for (const [kA, oA] of Object.entries(source)) {
11156
- let parameters;
11233
+ const o = output[kA] = { ...oA };
11157
11234
  if (oA.parameters) {
11158
- parameters = {};
11235
+ const parameters = o.parameters = {};
11159
11236
  for (const [kP, oP] of Object.entries(oA.parameters)) {
11160
11237
  if (oP.enum) {
11161
11238
  oP.type = EnumType2(oP.enum, { name: kP + "Enum" });
@@ -11166,7 +11243,30 @@ var ApiDocumentFactory = class _ApiDocumentFactory extends TypeDocumentFactory {
11166
11243
  };
11167
11244
  }
11168
11245
  }
11169
- output[kA] = { ...oA, parameters };
11246
+ if (oA.options?.inputOverwriteFields) {
11247
+ const inputOverwriteFields = {};
11248
+ for (const [kP, oP] of Object.entries(oA.options.inputOverwriteFields)) {
11249
+ if (oP.enum) {
11250
+ oP.type = EnumType2(oP.enum, { name: kP + "Enum" });
11251
+ }
11252
+ inputOverwriteFields[kP] = { ...oP };
11253
+ if (oP.type)
11254
+ inputOverwriteFields[kP].type = await this.importDataType(oP.type);
11255
+ }
11256
+ o.options.inputOverwriteFields = inputOverwriteFields;
11257
+ }
11258
+ if (oA.options?.outputOverwriteFields) {
11259
+ const outputOverwriteFields = {};
11260
+ for (const [kP, oP] of Object.entries(oA.options.outputOverwriteFields)) {
11261
+ if (oP.enum) {
11262
+ oP.type = EnumType2(oP.enum, { name: kP + "Enum" });
11263
+ }
11264
+ outputOverwriteFields[kP] = { ...oP };
11265
+ if (oP.type)
11266
+ outputOverwriteFields[kP].type = await this.importDataType(oP.type);
11267
+ }
11268
+ o.options.outputOverwriteFields = outputOverwriteFields;
11269
+ }
11170
11270
  }
11171
11271
  return output;
11172
11272
  }, "convertEndpoints");
@@ -11935,6 +12035,7 @@ export {
11935
12035
  Collection2 as Collection,
11936
12036
  ComplexType2 as ComplexType,
11937
12037
  Container2 as Container,
12038
+ CrudOperation,
11938
12039
  CrudResource,
11939
12040
  DATATYPE_METADATA,
11940
12041
  DECORATOR,
@@ -11956,7 +12057,6 @@ export {
11956
12057
  NotAcceptableError,
11957
12058
  NotFoundError,
11958
12059
  OmitType,
11959
- Operation,
11960
12060
  OperationResult,
11961
12061
  OpraException,
11962
12062
  opra_filter_ns_exports as OpraFilter,