@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.
- package/browser.js +200 -100
- package/cjs/document/data-type/complex-type-class.js +36 -13
- package/cjs/document/factory/api-document-factory.js +26 -3
- package/cjs/document/factory/type-document-factory.js +6 -3
- package/cjs/document/index.js +1 -1
- package/cjs/document/resource/collection-class.js +31 -27
- package/cjs/document/resource/collection-decorator.js +61 -33
- package/cjs/document/resource/{operation-decorator.js → crud-operation-decorator.js} +3 -2
- package/cjs/document/resource/crud-operation.js +49 -0
- package/cjs/document/resource/crud-resource.js +2 -2
- package/cjs/document/resource/endpoint.js +11 -3
- package/cjs/document/resource/singleton-class.js +20 -15
- package/cjs/document/resource/storage-decorator.js +10 -10
- package/esm/document/data-type/complex-type-class.js +36 -13
- package/esm/document/factory/api-document-factory.js +26 -3
- package/esm/document/factory/type-document-factory.js +6 -3
- package/esm/document/index.js +1 -1
- package/esm/document/resource/collection-class.js +31 -27
- package/esm/document/resource/collection-decorator.js +54 -26
- package/esm/document/resource/{operation-decorator.js → crud-operation-decorator.js} +3 -2
- package/esm/document/resource/crud-operation.js +44 -0
- package/esm/document/resource/crud-resource.js +2 -2
- package/esm/document/resource/endpoint.js +11 -3
- package/esm/document/resource/singleton-class.js +20 -15
- package/esm/document/resource/storage-decorator.js +7 -7
- package/package.json +3 -2
- package/types/document/data-type/complex-type-class.d.ts +1 -1
- package/types/document/data-type/complex-type.d.ts +7 -3
- package/types/document/data-type/data-type.d.ts +3 -0
- package/types/document/data-type/field-class.d.ts +0 -2
- package/types/document/index.d.ts +1 -1
- package/types/document/resource/collection-class.d.ts +0 -9
- package/types/document/resource/collection-decorator.d.ts +12 -0
- package/types/document/resource/crud-operation-decorator.d.ts +6 -0
- package/types/document/resource/{operation.d.ts → crud-operation.d.ts} +12 -4
- package/types/document/resource/crud-resource.d.ts +3 -3
- package/types/document/resource/endpoint.d.ts +1 -1
- package/types/document/resource/resource-decorator.d.ts +3 -2
- package/types/document/resource/resource.d.ts +2 -2
- package/types/document/resource/singleton-class.d.ts +5 -5
- package/types/document/resource/singleton-decorator.d.ts +6 -0
- package/types/document/resource/storage-class.d.ts +4 -4
- package/types/schema/data-type/complex-type.interface.d.ts +1 -1
- package/types/schema/resource/collection.interface.d.ts +7 -7
- package/types/schema/resource/endpoint.interface.d.ts +2 -1
- package/types/schema/resource/singleton.interface.d.ts +0 -2
- package/cjs/document/resource/operation.js +0 -25
- package/esm/document/resource/operation.js +0 -20
- 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
|
-
|
|
1105
|
+
let i = 0;
|
|
1106
|
+
const parameters = {};
|
|
1103
1107
|
for (const [name, param] of this.parameters.entries()) {
|
|
1104
|
-
if (!param.isBuiltin)
|
|
1105
|
-
|
|
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
|
|
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
|
-
|
|
1631
|
-
|
|
1632
|
-
|
|
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
|
|
10344
|
+
var CrudOperation = class extends Endpoint {
|
|
10326
10345
|
static {
|
|
10327
|
-
__name(this, "
|
|
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
|
|
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
|
|
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,
|
|
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 = { ...
|
|
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
|
-
|
|
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
|
-
|
|
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,
|