@cratis/fundamentals 7.14.0 → 7.15.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 (221) hide show
  1. package/JsonSerializer.ts +88 -42
  2. package/README.md +10 -0
  3. package/dist/JsonSerializer.d.ts.map +1 -1
  4. package/dist/JsonSerializer.js +50 -40
  5. package/dist/JsonSerializer.js.map +1 -1
  6. package/dist/cjs/JsonSerializer.d.ts.map +1 -1
  7. package/dist/cjs/JsonSerializer.js +56 -40
  8. package/dist/cjs/JsonSerializer.js.map +1 -1
  9. package/dist/cjs/geospatial/LineString.d.ts +7 -0
  10. package/dist/cjs/geospatial/LineString.d.ts.map +1 -0
  11. package/dist/cjs/geospatial/LineString.js +20 -0
  12. package/dist/cjs/geospatial/LineString.js.map +1 -0
  13. package/dist/cjs/geospatial/LinearRing.d.ts +7 -0
  14. package/dist/cjs/geospatial/LinearRing.d.ts.map +1 -0
  15. package/dist/cjs/geospatial/LinearRing.js +17 -0
  16. package/dist/cjs/geospatial/LinearRing.js.map +1 -0
  17. package/dist/cjs/geospatial/Point.d.ts +7 -0
  18. package/dist/cjs/geospatial/Point.d.ts.map +1 -0
  19. package/dist/cjs/geospatial/Point.js +30 -0
  20. package/dist/cjs/geospatial/Point.js.map +1 -0
  21. package/dist/cjs/geospatial/Polygon.d.ts +8 -0
  22. package/dist/cjs/geospatial/Polygon.d.ts.map +1 -0
  23. package/dist/cjs/geospatial/Polygon.js +23 -0
  24. package/dist/cjs/geospatial/Polygon.js.map +1 -0
  25. package/dist/cjs/geospatial/index.d.ts +5 -0
  26. package/dist/cjs/geospatial/index.d.ts.map +1 -0
  27. package/dist/cjs/index.d.ts +2 -0
  28. package/dist/cjs/index.d.ts.map +1 -1
  29. package/dist/cjs/index.js +24 -0
  30. package/dist/cjs/index.js.map +1 -1
  31. package/dist/cjs/json/DateJsonConverter.d.ts +8 -0
  32. package/dist/cjs/json/DateJsonConverter.d.ts.map +1 -0
  33. package/dist/cjs/json/DateJsonConverter.js +18 -0
  34. package/dist/cjs/json/DateJsonConverter.js.map +1 -0
  35. package/dist/cjs/json/GuidJsonConverter.d.ts +9 -0
  36. package/dist/cjs/json/GuidJsonConverter.d.ts.map +1 -0
  37. package/dist/cjs/json/GuidJsonConverter.js +19 -0
  38. package/dist/cjs/json/GuidJsonConverter.js.map +1 -0
  39. package/dist/cjs/json/JsonConverter.d.ts +8 -0
  40. package/dist/cjs/json/JsonConverter.d.ts.map +1 -0
  41. package/dist/cjs/json/JsonConverter.js +10 -0
  42. package/dist/cjs/json/JsonConverter.js.map +1 -0
  43. package/dist/cjs/json/LineStringJsonConverter.d.ts +9 -0
  44. package/dist/cjs/json/LineStringJsonConverter.d.ts.map +1 -0
  45. package/dist/cjs/json/LineStringJsonConverter.js +27 -0
  46. package/dist/cjs/json/LineStringJsonConverter.js.map +1 -0
  47. package/dist/cjs/json/PointJsonConverter.d.ts +9 -0
  48. package/dist/cjs/json/PointJsonConverter.d.ts.map +1 -0
  49. package/dist/cjs/json/PointJsonConverter.js +25 -0
  50. package/dist/cjs/json/PointJsonConverter.js.map +1 -0
  51. package/dist/cjs/json/PolygonJsonConverter.d.ts +9 -0
  52. package/dist/cjs/json/PolygonJsonConverter.d.ts.map +1 -0
  53. package/dist/cjs/json/PolygonJsonConverter.js +29 -0
  54. package/dist/cjs/json/PolygonJsonConverter.js.map +1 -0
  55. package/dist/cjs/json/TimeSpanJsonConverter.d.ts +9 -0
  56. package/dist/cjs/json/TimeSpanJsonConverter.d.ts.map +1 -0
  57. package/dist/cjs/json/TimeSpanJsonConverter.js +19 -0
  58. package/dist/cjs/json/TimeSpanJsonConverter.js.map +1 -0
  59. package/dist/cjs/json/ValueMapJsonConverter.d.ts +12 -0
  60. package/dist/cjs/json/ValueMapJsonConverter.d.ts.map +1 -0
  61. package/dist/cjs/json/ValueMapJsonConverter.js +33 -0
  62. package/dist/cjs/json/ValueMapJsonConverter.js.map +1 -0
  63. package/dist/cjs/json/index.d.ts +9 -0
  64. package/dist/cjs/json/index.d.ts.map +1 -0
  65. package/dist/esm/JsonSerializer.d.ts.map +1 -1
  66. package/dist/esm/JsonSerializer.js +56 -40
  67. package/dist/esm/JsonSerializer.js.map +1 -1
  68. package/dist/esm/geospatial/LineString.d.ts +7 -0
  69. package/dist/esm/geospatial/LineString.d.ts.map +1 -0
  70. package/dist/esm/geospatial/LineString.js +18 -0
  71. package/dist/esm/geospatial/LineString.js.map +1 -0
  72. package/dist/esm/geospatial/LinearRing.d.ts +7 -0
  73. package/dist/esm/geospatial/LinearRing.d.ts.map +1 -0
  74. package/dist/esm/geospatial/LinearRing.js +15 -0
  75. package/dist/esm/geospatial/LinearRing.js.map +1 -0
  76. package/dist/esm/geospatial/Point.d.ts +7 -0
  77. package/dist/esm/geospatial/Point.d.ts.map +1 -0
  78. package/dist/esm/geospatial/Point.js +28 -0
  79. package/dist/esm/geospatial/Point.js.map +1 -0
  80. package/dist/esm/geospatial/Polygon.d.ts +8 -0
  81. package/dist/esm/geospatial/Polygon.d.ts.map +1 -0
  82. package/dist/esm/geospatial/Polygon.js +21 -0
  83. package/dist/esm/geospatial/Polygon.js.map +1 -0
  84. package/dist/esm/geospatial/index.d.ts +5 -0
  85. package/dist/esm/geospatial/index.d.ts.map +1 -0
  86. package/dist/esm/index.d.ts +2 -0
  87. package/dist/esm/index.d.ts.map +1 -1
  88. package/dist/esm/index.js +12 -0
  89. package/dist/esm/index.js.map +1 -1
  90. package/dist/esm/json/DateJsonConverter.d.ts +8 -0
  91. package/dist/esm/json/DateJsonConverter.d.ts.map +1 -0
  92. package/dist/esm/json/DateJsonConverter.js +16 -0
  93. package/dist/esm/json/DateJsonConverter.js.map +1 -0
  94. package/dist/esm/json/GuidJsonConverter.d.ts +9 -0
  95. package/dist/esm/json/GuidJsonConverter.d.ts.map +1 -0
  96. package/dist/esm/json/GuidJsonConverter.js +17 -0
  97. package/dist/esm/json/GuidJsonConverter.js.map +1 -0
  98. package/dist/esm/json/JsonConverter.d.ts +8 -0
  99. package/dist/esm/json/JsonConverter.d.ts.map +1 -0
  100. package/dist/esm/json/JsonConverter.js +8 -0
  101. package/dist/esm/json/JsonConverter.js.map +1 -0
  102. package/dist/esm/json/LineStringJsonConverter.d.ts +9 -0
  103. package/dist/esm/json/LineStringJsonConverter.d.ts.map +1 -0
  104. package/dist/esm/json/LineStringJsonConverter.js +25 -0
  105. package/dist/esm/json/LineStringJsonConverter.js.map +1 -0
  106. package/dist/esm/json/PointJsonConverter.d.ts +9 -0
  107. package/dist/esm/json/PointJsonConverter.d.ts.map +1 -0
  108. package/dist/esm/json/PointJsonConverter.js +23 -0
  109. package/dist/esm/json/PointJsonConverter.js.map +1 -0
  110. package/dist/esm/json/PolygonJsonConverter.d.ts +9 -0
  111. package/dist/esm/json/PolygonJsonConverter.d.ts.map +1 -0
  112. package/dist/esm/json/PolygonJsonConverter.js +27 -0
  113. package/dist/esm/json/PolygonJsonConverter.js.map +1 -0
  114. package/dist/esm/json/TimeSpanJsonConverter.d.ts +9 -0
  115. package/dist/esm/json/TimeSpanJsonConverter.d.ts.map +1 -0
  116. package/dist/esm/json/TimeSpanJsonConverter.js +17 -0
  117. package/dist/esm/json/TimeSpanJsonConverter.js.map +1 -0
  118. package/dist/esm/json/ValueMapJsonConverter.d.ts +12 -0
  119. package/dist/esm/json/ValueMapJsonConverter.d.ts.map +1 -0
  120. package/dist/esm/json/ValueMapJsonConverter.js +31 -0
  121. package/dist/esm/json/ValueMapJsonConverter.js.map +1 -0
  122. package/dist/esm/json/index.d.ts +9 -0
  123. package/dist/esm/json/index.d.ts.map +1 -0
  124. package/dist/geospatial/LineString.d.ts +7 -0
  125. package/dist/geospatial/LineString.d.ts.map +1 -0
  126. package/dist/geospatial/LineString.js +16 -0
  127. package/dist/geospatial/LineString.js.map +1 -0
  128. package/dist/geospatial/LinearRing.d.ts +7 -0
  129. package/dist/geospatial/LinearRing.d.ts.map +1 -0
  130. package/dist/geospatial/LinearRing.js +13 -0
  131. package/dist/geospatial/LinearRing.js.map +1 -0
  132. package/dist/geospatial/Point.d.ts +7 -0
  133. package/dist/geospatial/Point.d.ts.map +1 -0
  134. package/dist/geospatial/Point.js +25 -0
  135. package/dist/geospatial/Point.js.map +1 -0
  136. package/dist/geospatial/Polygon.d.ts +8 -0
  137. package/dist/geospatial/Polygon.d.ts.map +1 -0
  138. package/dist/geospatial/Polygon.js +19 -0
  139. package/dist/geospatial/Polygon.js.map +1 -0
  140. package/dist/geospatial/index.d.ts +5 -0
  141. package/dist/geospatial/index.d.ts.map +1 -0
  142. package/dist/geospatial/index.js +5 -0
  143. package/dist/geospatial/index.js.map +1 -0
  144. package/dist/index.d.ts +2 -0
  145. package/dist/index.d.ts.map +1 -1
  146. package/dist/index.js +2 -0
  147. package/dist/index.js.map +1 -1
  148. package/dist/json/DateJsonConverter.d.ts +8 -0
  149. package/dist/json/DateJsonConverter.d.ts.map +1 -0
  150. package/dist/json/DateJsonConverter.js +13 -0
  151. package/dist/json/DateJsonConverter.js.map +1 -0
  152. package/dist/json/GuidJsonConverter.d.ts +9 -0
  153. package/dist/json/GuidJsonConverter.d.ts.map +1 -0
  154. package/dist/json/GuidJsonConverter.js +14 -0
  155. package/dist/json/GuidJsonConverter.js.map +1 -0
  156. package/dist/json/JsonConverter.d.ts +8 -0
  157. package/dist/json/JsonConverter.d.ts.map +1 -0
  158. package/dist/json/JsonConverter.js +6 -0
  159. package/dist/json/JsonConverter.js.map +1 -0
  160. package/dist/json/LineStringJsonConverter.d.ts +9 -0
  161. package/dist/json/LineStringJsonConverter.d.ts.map +1 -0
  162. package/dist/json/LineStringJsonConverter.js +21 -0
  163. package/dist/json/LineStringJsonConverter.js.map +1 -0
  164. package/dist/json/PointJsonConverter.d.ts +9 -0
  165. package/dist/json/PointJsonConverter.d.ts.map +1 -0
  166. package/dist/json/PointJsonConverter.js +20 -0
  167. package/dist/json/PointJsonConverter.js.map +1 -0
  168. package/dist/json/PolygonJsonConverter.d.ts +9 -0
  169. package/dist/json/PolygonJsonConverter.d.ts.map +1 -0
  170. package/dist/json/PolygonJsonConverter.js +22 -0
  171. package/dist/json/PolygonJsonConverter.js.map +1 -0
  172. package/dist/json/TimeSpanJsonConverter.d.ts +9 -0
  173. package/dist/json/TimeSpanJsonConverter.d.ts.map +1 -0
  174. package/dist/json/TimeSpanJsonConverter.js +14 -0
  175. package/dist/json/TimeSpanJsonConverter.js.map +1 -0
  176. package/dist/json/ValueMapJsonConverter.d.ts +12 -0
  177. package/dist/json/ValueMapJsonConverter.d.ts.map +1 -0
  178. package/dist/json/ValueMapJsonConverter.js +28 -0
  179. package/dist/json/ValueMapJsonConverter.js.map +1 -0
  180. package/dist/json/index.d.ts +9 -0
  181. package/dist/json/index.d.ts.map +1 -0
  182. package/dist/json/index.js +9 -0
  183. package/dist/json/index.js.map +1 -0
  184. package/dist/tsconfig.tsbuildinfo +1 -1
  185. package/geospatial/LineString.ts +33 -0
  186. package/geospatial/LinearRing.ts +30 -0
  187. package/geospatial/Point.ts +36 -0
  188. package/geospatial/Polygon.ts +37 -0
  189. package/geospatial/index.ts +7 -0
  190. package/index.ts +2 -0
  191. package/json/DateJsonConverter.ts +27 -0
  192. package/json/GuidJsonConverter.ts +28 -0
  193. package/json/JsonConverter.ts +40 -0
  194. package/json/LineStringJsonConverter.ts +35 -0
  195. package/json/PointJsonConverter.ts +34 -0
  196. package/json/PolygonJsonConverter.ts +38 -0
  197. package/json/TimeSpanJsonConverter.ts +28 -0
  198. package/json/ValueMapJsonConverter.ts +57 -0
  199. package/json/for_DateJsonConverter/when_reading_date_with_date_converter.ts +12 -0
  200. package/json/for_DateJsonConverter/when_writing_date_with_date_converter.ts +12 -0
  201. package/json/for_GuidJsonConverter/when_reading_guid_with_guid_converter.ts +13 -0
  202. package/json/for_GuidJsonConverter/when_writing_guid_with_guid_converter.ts +13 -0
  203. package/json/for_LineStringJsonConverter/when_deserializing_linestring.ts +19 -0
  204. package/json/for_LineStringJsonConverter/when_reading_linestring_with_linestring_converter.ts +24 -0
  205. package/json/for_LineStringJsonConverter/when_serializing_linestring.ts +25 -0
  206. package/json/for_LineStringJsonConverter/when_writing_linestring_with_linestring_converter.ts +27 -0
  207. package/json/for_PointJsonConverter/when_deserializing_point.ts +14 -0
  208. package/json/for_PointJsonConverter/when_reading_point_with_point_converter.ts +14 -0
  209. package/json/for_PointJsonConverter/when_serializing_point.ts +17 -0
  210. package/json/for_PointJsonConverter/when_writing_point_with_point_converter.ts +16 -0
  211. package/json/for_PolygonJsonConverter/when_deserializing_polygon_with_holes.ts +28 -0
  212. package/json/for_PolygonJsonConverter/when_deserializing_polygon_with_no_holes.ts +22 -0
  213. package/json/for_PolygonJsonConverter/when_reading_polygon_with_polygon_converter.ts +27 -0
  214. package/json/for_PolygonJsonConverter/when_serializing_polygon_with_holes.ts +53 -0
  215. package/json/for_PolygonJsonConverter/when_serializing_polygon_with_no_holes.ts +33 -0
  216. package/json/for_PolygonJsonConverter/when_writing_polygon_with_polygon_converter.ts +35 -0
  217. package/json/for_TimeSpanJsonConverter/when_reading_timespan_with_timespan_converter.ts +16 -0
  218. package/json/for_TimeSpanJsonConverter/when_writing_timespan_with_timespan_converter.ts +13 -0
  219. package/json/for_ValueMapJsonConverter/when_writing_valuemap_with_valuemap_converter.ts +28 -0
  220. package/json/index.ts +11 -0
  221. package/package.json +11 -1
package/JsonSerializer.ts CHANGED
@@ -6,38 +6,53 @@ import { Constructor } from './Constructor';
6
6
  import { DerivedType } from './DerivedType';
7
7
  import { Field } from './Field';
8
8
  import { Fields } from './Fields';
9
- import { Guid } from './Guid';
10
- import { TimeSpan } from './TimeSpan';
11
9
  import { ValueMap } from './ValueMap';
10
+ import {
11
+ JsonConverter,
12
+ DateJsonConverter,
13
+ GuidJsonConverter,
14
+ TimeSpanJsonConverter,
15
+ PointJsonConverter,
16
+ LineStringJsonConverter,
17
+ PolygonJsonConverter,
18
+ ValueMapJsonConverter
19
+ } from './json';
12
20
 
13
21
  /* eslint-disable @typescript-eslint/no-explicit-any */
14
22
 
15
23
  type typeSerializer = (value: any) => any;
16
24
 
17
- const typeConverters: Map<Constructor, typeSerializer> = new Map<Constructor, typeSerializer>([
25
+ // Initialize converters
26
+ const converters: JsonConverter[] = [
27
+ new DateJsonConverter(),
28
+ new GuidJsonConverter(),
29
+ new TimeSpanJsonConverter(),
30
+ new PointJsonConverter(),
31
+ new LineStringJsonConverter(),
32
+ new PolygonJsonConverter(),
33
+ new ValueMapJsonConverter()
34
+ ];
35
+
36
+ // Build converter maps from the converters
37
+ const typeConverters: Map<Constructor, JsonConverter> = new Map<Constructor, JsonConverter>();
38
+ const typeSerializers: Map<Constructor, JsonConverter> = new Map<Constructor, JsonConverter>();
39
+
40
+ for (const converter of converters) {
41
+ typeConverters.set(converter.type, converter);
42
+ typeSerializers.set(converter.type, converter);
43
+ }
44
+
45
+ // Add primitive type converters that don't need a full JsonConverter class
46
+ const primitiveConverters: Map<Constructor, typeSerializer> = new Map<Constructor, typeSerializer>([
18
47
  [Number, (value: number) => value],
19
48
  [String, (value: string) => value],
20
- [Boolean, (value: boolean) => value],
21
- [Date, (value: Date) => value.toISOString()],
22
- [Guid, (value: Guid) => value?.toString() ?? ''],
23
- [TimeSpan, (value: TimeSpan) => value?.toString() ?? ''],
24
- [ValueMap, (value: ValueMap<any, any>) => {
25
- const converted: any = {};
26
- for (const [key, mapValue] of value.entries()) {
27
- converted[serializeMapKey(key)] = convertTypesOnInstance(mapValue);
28
- }
29
-
30
- return converted;
31
- }]
49
+ [Boolean, (value: boolean) => value]
32
50
  ]);
33
51
 
34
- const typeSerializers: Map<Constructor, typeSerializer> = new Map<Constructor, typeSerializer>([
52
+ const primitiveSerializers: Map<Constructor, typeSerializer> = new Map<Constructor, typeSerializer>([
35
53
  [Number, (value: any) => value],
36
54
  [String, (value: any) => value],
37
- [Boolean, (value: any) => value],
38
- [Date, (value: any) => new Date(value)],
39
- [Guid, (value: any) => Guid.parse(value.toString())],
40
- [TimeSpan, (value: any) => TimeSpan.parse(value.toString())],
55
+ [Boolean, (value: any) => value]
41
56
  ]);
42
57
 
43
58
  /**
@@ -72,11 +87,18 @@ const serializeValueForType = (type: Constructor, value: any) => {
72
87
  return serializeValueForType(innerValue.constructor, innerValue);
73
88
  }
74
89
 
90
+ // Check if there's a registered converter
75
91
  if (typeConverters.has(type)) {
76
- return typeConverters.get(type)!(value);
77
- } else {
78
- return convertTypesOnInstance(value);
92
+ const converter = typeConverters.get(type)!;
93
+ return converter.write(value);
94
+ }
95
+
96
+ // Check primitive converters
97
+ if (primitiveConverters.has(type)) {
98
+ return primitiveConverters.get(type)!(value);
79
99
  }
100
+
101
+ return convertTypesOnInstance(value);
80
102
  };
81
103
 
82
104
  const deserializeValueFromType = (type: Constructor, value: any) => {
@@ -85,11 +107,18 @@ const deserializeValueFromType = (type: Constructor, value: any) => {
85
107
  return new type(value);
86
108
  }
87
109
 
110
+ // Check if there's a registered converter
88
111
  if (typeSerializers.has(type)) {
89
- return typeSerializers.get(type)!(value);
90
- } else {
91
- return JsonSerializer.deserialize(type, JSON.stringify(value));
112
+ const converter = typeSerializers.get(type)!;
113
+ return converter.read(value);
114
+ }
115
+
116
+ // Check primitive serializers
117
+ if (primitiveSerializers.has(type)) {
118
+ return primitiveSerializers.get(type)!(value);
92
119
  }
120
+
121
+ return JsonSerializer.deserialize(type, JSON.stringify(value));
93
122
  };
94
123
 
95
124
  const deserializeValueFromField = (field: Field, value: any) => {
@@ -102,18 +131,25 @@ const deserializeValueFromField = (field: Field, value: any) => {
102
131
  return new field.type(value);
103
132
  }
104
133
 
134
+ // Check if there's a registered converter
105
135
  if (typeSerializers.has(field.type)) {
106
- return typeSerializers.get(field.type)!(value);
107
- } else {
108
- let type = field.type;
109
- if (value[JsonSerializer.DerivedTypeIdProperty]) {
110
- const derivedTypeId = value[JsonSerializer.DerivedTypeIdProperty];
111
- const candidates = [...field.derivatives, ...DerivedType.getDerivedTypesFor(field.type)];
112
- type = candidates.find(_ => DerivedType.get(_) == derivedTypeId) || type;
113
- }
114
-
115
- return JsonSerializer.deserialize(type, JSON.stringify(value));
136
+ const converter = typeSerializers.get(field.type)!;
137
+ return converter.read(value);
138
+ }
139
+
140
+ // Check primitive serializers
141
+ if (primitiveSerializers.has(field.type)) {
142
+ return primitiveSerializers.get(field.type)!(value);
116
143
  }
144
+
145
+ let type = field.type;
146
+ if (value[JsonSerializer.DerivedTypeIdProperty]) {
147
+ const derivedTypeId = value[JsonSerializer.DerivedTypeIdProperty];
148
+ const candidates = [...field.derivatives, ...DerivedType.getDerivedTypesFor(field.type)];
149
+ type = candidates.find(_ => DerivedType.get(_) == derivedTypeId) || type;
150
+ }
151
+
152
+ return JsonSerializer.deserialize(type, JSON.stringify(value));
117
153
  };
118
154
 
119
155
  const serializeMapKey = (key: any): string => {
@@ -149,12 +185,10 @@ const deserializeMapKey = (keyType: Constructor, key: string): any => {
149
185
  return key.toLowerCase() === 'true';
150
186
  }
151
187
 
152
- if (keyType === Date) {
153
- return new Date(key);
154
- }
155
-
188
+ // Check if there's a converter for this type
156
189
  if (typeSerializers.has(keyType)) {
157
- return typeSerializers.get(keyType)!(key);
190
+ const converter = typeSerializers.get(keyType)!;
191
+ return converter.read(key);
158
192
  }
159
193
 
160
194
  return JsonSerializer.deserialize(keyType, key);
@@ -165,8 +199,10 @@ const deserializeMapValue = (valueType: Constructor | undefined, value: any): an
165
199
  return value;
166
200
  }
167
201
 
202
+ // Check if there's a converter for this type
168
203
  if (typeSerializers.has(valueType)) {
169
- return typeSerializers.get(valueType)!(value);
204
+ const converter = typeSerializers.get(valueType)!;
205
+ return converter.read(value);
170
206
  }
171
207
 
172
208
  return JsonSerializer.deserialize(valueType, JSON.stringify(value));
@@ -191,9 +227,15 @@ const deserializeValueMapFromField = (field: Field, value: any): ValueMap<any, a
191
227
  };
192
228
 
193
229
  const convertTypesOnInstance = (instance: any) => {
230
+ // Check if there's a converter for this type
194
231
  if (typeConverters.has(instance.constructor)) {
195
232
  return serializeValueForType(instance.constructor, instance);
196
233
  }
234
+
235
+ // Check primitive converters
236
+ if (primitiveConverters.has(instance.constructor)) {
237
+ return primitiveConverters.get(instance.constructor)!(instance);
238
+ }
197
239
 
198
240
  const properties = Object.getOwnPropertyNames(instance);
199
241
  const converted: any = {};
@@ -218,6 +260,10 @@ const convertTypesOnInstance = (instance: any) => {
218
260
  return converted;
219
261
  };
220
262
 
263
+ // Initialize ValueMapJsonConverter with helper functions to avoid circular dependencies
264
+ // Must be done after serializeMapKey and convertTypesOnInstance are defined
265
+ ValueMapJsonConverter.setHelpers(serializeMapKey, convertTypesOnInstance);
266
+
221
267
  /**
222
268
  * Represents a serializer for JSON.
223
269
  */
package/README.md CHANGED
@@ -21,6 +21,16 @@ You should look at it as a convenience layer on top of the existing base environ
21
21
 
22
22
  Read more about how to use it in our documentation.
23
23
 
24
+ ## Support
25
+
26
+ Cratis is an open community, and we are glad to help users, teams evaluating the stack, and contributors.
27
+
28
+ | Channel | Details |
29
+ |---|---|
30
+ | Discord | Join the community on [Discord](https://discord.gg/kt4AMpV8WV) for questions and discussions |
31
+ | GitHub Issues | [Report bugs or request features](https://github.com/Cratis/Fundamentals/issues) |
32
+ | Documentation | Read the docs at [cratis.io](https://cratis.io) |
33
+
24
34
  ## Contributing
25
35
 
26
36
  If you want to jump into building this repository and possibly contributing, please refer to [contributing](./Documentation/contributing/index.md).
@@ -1 +1 @@
1
- {"version":3,"file":"JsonSerializer.d.ts","sourceRoot":"","sources":["../JsonSerializer.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AA2N5C,qBAAa,cAAc;IACvB,MAAM,CAAC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAoB;IAOjE,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM;IAWpC,MAAM,CAAC,WAAW,CAAC,OAAO,SAAS,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAWnG,MAAM,CAAC,gBAAgB,CAAC,OAAO,SAAS,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,EAAE;IAW1G,MAAM,CAAC,uBAAuB,CAAC,OAAO,SAAS,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,GAAG,GAAG,OAAO;IAwChH,MAAM,CAAC,4BAA4B,CAAC,OAAO,SAAS,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,GAAG,GAAG,OAAO,EAAE;CAS3H"}
1
+ {"version":3,"file":"JsonSerializer.d.ts","sourceRoot":"","sources":["../JsonSerializer.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAyQ5C,qBAAa,cAAc;IACvB,MAAM,CAAC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAoB;IAOjE,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM;IAWpC,MAAM,CAAC,WAAW,CAAC,OAAO,SAAS,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAWnG,MAAM,CAAC,gBAAgB,CAAC,OAAO,SAAS,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,EAAE;IAW1G,MAAM,CAAC,uBAAuB,CAAC,OAAO,SAAS,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,GAAG,GAAG,OAAO;IAwChH,MAAM,CAAC,4BAA4B,CAAC,OAAO,SAAS,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,GAAG,GAAG,OAAO,EAAE;CAS3H"}
@@ -1,31 +1,32 @@
1
1
  import { ConceptAs } from './ConceptAs';
2
2
  import { DerivedType } from './DerivedType';
3
3
  import { Fields } from './Fields';
4
- import { Guid } from './Guid';
5
- import { TimeSpan } from './TimeSpan';
6
4
  import { ValueMap } from './ValueMap';
7
- const typeConverters = new Map([
5
+ import { DateJsonConverter, GuidJsonConverter, TimeSpanJsonConverter, PointJsonConverter, LineStringJsonConverter, PolygonJsonConverter, ValueMapJsonConverter } from './json';
6
+ const converters = [
7
+ new DateJsonConverter(),
8
+ new GuidJsonConverter(),
9
+ new TimeSpanJsonConverter(),
10
+ new PointJsonConverter(),
11
+ new LineStringJsonConverter(),
12
+ new PolygonJsonConverter(),
13
+ new ValueMapJsonConverter()
14
+ ];
15
+ const typeConverters = new Map();
16
+ const typeSerializers = new Map();
17
+ for (const converter of converters) {
18
+ typeConverters.set(converter.type, converter);
19
+ typeSerializers.set(converter.type, converter);
20
+ }
21
+ const primitiveConverters = new Map([
8
22
  [Number, (value) => value],
9
23
  [String, (value) => value],
10
- [Boolean, (value) => value],
11
- [Date, (value) => value.toISOString()],
12
- [Guid, (value) => value?.toString() ?? ''],
13
- [TimeSpan, (value) => value?.toString() ?? ''],
14
- [ValueMap, (value) => {
15
- const converted = {};
16
- for (const [key, mapValue] of value.entries()) {
17
- converted[serializeMapKey(key)] = convertTypesOnInstance(mapValue);
18
- }
19
- return converted;
20
- }]
24
+ [Boolean, (value) => value]
21
25
  ]);
22
- const typeSerializers = new Map([
26
+ const primitiveSerializers = new Map([
23
27
  [Number, (value) => value],
24
28
  [String, (value) => value],
25
- [Boolean, (value) => value],
26
- [Date, (value) => new Date(value)],
27
- [Guid, (value) => Guid.parse(value.toString())],
28
- [TimeSpan, (value) => TimeSpan.parse(value.toString())],
29
+ [Boolean, (value) => value]
29
30
  ]);
30
31
  const isConceptAs = (type) => {
31
32
  if (!type || !type.prototype)
@@ -47,22 +48,26 @@ const serializeValueForType = (type, value) => {
47
48
  return serializeValueForType(innerValue.constructor, innerValue);
48
49
  }
49
50
  if (typeConverters.has(type)) {
50
- return typeConverters.get(type)(value);
51
+ const converter = typeConverters.get(type);
52
+ return converter.write(value);
51
53
  }
52
- else {
53
- return convertTypesOnInstance(value);
54
+ if (primitiveConverters.has(type)) {
55
+ return primitiveConverters.get(type)(value);
54
56
  }
57
+ return convertTypesOnInstance(value);
55
58
  };
56
59
  const deserializeValueFromType = (type, value) => {
57
60
  if (isConceptAs(type)) {
58
61
  return new type(value);
59
62
  }
60
63
  if (typeSerializers.has(type)) {
61
- return typeSerializers.get(type)(value);
64
+ const converter = typeSerializers.get(type);
65
+ return converter.read(value);
62
66
  }
63
- else {
64
- return JsonSerializer.deserialize(type, JSON.stringify(value));
67
+ if (primitiveSerializers.has(type)) {
68
+ return primitiveSerializers.get(type)(value);
65
69
  }
70
+ return JsonSerializer.deserialize(type, JSON.stringify(value));
66
71
  };
67
72
  const deserializeValueFromField = (field, value) => {
68
73
  if (field.type === ValueMap) {
@@ -72,17 +77,19 @@ const deserializeValueFromField = (field, value) => {
72
77
  return new field.type(value);
73
78
  }
74
79
  if (typeSerializers.has(field.type)) {
75
- return typeSerializers.get(field.type)(value);
76
- }
77
- else {
78
- let type = field.type;
79
- if (value[JsonSerializer.DerivedTypeIdProperty]) {
80
- const derivedTypeId = value[JsonSerializer.DerivedTypeIdProperty];
81
- const candidates = [...field.derivatives, ...DerivedType.getDerivedTypesFor(field.type)];
82
- type = candidates.find(_ => DerivedType.get(_) == derivedTypeId) || type;
83
- }
84
- return JsonSerializer.deserialize(type, JSON.stringify(value));
80
+ const converter = typeSerializers.get(field.type);
81
+ return converter.read(value);
82
+ }
83
+ if (primitiveSerializers.has(field.type)) {
84
+ return primitiveSerializers.get(field.type)(value);
85
85
  }
86
+ let type = field.type;
87
+ if (value[JsonSerializer.DerivedTypeIdProperty]) {
88
+ const derivedTypeId = value[JsonSerializer.DerivedTypeIdProperty];
89
+ const candidates = [...field.derivatives, ...DerivedType.getDerivedTypesFor(field.type)];
90
+ type = candidates.find(_ => DerivedType.get(_) == derivedTypeId) || type;
91
+ }
92
+ return JsonSerializer.deserialize(type, JSON.stringify(value));
86
93
  };
87
94
  const serializeMapKey = (key) => {
88
95
  if (key === undefined || key === null) {
@@ -109,11 +116,9 @@ const deserializeMapKey = (keyType, key) => {
109
116
  if (keyType === Boolean) {
110
117
  return key.toLowerCase() === 'true';
111
118
  }
112
- if (keyType === Date) {
113
- return new Date(key);
114
- }
115
119
  if (typeSerializers.has(keyType)) {
116
- return typeSerializers.get(keyType)(key);
120
+ const converter = typeSerializers.get(keyType);
121
+ return converter.read(key);
117
122
  }
118
123
  return JsonSerializer.deserialize(keyType, key);
119
124
  };
@@ -122,7 +127,8 @@ const deserializeMapValue = (valueType, value) => {
122
127
  return value;
123
128
  }
124
129
  if (typeSerializers.has(valueType)) {
125
- return typeSerializers.get(valueType)(value);
130
+ const converter = typeSerializers.get(valueType);
131
+ return converter.read(value);
126
132
  }
127
133
  return JsonSerializer.deserialize(valueType, JSON.stringify(value));
128
134
  };
@@ -144,6 +150,9 @@ const convertTypesOnInstance = (instance) => {
144
150
  if (typeConverters.has(instance.constructor)) {
145
151
  return serializeValueForType(instance.constructor, instance);
146
152
  }
153
+ if (primitiveConverters.has(instance.constructor)) {
154
+ return primitiveConverters.get(instance.constructor)(instance);
155
+ }
147
156
  const properties = Object.getOwnPropertyNames(instance);
148
157
  const converted = {};
149
158
  const derivedTypeId = DerivedType.get(instance.constructor);
@@ -164,6 +173,7 @@ const convertTypesOnInstance = (instance) => {
164
173
  });
165
174
  return converted;
166
175
  };
176
+ ValueMapJsonConverter.setHelpers(serializeMapKey, convertTypesOnInstance);
167
177
  export class JsonSerializer {
168
178
  static DerivedTypeIdProperty = "_derivedTypeId";
169
179
  static serialize(value) {
@@ -1 +1 @@
1
- {"version":3,"file":"JsonSerializer.js","sourceRoot":"","sources":["../JsonSerializer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"JsonSerializer.js","sourceRoot":"","sources":["../JsonSerializer.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"JsonSerializer.d.ts","sourceRoot":"","sources":["../../JsonSerializer.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AA2N5C,qBAAa,cAAc;IACvB,MAAM,CAAC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAoB;IAOjE,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM;IAWpC,MAAM,CAAC,WAAW,CAAC,OAAO,SAAS,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAWnG,MAAM,CAAC,gBAAgB,CAAC,OAAO,SAAS,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,EAAE;IAW1G,MAAM,CAAC,uBAAuB,CAAC,OAAO,SAAS,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,GAAG,GAAG,OAAO;IAwChH,MAAM,CAAC,4BAA4B,CAAC,OAAO,SAAS,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,GAAG,GAAG,OAAO,EAAE;CAS3H"}
1
+ {"version":3,"file":"JsonSerializer.d.ts","sourceRoot":"","sources":["../../JsonSerializer.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAyQ5C,qBAAa,cAAc;IACvB,MAAM,CAAC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAoB;IAOjE,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM;IAWpC,MAAM,CAAC,WAAW,CAAC,OAAO,SAAS,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAWnG,MAAM,CAAC,gBAAgB,CAAC,OAAO,SAAS,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,EAAE;IAW1G,MAAM,CAAC,uBAAuB,CAAC,OAAO,SAAS,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,GAAG,GAAG,OAAO;IAwChH,MAAM,CAAC,4BAA4B,CAAC,OAAO,SAAS,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,GAAG,GAAG,OAAO,EAAE;CAS3H"}
@@ -3,32 +3,39 @@
3
3
  var ConceptAs = require('./ConceptAs.js');
4
4
  var DerivedType = require('./DerivedType.js');
5
5
  var Fields = require('./Fields.js');
6
- var Guid = require('./Guid.js');
7
- var TimeSpan = require('./TimeSpan.js');
8
6
  var ValueMap = require('./ValueMap.js');
7
+ var DateJsonConverter = require('./json/DateJsonConverter.js');
8
+ var GuidJsonConverter = require('./json/GuidJsonConverter.js');
9
+ var TimeSpanJsonConverter = require('./json/TimeSpanJsonConverter.js');
10
+ var PointJsonConverter = require('./json/PointJsonConverter.js');
11
+ var LineStringJsonConverter = require('./json/LineStringJsonConverter.js');
12
+ var PolygonJsonConverter = require('./json/PolygonJsonConverter.js');
13
+ var ValueMapJsonConverter = require('./json/ValueMapJsonConverter.js');
9
14
 
10
- const typeConverters = new Map([
15
+ const converters = [
16
+ new DateJsonConverter.DateJsonConverter(),
17
+ new GuidJsonConverter.GuidJsonConverter(),
18
+ new TimeSpanJsonConverter.TimeSpanJsonConverter(),
19
+ new PointJsonConverter.PointJsonConverter(),
20
+ new LineStringJsonConverter.LineStringJsonConverter(),
21
+ new PolygonJsonConverter.PolygonJsonConverter(),
22
+ new ValueMapJsonConverter.ValueMapJsonConverter()
23
+ ];
24
+ const typeConverters = new Map();
25
+ const typeSerializers = new Map();
26
+ for (const converter of converters) {
27
+ typeConverters.set(converter.type, converter);
28
+ typeSerializers.set(converter.type, converter);
29
+ }
30
+ const primitiveConverters = new Map([
11
31
  [Number, (value) => value],
12
32
  [String, (value) => value],
13
- [Boolean, (value) => value],
14
- [Date, (value) => value.toISOString()],
15
- [Guid.Guid, (value) => value?.toString() ?? ''],
16
- [TimeSpan.TimeSpan, (value) => value?.toString() ?? ''],
17
- [ValueMap.ValueMap, (value) => {
18
- const converted = {};
19
- for (const [key, mapValue] of value.entries()) {
20
- converted[serializeMapKey(key)] = convertTypesOnInstance(mapValue);
21
- }
22
- return converted;
23
- }]
33
+ [Boolean, (value) => value]
24
34
  ]);
25
- const typeSerializers = new Map([
35
+ const primitiveSerializers = new Map([
26
36
  [Number, (value) => value],
27
37
  [String, (value) => value],
28
- [Boolean, (value) => value],
29
- [Date, (value) => new Date(value)],
30
- [Guid.Guid, (value) => Guid.Guid.parse(value.toString())],
31
- [TimeSpan.TimeSpan, (value) => TimeSpan.TimeSpan.parse(value.toString())],
38
+ [Boolean, (value) => value]
32
39
  ]);
33
40
  const isConceptAs = (type) => {
34
41
  if (!type || !type.prototype)
@@ -50,22 +57,26 @@ const serializeValueForType = (type, value) => {
50
57
  return serializeValueForType(innerValue.constructor, innerValue);
51
58
  }
52
59
  if (typeConverters.has(type)) {
53
- return typeConverters.get(type)(value);
60
+ const converter = typeConverters.get(type);
61
+ return converter.write(value);
54
62
  }
55
- else {
56
- return convertTypesOnInstance(value);
63
+ if (primitiveConverters.has(type)) {
64
+ return primitiveConverters.get(type)(value);
57
65
  }
66
+ return convertTypesOnInstance(value);
58
67
  };
59
68
  const deserializeValueFromType = (type, value) => {
60
69
  if (isConceptAs(type)) {
61
70
  return new type(value);
62
71
  }
63
72
  if (typeSerializers.has(type)) {
64
- return typeSerializers.get(type)(value);
73
+ const converter = typeSerializers.get(type);
74
+ return converter.read(value);
65
75
  }
66
- else {
67
- return JsonSerializer.deserialize(type, JSON.stringify(value));
76
+ if (primitiveSerializers.has(type)) {
77
+ return primitiveSerializers.get(type)(value);
68
78
  }
79
+ return JsonSerializer.deserialize(type, JSON.stringify(value));
69
80
  };
70
81
  const deserializeValueFromField = (field, value) => {
71
82
  if (field.type === ValueMap.ValueMap) {
@@ -75,17 +86,19 @@ const deserializeValueFromField = (field, value) => {
75
86
  return new field.type(value);
76
87
  }
77
88
  if (typeSerializers.has(field.type)) {
78
- return typeSerializers.get(field.type)(value);
79
- }
80
- else {
81
- let type = field.type;
82
- if (value[JsonSerializer.DerivedTypeIdProperty]) {
83
- const derivedTypeId = value[JsonSerializer.DerivedTypeIdProperty];
84
- const candidates = [...field.derivatives, ...DerivedType.DerivedType.getDerivedTypesFor(field.type)];
85
- type = candidates.find(_ => DerivedType.DerivedType.get(_) == derivedTypeId) || type;
86
- }
87
- return JsonSerializer.deserialize(type, JSON.stringify(value));
89
+ const converter = typeSerializers.get(field.type);
90
+ return converter.read(value);
91
+ }
92
+ if (primitiveSerializers.has(field.type)) {
93
+ return primitiveSerializers.get(field.type)(value);
88
94
  }
95
+ let type = field.type;
96
+ if (value[JsonSerializer.DerivedTypeIdProperty]) {
97
+ const derivedTypeId = value[JsonSerializer.DerivedTypeIdProperty];
98
+ const candidates = [...field.derivatives, ...DerivedType.DerivedType.getDerivedTypesFor(field.type)];
99
+ type = candidates.find(_ => DerivedType.DerivedType.get(_) == derivedTypeId) || type;
100
+ }
101
+ return JsonSerializer.deserialize(type, JSON.stringify(value));
89
102
  };
90
103
  const serializeMapKey = (key) => {
91
104
  if (key === undefined || key === null) {
@@ -112,11 +125,9 @@ const deserializeMapKey = (keyType, key) => {
112
125
  if (keyType === Boolean) {
113
126
  return key.toLowerCase() === 'true';
114
127
  }
115
- if (keyType === Date) {
116
- return new Date(key);
117
- }
118
128
  if (typeSerializers.has(keyType)) {
119
- return typeSerializers.get(keyType)(key);
129
+ const converter = typeSerializers.get(keyType);
130
+ return converter.read(key);
120
131
  }
121
132
  return JsonSerializer.deserialize(keyType, key);
122
133
  };
@@ -125,7 +136,8 @@ const deserializeMapValue = (valueType, value) => {
125
136
  return value;
126
137
  }
127
138
  if (typeSerializers.has(valueType)) {
128
- return typeSerializers.get(valueType)(value);
139
+ const converter = typeSerializers.get(valueType);
140
+ return converter.read(value);
129
141
  }
130
142
  return JsonSerializer.deserialize(valueType, JSON.stringify(value));
131
143
  };
@@ -147,6 +159,9 @@ const convertTypesOnInstance = (instance) => {
147
159
  if (typeConverters.has(instance.constructor)) {
148
160
  return serializeValueForType(instance.constructor, instance);
149
161
  }
162
+ if (primitiveConverters.has(instance.constructor)) {
163
+ return primitiveConverters.get(instance.constructor)(instance);
164
+ }
150
165
  const properties = Object.getOwnPropertyNames(instance);
151
166
  const converted = {};
152
167
  const derivedTypeId = DerivedType.DerivedType.get(instance.constructor);
@@ -167,6 +182,7 @@ const convertTypesOnInstance = (instance) => {
167
182
  });
168
183
  return converted;
169
184
  };
185
+ ValueMapJsonConverter.ValueMapJsonConverter.setHelpers(serializeMapKey, convertTypesOnInstance);
170
186
  class JsonSerializer {
171
187
  static DerivedTypeIdProperty = "_derivedTypeId";
172
188
  static serialize(value) {