@routier/core 0.0.1-alpha.2 → 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.
Files changed (36) hide show
  1. package/dist/assertions/index.d.ts +1 -1
  2. package/dist/assertions/index.js +7 -1
  3. package/dist/assertions/index.js.map +1 -1
  4. package/dist/codegen/handlers/SerializeHandlerBuilder.d.ts +2 -2
  5. package/dist/codegen/handlers/clone/CloneArrayHandler.d.ts +6 -0
  6. package/dist/codegen/handlers/deserialize/DeserializeDeserializerHandler.d.ts +6 -0
  7. package/dist/codegen/handlers/serialize/SerializeSerializerHandler.d.ts +6 -0
  8. package/dist/collections/ReadonlySchemaCollection.d.ts +17 -0
  9. package/dist/collections/SchemaCollection.d.ts +5 -3
  10. package/dist/collections/index.d.ts +1 -0
  11. package/dist/collections/index.js +67 -9
  12. package/dist/collections/index.js.map +1 -1
  13. package/dist/expressions/index.js +67 -23
  14. package/dist/expressions/index.js.map +1 -1
  15. package/dist/expressions/parser.d.ts +1 -1
  16. package/dist/index.js +598 -223
  17. package/dist/index.js.map +1 -1
  18. package/dist/plugins/index.js +58 -9
  19. package/dist/plugins/index.js.map +1 -1
  20. package/dist/plugins/translators/SqlTranslator.d.ts +2 -1
  21. package/dist/plugins/types.d.ts +2 -0
  22. package/dist/schema/communication/broadcast.d.ts +11 -0
  23. package/dist/schema/index.js +420 -182
  24. package/dist/schema/index.js.map +1 -1
  25. package/dist/schema/property/modifiers/SchemaSerialize.d.ts +1 -1
  26. package/dist/schema/testSchemas.test.d.ts +269 -0
  27. package/dist/schema/types.d.ts +7 -4
  28. package/dist/utilities/dbPluginEventUtils.d.ts +1 -1
  29. package/dist/utilities/functions.d.ts +1 -0
  30. package/dist/utilities/index.d.ts +1 -0
  31. package/dist/utilities/index.js +18 -1
  32. package/dist/utilities/index.js.map +1 -1
  33. package/dist/utilities/types.d.ts +3 -0
  34. package/package.json +3 -4
  35. package/readme.md +0 -6
  36. /package/dist/{pipeline/TrampolinePipeline.test.d.ts → schema/schemaGeneration.test.d.ts} +0 -0
@@ -494,15 +494,19 @@ __webpack_require__.r(__webpack_exports__);
494
494
  __webpack_require__.d(__webpack_exports__, {
495
495
  CloneHandlerBuilder: () => (CloneHandlerBuilder)
496
496
  });
497
+ /* ESM import */var _clone_CloneArrayHandler__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./clone/CloneArrayHandler */ "./src/codegen/handlers/clone/CloneArrayHandler.ts");
497
498
  /* ESM import */var _clone_CloneObjectHandler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./clone/CloneObjectHandler */ "./src/codegen/handlers/clone/CloneObjectHandler.ts");
498
499
  /* ESM import */var _clone_CloneValueHandler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./clone/CloneValueHandler */ "./src/codegen/handlers/clone/CloneValueHandler.ts");
499
500
 
500
501
 
502
+
501
503
  /// Purpose:
502
504
  class CloneHandlerBuilder {
503
505
  build() {
504
506
  const handler = new _clone_CloneObjectHandler__WEBPACK_IMPORTED_MODULE_0__.CloneObjectHandler();
505
- handler.setNext(new _clone_CloneValueHandler__WEBPACK_IMPORTED_MODULE_1__.CloneValueHandler());
507
+ handler
508
+ .setNext(new _clone_CloneValueHandler__WEBPACK_IMPORTED_MODULE_1__.CloneValueHandler())
509
+ .setNext(new _clone_CloneArrayHandler__WEBPACK_IMPORTED_MODULE_2__.CloneArrayHandler());
506
510
  return handler;
507
511
  }
508
512
  }
@@ -543,10 +547,12 @@ __webpack_require__.d(__webpack_exports__, {
543
547
  DeserializeHandlerBuilder: () => (DeserializeHandlerBuilder)
544
548
  });
545
549
  /* ESM import */var _deserialize_DeserializeObjectHandler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./deserialize/DeserializeObjectHandler */ "./src/codegen/handlers/deserialize/DeserializeObjectHandler.ts");
546
- /* ESM import */var _deserialize_DeserializeValueHandler__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./deserialize/DeserializeValueHandler */ "./src/codegen/handlers/deserialize/DeserializeValueHandler.ts");
547
- /* ESM import */var _deserialize_DeserializeDateHandler__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./deserialize/DeserializeDateHandler */ "./src/codegen/handlers/deserialize/DeserializeDateHandler.ts");
548
- /* ESM import */var _deserialize_DeserializeComputedValueHandler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./deserialize/DeserializeComputedValueHandler */ "./src/codegen/handlers/deserialize/DeserializeComputedValueHandler.ts");
549
- /* ESM import */var _deserialize_DeserializeFunctionHandler__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./deserialize/DeserializeFunctionHandler */ "./src/codegen/handlers/deserialize/DeserializeFunctionHandler.ts");
550
+ /* ESM import */var _deserialize_DeserializeValueHandler__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./deserialize/DeserializeValueHandler */ "./src/codegen/handlers/deserialize/DeserializeValueHandler.ts");
551
+ /* ESM import */var _deserialize_DeserializeDateHandler__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./deserialize/DeserializeDateHandler */ "./src/codegen/handlers/deserialize/DeserializeDateHandler.ts");
552
+ /* ESM import */var _deserialize_DeserializeComputedValueHandler__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./deserialize/DeserializeComputedValueHandler */ "./src/codegen/handlers/deserialize/DeserializeComputedValueHandler.ts");
553
+ /* ESM import */var _deserialize_DeserializeFunctionHandler__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./deserialize/DeserializeFunctionHandler */ "./src/codegen/handlers/deserialize/DeserializeFunctionHandler.ts");
554
+ /* ESM import */var _deserialize_DeserializeDeserializerHandler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./deserialize/DeserializeDeserializerHandler */ "./src/codegen/handlers/deserialize/DeserializeDeserializerHandler.ts");
555
+
550
556
 
551
557
 
552
558
 
@@ -557,10 +563,11 @@ class DeserializeHandlerBuilder {
557
563
  build() {
558
564
  const handler = new _deserialize_DeserializeObjectHandler__WEBPACK_IMPORTED_MODULE_0__.DeserializeObjectHandler();
559
565
  handler
560
- .setNext(new _deserialize_DeserializeComputedValueHandler__WEBPACK_IMPORTED_MODULE_1__.DeserializeComputedValueHandler())
561
- .setNext(new _deserialize_DeserializeFunctionHandler__WEBPACK_IMPORTED_MODULE_2__.DeserializeFunctionHandler())
562
- .setNext(new _deserialize_DeserializeValueHandler__WEBPACK_IMPORTED_MODULE_3__.DeserializeValueHandler())
563
- .setNext(new _deserialize_DeserializeDateHandler__WEBPACK_IMPORTED_MODULE_4__.DeserializeDateHandler());
566
+ .setNext(new _deserialize_DeserializeDeserializerHandler__WEBPACK_IMPORTED_MODULE_1__.DeserializeDeserializerHandler())
567
+ .setNext(new _deserialize_DeserializeComputedValueHandler__WEBPACK_IMPORTED_MODULE_2__.DeserializeComputedValueHandler())
568
+ .setNext(new _deserialize_DeserializeFunctionHandler__WEBPACK_IMPORTED_MODULE_3__.DeserializeFunctionHandler())
569
+ .setNext(new _deserialize_DeserializeValueHandler__WEBPACK_IMPORTED_MODULE_4__.DeserializeValueHandler())
570
+ .setNext(new _deserialize_DeserializeDateHandler__WEBPACK_IMPORTED_MODULE_5__.DeserializeDateHandler());
564
571
  return handler;
565
572
  }
566
573
  }
@@ -821,18 +828,22 @@ __webpack_require__.r(__webpack_exports__);
821
828
  __webpack_require__.d(__webpack_exports__, {
822
829
  SerializeHandlerBuilder: () => (SerializeHandlerBuilder)
823
830
  });
824
- /* ESM import */var _serialize_SerializeDateHandler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./serialize/SerializeDateHandler */ "./src/codegen/handlers/serialize/SerializeDateHandler.ts");
825
- /* ESM import */var _serialize_SerializeObjectHandler__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./serialize/SerializeObjectHandler */ "./src/codegen/handlers/serialize/SerializeObjectHandler.ts");
826
- /* ESM import */var _serialize_SerializeValueHandler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./serialize/SerializeValueHandler */ "./src/codegen/handlers/serialize/SerializeValueHandler.ts");
831
+ /* ESM import */var _serialize_SerializeDateHandler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./serialize/SerializeDateHandler */ "./src/codegen/handlers/serialize/SerializeDateHandler.ts");
832
+ /* ESM import */var _serialize_SerializeObjectHandler__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./serialize/SerializeObjectHandler */ "./src/codegen/handlers/serialize/SerializeObjectHandler.ts");
833
+ /* ESM import */var _serialize_SerializeValueHandler__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./serialize/SerializeValueHandler */ "./src/codegen/handlers/serialize/SerializeValueHandler.ts");
834
+ /* ESM import */var _serialize_SerializeSerializerHandler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./serialize/SerializeSerializerHandler */ "./src/codegen/handlers/serialize/SerializeSerializerHandler.ts");
835
+
827
836
 
828
837
 
829
838
 
830
839
  /// Purpose:
831
840
  class SerializeHandlerBuilder {
832
841
  build() {
833
- const handler = new _serialize_SerializeDateHandler__WEBPACK_IMPORTED_MODULE_0__.SerializeDateHandler();
834
- handler.setNext(new _serialize_SerializeValueHandler__WEBPACK_IMPORTED_MODULE_1__.SerializeValueHandler())
835
- .setNext(new _serialize_SerializeObjectHandler__WEBPACK_IMPORTED_MODULE_2__.SerializeObjectHandler());
842
+ const handler = new _serialize_SerializeSerializerHandler__WEBPACK_IMPORTED_MODULE_0__.SerializeSerializerHandler();
843
+ handler
844
+ .setNext(new _serialize_SerializeDateHandler__WEBPACK_IMPORTED_MODULE_1__.SerializeDateHandler())
845
+ .setNext(new _serialize_SerializeValueHandler__WEBPACK_IMPORTED_MODULE_2__.SerializeValueHandler())
846
+ .setNext(new _serialize_SerializeObjectHandler__WEBPACK_IMPORTED_MODULE_3__.SerializeObjectHandler());
836
847
  return handler;
837
848
  }
838
849
  }
@@ -868,6 +879,43 @@ class StripHandlerBuilder {
868
879
  }
869
880
 
870
881
 
882
+ }),
883
+ "./src/codegen/handlers/clone/CloneArrayHandler.ts":
884
+ /*!*********************************************************!*\
885
+ !*** ./src/codegen/handlers/clone/CloneArrayHandler.ts ***!
886
+ \*********************************************************/
887
+ (function (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
888
+ __webpack_require__.r(__webpack_exports__);
889
+ __webpack_require__.d(__webpack_exports__, {
890
+ CloneArrayHandler: () => (CloneArrayHandler)
891
+ });
892
+ /* ESM import */var _types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../types */ "./src/codegen/handlers/types.ts");
893
+ /* ESM import */var _schema__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../schema */ "./src/schema/types.ts");
894
+
895
+
896
+ class CloneArrayHandler extends _types__WEBPACK_IMPORTED_MODULE_0__.PropertyInfoHandler {
897
+ handle(property, builder) {
898
+ if (property.type === _schema__WEBPACK_IMPORTED_MODULE_1__.SchemaTypes.Array) {
899
+ if (property.isNullable || property.isOptional) {
900
+ // Child properties will take care of this
901
+ return builder;
902
+ }
903
+ const slot = builder.get("assignments");
904
+ const resultAssignmentPath = property.getAssignmentPath({ parent: "result" });
905
+ if (property.parent == null) {
906
+ slot.assign(`${resultAssignmentPath}`).value("{}");
907
+ return builder;
908
+ }
909
+ // slotPath.push(...property.getParentPathArray());
910
+ // const nestedObjectBuilder = builder.get<ObjectBuilder>(slotPath.get());
911
+ // nestedObjectBuilder.nested(property.name, property.name)
912
+ return builder;
913
+ }
914
+ return super.handle(property, builder);
915
+ }
916
+ }
917
+
918
+
871
919
  }),
872
920
  "./src/codegen/handlers/clone/CloneObjectHandler.ts":
873
921
  /*!**********************************************************!*\
@@ -878,24 +926,14 @@ __webpack_require__.r(__webpack_exports__);
878
926
  __webpack_require__.d(__webpack_exports__, {
879
927
  CloneObjectHandler: () => (CloneObjectHandler)
880
928
  });
881
- /* ESM import */var _SlotPath__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../SlotPath */ "./src/codegen/SlotPath.ts");
882
929
  /* ESM import */var _types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../types */ "./src/codegen/handlers/types.ts");
883
930
  /* ESM import */var _schema__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../schema */ "./src/schema/types.ts");
884
931
 
885
932
 
886
-
887
933
  class CloneObjectHandler extends _types__WEBPACK_IMPORTED_MODULE_0__.PropertyInfoHandler {
888
934
  handle(property, builder) {
889
935
  if (property.type === _schema__WEBPACK_IMPORTED_MODULE_1__.SchemaTypes.Object) {
890
- const slotPath = new _SlotPath__WEBPACK_IMPORTED_MODULE_2__.SlotPath("result.variable.object");
891
- let objectBuilder = builder.get(slotPath.get());
892
- if (property.parent == null) {
893
- objectBuilder.nested(property.name, property.name);
894
- return builder;
895
- }
896
- slotPath.push(...property.getParentPathArray());
897
- const nestedObjectBuilder = builder.get(slotPath.get());
898
- nestedObjectBuilder.nested(property.name, property.name);
936
+ // Child properties will take care of this
899
937
  return builder;
900
938
  }
901
939
  return super.handle(property, builder);
@@ -913,7 +951,7 @@ __webpack_require__.r(__webpack_exports__);
913
951
  __webpack_require__.d(__webpack_exports__, {
914
952
  CloneValueHandler: () => (CloneValueHandler)
915
953
  });
916
- /* ESM import */var _SlotPath__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../SlotPath */ "./src/codegen/SlotPath.ts");
954
+ /* ESM import */var _blocks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../blocks */ "./src/codegen/blocks.ts");
917
955
  /* ESM import */var _types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../types */ "./src/codegen/handlers/types.ts");
918
956
  /* ESM import */var _schema__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../schema */ "./src/schema/types.ts");
919
957
 
@@ -921,21 +959,20 @@ __webpack_require__.d(__webpack_exports__, {
921
959
 
922
960
  class CloneValueHandler extends _types__WEBPACK_IMPORTED_MODULE_0__.PropertyInfoHandler {
923
961
  handle(property, builder) {
924
- if (property.type != _schema__WEBPACK_IMPORTED_MODULE_1__.SchemaTypes.Object) {
925
- let objectBuilder = builder.getOrDefault("result.variable.object");
926
- const entitySelectorPath = property.getAssignmentPath({ parent: "entity" });
927
- if (objectBuilder == null) {
928
- objectBuilder = builder.get("result")
929
- .assign("const result", { name: "variable" })
930
- .object({ name: "object" });
931
- }
962
+ if (property.type != _schema__WEBPACK_IMPORTED_MODULE_1__.SchemaTypes.Object && property.type != _schema__WEBPACK_IMPORTED_MODULE_1__.SchemaTypes.Array) {
963
+ const slot = builder.get("if");
964
+ const entitySelectorPath = property.getSelectrorPath({ parent: "entity" });
965
+ const resultAssignmentPath = property.getAssignmentPath({ parent: "result" });
932
966
  if (property.parent == null) {
933
- objectBuilder.property(`${property.name}: ${entitySelectorPath}`);
967
+ // we are a first level property
968
+ slot.if(`${entitySelectorPath} != null`).appendBody(`${resultAssignmentPath} = ${entitySelectorPath}`);
934
969
  return builder;
935
970
  }
936
- const slotPath = new _SlotPath__WEBPACK_IMPORTED_MODULE_2__.SlotPath(...property.getParentPathArray());
937
- objectBuilder = objectBuilder.get(slotPath.get());
938
- objectBuilder.property(`${property.name}: ${entitySelectorPath}`);
971
+ // Second level or more property
972
+ // Need to ensure parent is assigned
973
+ const propertyParentPath = ["result", ...property.getParentPathArray()];
974
+ const ifBuilder = new _blocks__WEBPACK_IMPORTED_MODULE_2__.IfBuilder(`${propertyParentPath.join("?.")} == null`).appendBody(`${propertyParentPath.join(".")} = {};`);
975
+ slot.if(`${entitySelectorPath} != null`).appendBody(ifBuilder.toString()).appendBody(`${resultAssignmentPath} = ${entitySelectorPath}`);
939
976
  return builder;
940
977
  }
941
978
  return super.handle(property, builder);
@@ -1076,6 +1113,47 @@ class DeserializeDateHandler extends _types__WEBPACK_IMPORTED_MODULE_0__.Propert
1076
1113
  }
1077
1114
 
1078
1115
 
1116
+ }),
1117
+ "./src/codegen/handlers/deserialize/DeserializeDeserializerHandler.ts":
1118
+ /*!****************************************************************************!*\
1119
+ !*** ./src/codegen/handlers/deserialize/DeserializeDeserializerHandler.ts ***!
1120
+ \****************************************************************************/
1121
+ (function (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1122
+ __webpack_require__.r(__webpack_exports__);
1123
+ __webpack_require__.d(__webpack_exports__, {
1124
+ DeserializeDeserializerHandler: () => (DeserializeDeserializerHandler)
1125
+ });
1126
+ /* ESM import */var _SlotPath__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../SlotPath */ "./src/codegen/SlotPath.ts");
1127
+ /* ESM import */var _types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../types */ "./src/codegen/handlers/types.ts");
1128
+
1129
+
1130
+ class DeserializeDeserializerHandler extends _types__WEBPACK_IMPORTED_MODULE_0__.PropertyInfoHandler {
1131
+ handle(property, builder) {
1132
+ if (property.valueDeserializer != null) {
1133
+ let objectBuilder = builder.getOrDefault("result.variable.object");
1134
+ const assignmentBuilder = builder.getOrDefault("functions");
1135
+ const entitySelectorPath = property.getSelectrorPath({ parent: "entity" });
1136
+ if (objectBuilder == null) {
1137
+ objectBuilder = builder.get("result")
1138
+ .assign("const result", { name: "variable" })
1139
+ .object({ name: "object" });
1140
+ }
1141
+ const defaultFunctionWithParameters = this.toNamedFunction(property.valueDeserializer.toString(), assignmentBuilder);
1142
+ defaultFunctionWithParameters.builder.parameters(...defaultFunctionWithParameters.parameters.map((_, i) => ({ name: defaultFunctionWithParameters.parameters[i], callName: entitySelectorPath })));
1143
+ if (property.parent == null) {
1144
+ objectBuilder.property(`${property.name}: ${defaultFunctionWithParameters.builder.toCallable()}`);
1145
+ return builder;
1146
+ }
1147
+ const slotPath = new _SlotPath__WEBPACK_IMPORTED_MODULE_1__.SlotPath(...property.getParentPathArray());
1148
+ objectBuilder = objectBuilder.get(slotPath.get());
1149
+ objectBuilder.property(`${property.name}: ${defaultFunctionWithParameters.builder.toCallable()}`);
1150
+ return builder;
1151
+ }
1152
+ return super.handle(property, builder);
1153
+ }
1154
+ }
1155
+
1156
+
1079
1157
  }),
1080
1158
  "./src/codegen/handlers/deserialize/DeserializeFunctionHandler.ts":
1081
1159
  /*!************************************************************************!*\
@@ -1405,7 +1483,7 @@ class EnrichmentNullableObjectHandler extends _types__WEBPACK_IMPORTED_MODULE_0_
1405
1483
  if (enrichedSlot == null) {
1406
1484
  throw new Error(`Error building enricher, could not find slot for ${slotPath.get()}`);
1407
1485
  }
1408
- enriched = enrichedSlot.nested(property.name, property.name);
1486
+ enriched = enrichedSlot.nested(property.name, `[${enrichedPath}]`);
1409
1487
  }
1410
1488
  return builder;
1411
1489
  }
@@ -1424,22 +1502,29 @@ __webpack_require__.r(__webpack_exports__);
1424
1502
  __webpack_require__.d(__webpack_exports__, {
1425
1503
  EnrichmentObjectHandler: () => (EnrichmentObjectHandler)
1426
1504
  });
1505
+ /* ESM import */var _SlotPath__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../SlotPath */ "./src/codegen/SlotPath.ts");
1427
1506
  /* ESM import */var _types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../types */ "./src/codegen/handlers/types.ts");
1428
1507
  /* ESM import */var _schema__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../schema */ "./src/schema/types.ts");
1429
1508
 
1430
1509
 
1510
+
1431
1511
  class EnrichmentObjectHandler extends _types__WEBPACK_IMPORTED_MODULE_0__.PropertyInfoHandler {
1432
1512
  handle(property, builder) {
1433
1513
  if (property.type === _schema__WEBPACK_IMPORTED_MODULE_1__.SchemaTypes.Object && (property.isNullable || property.isOptional) === false) {
1434
- const assignmentSlot = builder.get("factory.function.assignment");
1435
- const childPath = property.getAssignmentPath({ parent: "enriched" });
1436
- if (assignmentSlot == null) {
1437
- throw new Error("Error building enricher, could not find slot for factory.function.assignment");
1514
+ const slotPath = new _SlotPath__WEBPACK_IMPORTED_MODULE_2__.SlotPath("factory", "function", "enriched", "object", "enriched");
1515
+ const nestedSlotPath = this.buildSlotPath(property, slotPath);
1516
+ // Generate null check for current level using parent relationships
1517
+ const enrichedPath = property.getAssignmentPath({ parent: "enriched" });
1518
+ const slot = builder.get("factory.function.assignment");
1519
+ slot.assign(enrichedPath).value(`enableChangeTracking(${enrichedPath} || {}, "${property.name}")`);
1520
+ let enriched = builder.getOrDefault(nestedSlotPath.get());
1521
+ if (enriched == null) {
1522
+ const enrichedSlot = builder.get(slotPath.get());
1523
+ if (enrichedSlot == null) {
1524
+ throw new Error(`Error building enricher, could not find slot for ${slotPath.get()}`);
1525
+ }
1526
+ enriched = enrichedSlot.nested(property.name, `[${enrichedPath}]`);
1438
1527
  }
1439
- assignmentSlot.assign(childPath, { name: `[${childPath}]` }).call("enableChangeTracking", { name: "builder" });
1440
- const changeTrackingSlot = builder.get("factory.function.tracking.freeze");
1441
- const selectorPath = property.getSelectrorPath({ parent: "enriched" });
1442
- changeTrackingSlot.if(`${selectorPath} != null`, { unshift: true }).unshiftBody(`${selectorPath} = Object.freeze(${selectorPath})`);
1443
1528
  return builder;
1444
1529
  }
1445
1530
  return super.handle(property, builder);
@@ -2170,8 +2255,7 @@ __webpack_require__.d(__webpack_exports__, {
2170
2255
  class SerializeDateHandler extends _types__WEBPACK_IMPORTED_MODULE_0__.PropertyInfoHandler {
2171
2256
  handle(property, builder) {
2172
2257
  if (property.type === _schema__WEBPACK_IMPORTED_MODULE_1__.SchemaTypes.Date) {
2173
- const slotPath = new _SlotPath__WEBPACK_IMPORTED_MODULE_2__.SlotPath("result.variable.object");
2174
- let objectBuilder = builder.get(slotPath.get());
2258
+ let objectBuilder = builder.get("if");
2175
2259
  const entitySelectorPath = property.getSelectrorPath({ parent: "entity" });
2176
2260
  const entityAssignmentPath = property.getAssignmentPath({ parent: "result" });
2177
2261
  const assignment = `${property.name}: ${entitySelectorPath} instanceof Date ? ${entitySelectorPath}.toISOString() : ${entitySelectorPath}`;
@@ -2185,12 +2269,14 @@ class SerializeDateHandler extends _types__WEBPACK_IMPORTED_MODULE_0__.PropertyI
2185
2269
  }
2186
2270
  // A date cannot be a nested object, just do the assignment
2187
2271
  if (property.parent == null) {
2188
- objectBuilder.property(assignment);
2272
+ objectBuilder.if(`Object.hasOwn(entity, "${property.name}")`).appendBody(`${entityAssignmentPath} = ${entitySelectorPath}`);
2189
2273
  return builder;
2190
2274
  }
2191
- slotPath.push(...property.getParentPathArray());
2192
- const nestedObjectBuilder = builder.get(slotPath.get());
2193
- nestedObjectBuilder.property(assignment);
2275
+ // TODO: SOLVE THIS, IT IS CLOSE
2276
+ //const slotPath = new SlotPath(...property.getParentPathArray());
2277
+ // slotPath.push(...property.getParentPathArray());
2278
+ // const nestedObjectBuilder = builder.get<ObjectBuilder>(slotPath.get());
2279
+ // nestedObjectBuilder.property(assignment)
2194
2280
  return builder;
2195
2281
  }
2196
2282
  return super.handle(property, builder);
@@ -2217,15 +2303,52 @@ __webpack_require__.d(__webpack_exports__, {
2217
2303
  class SerializeObjectHandler extends _types__WEBPACK_IMPORTED_MODULE_0__.PropertyInfoHandler {
2218
2304
  handle(property, builder) {
2219
2305
  if (property.type === _schema__WEBPACK_IMPORTED_MODULE_1__.SchemaTypes.Object) {
2220
- const slotPath = new _SlotPath__WEBPACK_IMPORTED_MODULE_2__.SlotPath("result.variable.object");
2221
- let objectBuilder = builder.get(slotPath.get());
2306
+ const slotPath = new _SlotPath__WEBPACK_IMPORTED_MODULE_2__.SlotPath("assignments");
2307
+ const childPath = property.getAssignmentPath({ parent: "result" });
2308
+ if (property.isNullable || property.isOptional) {
2309
+ // Do nothing if it's nullable or optional as property assignments will check
2310
+ // and create if it does not exist. This way we can handle null/optional
2311
+ return builder;
2312
+ }
2313
+ const slot = builder.get(slotPath.get());
2314
+ slot.assign(`${childPath}`, { name: `[${childPath}]` }).value("{}");
2315
+ return builder;
2316
+ }
2317
+ return super.handle(property, builder);
2318
+ }
2319
+ }
2320
+
2321
+
2322
+ }),
2323
+ "./src/codegen/handlers/serialize/SerializeSerializerHandler.ts":
2324
+ /*!**********************************************************************!*\
2325
+ !*** ./src/codegen/handlers/serialize/SerializeSerializerHandler.ts ***!
2326
+ \**********************************************************************/
2327
+ (function (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
2328
+ __webpack_require__.r(__webpack_exports__);
2329
+ __webpack_require__.d(__webpack_exports__, {
2330
+ SerializeSerializerHandler: () => (SerializeSerializerHandler)
2331
+ });
2332
+ /* ESM import */var _types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../types */ "./src/codegen/handlers/types.ts");
2333
+
2334
+ class SerializeSerializerHandler extends _types__WEBPACK_IMPORTED_MODULE_0__.PropertyInfoHandler {
2335
+ handle(property, builder) {
2336
+ if (property.valueSerializer != null) {
2337
+ const objectBuilder = builder.getOrDefault("if");
2338
+ const assignmentBuilder = builder.getOrDefault("functions");
2339
+ const entitySelectorPath = property.getAssignmentPath({ parent: "entity" });
2340
+ const resultSelectorPath = property.getAssignmentPath({ parent: "result" });
2341
+ const defaultFunctionWithParameters = this.toNamedFunction(property.valueSerializer.toString(), assignmentBuilder);
2342
+ defaultFunctionWithParameters.builder.parameters(...defaultFunctionWithParameters.parameters.map((_, i) => ({ name: defaultFunctionWithParameters.parameters[i], callName: entitySelectorPath })));
2222
2343
  if (property.parent == null) {
2223
- objectBuilder.nested(property.name, property.name);
2344
+ objectBuilder.if(`Object.hasOwn(entity, "${property.name}")`).appendBody(`${resultSelectorPath} = ${defaultFunctionWithParameters.builder.toCallable()}`);
2224
2345
  return builder;
2225
2346
  }
2226
- slotPath.push(...property.getParentPathArray());
2227
- const nestedObjectBuilder = builder.get(slotPath.get());
2228
- nestedObjectBuilder.nested(property.name, property.name);
2347
+ // TODO: SOLVE THIS
2348
+ //const slotPath = new SlotPath(...property.getParentPathArray());
2349
+ // const slotPath = new SlotPath(...property.getParentPathArray());
2350
+ // objectBuilder = objectBuilder.get<ObjectBuilder>(slotPath.get());
2351
+ // objectBuilder.property(`${property.name}: ${defaultFunctionWithParameters.builder.toCallable()}`);
2229
2352
  return builder;
2230
2353
  }
2231
2354
  return super.handle(property, builder);
@@ -2243,7 +2366,7 @@ __webpack_require__.r(__webpack_exports__);
2243
2366
  __webpack_require__.d(__webpack_exports__, {
2244
2367
  SerializeValueHandler: () => (SerializeValueHandler)
2245
2368
  });
2246
- /* ESM import */var _SlotPath__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../SlotPath */ "./src/codegen/SlotPath.ts");
2369
+ /* ESM import */var _blocks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../blocks */ "./src/codegen/blocks.ts");
2247
2370
  /* ESM import */var _types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../types */ "./src/codegen/handlers/types.ts");
2248
2371
  /* ESM import */var _schema__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../schema */ "./src/schema/types.ts");
2249
2372
 
@@ -2252,20 +2375,24 @@ __webpack_require__.d(__webpack_exports__, {
2252
2375
  class SerializeValueHandler extends _types__WEBPACK_IMPORTED_MODULE_0__.PropertyInfoHandler {
2253
2376
  handle(property, builder) {
2254
2377
  if (property.type != _schema__WEBPACK_IMPORTED_MODULE_1__.SchemaTypes.Object && property.type != _schema__WEBPACK_IMPORTED_MODULE_1__.SchemaTypes.Date) {
2255
- let objectBuilder = builder.getOrDefault("result.variable.object");
2378
+ const slot = builder.getOrDefault("if");
2256
2379
  const entitySelectorPath = property.getAssignmentPath({ parent: "entity" });
2257
- if (objectBuilder == null) {
2258
- objectBuilder = builder.get("result")
2259
- .assign("const result", { name: "variable" })
2260
- .object({ name: "object" });
2261
- }
2380
+ const resultSelectorPath = property.getAssignmentPath({ parent: "result" });
2262
2381
  if (property.parent == null) {
2263
- objectBuilder.property(`${property.name}: ${entitySelectorPath}`);
2382
+ // Only assign if the incoming entity has the property, this allows partial serialization
2383
+ // Basically only serialize what is there
2384
+ slot.if(`Object.hasOwn(entity, "${property.name}")`).appendBody(`${resultSelectorPath} = ${entitySelectorPath}`);
2264
2385
  return builder;
2265
2386
  }
2266
- const slotPath = new _SlotPath__WEBPACK_IMPORTED_MODULE_2__.SlotPath(...property.getParentPathArray());
2267
- objectBuilder = objectBuilder.get(slotPath.get());
2268
- objectBuilder.property(`${property.name}: ${entitySelectorPath}`);
2387
+ const parentSelectPath = ["entity", ...property.getParentPathArray()].join(".");
2388
+ const parentAssignPath = ["result", ...property.getParentPathArray()].join(".");
2389
+ const ifSlot = slot.if(`Object.hasOwn(${parentSelectPath}, "${property.name}")`);
2390
+ if (property.parent.isNullable || property.parent.isOptional) {
2391
+ // Do this for nullable/optional parents. Parent will be null if its nullable/optional
2392
+ const conditionallyCreateParent = new _blocks__WEBPACK_IMPORTED_MODULE_2__.IfBuilder(`${parentAssignPath} == null`).appendBody(`${parentAssignPath} = {}`);
2393
+ ifSlot.appendBody(conditionallyCreateParent.toString());
2394
+ }
2395
+ ifSlot.appendBody(`${resultSelectorPath} = ${entitySelectorPath}`);
2269
2396
  return builder;
2270
2397
  }
2271
2398
  return super.handle(property, builder);
@@ -2451,11 +2578,10 @@ class PropertyInfoHandler {
2451
2578
  const useFromPropertyName = property.from != null;
2452
2579
  const entitySelectorPath = property.getAssignmentPath({ parent: "entity", useFromPropertyName });
2453
2580
  if (property.parent != null) {
2454
- const slotPath = new _SlotPath__WEBPACK_IMPORTED_MODULE_1__.SlotPath("factory", "function", "assignment");
2581
+ const slotPath = new _SlotPath__WEBPACK_IMPORTED_MODULE_1__.SlotPath("factory", "function", "enriched", "object", "enriched");
2455
2582
  const path = property.parent.getAssignmentPath({ parent: "enriched" });
2456
2583
  slotPath.push(`[${path}]`);
2457
- const builder = root.get(slotPath.get());
2458
- const objectBuilder = builder.getValue;
2584
+ const objectBuilder = root.get(slotPath.get());
2459
2585
  const childEntityPathSelector = property.getSelectrorPath({ parent: "entity", useFromPropertyName });
2460
2586
  objectBuilder.property(`${property.name}: ${childEntityPathSelector}`);
2461
2587
  return;
@@ -2601,6 +2727,39 @@ class SchemaError extends Error {
2601
2727
  }
2602
2728
 
2603
2729
 
2730
+ }),
2731
+ "./src/performance/index.ts":
2732
+ /*!**********************************!*\
2733
+ !*** ./src/performance/index.ts ***!
2734
+ \**********************************/
2735
+ (function (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
2736
+ __webpack_require__.r(__webpack_exports__);
2737
+ __webpack_require__.d(__webpack_exports__, {
2738
+ measure: () => (measure),
2739
+ now: () => (now)
2740
+ });
2741
+ const measurements = {};
2742
+ const now = () => {
2743
+ if (typeof performance !== 'undefined' && performance.now) {
2744
+ // Browser or modern Node.js
2745
+ return performance.now();
2746
+ }
2747
+ // Fallback for older environments
2748
+ return Date.now();
2749
+ };
2750
+ const measure = {
2751
+ start: (name) => {
2752
+ measurements[name] = now();
2753
+ },
2754
+ end: (name) => {
2755
+ const start = measurements[name];
2756
+ delete measurements[name];
2757
+ const delta = now() - start;
2758
+ console.log(`[ROUTIER] - Performance: ${name} took ${delta}`);
2759
+ }
2760
+ };
2761
+
2762
+
2604
2763
  }),
2605
2764
  "./src/schema/PropertyInfo.ts":
2606
2765
  /*!************************************!*\
@@ -2942,28 +3101,28 @@ __webpack_require__.r(__webpack_exports__);
2942
3101
  __webpack_require__.d(__webpack_exports__, {
2943
3102
  SchemaDefinition: () => (SchemaDefinition)
2944
3103
  });
2945
- /* ESM import */var _table_SchemaFunction__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./table/SchemaFunction */ "./src/schema/table/SchemaFunction.ts");
2946
- /* ESM import */var _table_SchemaComputed__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./table/SchemaComputed */ "./src/schema/table/SchemaComputed.ts");
2947
- /* ESM import */var _property_base_SchemaBase__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./property/base/SchemaBase */ "./src/schema/property/base/SchemaBase.ts");
2948
- /* ESM import */var _PropertyInfo__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./PropertyInfo */ "./src/schema/PropertyInfo.ts");
2949
- /* ESM import */var _codegen__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../codegen */ "./src/codegen/blocks.ts");
2950
- /* ESM import */var _codegen_handlers_EnrichmentHandlerBuilder__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../codegen/handlers/EnrichmentHandlerBuilder */ "./src/codegen/handlers/EnrichmentHandlerBuilder.ts");
2951
- /* ESM import */var _codegen_handlers_MergeHandlerBuilder__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../codegen/handlers/MergeHandlerBuilder */ "./src/codegen/handlers/MergeHandlerBuilder.ts");
2952
- /* ESM import */var _codegen_handlers_PrepareHandlerBuilder__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../codegen/handlers/PrepareHandlerBuilder */ "./src/codegen/handlers/PrepareHandlerBuilder.ts");
2953
- /* ESM import */var _codegen_handlers_StripHandlerBuilder__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../codegen/handlers/StripHandlerBuilder */ "./src/codegen/handlers/StripHandlerBuilder.ts");
2954
- /* ESM import */var _codegen_handlers_CloneHandlerBuilder__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../codegen/handlers/CloneHandlerBuilder */ "./src/codegen/handlers/CloneHandlerBuilder.ts");
2955
- /* ESM import */var _codegen_handlers_CompareHandlerBuilder__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../codegen/handlers/CompareHandlerBuilder */ "./src/codegen/handlers/CompareHandlerBuilder.ts");
2956
- /* ESM import */var _codegen_handlers_DeserializeHandlerBuilder__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../codegen/handlers/DeserializeHandlerBuilder */ "./src/codegen/handlers/DeserializeHandlerBuilder.ts");
2957
- /* ESM import */var _codegen_handlers_HashTypeHandlerBuilder__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../codegen/handlers/HashTypeHandlerBuilder */ "./src/codegen/handlers/HashTypeHandlerBuilder.ts");
2958
- /* ESM import */var _codegen_handlers_IdSelectorHandlerBuilder__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../codegen/handlers/IdSelectorHandlerBuilder */ "./src/codegen/handlers/IdSelectorHandlerBuilder.ts");
2959
- /* ESM import */var _codegen_handlers_HashHandlerBuilder__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../codegen/handlers/HashHandlerBuilder */ "./src/codegen/handlers/HashHandlerBuilder.ts");
2960
- /* ESM import */var _codegen_handlers_EnableChangeTrackingHandlerBuilder__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../codegen/handlers/EnableChangeTrackingHandlerBuilder */ "./src/codegen/handlers/EnableChangeTrackingHandlerBuilder.ts");
2961
- /* ESM import */var _codegen_handlers_FreezeHandlerBuilder__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../codegen/handlers/FreezeHandlerBuilder */ "./src/codegen/handlers/FreezeHandlerBuilder.ts");
3104
+ /* ESM import */var _table_SchemaFunction__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./table/SchemaFunction */ "./src/schema/table/SchemaFunction.ts");
3105
+ /* ESM import */var _table_SchemaComputed__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./table/SchemaComputed */ "./src/schema/table/SchemaComputed.ts");
3106
+ /* ESM import */var _property_base_SchemaBase__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./property/base/SchemaBase */ "./src/schema/property/base/SchemaBase.ts");
3107
+ /* ESM import */var _PropertyInfo__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./PropertyInfo */ "./src/schema/PropertyInfo.ts");
3108
+ /* ESM import */var _codegen__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../codegen */ "./src/codegen/blocks.ts");
3109
+ /* ESM import */var _codegen_handlers_EnrichmentHandlerBuilder__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../codegen/handlers/EnrichmentHandlerBuilder */ "./src/codegen/handlers/EnrichmentHandlerBuilder.ts");
3110
+ /* ESM import */var _codegen_handlers_MergeHandlerBuilder__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../codegen/handlers/MergeHandlerBuilder */ "./src/codegen/handlers/MergeHandlerBuilder.ts");
3111
+ /* ESM import */var _codegen_handlers_PrepareHandlerBuilder__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../codegen/handlers/PrepareHandlerBuilder */ "./src/codegen/handlers/PrepareHandlerBuilder.ts");
3112
+ /* ESM import */var _codegen_handlers_StripHandlerBuilder__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../codegen/handlers/StripHandlerBuilder */ "./src/codegen/handlers/StripHandlerBuilder.ts");
3113
+ /* ESM import */var _codegen_handlers_CloneHandlerBuilder__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../codegen/handlers/CloneHandlerBuilder */ "./src/codegen/handlers/CloneHandlerBuilder.ts");
3114
+ /* ESM import */var _codegen_handlers_CompareHandlerBuilder__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../codegen/handlers/CompareHandlerBuilder */ "./src/codegen/handlers/CompareHandlerBuilder.ts");
3115
+ /* ESM import */var _codegen_handlers_DeserializeHandlerBuilder__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../codegen/handlers/DeserializeHandlerBuilder */ "./src/codegen/handlers/DeserializeHandlerBuilder.ts");
3116
+ /* ESM import */var _codegen_handlers_HashTypeHandlerBuilder__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../codegen/handlers/HashTypeHandlerBuilder */ "./src/codegen/handlers/HashTypeHandlerBuilder.ts");
3117
+ /* ESM import */var _codegen_handlers_IdSelectorHandlerBuilder__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../codegen/handlers/IdSelectorHandlerBuilder */ "./src/codegen/handlers/IdSelectorHandlerBuilder.ts");
3118
+ /* ESM import */var _codegen_handlers_HashHandlerBuilder__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../codegen/handlers/HashHandlerBuilder */ "./src/codegen/handlers/HashHandlerBuilder.ts");
3119
+ /* ESM import */var _codegen_handlers_EnableChangeTrackingHandlerBuilder__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../codegen/handlers/EnableChangeTrackingHandlerBuilder */ "./src/codegen/handlers/EnableChangeTrackingHandlerBuilder.ts");
3120
+ /* ESM import */var _codegen_handlers_FreezeHandlerBuilder__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../codegen/handlers/FreezeHandlerBuilder */ "./src/codegen/handlers/FreezeHandlerBuilder.ts");
2962
3121
  /* ESM import */var _errors_SchemaError__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../errors/SchemaError */ "./src/errors/SchemaError.ts");
2963
- /* ESM import */var _codegen_handlers_SerializeHandlerBuilder__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../codegen/handlers/SerializeHandlerBuilder */ "./src/codegen/handlers/SerializeHandlerBuilder.ts");
2964
- /* ESM import */var _utilities__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utilities */ "./src/utilities/uuid.ts");
2965
- /* ESM import */var _utilities__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../utilities */ "./src/utilities/strings.ts");
2966
- /* ESM import */var _types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./types */ "./src/schema/types.ts");
3122
+ /* ESM import */var _codegen_handlers_SerializeHandlerBuilder__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../codegen/handlers/SerializeHandlerBuilder */ "./src/codegen/handlers/SerializeHandlerBuilder.ts");
3123
+ /* ESM import */var _utilities__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../utilities */ "./src/utilities/strings.ts");
3124
+ /* ESM import */var _types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./types */ "./src/schema/types.ts");
3125
+ /* ESM import */var _communication_broadcast__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./communication/broadcast */ "./src/schema/communication/broadcast.ts");
2967
3126
 
2968
3127
 
2969
3128
 
@@ -2985,54 +3144,10 @@ __webpack_require__.d(__webpack_exports__, {
2985
3144
 
2986
3145
 
2987
3146
 
2988
- // This is intented to run the "OnMessage" event whenever we "send". For context
2989
- // when we make a change, we query to see if we have any changes. We need to run a fetch because we could have
2990
- // many db sets
2991
- class CollectionSubscription {
2992
- _channel;
2993
- _id = (0,_utilities__WEBPACK_IMPORTED_MODULE_0__.uuid)();
2994
- _callback = null;
2995
- constructor(id, signal) {
2996
- // The id is the computed id from the collection. We need a static id so we can communicate across different
2997
- // instances of a data store
2998
- this._channel = new BroadcastChannel(`__routier-unidirectional-subscription-channel-${id}`);
2999
- this._channel.onmessage = (event) => {
3000
- const message = event.data;
3001
- if (message.id === this._id) {
3002
- return;
3003
- }
3004
- if (this._callback != null) {
3005
- this._callback(message.changes);
3006
- }
3007
- };
3008
- if (signal) {
3009
- signal.addEventListener("abort", () => {
3010
- this[Symbol.dispose]();
3011
- }, { once: true });
3012
- }
3013
- }
3014
- send(changes) {
3015
- const message = {
3016
- id: this._id,
3017
- changes
3018
- };
3019
- this._channel.postMessage(message);
3020
- }
3021
- onMessage(callback) {
3022
- this._callback = callback;
3023
- }
3024
- dispose() {
3025
- this[Symbol.dispose]();
3026
- }
3027
- [Symbol.dispose]() {
3028
- this._channel.onmessage = null;
3029
- this._channel.close();
3030
- this._channel = null;
3031
- }
3032
- }
3033
- class SchemaDefinition extends _property_base_SchemaBase__WEBPACK_IMPORTED_MODULE_1__.SchemaBase {
3147
+
3148
+ class SchemaDefinition extends _property_base_SchemaBase__WEBPACK_IMPORTED_MODULE_0__.SchemaBase {
3034
3149
  instance;
3035
- type = _types__WEBPACK_IMPORTED_MODULE_2__.SchemaTypes.Definition;
3150
+ type = _types__WEBPACK_IMPORTED_MODULE_1__.SchemaTypes.Definition;
3036
3151
  collectionName;
3037
3152
  constructor(collectionName, schema) {
3038
3153
  super();
@@ -3043,8 +3158,8 @@ class SchemaDefinition extends _property_base_SchemaBase__WEBPACK_IMPORTED_MODUL
3043
3158
  }
3044
3159
  modify(builder) {
3045
3160
  const b = {
3046
- function: (fn, injected) => new _table_SchemaFunction__WEBPACK_IMPORTED_MODULE_3__.SchemaFunction(fn, injected),
3047
- computed: (fn, injected) => new _table_SchemaComputed__WEBPACK_IMPORTED_MODULE_4__.SchemaComputed(fn, injected)
3161
+ function: (fn, injected) => new _table_SchemaFunction__WEBPACK_IMPORTED_MODULE_2__.SchemaFunction(fn, injected),
3162
+ computed: (fn, injected) => new _table_SchemaComputed__WEBPACK_IMPORTED_MODULE_3__.SchemaComputed(fn, injected)
3048
3163
  };
3049
3164
  const r = builder(b);
3050
3165
  return new SchemaDefinition(this.collectionName, { ...this.instance, ...r });
@@ -3056,7 +3171,7 @@ class SchemaDefinition extends _property_base_SchemaBase__WEBPACK_IMPORTED_MODUL
3056
3171
  const properties = [];
3057
3172
  for (let i = 0; i < explore.length; i++) {
3058
3173
  const item = explore[i];
3059
- if (item.instance.type === _types__WEBPACK_IMPORTED_MODULE_2__.SchemaTypes.Definition) {
3174
+ if (item.instance.type === _types__WEBPACK_IMPORTED_MODULE_1__.SchemaTypes.Definition) {
3060
3175
  explore.push({
3061
3176
  path: null,
3062
3177
  instance: item.instance.instance,
@@ -3071,8 +3186,8 @@ class SchemaDefinition extends _property_base_SchemaBase__WEBPACK_IMPORTED_MODUL
3071
3186
  const previousParent = item.parents.length === 0
3072
3187
  ? null
3073
3188
  : item.parents[item.parents.length - 1].propertyInfo;
3074
- if (propertyInstance.type === _types__WEBPACK_IMPORTED_MODULE_2__.SchemaTypes.Object) {
3075
- const propertyInfo = new _PropertyInfo__WEBPACK_IMPORTED_MODULE_5__.PropertyInfo(propertyInstance, key, previousParent);
3189
+ if (propertyInstance.type === _types__WEBPACK_IMPORTED_MODULE_1__.SchemaTypes.Object) {
3190
+ const propertyInfo = new _PropertyInfo__WEBPACK_IMPORTED_MODULE_4__.PropertyInfo(propertyInstance, key, previousParent);
3076
3191
  explore.push({
3077
3192
  path: [item.path, key].filter((w) => w != null).join("."),
3078
3193
  instance: propertyInstance.instance,
@@ -3089,7 +3204,7 @@ class SchemaDefinition extends _property_base_SchemaBase__WEBPACK_IMPORTED_MODUL
3089
3204
  previousParent.children.push(propertyInfo);
3090
3205
  continue;
3091
3206
  }
3092
- const childPrimitivePropertyInfo = new _PropertyInfo__WEBPACK_IMPORTED_MODULE_5__.PropertyInfo(item.instance[key], key, previousParent);
3207
+ const childPrimitivePropertyInfo = new _PropertyInfo__WEBPACK_IMPORTED_MODULE_4__.PropertyInfo(item.instance[key], key, previousParent);
3093
3208
  if (previousParent === null) {
3094
3209
  properties.push(childPrimitivePropertyInfo);
3095
3210
  continue;
@@ -3179,19 +3294,19 @@ class SchemaDefinition extends _property_base_SchemaBase__WEBPACK_IMPORTED_MODUL
3179
3294
  const schema = this;
3180
3295
  const properties = [];
3181
3296
  const propertyMap = new Map();
3182
- const enrichmentHandlerBuilder = new _codegen_handlers_EnrichmentHandlerBuilder__WEBPACK_IMPORTED_MODULE_6__.EnrichmentHandlerBuilder();
3183
- const mergeHandlerFactory = new _codegen_handlers_MergeHandlerBuilder__WEBPACK_IMPORTED_MODULE_7__.MergeHandlerBuilder();
3184
- const prepareHandlerBuilder = new _codegen_handlers_PrepareHandlerBuilder__WEBPACK_IMPORTED_MODULE_8__.PrepareHandlerBuilder();
3185
- const stripHandlerBuilder = new _codegen_handlers_StripHandlerBuilder__WEBPACK_IMPORTED_MODULE_9__.StripHandlerBuilder();
3186
- const cloneHandlerBuilder = new _codegen_handlers_CloneHandlerBuilder__WEBPACK_IMPORTED_MODULE_10__.CloneHandlerBuilder();
3187
- const compareHandlerBuilder = new _codegen_handlers_CompareHandlerBuilder__WEBPACK_IMPORTED_MODULE_11__.CompareHandlerBuilder();
3188
- const deserializeHandlerBuilder = new _codegen_handlers_DeserializeHandlerBuilder__WEBPACK_IMPORTED_MODULE_12__.DeserializeHandlerBuilder();
3189
- const hashTypeHandlerBuilder = new _codegen_handlers_HashTypeHandlerBuilder__WEBPACK_IMPORTED_MODULE_13__.HashTypeHandlerBuilder();
3190
- const idSelectorHandlerBuilder = new _codegen_handlers_IdSelectorHandlerBuilder__WEBPACK_IMPORTED_MODULE_14__.IdSelectorHandlerBuilder();
3191
- const hashHandlerBuilder = new _codegen_handlers_HashHandlerBuilder__WEBPACK_IMPORTED_MODULE_15__.HashHandlerBuilder();
3192
- const enableChangeTrackingHandlerBuilder = new _codegen_handlers_EnableChangeTrackingHandlerBuilder__WEBPACK_IMPORTED_MODULE_16__.EnableChangeTrackingHandlerBuilder();
3193
- const freezeHandlerBuilder = new _codegen_handlers_FreezeHandlerBuilder__WEBPACK_IMPORTED_MODULE_17__.FreezeHandlerBuilder();
3194
- const serializeHandlerBuilder = new _codegen_handlers_SerializeHandlerBuilder__WEBPACK_IMPORTED_MODULE_18__.SerializeHandlerBuilder();
3297
+ const enrichmentHandlerBuilder = new _codegen_handlers_EnrichmentHandlerBuilder__WEBPACK_IMPORTED_MODULE_5__.EnrichmentHandlerBuilder();
3298
+ const mergeHandlerFactory = new _codegen_handlers_MergeHandlerBuilder__WEBPACK_IMPORTED_MODULE_6__.MergeHandlerBuilder();
3299
+ const prepareHandlerBuilder = new _codegen_handlers_PrepareHandlerBuilder__WEBPACK_IMPORTED_MODULE_7__.PrepareHandlerBuilder();
3300
+ const stripHandlerBuilder = new _codegen_handlers_StripHandlerBuilder__WEBPACK_IMPORTED_MODULE_8__.StripHandlerBuilder();
3301
+ const cloneHandlerBuilder = new _codegen_handlers_CloneHandlerBuilder__WEBPACK_IMPORTED_MODULE_9__.CloneHandlerBuilder();
3302
+ const compareHandlerBuilder = new _codegen_handlers_CompareHandlerBuilder__WEBPACK_IMPORTED_MODULE_10__.CompareHandlerBuilder();
3303
+ const deserializeHandlerBuilder = new _codegen_handlers_DeserializeHandlerBuilder__WEBPACK_IMPORTED_MODULE_11__.DeserializeHandlerBuilder();
3304
+ const hashTypeHandlerBuilder = new _codegen_handlers_HashTypeHandlerBuilder__WEBPACK_IMPORTED_MODULE_12__.HashTypeHandlerBuilder();
3305
+ const idSelectorHandlerBuilder = new _codegen_handlers_IdSelectorHandlerBuilder__WEBPACK_IMPORTED_MODULE_13__.IdSelectorHandlerBuilder();
3306
+ const hashHandlerBuilder = new _codegen_handlers_HashHandlerBuilder__WEBPACK_IMPORTED_MODULE_14__.HashHandlerBuilder();
3307
+ const enableChangeTrackingHandlerBuilder = new _codegen_handlers_EnableChangeTrackingHandlerBuilder__WEBPACK_IMPORTED_MODULE_15__.EnableChangeTrackingHandlerBuilder();
3308
+ const freezeHandlerBuilder = new _codegen_handlers_FreezeHandlerBuilder__WEBPACK_IMPORTED_MODULE_16__.FreezeHandlerBuilder();
3309
+ const serializeHandlerBuilder = new _codegen_handlers_SerializeHandlerBuilder__WEBPACK_IMPORTED_MODULE_17__.SerializeHandlerBuilder();
3195
3310
  const enricher = enrichmentHandlerBuilder.build();
3196
3311
  const merge = mergeHandlerFactory.build();
3197
3312
  const prepare = prepareHandlerBuilder.build();
@@ -3205,15 +3320,15 @@ class SchemaDefinition extends _property_base_SchemaBase__WEBPACK_IMPORTED_MODUL
3205
3320
  const enableChangeTrackingHandler = enableChangeTrackingHandlerBuilder.build();
3206
3321
  const freezeHandler = freezeHandlerBuilder.build();
3207
3322
  const serializeHandler = serializeHandlerBuilder.build();
3208
- const changeTrackingCodeBuilder = new _codegen__WEBPACK_IMPORTED_MODULE_19__.CodeBuilder();
3323
+ const changeTrackingCodeBuilder = new _codegen__WEBPACK_IMPORTED_MODULE_18__.CodeBuilder();
3209
3324
  changeTrackingCodeBuilder.raw(`function ${this.createChangeTracker.toString()}`);
3210
3325
  changeTrackingCodeBuilder.slot("declarations").variable("enableChangeTracking").value('createChangeTracker()');
3211
3326
  changeTrackingCodeBuilder.slot("assignment");
3212
3327
  changeTrackingCodeBuilder.slot("return").raw('\treturn enableChangeTracking(entity);');
3213
- const freezeCodeBuilder = new _codegen__WEBPACK_IMPORTED_MODULE_19__.CodeBuilder();
3328
+ const freezeCodeBuilder = new _codegen__WEBPACK_IMPORTED_MODULE_18__.CodeBuilder();
3214
3329
  freezeCodeBuilder.slot("assignment");
3215
3330
  freezeCodeBuilder.slot("return").raw('\treturn Object.freeze(entity);');
3216
- const enricherCodeBuilder = new _codegen__WEBPACK_IMPORTED_MODULE_19__.CodeBuilder();
3331
+ const enricherCodeBuilder = new _codegen__WEBPACK_IMPORTED_MODULE_18__.CodeBuilder();
3217
3332
  const enricherFunctionRoot = enricherCodeBuilder.factory("factory", { name: "factory" }).parameters({ name: "collectionName", value: this.collectionName });
3218
3333
  const enricherFunctionBody = enricherFunctionRoot.function(undefined, { name: "function" }).parameters("entity", "changeTrackingType").return();
3219
3334
  enricherFunctionBody.raw(`function ${this.createChangeTracker.toString()}`);
@@ -3224,7 +3339,7 @@ class SchemaDefinition extends _property_base_SchemaBase__WEBPACK_IMPORTED_MODUL
3224
3339
  enricherFunctionBody.slot("ifs");
3225
3340
  enricherFunctionBody.slot("tracking").if('changeTrackingType === "immutable"', { name: "freeze" });
3226
3341
  enricherFunctionBody.raw('\treturn enableChangeTracking(enriched);');
3227
- const mergeCodeBuilder = new _codegen__WEBPACK_IMPORTED_MODULE_19__.CodeBuilder();
3342
+ const mergeCodeBuilder = new _codegen__WEBPACK_IMPORTED_MODULE_18__.CodeBuilder();
3228
3343
  const mergeFunctionRoot = mergeCodeBuilder.factory("factory", { name: "factory" }).parameters({ name: "collectionName", value: this.collectionName });
3229
3344
  const mergeFunctionBody = mergeFunctionRoot.function(undefined, { name: "function" }).parameters("destination", "source").return();
3230
3345
  const pauseFunctionBody = mergeFunctionBody.function("pause")
@@ -3243,34 +3358,40 @@ class SchemaDefinition extends _property_base_SchemaBase__WEBPACK_IMPORTED_MODUL
3243
3358
  unpause();
3244
3359
 
3245
3360
  return destination;`);
3246
- const prepareCodeBuilder = new _codegen__WEBPACK_IMPORTED_MODULE_19__.CodeBuilder();
3361
+ const prepareCodeBuilder = new _codegen__WEBPACK_IMPORTED_MODULE_18__.CodeBuilder();
3247
3362
  prepareCodeBuilder.slot("result");
3248
3363
  prepareCodeBuilder.slot("assignments");
3249
3364
  prepareCodeBuilder.slot("return").raw(` return result;`);
3250
- const stripCodeBuilder = new _codegen__WEBPACK_IMPORTED_MODULE_19__.CodeBuilder();
3365
+ const stripCodeBuilder = new _codegen__WEBPACK_IMPORTED_MODULE_18__.CodeBuilder();
3251
3366
  stripCodeBuilder.slot("result");
3252
3367
  stripCodeBuilder.slot("return").raw(` return result;`);
3253
- const cloneCodeBuilder = new _codegen__WEBPACK_IMPORTED_MODULE_19__.CodeBuilder();
3254
- cloneCodeBuilder.slot("result");
3368
+ const cloneCodeBuilder = new _codegen__WEBPACK_IMPORTED_MODULE_18__.CodeBuilder();
3369
+ cloneCodeBuilder.slot("result").raw("const result = {};");
3370
+ ;
3371
+ cloneCodeBuilder.slot("assignments");
3372
+ cloneCodeBuilder.slot("if");
3255
3373
  cloneCodeBuilder.slot("return").raw(` return result;`);
3256
- const compareCodeBuilder = new _codegen__WEBPACK_IMPORTED_MODULE_19__.CodeBuilder();
3374
+ const compareCodeBuilder = new _codegen__WEBPACK_IMPORTED_MODULE_18__.CodeBuilder();
3257
3375
  compareCodeBuilder.slot("result");
3258
3376
  compareCodeBuilder.slot("return").raw(` return result;`);
3259
- const deserializeCodeBuilder = new _codegen__WEBPACK_IMPORTED_MODULE_19__.CodeBuilder();
3377
+ const deserializeCodeBuilder = new _codegen__WEBPACK_IMPORTED_MODULE_18__.CodeBuilder();
3378
+ deserializeCodeBuilder.slot("functions");
3260
3379
  deserializeCodeBuilder.slot("result");
3261
3380
  deserializeCodeBuilder.slot("if");
3262
3381
  deserializeCodeBuilder.slot("return").raw(` return result;`);
3263
- const serializeCodeBuilder = new _codegen__WEBPACK_IMPORTED_MODULE_19__.CodeBuilder();
3264
- serializeCodeBuilder.slot("result");
3382
+ const serializeCodeBuilder = new _codegen__WEBPACK_IMPORTED_MODULE_18__.CodeBuilder();
3383
+ serializeCodeBuilder.slot("result").raw("const result = {};");
3384
+ serializeCodeBuilder.slot("assignments");
3385
+ serializeCodeBuilder.slot("functions");
3265
3386
  serializeCodeBuilder.slot("if");
3266
3387
  serializeCodeBuilder.slot("return").raw(` return result;`);
3267
- const idSelectorCodeBuilder = new _codegen__WEBPACK_IMPORTED_MODULE_19__.CodeBuilder();
3388
+ const idSelectorCodeBuilder = new _codegen__WEBPACK_IMPORTED_MODULE_18__.CodeBuilder();
3268
3389
  idSelectorCodeBuilder.slot("result");
3269
3390
  idSelectorCodeBuilder.slot("return").raw(` return result;`);
3270
- const hashTypeCodeBuilder = new _codegen__WEBPACK_IMPORTED_MODULE_19__.CodeBuilder();
3391
+ const hashTypeCodeBuilder = new _codegen__WEBPACK_IMPORTED_MODULE_18__.CodeBuilder();
3271
3392
  hashTypeCodeBuilder.slot("ifs");
3272
3393
  hashTypeCodeBuilder.slot("return").raw(` return "Ids";`);
3273
- const hashCodeBuilder = new _codegen__WEBPACK_IMPORTED_MODULE_19__.CodeBuilder();
3394
+ const hashCodeBuilder = new _codegen__WEBPACK_IMPORTED_MODULE_18__.CodeBuilder();
3274
3395
  hashCodeBuilder.slot("functions").raw(`
3275
3396
  function stringifyDate(d) {
3276
3397
 
@@ -3296,7 +3417,7 @@ class SchemaDefinition extends _property_base_SchemaBase__WEBPACK_IMPORTED_MODUL
3296
3417
  hashCodeBuilder.raw(` return result;`);
3297
3418
  const idProperties = [];
3298
3419
  const allPropertyNamesAndPaths = [];
3299
- let hashType = _types__WEBPACK_IMPORTED_MODULE_2__.HashType.Ids;
3420
+ let hashType = _types__WEBPACK_IMPORTED_MODULE_1__.HashType.Ids;
3300
3421
  let hasIdentities = false;
3301
3422
  let hasIdentityKeys = false;
3302
3423
  this._iterate(schema, (property) => {
@@ -3352,13 +3473,12 @@ class SchemaDefinition extends _property_base_SchemaBase__WEBPACK_IMPORTED_MODUL
3352
3473
  const idPropertyNames = idProperties.map(w => w.name);
3353
3474
  const getId = (entity) => {
3354
3475
  if (idPropertyNames.length > 1) {
3355
- return hashFunction(entity, _types__WEBPACK_IMPORTED_MODULE_2__.HashType.Ids);
3476
+ return hashFunction(entity, _types__WEBPACK_IMPORTED_MODULE_1__.HashType.Ids);
3356
3477
  }
3357
3478
  return getIdsFunction(entity)[0];
3358
3479
  };
3359
3480
  const getProperty = (id) => propertyMap.get(id);
3360
- const id = (0,_utilities__WEBPACK_IMPORTED_MODULE_20__.hash)([...allPropertyNamesAndPaths, this.collectionName].join(","));
3361
- const paths = new Set(properties.map(x => x.getAssignmentPath()));
3481
+ const id = (0,_utilities__WEBPACK_IMPORTED_MODULE_19__.hash)([...allPropertyNamesAndPaths, this.collectionName].join(","));
3362
3482
  // memoize this by the validProperties
3363
3483
  // TODO: See if we can generate a function to do this and eliminate loops
3364
3484
  const deserializePartial = (item, properties) => {
@@ -3374,7 +3494,7 @@ class SchemaDefinition extends _property_base_SchemaBase__WEBPACK_IMPORTED_MODUL
3374
3494
  return item;
3375
3495
  };
3376
3496
  return {
3377
- createSubscription: (signal) => new CollectionSubscription(id, signal),
3497
+ createSubscription: (signal) => new _communication_broadcast__WEBPACK_IMPORTED_MODULE_20__.SchemaSubscription(id, signal),
3378
3498
  getId,
3379
3499
  getProperty,
3380
3500
  properties,
@@ -3493,6 +3613,124 @@ const s = {
3493
3613
  };
3494
3614
 
3495
3615
 
3616
+ }),
3617
+ "./src/schema/communication/broadcast.ts":
3618
+ /*!***********************************************!*\
3619
+ !*** ./src/schema/communication/broadcast.ts ***!
3620
+ \***********************************************/
3621
+ (function (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
3622
+ __webpack_require__.r(__webpack_exports__);
3623
+ __webpack_require__.d(__webpack_exports__, {
3624
+ SchemaSubscription: () => (SchemaSubscription)
3625
+ });
3626
+ /* ESM import */var _performance__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../performance */ "./src/performance/index.ts");
3627
+ /* ESM import */var _utilities__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utilities */ "./src/utilities/uuid.ts");
3628
+
3629
+
3630
+ const registry = {};
3631
+ const getChannelRegistry = (schemaId) => {
3632
+ if (registry[schemaId]) {
3633
+ return registry[schemaId];
3634
+ }
3635
+ const channel = new SchemaChannel(schemaId);
3636
+ registry[schemaId] = channel;
3637
+ return channel;
3638
+ };
3639
+ // Must have a sender and receiver. Sender cannot listen for it's own message
3640
+ class SchemaChannel {
3641
+ sender;
3642
+ receiver;
3643
+ constructor(schemaId) {
3644
+ this.sender = new SchemaChannelSender(schemaId);
3645
+ this.receiver = new SchemaChannelReceiver(schemaId);
3646
+ }
3647
+ }
3648
+ class SchemaChannelSender {
3649
+ broadcastChannel;
3650
+ constructor(schemaId) {
3651
+ this.broadcastChannel = new BroadcastChannel(`__routier-schema-subscription-channel:${schemaId}`);
3652
+ }
3653
+ send(changes) {
3654
+ this.broadcastChannel.postMessage(changes);
3655
+ }
3656
+ }
3657
+ class SchemaChannelReceiver {
3658
+ broadcastChannel;
3659
+ subscriptions = [];
3660
+ constructor(schemaId) {
3661
+ this.broadcastChannel = new BroadcastChannel(`__routier-schema-subscription-channel:${schemaId}`);
3662
+ this.broadcastChannel.onmessage = (e) => {
3663
+ // We can't send to the same instance it is not possbile
3664
+ const stampedChanges = e.data;
3665
+ for (let i = 0, length = this.subscriptions.length; i < length; i++) {
3666
+ const subscription = this.subscriptions[i];
3667
+ subscription.action(stampedChanges);
3668
+ }
3669
+ };
3670
+ }
3671
+ addListener(id, listener) {
3672
+ this.subscriptions.push(new SubscriptionListener(id, listener));
3673
+ }
3674
+ removeListeners(id) {
3675
+ this.subscriptions = this.subscriptions.filter(w => w.id !== id);
3676
+ }
3677
+ }
3678
+ class SubscriptionListener {
3679
+ id;
3680
+ listener;
3681
+ constructor(id, listener) {
3682
+ this.id = id;
3683
+ this.listener = listener;
3684
+ }
3685
+ action(changes) {
3686
+ this.listener(changes);
3687
+ }
3688
+ }
3689
+ class SchemaSubscription {
3690
+ id;
3691
+ schemaId;
3692
+ createdAt;
3693
+ constructor(schemaId, signal) {
3694
+ this.createdAt = (0,_performance__WEBPACK_IMPORTED_MODULE_0__.now)();
3695
+ this.id = (0,_utilities__WEBPACK_IMPORTED_MODULE_1__.uuid)(8);
3696
+ this.schemaId = schemaId;
3697
+ signal?.addEventListener("abort", () => {
3698
+ this.dispose();
3699
+ }, { once: true });
3700
+ }
3701
+ send(changes) {
3702
+ const regisry = getChannelRegistry(this.schemaId);
3703
+ // Send message to all listeners.
3704
+ // Since we create a new listener when we do onMessage,
3705
+ // we don't need to worry about sending to ourselves, it
3706
+ // can't happen
3707
+ regisry.sender.send({
3708
+ data: changes,
3709
+ timestamp: (0,_performance__WEBPACK_IMPORTED_MODULE_0__.now)()
3710
+ });
3711
+ }
3712
+ onMessage(callback) {
3713
+ const regisry = getChannelRegistry(this.schemaId);
3714
+ // Link the callback to an instance
3715
+ regisry.receiver.addListener(this.id, ({ data, timestamp }) => {
3716
+ if (timestamp < this.createdAt) {
3717
+ // Sent before the receiver was even created
3718
+ return;
3719
+ }
3720
+ callback(data);
3721
+ });
3722
+ }
3723
+ dispose() {
3724
+ this[Symbol.dispose]();
3725
+ }
3726
+ [Symbol.dispose]() {
3727
+ const regisry = getChannelRegistry(this.schemaId);
3728
+ // Remove listeners for this instance only
3729
+ regisry.receiver.removeListeners(this.id);
3730
+ }
3731
+ }
3732
+
3733
+
3496
3734
  }),
3497
3735
  "./src/schema/property/base/SchemaBase.ts":
3498
3736
  /*!************************************************!*\
@@ -3967,7 +4205,7 @@ class SchemaSerialize extends _base_SchemaBase__WEBPACK_IMPORTED_MODULE_0__.Sche
3967
4205
  this.instance = current.instance;
3968
4206
  this.valueSerializer = serializer;
3969
4207
  }
3970
- deserializer(deserializer) {
4208
+ deserialize(deserializer) {
3971
4209
  return new _SchemaDeserialize__WEBPACK_IMPORTED_MODULE_1__.SchemaDeserialize(deserializer, this);
3972
4210
  }
3973
4211
  }