@routier/core 0.0.1-alpha.3 → 0.0.1
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/dist/assertions/index.d.ts +1 -1
- package/dist/assertions/index.js +7 -1
- package/dist/assertions/index.js.map +1 -1
- package/dist/codegen/handlers/SerializeHandlerBuilder.d.ts +2 -2
- package/dist/codegen/handlers/clone/CloneArrayHandler.d.ts +6 -0
- package/dist/codegen/handlers/deserialize/DeserializeDeserializerHandler.d.ts +6 -0
- package/dist/codegen/handlers/serialize/SerializeSerializerHandler.d.ts +6 -0
- package/dist/collections/index.js.map +1 -1
- package/dist/expressions/index.js +67 -23
- package/dist/expressions/index.js.map +1 -1
- package/dist/index.js +327 -107
- package/dist/index.js.map +1 -1
- package/dist/plugins/index.js +51 -6
- package/dist/plugins/index.js.map +1 -1
- package/dist/plugins/translators/SqlTranslator.d.ts +2 -1
- package/dist/schema/index.js +209 -78
- package/dist/schema/index.js.map +1 -1
- package/dist/schema/property/modifiers/SchemaSerialize.d.ts +1 -1
- package/dist/schema/testSchemas.test.d.ts +269 -0
- package/dist/schema/types.d.ts +5 -2
- package/dist/utilities/dbPluginEventUtils.d.ts +1 -1
- package/dist/utilities/index.js.map +1 -1
- package/package.json +3 -4
- package/readme.md +0 -6
- /package/dist/{pipeline/TrampolinePipeline.test.d.ts → schema/schemaGeneration.test.d.ts} +0 -0
package/dist/index.js
CHANGED
|
@@ -21,7 +21,13 @@ function assertDate(data) {
|
|
|
21
21
|
}
|
|
22
22
|
function assertIsNotNull(data, message) {
|
|
23
23
|
if (data == null) {
|
|
24
|
-
|
|
24
|
+
if (message == null) {
|
|
25
|
+
throw new TypeError('Assertion failed, data is null');
|
|
26
|
+
}
|
|
27
|
+
if (typeof message === "string") {
|
|
28
|
+
throw new TypeError(message);
|
|
29
|
+
}
|
|
30
|
+
throw new TypeError(message());
|
|
25
31
|
}
|
|
26
32
|
}
|
|
27
33
|
function assertIsArray(data, message) {
|
|
@@ -541,15 +547,19 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
541
547
|
__webpack_require__.d(__webpack_exports__, {
|
|
542
548
|
CloneHandlerBuilder: () => (CloneHandlerBuilder)
|
|
543
549
|
});
|
|
550
|
+
/* ESM import */var _clone_CloneArrayHandler__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./clone/CloneArrayHandler */ "./src/codegen/handlers/clone/CloneArrayHandler.ts");
|
|
544
551
|
/* ESM import */var _clone_CloneObjectHandler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./clone/CloneObjectHandler */ "./src/codegen/handlers/clone/CloneObjectHandler.ts");
|
|
545
552
|
/* ESM import */var _clone_CloneValueHandler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./clone/CloneValueHandler */ "./src/codegen/handlers/clone/CloneValueHandler.ts");
|
|
546
553
|
|
|
547
554
|
|
|
555
|
+
|
|
548
556
|
/// Purpose:
|
|
549
557
|
class CloneHandlerBuilder {
|
|
550
558
|
build() {
|
|
551
559
|
const handler = new _clone_CloneObjectHandler__WEBPACK_IMPORTED_MODULE_0__.CloneObjectHandler();
|
|
552
|
-
handler
|
|
560
|
+
handler
|
|
561
|
+
.setNext(new _clone_CloneValueHandler__WEBPACK_IMPORTED_MODULE_1__.CloneValueHandler())
|
|
562
|
+
.setNext(new _clone_CloneArrayHandler__WEBPACK_IMPORTED_MODULE_2__.CloneArrayHandler());
|
|
553
563
|
return handler;
|
|
554
564
|
}
|
|
555
565
|
}
|
|
@@ -590,10 +600,12 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
590
600
|
DeserializeHandlerBuilder: () => (DeserializeHandlerBuilder)
|
|
591
601
|
});
|
|
592
602
|
/* ESM import */var _deserialize_DeserializeObjectHandler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./deserialize/DeserializeObjectHandler */ "./src/codegen/handlers/deserialize/DeserializeObjectHandler.ts");
|
|
593
|
-
/* ESM import */var
|
|
594
|
-
/* ESM import */var
|
|
595
|
-
/* ESM import */var
|
|
596
|
-
/* ESM import */var
|
|
603
|
+
/* ESM import */var _deserialize_DeserializeValueHandler__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./deserialize/DeserializeValueHandler */ "./src/codegen/handlers/deserialize/DeserializeValueHandler.ts");
|
|
604
|
+
/* ESM import */var _deserialize_DeserializeDateHandler__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./deserialize/DeserializeDateHandler */ "./src/codegen/handlers/deserialize/DeserializeDateHandler.ts");
|
|
605
|
+
/* ESM import */var _deserialize_DeserializeComputedValueHandler__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./deserialize/DeserializeComputedValueHandler */ "./src/codegen/handlers/deserialize/DeserializeComputedValueHandler.ts");
|
|
606
|
+
/* ESM import */var _deserialize_DeserializeFunctionHandler__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./deserialize/DeserializeFunctionHandler */ "./src/codegen/handlers/deserialize/DeserializeFunctionHandler.ts");
|
|
607
|
+
/* ESM import */var _deserialize_DeserializeDeserializerHandler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./deserialize/DeserializeDeserializerHandler */ "./src/codegen/handlers/deserialize/DeserializeDeserializerHandler.ts");
|
|
608
|
+
|
|
597
609
|
|
|
598
610
|
|
|
599
611
|
|
|
@@ -604,10 +616,11 @@ class DeserializeHandlerBuilder {
|
|
|
604
616
|
build() {
|
|
605
617
|
const handler = new _deserialize_DeserializeObjectHandler__WEBPACK_IMPORTED_MODULE_0__.DeserializeObjectHandler();
|
|
606
618
|
handler
|
|
607
|
-
.setNext(new
|
|
608
|
-
.setNext(new
|
|
609
|
-
.setNext(new
|
|
610
|
-
.setNext(new
|
|
619
|
+
.setNext(new _deserialize_DeserializeDeserializerHandler__WEBPACK_IMPORTED_MODULE_1__.DeserializeDeserializerHandler())
|
|
620
|
+
.setNext(new _deserialize_DeserializeComputedValueHandler__WEBPACK_IMPORTED_MODULE_2__.DeserializeComputedValueHandler())
|
|
621
|
+
.setNext(new _deserialize_DeserializeFunctionHandler__WEBPACK_IMPORTED_MODULE_3__.DeserializeFunctionHandler())
|
|
622
|
+
.setNext(new _deserialize_DeserializeValueHandler__WEBPACK_IMPORTED_MODULE_4__.DeserializeValueHandler())
|
|
623
|
+
.setNext(new _deserialize_DeserializeDateHandler__WEBPACK_IMPORTED_MODULE_5__.DeserializeDateHandler());
|
|
611
624
|
return handler;
|
|
612
625
|
}
|
|
613
626
|
}
|
|
@@ -868,18 +881,22 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
868
881
|
__webpack_require__.d(__webpack_exports__, {
|
|
869
882
|
SerializeHandlerBuilder: () => (SerializeHandlerBuilder)
|
|
870
883
|
});
|
|
871
|
-
/* ESM import */var
|
|
872
|
-
/* ESM import */var
|
|
873
|
-
/* ESM import */var
|
|
884
|
+
/* ESM import */var _serialize_SerializeDateHandler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./serialize/SerializeDateHandler */ "./src/codegen/handlers/serialize/SerializeDateHandler.ts");
|
|
885
|
+
/* ESM import */var _serialize_SerializeObjectHandler__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./serialize/SerializeObjectHandler */ "./src/codegen/handlers/serialize/SerializeObjectHandler.ts");
|
|
886
|
+
/* ESM import */var _serialize_SerializeValueHandler__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./serialize/SerializeValueHandler */ "./src/codegen/handlers/serialize/SerializeValueHandler.ts");
|
|
887
|
+
/* ESM import */var _serialize_SerializeSerializerHandler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./serialize/SerializeSerializerHandler */ "./src/codegen/handlers/serialize/SerializeSerializerHandler.ts");
|
|
888
|
+
|
|
874
889
|
|
|
875
890
|
|
|
876
891
|
|
|
877
892
|
/// Purpose:
|
|
878
893
|
class SerializeHandlerBuilder {
|
|
879
894
|
build() {
|
|
880
|
-
const handler = new
|
|
881
|
-
handler
|
|
882
|
-
.setNext(new
|
|
895
|
+
const handler = new _serialize_SerializeSerializerHandler__WEBPACK_IMPORTED_MODULE_0__.SerializeSerializerHandler();
|
|
896
|
+
handler
|
|
897
|
+
.setNext(new _serialize_SerializeDateHandler__WEBPACK_IMPORTED_MODULE_1__.SerializeDateHandler())
|
|
898
|
+
.setNext(new _serialize_SerializeValueHandler__WEBPACK_IMPORTED_MODULE_2__.SerializeValueHandler())
|
|
899
|
+
.setNext(new _serialize_SerializeObjectHandler__WEBPACK_IMPORTED_MODULE_3__.SerializeObjectHandler());
|
|
883
900
|
return handler;
|
|
884
901
|
}
|
|
885
902
|
}
|
|
@@ -915,6 +932,43 @@ class StripHandlerBuilder {
|
|
|
915
932
|
}
|
|
916
933
|
|
|
917
934
|
|
|
935
|
+
}),
|
|
936
|
+
"./src/codegen/handlers/clone/CloneArrayHandler.ts":
|
|
937
|
+
/*!*********************************************************!*\
|
|
938
|
+
!*** ./src/codegen/handlers/clone/CloneArrayHandler.ts ***!
|
|
939
|
+
\*********************************************************/
|
|
940
|
+
(function (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
941
|
+
__webpack_require__.r(__webpack_exports__);
|
|
942
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
943
|
+
CloneArrayHandler: () => (CloneArrayHandler)
|
|
944
|
+
});
|
|
945
|
+
/* ESM import */var _types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../types */ "./src/codegen/handlers/types.ts");
|
|
946
|
+
/* ESM import */var _schema__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../schema */ "./src/schema/types.ts");
|
|
947
|
+
|
|
948
|
+
|
|
949
|
+
class CloneArrayHandler extends _types__WEBPACK_IMPORTED_MODULE_0__.PropertyInfoHandler {
|
|
950
|
+
handle(property, builder) {
|
|
951
|
+
if (property.type === _schema__WEBPACK_IMPORTED_MODULE_1__.SchemaTypes.Array) {
|
|
952
|
+
if (property.isNullable || property.isOptional) {
|
|
953
|
+
// Child properties will take care of this
|
|
954
|
+
return builder;
|
|
955
|
+
}
|
|
956
|
+
const slot = builder.get("assignments");
|
|
957
|
+
const resultAssignmentPath = property.getAssignmentPath({ parent: "result" });
|
|
958
|
+
if (property.parent == null) {
|
|
959
|
+
slot.assign(`${resultAssignmentPath}`).value("{}");
|
|
960
|
+
return builder;
|
|
961
|
+
}
|
|
962
|
+
// slotPath.push(...property.getParentPathArray());
|
|
963
|
+
// const nestedObjectBuilder = builder.get<ObjectBuilder>(slotPath.get());
|
|
964
|
+
// nestedObjectBuilder.nested(property.name, property.name)
|
|
965
|
+
return builder;
|
|
966
|
+
}
|
|
967
|
+
return super.handle(property, builder);
|
|
968
|
+
}
|
|
969
|
+
}
|
|
970
|
+
|
|
971
|
+
|
|
918
972
|
}),
|
|
919
973
|
"./src/codegen/handlers/clone/CloneObjectHandler.ts":
|
|
920
974
|
/*!**********************************************************!*\
|
|
@@ -925,24 +979,14 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
925
979
|
__webpack_require__.d(__webpack_exports__, {
|
|
926
980
|
CloneObjectHandler: () => (CloneObjectHandler)
|
|
927
981
|
});
|
|
928
|
-
/* ESM import */var _SlotPath__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../SlotPath */ "./src/codegen/SlotPath.ts");
|
|
929
982
|
/* ESM import */var _types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../types */ "./src/codegen/handlers/types.ts");
|
|
930
983
|
/* ESM import */var _schema__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../schema */ "./src/schema/types.ts");
|
|
931
984
|
|
|
932
985
|
|
|
933
|
-
|
|
934
986
|
class CloneObjectHandler extends _types__WEBPACK_IMPORTED_MODULE_0__.PropertyInfoHandler {
|
|
935
987
|
handle(property, builder) {
|
|
936
988
|
if (property.type === _schema__WEBPACK_IMPORTED_MODULE_1__.SchemaTypes.Object) {
|
|
937
|
-
|
|
938
|
-
let objectBuilder = builder.get(slotPath.get());
|
|
939
|
-
if (property.parent == null) {
|
|
940
|
-
objectBuilder.nested(property.name, property.name);
|
|
941
|
-
return builder;
|
|
942
|
-
}
|
|
943
|
-
slotPath.push(...property.getParentPathArray());
|
|
944
|
-
const nestedObjectBuilder = builder.get(slotPath.get());
|
|
945
|
-
nestedObjectBuilder.nested(property.name, property.name);
|
|
989
|
+
// Child properties will take care of this
|
|
946
990
|
return builder;
|
|
947
991
|
}
|
|
948
992
|
return super.handle(property, builder);
|
|
@@ -960,7 +1004,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
960
1004
|
__webpack_require__.d(__webpack_exports__, {
|
|
961
1005
|
CloneValueHandler: () => (CloneValueHandler)
|
|
962
1006
|
});
|
|
963
|
-
/* ESM import */var
|
|
1007
|
+
/* ESM import */var _blocks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../blocks */ "./src/codegen/blocks.ts");
|
|
964
1008
|
/* ESM import */var _types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../types */ "./src/codegen/handlers/types.ts");
|
|
965
1009
|
/* ESM import */var _schema__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../schema */ "./src/schema/types.ts");
|
|
966
1010
|
|
|
@@ -968,21 +1012,20 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
968
1012
|
|
|
969
1013
|
class CloneValueHandler extends _types__WEBPACK_IMPORTED_MODULE_0__.PropertyInfoHandler {
|
|
970
1014
|
handle(property, builder) {
|
|
971
|
-
if (property.type != _schema__WEBPACK_IMPORTED_MODULE_1__.SchemaTypes.Object) {
|
|
972
|
-
|
|
973
|
-
const entitySelectorPath = property.
|
|
974
|
-
|
|
975
|
-
objectBuilder = builder.get("result")
|
|
976
|
-
.assign("const result", { name: "variable" })
|
|
977
|
-
.object({ name: "object" });
|
|
978
|
-
}
|
|
1015
|
+
if (property.type != _schema__WEBPACK_IMPORTED_MODULE_1__.SchemaTypes.Object && property.type != _schema__WEBPACK_IMPORTED_MODULE_1__.SchemaTypes.Array) {
|
|
1016
|
+
const slot = builder.get("if");
|
|
1017
|
+
const entitySelectorPath = property.getSelectrorPath({ parent: "entity" });
|
|
1018
|
+
const resultAssignmentPath = property.getAssignmentPath({ parent: "result" });
|
|
979
1019
|
if (property.parent == null) {
|
|
980
|
-
|
|
1020
|
+
// we are a first level property
|
|
1021
|
+
slot.if(`${entitySelectorPath} != null`).appendBody(`${resultAssignmentPath} = ${entitySelectorPath}`);
|
|
981
1022
|
return builder;
|
|
982
1023
|
}
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
1024
|
+
// Second level or more property
|
|
1025
|
+
// Need to ensure parent is assigned
|
|
1026
|
+
const propertyParentPath = ["result", ...property.getParentPathArray()];
|
|
1027
|
+
const ifBuilder = new _blocks__WEBPACK_IMPORTED_MODULE_2__.IfBuilder(`${propertyParentPath.join("?.")} == null`).appendBody(`${propertyParentPath.join(".")} = {};`);
|
|
1028
|
+
slot.if(`${entitySelectorPath} != null`).appendBody(ifBuilder.toString()).appendBody(`${resultAssignmentPath} = ${entitySelectorPath}`);
|
|
986
1029
|
return builder;
|
|
987
1030
|
}
|
|
988
1031
|
return super.handle(property, builder);
|
|
@@ -1123,6 +1166,47 @@ class DeserializeDateHandler extends _types__WEBPACK_IMPORTED_MODULE_0__.Propert
|
|
|
1123
1166
|
}
|
|
1124
1167
|
|
|
1125
1168
|
|
|
1169
|
+
}),
|
|
1170
|
+
"./src/codegen/handlers/deserialize/DeserializeDeserializerHandler.ts":
|
|
1171
|
+
/*!****************************************************************************!*\
|
|
1172
|
+
!*** ./src/codegen/handlers/deserialize/DeserializeDeserializerHandler.ts ***!
|
|
1173
|
+
\****************************************************************************/
|
|
1174
|
+
(function (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
1175
|
+
__webpack_require__.r(__webpack_exports__);
|
|
1176
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
1177
|
+
DeserializeDeserializerHandler: () => (DeserializeDeserializerHandler)
|
|
1178
|
+
});
|
|
1179
|
+
/* ESM import */var _SlotPath__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../SlotPath */ "./src/codegen/SlotPath.ts");
|
|
1180
|
+
/* ESM import */var _types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../types */ "./src/codegen/handlers/types.ts");
|
|
1181
|
+
|
|
1182
|
+
|
|
1183
|
+
class DeserializeDeserializerHandler extends _types__WEBPACK_IMPORTED_MODULE_0__.PropertyInfoHandler {
|
|
1184
|
+
handle(property, builder) {
|
|
1185
|
+
if (property.valueDeserializer != null) {
|
|
1186
|
+
let objectBuilder = builder.getOrDefault("result.variable.object");
|
|
1187
|
+
const assignmentBuilder = builder.getOrDefault("functions");
|
|
1188
|
+
const entitySelectorPath = property.getSelectrorPath({ parent: "entity" });
|
|
1189
|
+
if (objectBuilder == null) {
|
|
1190
|
+
objectBuilder = builder.get("result")
|
|
1191
|
+
.assign("const result", { name: "variable" })
|
|
1192
|
+
.object({ name: "object" });
|
|
1193
|
+
}
|
|
1194
|
+
const defaultFunctionWithParameters = this.toNamedFunction(property.valueDeserializer.toString(), assignmentBuilder);
|
|
1195
|
+
defaultFunctionWithParameters.builder.parameters(...defaultFunctionWithParameters.parameters.map((_, i) => ({ name: defaultFunctionWithParameters.parameters[i], callName: entitySelectorPath })));
|
|
1196
|
+
if (property.parent == null) {
|
|
1197
|
+
objectBuilder.property(`${property.name}: ${defaultFunctionWithParameters.builder.toCallable()}`);
|
|
1198
|
+
return builder;
|
|
1199
|
+
}
|
|
1200
|
+
const slotPath = new _SlotPath__WEBPACK_IMPORTED_MODULE_1__.SlotPath(...property.getParentPathArray());
|
|
1201
|
+
objectBuilder = objectBuilder.get(slotPath.get());
|
|
1202
|
+
objectBuilder.property(`${property.name}: ${defaultFunctionWithParameters.builder.toCallable()}`);
|
|
1203
|
+
return builder;
|
|
1204
|
+
}
|
|
1205
|
+
return super.handle(property, builder);
|
|
1206
|
+
}
|
|
1207
|
+
}
|
|
1208
|
+
|
|
1209
|
+
|
|
1126
1210
|
}),
|
|
1127
1211
|
"./src/codegen/handlers/deserialize/DeserializeFunctionHandler.ts":
|
|
1128
1212
|
/*!************************************************************************!*\
|
|
@@ -1452,7 +1536,7 @@ class EnrichmentNullableObjectHandler extends _types__WEBPACK_IMPORTED_MODULE_0_
|
|
|
1452
1536
|
if (enrichedSlot == null) {
|
|
1453
1537
|
throw new Error(`Error building enricher, could not find slot for ${slotPath.get()}`);
|
|
1454
1538
|
}
|
|
1455
|
-
enriched = enrichedSlot.nested(property.name,
|
|
1539
|
+
enriched = enrichedSlot.nested(property.name, `[${enrichedPath}]`);
|
|
1456
1540
|
}
|
|
1457
1541
|
return builder;
|
|
1458
1542
|
}
|
|
@@ -1471,22 +1555,29 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
1471
1555
|
__webpack_require__.d(__webpack_exports__, {
|
|
1472
1556
|
EnrichmentObjectHandler: () => (EnrichmentObjectHandler)
|
|
1473
1557
|
});
|
|
1558
|
+
/* ESM import */var _SlotPath__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../SlotPath */ "./src/codegen/SlotPath.ts");
|
|
1474
1559
|
/* ESM import */var _types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../types */ "./src/codegen/handlers/types.ts");
|
|
1475
1560
|
/* ESM import */var _schema__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../schema */ "./src/schema/types.ts");
|
|
1476
1561
|
|
|
1477
1562
|
|
|
1563
|
+
|
|
1478
1564
|
class EnrichmentObjectHandler extends _types__WEBPACK_IMPORTED_MODULE_0__.PropertyInfoHandler {
|
|
1479
1565
|
handle(property, builder) {
|
|
1480
1566
|
if (property.type === _schema__WEBPACK_IMPORTED_MODULE_1__.SchemaTypes.Object && (property.isNullable || property.isOptional) === false) {
|
|
1481
|
-
const
|
|
1482
|
-
const
|
|
1483
|
-
|
|
1484
|
-
|
|
1567
|
+
const slotPath = new _SlotPath__WEBPACK_IMPORTED_MODULE_2__.SlotPath("factory", "function", "enriched", "object", "enriched");
|
|
1568
|
+
const nestedSlotPath = this.buildSlotPath(property, slotPath);
|
|
1569
|
+
// Generate null check for current level using parent relationships
|
|
1570
|
+
const enrichedPath = property.getAssignmentPath({ parent: "enriched" });
|
|
1571
|
+
const slot = builder.get("factory.function.assignment");
|
|
1572
|
+
slot.assign(enrichedPath).value(`enableChangeTracking(${enrichedPath} || {}, "${property.name}")`);
|
|
1573
|
+
let enriched = builder.getOrDefault(nestedSlotPath.get());
|
|
1574
|
+
if (enriched == null) {
|
|
1575
|
+
const enrichedSlot = builder.get(slotPath.get());
|
|
1576
|
+
if (enrichedSlot == null) {
|
|
1577
|
+
throw new Error(`Error building enricher, could not find slot for ${slotPath.get()}`);
|
|
1578
|
+
}
|
|
1579
|
+
enriched = enrichedSlot.nested(property.name, `[${enrichedPath}]`);
|
|
1485
1580
|
}
|
|
1486
|
-
assignmentSlot.assign(childPath, { name: `[${childPath}]` }).call("enableChangeTracking", { name: "builder" });
|
|
1487
|
-
const changeTrackingSlot = builder.get("factory.function.tracking.freeze");
|
|
1488
|
-
const selectorPath = property.getSelectrorPath({ parent: "enriched" });
|
|
1489
|
-
changeTrackingSlot.if(`${selectorPath} != null`, { unshift: true }).unshiftBody(`${selectorPath} = Object.freeze(${selectorPath})`);
|
|
1490
1581
|
return builder;
|
|
1491
1582
|
}
|
|
1492
1583
|
return super.handle(property, builder);
|
|
@@ -2217,8 +2308,7 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
2217
2308
|
class SerializeDateHandler extends _types__WEBPACK_IMPORTED_MODULE_0__.PropertyInfoHandler {
|
|
2218
2309
|
handle(property, builder) {
|
|
2219
2310
|
if (property.type === _schema__WEBPACK_IMPORTED_MODULE_1__.SchemaTypes.Date) {
|
|
2220
|
-
|
|
2221
|
-
let objectBuilder = builder.get(slotPath.get());
|
|
2311
|
+
let objectBuilder = builder.get("if");
|
|
2222
2312
|
const entitySelectorPath = property.getSelectrorPath({ parent: "entity" });
|
|
2223
2313
|
const entityAssignmentPath = property.getAssignmentPath({ parent: "result" });
|
|
2224
2314
|
const assignment = `${property.name}: ${entitySelectorPath} instanceof Date ? ${entitySelectorPath}.toISOString() : ${entitySelectorPath}`;
|
|
@@ -2232,12 +2322,14 @@ class SerializeDateHandler extends _types__WEBPACK_IMPORTED_MODULE_0__.PropertyI
|
|
|
2232
2322
|
}
|
|
2233
2323
|
// A date cannot be a nested object, just do the assignment
|
|
2234
2324
|
if (property.parent == null) {
|
|
2235
|
-
objectBuilder.property(
|
|
2325
|
+
objectBuilder.if(`Object.hasOwn(entity, "${property.name}")`).appendBody(`${entityAssignmentPath} = ${entitySelectorPath}`);
|
|
2236
2326
|
return builder;
|
|
2237
2327
|
}
|
|
2238
|
-
|
|
2239
|
-
const
|
|
2240
|
-
|
|
2328
|
+
// TODO: SOLVE THIS, IT IS CLOSE
|
|
2329
|
+
//const slotPath = new SlotPath(...property.getParentPathArray());
|
|
2330
|
+
// slotPath.push(...property.getParentPathArray());
|
|
2331
|
+
// const nestedObjectBuilder = builder.get<ObjectBuilder>(slotPath.get());
|
|
2332
|
+
// nestedObjectBuilder.property(assignment)
|
|
2241
2333
|
return builder;
|
|
2242
2334
|
}
|
|
2243
2335
|
return super.handle(property, builder);
|
|
@@ -2264,15 +2356,52 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
2264
2356
|
class SerializeObjectHandler extends _types__WEBPACK_IMPORTED_MODULE_0__.PropertyInfoHandler {
|
|
2265
2357
|
handle(property, builder) {
|
|
2266
2358
|
if (property.type === _schema__WEBPACK_IMPORTED_MODULE_1__.SchemaTypes.Object) {
|
|
2267
|
-
const slotPath = new _SlotPath__WEBPACK_IMPORTED_MODULE_2__.SlotPath("
|
|
2268
|
-
|
|
2359
|
+
const slotPath = new _SlotPath__WEBPACK_IMPORTED_MODULE_2__.SlotPath("assignments");
|
|
2360
|
+
const childPath = property.getAssignmentPath({ parent: "result" });
|
|
2361
|
+
if (property.isNullable || property.isOptional) {
|
|
2362
|
+
// Do nothing if it's nullable or optional as property assignments will check
|
|
2363
|
+
// and create if it does not exist. This way we can handle null/optional
|
|
2364
|
+
return builder;
|
|
2365
|
+
}
|
|
2366
|
+
const slot = builder.get(slotPath.get());
|
|
2367
|
+
slot.assign(`${childPath}`, { name: `[${childPath}]` }).value("{}");
|
|
2368
|
+
return builder;
|
|
2369
|
+
}
|
|
2370
|
+
return super.handle(property, builder);
|
|
2371
|
+
}
|
|
2372
|
+
}
|
|
2373
|
+
|
|
2374
|
+
|
|
2375
|
+
}),
|
|
2376
|
+
"./src/codegen/handlers/serialize/SerializeSerializerHandler.ts":
|
|
2377
|
+
/*!**********************************************************************!*\
|
|
2378
|
+
!*** ./src/codegen/handlers/serialize/SerializeSerializerHandler.ts ***!
|
|
2379
|
+
\**********************************************************************/
|
|
2380
|
+
(function (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
2381
|
+
__webpack_require__.r(__webpack_exports__);
|
|
2382
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
2383
|
+
SerializeSerializerHandler: () => (SerializeSerializerHandler)
|
|
2384
|
+
});
|
|
2385
|
+
/* ESM import */var _types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../types */ "./src/codegen/handlers/types.ts");
|
|
2386
|
+
|
|
2387
|
+
class SerializeSerializerHandler extends _types__WEBPACK_IMPORTED_MODULE_0__.PropertyInfoHandler {
|
|
2388
|
+
handle(property, builder) {
|
|
2389
|
+
if (property.valueSerializer != null) {
|
|
2390
|
+
const objectBuilder = builder.getOrDefault("if");
|
|
2391
|
+
const assignmentBuilder = builder.getOrDefault("functions");
|
|
2392
|
+
const entitySelectorPath = property.getAssignmentPath({ parent: "entity" });
|
|
2393
|
+
const resultSelectorPath = property.getAssignmentPath({ parent: "result" });
|
|
2394
|
+
const defaultFunctionWithParameters = this.toNamedFunction(property.valueSerializer.toString(), assignmentBuilder);
|
|
2395
|
+
defaultFunctionWithParameters.builder.parameters(...defaultFunctionWithParameters.parameters.map((_, i) => ({ name: defaultFunctionWithParameters.parameters[i], callName: entitySelectorPath })));
|
|
2269
2396
|
if (property.parent == null) {
|
|
2270
|
-
objectBuilder.
|
|
2397
|
+
objectBuilder.if(`Object.hasOwn(entity, "${property.name}")`).appendBody(`${resultSelectorPath} = ${defaultFunctionWithParameters.builder.toCallable()}`);
|
|
2271
2398
|
return builder;
|
|
2272
2399
|
}
|
|
2273
|
-
|
|
2274
|
-
const
|
|
2275
|
-
|
|
2400
|
+
// TODO: SOLVE THIS
|
|
2401
|
+
//const slotPath = new SlotPath(...property.getParentPathArray());
|
|
2402
|
+
// const slotPath = new SlotPath(...property.getParentPathArray());
|
|
2403
|
+
// objectBuilder = objectBuilder.get<ObjectBuilder>(slotPath.get());
|
|
2404
|
+
// objectBuilder.property(`${property.name}: ${defaultFunctionWithParameters.builder.toCallable()}`);
|
|
2276
2405
|
return builder;
|
|
2277
2406
|
}
|
|
2278
2407
|
return super.handle(property, builder);
|
|
@@ -2290,7 +2419,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
2290
2419
|
__webpack_require__.d(__webpack_exports__, {
|
|
2291
2420
|
SerializeValueHandler: () => (SerializeValueHandler)
|
|
2292
2421
|
});
|
|
2293
|
-
/* ESM import */var
|
|
2422
|
+
/* ESM import */var _blocks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../blocks */ "./src/codegen/blocks.ts");
|
|
2294
2423
|
/* ESM import */var _types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../types */ "./src/codegen/handlers/types.ts");
|
|
2295
2424
|
/* ESM import */var _schema__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../schema */ "./src/schema/types.ts");
|
|
2296
2425
|
|
|
@@ -2299,20 +2428,24 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
2299
2428
|
class SerializeValueHandler extends _types__WEBPACK_IMPORTED_MODULE_0__.PropertyInfoHandler {
|
|
2300
2429
|
handle(property, builder) {
|
|
2301
2430
|
if (property.type != _schema__WEBPACK_IMPORTED_MODULE_1__.SchemaTypes.Object && property.type != _schema__WEBPACK_IMPORTED_MODULE_1__.SchemaTypes.Date) {
|
|
2302
|
-
|
|
2431
|
+
const slot = builder.getOrDefault("if");
|
|
2303
2432
|
const entitySelectorPath = property.getAssignmentPath({ parent: "entity" });
|
|
2304
|
-
|
|
2305
|
-
objectBuilder = builder.get("result")
|
|
2306
|
-
.assign("const result", { name: "variable" })
|
|
2307
|
-
.object({ name: "object" });
|
|
2308
|
-
}
|
|
2433
|
+
const resultSelectorPath = property.getAssignmentPath({ parent: "result" });
|
|
2309
2434
|
if (property.parent == null) {
|
|
2310
|
-
|
|
2435
|
+
// Only assign if the incoming entity has the property, this allows partial serialization
|
|
2436
|
+
// Basically only serialize what is there
|
|
2437
|
+
slot.if(`Object.hasOwn(entity, "${property.name}")`).appendBody(`${resultSelectorPath} = ${entitySelectorPath}`);
|
|
2311
2438
|
return builder;
|
|
2312
2439
|
}
|
|
2313
|
-
const
|
|
2314
|
-
|
|
2315
|
-
|
|
2440
|
+
const parentSelectPath = ["entity", ...property.getParentPathArray()].join(".");
|
|
2441
|
+
const parentAssignPath = ["result", ...property.getParentPathArray()].join(".");
|
|
2442
|
+
const ifSlot = slot.if(`Object.hasOwn(${parentSelectPath}, "${property.name}")`);
|
|
2443
|
+
if (property.parent.isNullable || property.parent.isOptional) {
|
|
2444
|
+
// Do this for nullable/optional parents. Parent will be null if its nullable/optional
|
|
2445
|
+
const conditionallyCreateParent = new _blocks__WEBPACK_IMPORTED_MODULE_2__.IfBuilder(`${parentAssignPath} == null`).appendBody(`${parentAssignPath} = {}`);
|
|
2446
|
+
ifSlot.appendBody(conditionallyCreateParent.toString());
|
|
2447
|
+
}
|
|
2448
|
+
ifSlot.appendBody(`${resultSelectorPath} = ${entitySelectorPath}`);
|
|
2316
2449
|
return builder;
|
|
2317
2450
|
}
|
|
2318
2451
|
return super.handle(property, builder);
|
|
@@ -2498,11 +2631,10 @@ class PropertyInfoHandler {
|
|
|
2498
2631
|
const useFromPropertyName = property.from != null;
|
|
2499
2632
|
const entitySelectorPath = property.getAssignmentPath({ parent: "entity", useFromPropertyName });
|
|
2500
2633
|
if (property.parent != null) {
|
|
2501
|
-
const slotPath = new _SlotPath__WEBPACK_IMPORTED_MODULE_1__.SlotPath("factory", "function", "
|
|
2634
|
+
const slotPath = new _SlotPath__WEBPACK_IMPORTED_MODULE_1__.SlotPath("factory", "function", "enriched", "object", "enriched");
|
|
2502
2635
|
const path = property.parent.getAssignmentPath({ parent: "enriched" });
|
|
2503
2636
|
slotPath.push(`[${path}]`);
|
|
2504
|
-
const
|
|
2505
|
-
const objectBuilder = builder.getValue;
|
|
2637
|
+
const objectBuilder = root.get(slotPath.get());
|
|
2506
2638
|
const childEntityPathSelector = property.getSelectrorPath({ parent: "entity", useFromPropertyName });
|
|
2507
2639
|
objectBuilder.property(`${property.name}: ${childEntityPathSelector}`);
|
|
2508
2640
|
return;
|
|
@@ -3289,6 +3421,7 @@ const ERROR_MESSAGES = {
|
|
|
3289
3421
|
PROPERTY_NOT_FOUND: (path) => `Error parsing query, could not find PropertyInfo for path: ${path}`,
|
|
3290
3422
|
PARAM_PATH_NOT_FOUND: (value, params) => `Cannot find path in params for .where(). Make sure parameters are not used inline.\r\nPath: ${value}, Params: ${JSON.stringify(params)}`
|
|
3291
3423
|
};
|
|
3424
|
+
const STRINGIFIED_COMPARE_OPERATORS = ["true", "false"];
|
|
3292
3425
|
const combineExpressions = (...expressions) => {
|
|
3293
3426
|
if (expressions.length === 0) {
|
|
3294
3427
|
throw new Error("combineExpressions requires at least 1 expression");
|
|
@@ -3490,8 +3623,11 @@ const parseCondition = (schema, expression, params) => {
|
|
|
3490
3623
|
// This is a parameter path on the left side (e.g., params.distinctPlayers.includes(entity.playerId))
|
|
3491
3624
|
// For includes method, we need to swap left and right sides
|
|
3492
3625
|
if (methodMatch[2] === 'includes') {
|
|
3493
|
-
|
|
3494
|
-
|
|
3626
|
+
const property = getProperty(schema, rightSide);
|
|
3627
|
+
const value = getValue(leftSide, params); // retrieve the original value
|
|
3628
|
+
const serializer = property.property.valueSerializer;
|
|
3629
|
+
comparator.left = serializer ? getValue(String(property.property.valueSerializer(JSON.parse(value.value)))) : value;
|
|
3630
|
+
comparator.right = property;
|
|
3495
3631
|
}
|
|
3496
3632
|
else {
|
|
3497
3633
|
// For other methods, return NOT_PARSABLE for now
|
|
@@ -3500,8 +3636,11 @@ const parseCondition = (schema, expression, params) => {
|
|
|
3500
3636
|
}
|
|
3501
3637
|
else {
|
|
3502
3638
|
// Normal case: property on left, value on right
|
|
3503
|
-
|
|
3504
|
-
|
|
3639
|
+
const property = getProperty(schema, leftSide);
|
|
3640
|
+
const serializer = property.property.valueSerializer;
|
|
3641
|
+
const value = getValue(rightSide, params); // retrieve the original value
|
|
3642
|
+
comparator.left = property;
|
|
3643
|
+
comparator.right = serializer ? getValue(String(property.property.valueSerializer(JSON.parse(value.value)))) : value;
|
|
3505
3644
|
}
|
|
3506
3645
|
// If the comparison is explicitly to false, mark it as negated
|
|
3507
3646
|
if (methodMatch[6] === "false") {
|
|
@@ -3516,10 +3655,13 @@ const parseCondition = (schema, expression, params) => {
|
|
|
3516
3655
|
if (isNegation) {
|
|
3517
3656
|
comparator.negated = isNegation;
|
|
3518
3657
|
}
|
|
3658
|
+
const property = getProperty(schema, valueTransformMatch[1].trim());
|
|
3659
|
+
const serializer = property.property.valueSerializer;
|
|
3660
|
+
const value = getValue(valueTransformMatch[3], params); // retrieve the original value
|
|
3519
3661
|
// Create the property expression for the left side (no transformer)
|
|
3520
|
-
const propertyExpression =
|
|
3662
|
+
const propertyExpression = property;
|
|
3521
3663
|
// Create a ValueExpression for the right side with transformer
|
|
3522
|
-
const valueExpression = getValue(
|
|
3664
|
+
const valueExpression = serializer ? getValue(String(property.property.valueSerializer(JSON.parse(value.value)))) : value;
|
|
3523
3665
|
// Set transformer and locale based on the method
|
|
3524
3666
|
const method = valueTransformMatch[4];
|
|
3525
3667
|
if (method === 'toLowerCase' || method === 'toLocaleLowerCase') {
|
|
@@ -3545,47 +3687,48 @@ const parseCondition = (schema, expression, params) => {
|
|
|
3545
3687
|
comparator.negated = isNegation;
|
|
3546
3688
|
}
|
|
3547
3689
|
// Create the property expression for the left side with transformer
|
|
3548
|
-
const
|
|
3690
|
+
const property = getProperty(schema, transformMethodMatch[1]);
|
|
3549
3691
|
// Set transformer and locale based on the method
|
|
3550
3692
|
const method = transformMethodMatch[2];
|
|
3551
3693
|
if (method === 'toLowerCase' || method === 'toLocaleLowerCase') {
|
|
3552
|
-
|
|
3694
|
+
property.transformer = 'to-lower-case';
|
|
3553
3695
|
if (method === 'toLocaleLowerCase') {
|
|
3554
|
-
|
|
3696
|
+
property.locale = 'en-US'; // Default locale, could be extracted from method call
|
|
3555
3697
|
}
|
|
3556
3698
|
}
|
|
3557
3699
|
else {
|
|
3558
|
-
|
|
3700
|
+
property.transformer = 'to-upper-case';
|
|
3559
3701
|
if (method === 'toLocaleUpperCase') {
|
|
3560
|
-
|
|
3702
|
+
property.locale = 'en-US'; // Default locale, could be extracted from method call
|
|
3561
3703
|
}
|
|
3562
3704
|
}
|
|
3563
3705
|
// Create a ValueExpression for the right side
|
|
3564
|
-
let
|
|
3706
|
+
let value = getValue(transformMethodMatch[4], params);
|
|
3565
3707
|
// Check if the value also has a transformation (but only if it's not already handled by value-side check)
|
|
3566
3708
|
const valueTransformMatch = transformMethodMatch[4].match(/^([^)]+)\.(toLowerCase|toUpperCase|toLocaleLowerCase|toLocaleUpperCase)\(\)$/);
|
|
3567
3709
|
if (valueTransformMatch) {
|
|
3568
3710
|
// Create a new ValueExpression with the base value and transformer
|
|
3569
|
-
|
|
3711
|
+
value = new _types__WEBPACK_IMPORTED_MODULE_0__.ValueExpression({
|
|
3570
3712
|
value: valueTransformMatch[1].replace(/^["']|["']$/g, '') // Remove quotes
|
|
3571
3713
|
});
|
|
3572
3714
|
// Set transformer and locale based on the method
|
|
3573
3715
|
const valueMethod = valueTransformMatch[2];
|
|
3574
3716
|
if (valueMethod === 'toLowerCase' || valueMethod === 'toLocaleLowerCase') {
|
|
3575
|
-
|
|
3717
|
+
value.transformer = 'to-lower-case';
|
|
3576
3718
|
if (valueMethod === 'toLocaleLowerCase') {
|
|
3577
|
-
|
|
3719
|
+
value.locale = 'en-US'; // Default locale
|
|
3578
3720
|
}
|
|
3579
3721
|
}
|
|
3580
3722
|
else {
|
|
3581
|
-
|
|
3723
|
+
value.transformer = 'to-upper-case';
|
|
3582
3724
|
if (valueMethod === 'toLocaleUpperCase') {
|
|
3583
|
-
|
|
3725
|
+
value.locale = 'en-US'; // Default locale
|
|
3584
3726
|
}
|
|
3585
3727
|
}
|
|
3586
3728
|
}
|
|
3587
|
-
|
|
3588
|
-
comparator.
|
|
3729
|
+
const serializer = property.property.valueSerializer;
|
|
3730
|
+
comparator.left = property;
|
|
3731
|
+
comparator.right = serializer ? getValue(String(property.property.valueSerializer(JSON.parse(value.value)))) : value;
|
|
3589
3732
|
// If the comparison is explicitly to false, mark it as negated
|
|
3590
3733
|
if (transformMethodMatch[7] === "false") {
|
|
3591
3734
|
comparator.negated = true;
|
|
@@ -3622,8 +3765,11 @@ const parseCondition = (schema, expression, params) => {
|
|
|
3622
3765
|
if (isNegation) {
|
|
3623
3766
|
comparator.negated = isNegation;
|
|
3624
3767
|
}
|
|
3625
|
-
|
|
3626
|
-
|
|
3768
|
+
const property = getProperty(schema, propertySide);
|
|
3769
|
+
const value = getValue(valueSide, params);
|
|
3770
|
+
const serializer = property.property.valueSerializer;
|
|
3771
|
+
comparator.left = property;
|
|
3772
|
+
comparator.right = serializer ? getValue(String(property.property.valueSerializer(JSON.parse(value.value)))) : value;
|
|
3627
3773
|
convertAndAssignValue(comparator.right, comparator.left);
|
|
3628
3774
|
return comparator;
|
|
3629
3775
|
}
|
|
@@ -3657,11 +3803,30 @@ const parseCondition = (schema, expression, params) => {
|
|
|
3657
3803
|
if (isNegation) {
|
|
3658
3804
|
comparator.negated = isNegation;
|
|
3659
3805
|
}
|
|
3660
|
-
|
|
3661
|
-
|
|
3806
|
+
const property = getProperty(schema, propertySide);
|
|
3807
|
+
const value = getValue(valueSide, params);
|
|
3808
|
+
const serializer = property.property.valueSerializer;
|
|
3809
|
+
comparator.left = property;
|
|
3810
|
+
comparator.right = serializer ? getValue(String(property.property.valueSerializer(JSON.parse(value.value)))) : value;
|
|
3662
3811
|
convertAndAssignValue(comparator.right, comparator.left);
|
|
3663
3812
|
return comparator;
|
|
3664
3813
|
}
|
|
3814
|
+
// Check for standalone property reference (truthy comparison)
|
|
3815
|
+
// Pattern: property name only (e.g., "w.inStock" -> w.inStock === true)
|
|
3816
|
+
const standalonePropertyMatch = finalExpression.match(/^[a-zA-Z_$][a-zA-Z0-9_$]*(\.[a-zA-Z_$][a-zA-Z0-9_$]*)*$/);
|
|
3817
|
+
if (standalonePropertyMatch && isPropertyPath(finalExpression)) {
|
|
3818
|
+
const comparator = getComparator('===');
|
|
3819
|
+
if (isNegation) {
|
|
3820
|
+
comparator.negated = isNegation;
|
|
3821
|
+
}
|
|
3822
|
+
const property = getProperty(schema, finalExpression);
|
|
3823
|
+
const value = getValue('true', params);
|
|
3824
|
+
const serializer = property.property.valueSerializer;
|
|
3825
|
+
comparator.left = property;
|
|
3826
|
+
// need to parse the value so it matches what the serializer expects
|
|
3827
|
+
comparator.right = serializer ? getValue(String(property.property.valueSerializer(JSON.parse(value.value)))) : value;
|
|
3828
|
+
return comparator;
|
|
3829
|
+
}
|
|
3665
3830
|
// If we get here, the expression is too complex for the current parser
|
|
3666
3831
|
// This is expected for complex real-world expressions
|
|
3667
3832
|
throw new Error(`Unsupported expression format: ${finalExpression}`);
|
|
@@ -3721,6 +3886,17 @@ const getValue = (value, params) => {
|
|
|
3721
3886
|
}
|
|
3722
3887
|
}
|
|
3723
3888
|
}
|
|
3889
|
+
if (STRINGIFIED_COMPARE_OPERATORS.includes(value)) {
|
|
3890
|
+
return new _types__WEBPACK_IMPORTED_MODULE_0__.ValueExpression({ value });
|
|
3891
|
+
}
|
|
3892
|
+
if (isNaN(numValue)) {
|
|
3893
|
+
// value is a variable passed in by the dev, we cannot evaluate it's value
|
|
3894
|
+
// need to fallback to select all by throwing an error
|
|
3895
|
+
throw new Error(`Cannot derive value from variable, please pass parameters into the expression.
|
|
3896
|
+
|
|
3897
|
+
Example: .where(([x, params]) => x.id === params.id, { id: someVar.id })
|
|
3898
|
+
Issue At: ${value}`);
|
|
3899
|
+
}
|
|
3724
3900
|
// Default case: return as-is
|
|
3725
3901
|
return new _types__WEBPACK_IMPORTED_MODULE_0__.ValueExpression({ value });
|
|
3726
3902
|
};
|
|
@@ -4511,7 +4687,11 @@ class EphemeralDataPlugin {
|
|
|
4511
4687
|
done(_results__WEBPACK_IMPORTED_MODULE_1__.PluginEventResult.error(event.id, r.error));
|
|
4512
4688
|
return;
|
|
4513
4689
|
}
|
|
4514
|
-
const
|
|
4690
|
+
const cloned = [];
|
|
4691
|
+
for (let i = 0, length = collection.records.length; i < length; i++) {
|
|
4692
|
+
cloned.push(event.operation.schema.clone(collection.records[i]));
|
|
4693
|
+
}
|
|
4694
|
+
const translated = translator.translate(cloned);
|
|
4515
4695
|
done(_results__WEBPACK_IMPORTED_MODULE_1__.PluginEventResult.success(event.id, translated));
|
|
4516
4696
|
});
|
|
4517
4697
|
}
|
|
@@ -5589,6 +5769,9 @@ class JsonTranslator extends _DataTranslator__WEBPACK_IMPORTED_MODULE_0__.DataTr
|
|
|
5589
5769
|
}
|
|
5590
5770
|
sum(data, _) {
|
|
5591
5771
|
(0,_assertions__WEBPACK_IMPORTED_MODULE_1__.assertIsArray)(data, this._formatDataNotArrayError("sum"));
|
|
5772
|
+
if (data.length === 0) {
|
|
5773
|
+
throw new Error("Cannot perform operation on empty array, result query contains no data");
|
|
5774
|
+
}
|
|
5592
5775
|
const map = this.query.options.getLast("map");
|
|
5593
5776
|
let sum = 0;
|
|
5594
5777
|
const field = this._getSelectionField("sum", map);
|
|
@@ -5684,15 +5867,26 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
5684
5867
|
|
|
5685
5868
|
class SqlTranslator extends _DataTranslator__WEBPACK_IMPORTED_MODULE_0__.DataTranslator {
|
|
5686
5869
|
count(data, _) {
|
|
5870
|
+
if (Array.isArray(data) && data.length > 0) {
|
|
5871
|
+
// Count should be returned as the property alias on the query
|
|
5872
|
+
return data[0].count;
|
|
5873
|
+
}
|
|
5687
5874
|
return data;
|
|
5688
5875
|
}
|
|
5689
5876
|
min(data, _) {
|
|
5690
|
-
return data;
|
|
5877
|
+
return this.shapeResult(data);
|
|
5691
5878
|
}
|
|
5692
5879
|
max(data, _) {
|
|
5693
|
-
return data;
|
|
5880
|
+
return this.shapeResult(data);
|
|
5694
5881
|
}
|
|
5695
5882
|
sum(data, _) {
|
|
5883
|
+
return this.shapeResult(data);
|
|
5884
|
+
}
|
|
5885
|
+
shapeResult(data) {
|
|
5886
|
+
if (Array.isArray(data) && data.length > 0) {
|
|
5887
|
+
// Shape the result
|
|
5888
|
+
return data[0];
|
|
5889
|
+
}
|
|
5696
5890
|
return data;
|
|
5697
5891
|
}
|
|
5698
5892
|
distinct(data, _) {
|
|
@@ -5710,8 +5904,29 @@ class SqlTranslator extends _DataTranslator__WEBPACK_IMPORTED_MODULE_0__.DataTra
|
|
|
5710
5904
|
sort(data, _) {
|
|
5711
5905
|
return data;
|
|
5712
5906
|
}
|
|
5713
|
-
map(data,
|
|
5714
|
-
|
|
5907
|
+
map(data, option) {
|
|
5908
|
+
if (Array.isArray(data) == false) {
|
|
5909
|
+
throw new Error("Can only map an array of data");
|
|
5910
|
+
}
|
|
5911
|
+
if (this.query.options.has("count") && data.length === 1) {
|
|
5912
|
+
// data here is the shape of { count: number }[] and will map to nothing.
|
|
5913
|
+
// Return the original data and let count take care of this
|
|
5914
|
+
return data;
|
|
5915
|
+
}
|
|
5916
|
+
const response = [];
|
|
5917
|
+
for (let i = 0, length = data.length; i < length; i++) {
|
|
5918
|
+
for (let j = 0, l = option.value.fields.length; j < l; j++) {
|
|
5919
|
+
const field = option.value.fields[j];
|
|
5920
|
+
if (field.property != null) {
|
|
5921
|
+
const value = field.property.getValue(data[i]);
|
|
5922
|
+
if (value != null) {
|
|
5923
|
+
field.property.setValue(data[i], field.property.deserialize(value));
|
|
5924
|
+
}
|
|
5925
|
+
}
|
|
5926
|
+
}
|
|
5927
|
+
response.push(option.value.selector(data[i]));
|
|
5928
|
+
}
|
|
5929
|
+
return response;
|
|
5715
5930
|
}
|
|
5716
5931
|
}
|
|
5717
5932
|
|
|
@@ -6473,17 +6688,23 @@ class SchemaDefinition extends _property_base_SchemaBase__WEBPACK_IMPORTED_MODUL
|
|
|
6473
6688
|
stripCodeBuilder.slot("result");
|
|
6474
6689
|
stripCodeBuilder.slot("return").raw(` return result;`);
|
|
6475
6690
|
const cloneCodeBuilder = new _codegen__WEBPACK_IMPORTED_MODULE_18__.CodeBuilder();
|
|
6476
|
-
cloneCodeBuilder.slot("result");
|
|
6691
|
+
cloneCodeBuilder.slot("result").raw("const result = {};");
|
|
6692
|
+
;
|
|
6693
|
+
cloneCodeBuilder.slot("assignments");
|
|
6694
|
+
cloneCodeBuilder.slot("if");
|
|
6477
6695
|
cloneCodeBuilder.slot("return").raw(` return result;`);
|
|
6478
6696
|
const compareCodeBuilder = new _codegen__WEBPACK_IMPORTED_MODULE_18__.CodeBuilder();
|
|
6479
6697
|
compareCodeBuilder.slot("result");
|
|
6480
6698
|
compareCodeBuilder.slot("return").raw(` return result;`);
|
|
6481
6699
|
const deserializeCodeBuilder = new _codegen__WEBPACK_IMPORTED_MODULE_18__.CodeBuilder();
|
|
6700
|
+
deserializeCodeBuilder.slot("functions");
|
|
6482
6701
|
deserializeCodeBuilder.slot("result");
|
|
6483
6702
|
deserializeCodeBuilder.slot("if");
|
|
6484
6703
|
deserializeCodeBuilder.slot("return").raw(` return result;`);
|
|
6485
6704
|
const serializeCodeBuilder = new _codegen__WEBPACK_IMPORTED_MODULE_18__.CodeBuilder();
|
|
6486
|
-
serializeCodeBuilder.slot("result");
|
|
6705
|
+
serializeCodeBuilder.slot("result").raw("const result = {};");
|
|
6706
|
+
serializeCodeBuilder.slot("assignments");
|
|
6707
|
+
serializeCodeBuilder.slot("functions");
|
|
6487
6708
|
serializeCodeBuilder.slot("if");
|
|
6488
6709
|
serializeCodeBuilder.slot("return").raw(` return result;`);
|
|
6489
6710
|
const idSelectorCodeBuilder = new _codegen__WEBPACK_IMPORTED_MODULE_18__.CodeBuilder();
|
|
@@ -6580,7 +6801,6 @@ class SchemaDefinition extends _property_base_SchemaBase__WEBPACK_IMPORTED_MODUL
|
|
|
6580
6801
|
};
|
|
6581
6802
|
const getProperty = (id) => propertyMap.get(id);
|
|
6582
6803
|
const id = (0,_utilities__WEBPACK_IMPORTED_MODULE_19__.hash)([...allPropertyNamesAndPaths, this.collectionName].join(","));
|
|
6583
|
-
const paths = new Set(properties.map(x => x.getAssignmentPath()));
|
|
6584
6804
|
// memoize this by the validProperties
|
|
6585
6805
|
// TODO: See if we can generate a function to do this and eliminate loops
|
|
6586
6806
|
const deserializePartial = (item, properties) => {
|
|
@@ -7357,7 +7577,7 @@ class SchemaSerialize extends _base_SchemaBase__WEBPACK_IMPORTED_MODULE_0__.Sche
|
|
|
7357
7577
|
this.instance = current.instance;
|
|
7358
7578
|
this.valueSerializer = serializer;
|
|
7359
7579
|
}
|
|
7360
|
-
|
|
7580
|
+
deserialize(deserializer) {
|
|
7361
7581
|
return new _SchemaDeserialize__WEBPACK_IMPORTED_MODULE_1__.SchemaDeserialize(deserializer, this);
|
|
7362
7582
|
}
|
|
7363
7583
|
}
|