@cratis/fundamentals 7.15.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 (237) hide show
  1. package/JsonSerializer.ts +88 -56
  2. package/dist/JsonSerializer.d.ts.map +1 -1
  3. package/dist/JsonSerializer.js +50 -54
  4. package/dist/JsonSerializer.js.map +1 -1
  5. package/dist/cjs/JsonSerializer.d.ts.map +1 -1
  6. package/dist/cjs/JsonSerializer.js +56 -54
  7. package/dist/cjs/JsonSerializer.js.map +1 -1
  8. package/dist/cjs/geospatial/LineString.d.ts +7 -0
  9. package/dist/cjs/geospatial/LineString.d.ts.map +1 -0
  10. package/dist/cjs/geospatial/LineString.js +20 -0
  11. package/dist/cjs/geospatial/LineString.js.map +1 -0
  12. package/dist/cjs/geospatial/LinearRing.d.ts +7 -0
  13. package/dist/cjs/geospatial/LinearRing.d.ts.map +1 -0
  14. package/dist/cjs/geospatial/LinearRing.js +17 -0
  15. package/dist/cjs/geospatial/LinearRing.js.map +1 -0
  16. package/dist/cjs/geospatial/Point.d.ts +7 -0
  17. package/dist/cjs/geospatial/Point.d.ts.map +1 -0
  18. package/dist/cjs/geospatial/Point.js +30 -0
  19. package/dist/cjs/geospatial/Point.js.map +1 -0
  20. package/dist/cjs/geospatial/Polygon.d.ts +8 -0
  21. package/dist/cjs/geospatial/Polygon.d.ts.map +1 -0
  22. package/dist/cjs/geospatial/Polygon.js +23 -0
  23. package/dist/cjs/geospatial/Polygon.js.map +1 -0
  24. package/dist/cjs/geospatial/index.d.ts +5 -0
  25. package/dist/cjs/geospatial/index.d.ts.map +1 -0
  26. package/dist/cjs/index.d.ts +2 -1
  27. package/dist/cjs/index.d.ts.map +1 -1
  28. package/dist/cjs/index.js +24 -2
  29. package/dist/cjs/index.js.map +1 -1
  30. package/dist/cjs/json/DateJsonConverter.d.ts +8 -0
  31. package/dist/cjs/json/DateJsonConverter.d.ts.map +1 -0
  32. package/dist/cjs/json/DateJsonConverter.js +18 -0
  33. package/dist/cjs/json/DateJsonConverter.js.map +1 -0
  34. package/dist/cjs/json/GuidJsonConverter.d.ts +9 -0
  35. package/dist/cjs/json/GuidJsonConverter.d.ts.map +1 -0
  36. package/dist/cjs/json/GuidJsonConverter.js +19 -0
  37. package/dist/cjs/json/GuidJsonConverter.js.map +1 -0
  38. package/dist/cjs/json/JsonConverter.d.ts +8 -0
  39. package/dist/cjs/json/JsonConverter.d.ts.map +1 -0
  40. package/dist/cjs/json/JsonConverter.js +10 -0
  41. package/dist/cjs/json/JsonConverter.js.map +1 -0
  42. package/dist/cjs/json/LineStringJsonConverter.d.ts +9 -0
  43. package/dist/cjs/json/LineStringJsonConverter.d.ts.map +1 -0
  44. package/dist/cjs/json/LineStringJsonConverter.js +27 -0
  45. package/dist/cjs/json/LineStringJsonConverter.js.map +1 -0
  46. package/dist/cjs/json/PointJsonConverter.d.ts +9 -0
  47. package/dist/cjs/json/PointJsonConverter.d.ts.map +1 -0
  48. package/dist/cjs/json/PointJsonConverter.js +25 -0
  49. package/dist/cjs/json/PointJsonConverter.js.map +1 -0
  50. package/dist/cjs/json/PolygonJsonConverter.d.ts +9 -0
  51. package/dist/cjs/json/PolygonJsonConverter.d.ts.map +1 -0
  52. package/dist/cjs/json/PolygonJsonConverter.js +29 -0
  53. package/dist/cjs/json/PolygonJsonConverter.js.map +1 -0
  54. package/dist/cjs/json/TimeSpanJsonConverter.d.ts +9 -0
  55. package/dist/cjs/json/TimeSpanJsonConverter.d.ts.map +1 -0
  56. package/dist/cjs/json/TimeSpanJsonConverter.js +19 -0
  57. package/dist/cjs/json/TimeSpanJsonConverter.js.map +1 -0
  58. package/dist/cjs/json/ValueMapJsonConverter.d.ts +12 -0
  59. package/dist/cjs/json/ValueMapJsonConverter.d.ts.map +1 -0
  60. package/dist/cjs/json/ValueMapJsonConverter.js +33 -0
  61. package/dist/cjs/json/ValueMapJsonConverter.js.map +1 -0
  62. package/dist/cjs/json/index.d.ts +9 -0
  63. package/dist/cjs/json/index.d.ts.map +1 -0
  64. package/dist/esm/JsonSerializer.d.ts.map +1 -1
  65. package/dist/esm/JsonSerializer.js +56 -54
  66. package/dist/esm/JsonSerializer.js.map +1 -1
  67. package/dist/esm/geospatial/LineString.d.ts +7 -0
  68. package/dist/esm/geospatial/LineString.d.ts.map +1 -0
  69. package/dist/esm/geospatial/LineString.js +18 -0
  70. package/dist/esm/geospatial/LineString.js.map +1 -0
  71. package/dist/esm/geospatial/LinearRing.d.ts +7 -0
  72. package/dist/esm/geospatial/LinearRing.d.ts.map +1 -0
  73. package/dist/esm/geospatial/LinearRing.js +15 -0
  74. package/dist/esm/geospatial/LinearRing.js.map +1 -0
  75. package/dist/esm/geospatial/Point.d.ts +7 -0
  76. package/dist/esm/geospatial/Point.d.ts.map +1 -0
  77. package/dist/esm/geospatial/Point.js +28 -0
  78. package/dist/esm/geospatial/Point.js.map +1 -0
  79. package/dist/esm/geospatial/Polygon.d.ts +8 -0
  80. package/dist/esm/geospatial/Polygon.d.ts.map +1 -0
  81. package/dist/esm/geospatial/Polygon.js +21 -0
  82. package/dist/esm/geospatial/Polygon.js.map +1 -0
  83. package/dist/esm/geospatial/index.d.ts +5 -0
  84. package/dist/esm/geospatial/index.d.ts.map +1 -0
  85. package/dist/esm/index.d.ts +2 -1
  86. package/dist/esm/index.d.ts.map +1 -1
  87. package/dist/esm/index.js +12 -1
  88. package/dist/esm/index.js.map +1 -1
  89. package/dist/esm/json/DateJsonConverter.d.ts +8 -0
  90. package/dist/esm/json/DateJsonConverter.d.ts.map +1 -0
  91. package/dist/esm/json/DateJsonConverter.js +16 -0
  92. package/dist/esm/json/DateJsonConverter.js.map +1 -0
  93. package/dist/esm/json/GuidJsonConverter.d.ts +9 -0
  94. package/dist/esm/json/GuidJsonConverter.d.ts.map +1 -0
  95. package/dist/esm/json/GuidJsonConverter.js +17 -0
  96. package/dist/esm/json/GuidJsonConverter.js.map +1 -0
  97. package/dist/esm/json/JsonConverter.d.ts +8 -0
  98. package/dist/esm/json/JsonConverter.d.ts.map +1 -0
  99. package/dist/esm/json/JsonConverter.js +8 -0
  100. package/dist/esm/json/JsonConverter.js.map +1 -0
  101. package/dist/esm/json/LineStringJsonConverter.d.ts +9 -0
  102. package/dist/esm/json/LineStringJsonConverter.d.ts.map +1 -0
  103. package/dist/esm/json/LineStringJsonConverter.js +25 -0
  104. package/dist/esm/json/LineStringJsonConverter.js.map +1 -0
  105. package/dist/esm/json/PointJsonConverter.d.ts +9 -0
  106. package/dist/esm/json/PointJsonConverter.d.ts.map +1 -0
  107. package/dist/esm/json/PointJsonConverter.js +23 -0
  108. package/dist/esm/json/PointJsonConverter.js.map +1 -0
  109. package/dist/esm/json/PolygonJsonConverter.d.ts +9 -0
  110. package/dist/esm/json/PolygonJsonConverter.d.ts.map +1 -0
  111. package/dist/esm/json/PolygonJsonConverter.js +27 -0
  112. package/dist/esm/json/PolygonJsonConverter.js.map +1 -0
  113. package/dist/esm/json/TimeSpanJsonConverter.d.ts +9 -0
  114. package/dist/esm/json/TimeSpanJsonConverter.d.ts.map +1 -0
  115. package/dist/esm/json/TimeSpanJsonConverter.js +17 -0
  116. package/dist/esm/json/TimeSpanJsonConverter.js.map +1 -0
  117. package/dist/esm/json/ValueMapJsonConverter.d.ts +12 -0
  118. package/dist/esm/json/ValueMapJsonConverter.d.ts.map +1 -0
  119. package/dist/esm/json/ValueMapJsonConverter.js +31 -0
  120. package/dist/esm/json/ValueMapJsonConverter.js.map +1 -0
  121. package/dist/esm/json/index.d.ts +9 -0
  122. package/dist/esm/json/index.d.ts.map +1 -0
  123. package/dist/geospatial/LineString.d.ts +7 -0
  124. package/dist/geospatial/LineString.d.ts.map +1 -0
  125. package/dist/geospatial/LineString.js +16 -0
  126. package/dist/geospatial/LineString.js.map +1 -0
  127. package/dist/geospatial/LinearRing.d.ts +7 -0
  128. package/dist/geospatial/LinearRing.d.ts.map +1 -0
  129. package/dist/geospatial/LinearRing.js +13 -0
  130. package/dist/geospatial/LinearRing.js.map +1 -0
  131. package/dist/geospatial/Point.d.ts +7 -0
  132. package/dist/geospatial/Point.d.ts.map +1 -0
  133. package/dist/geospatial/Point.js +25 -0
  134. package/dist/geospatial/Point.js.map +1 -0
  135. package/dist/geospatial/Polygon.d.ts +8 -0
  136. package/dist/geospatial/Polygon.d.ts.map +1 -0
  137. package/dist/geospatial/Polygon.js +19 -0
  138. package/dist/geospatial/Polygon.js.map +1 -0
  139. package/dist/geospatial/index.d.ts +5 -0
  140. package/dist/geospatial/index.d.ts.map +1 -0
  141. package/dist/geospatial/index.js +5 -0
  142. package/dist/geospatial/index.js.map +1 -0
  143. package/dist/index.d.ts +2 -1
  144. package/dist/index.d.ts.map +1 -1
  145. package/dist/index.js +2 -1
  146. package/dist/index.js.map +1 -1
  147. package/dist/json/DateJsonConverter.d.ts +8 -0
  148. package/dist/json/DateJsonConverter.d.ts.map +1 -0
  149. package/dist/json/DateJsonConverter.js +13 -0
  150. package/dist/json/DateJsonConverter.js.map +1 -0
  151. package/dist/json/GuidJsonConverter.d.ts +9 -0
  152. package/dist/json/GuidJsonConverter.d.ts.map +1 -0
  153. package/dist/json/GuidJsonConverter.js +14 -0
  154. package/dist/json/GuidJsonConverter.js.map +1 -0
  155. package/dist/json/JsonConverter.d.ts +8 -0
  156. package/dist/json/JsonConverter.d.ts.map +1 -0
  157. package/dist/json/JsonConverter.js +6 -0
  158. package/dist/json/JsonConverter.js.map +1 -0
  159. package/dist/json/LineStringJsonConverter.d.ts +9 -0
  160. package/dist/json/LineStringJsonConverter.d.ts.map +1 -0
  161. package/dist/json/LineStringJsonConverter.js +21 -0
  162. package/dist/json/LineStringJsonConverter.js.map +1 -0
  163. package/dist/json/PointJsonConverter.d.ts +9 -0
  164. package/dist/json/PointJsonConverter.d.ts.map +1 -0
  165. package/dist/json/PointJsonConverter.js +20 -0
  166. package/dist/json/PointJsonConverter.js.map +1 -0
  167. package/dist/json/PolygonJsonConverter.d.ts +9 -0
  168. package/dist/json/PolygonJsonConverter.d.ts.map +1 -0
  169. package/dist/json/PolygonJsonConverter.js +22 -0
  170. package/dist/json/PolygonJsonConverter.js.map +1 -0
  171. package/dist/json/TimeSpanJsonConverter.d.ts +9 -0
  172. package/dist/json/TimeSpanJsonConverter.d.ts.map +1 -0
  173. package/dist/json/TimeSpanJsonConverter.js +14 -0
  174. package/dist/json/TimeSpanJsonConverter.js.map +1 -0
  175. package/dist/json/ValueMapJsonConverter.d.ts +12 -0
  176. package/dist/json/ValueMapJsonConverter.d.ts.map +1 -0
  177. package/dist/json/ValueMapJsonConverter.js +28 -0
  178. package/dist/json/ValueMapJsonConverter.js.map +1 -0
  179. package/dist/json/index.d.ts +9 -0
  180. package/dist/json/index.d.ts.map +1 -0
  181. package/dist/json/index.js +9 -0
  182. package/dist/json/index.js.map +1 -0
  183. package/dist/tsconfig.tsbuildinfo +1 -1
  184. package/geospatial/LineString.ts +33 -0
  185. package/geospatial/LinearRing.ts +30 -0
  186. package/geospatial/Point.ts +36 -0
  187. package/geospatial/Polygon.ts +37 -0
  188. package/geospatial/index.ts +7 -0
  189. package/index.ts +2 -1
  190. package/json/DateJsonConverter.ts +27 -0
  191. package/json/GuidJsonConverter.ts +28 -0
  192. package/json/JsonConverter.ts +40 -0
  193. package/json/LineStringJsonConverter.ts +35 -0
  194. package/json/PointJsonConverter.ts +34 -0
  195. package/json/PolygonJsonConverter.ts +38 -0
  196. package/json/TimeSpanJsonConverter.ts +28 -0
  197. package/json/ValueMapJsonConverter.ts +57 -0
  198. package/json/for_DateJsonConverter/when_reading_date_with_date_converter.ts +12 -0
  199. package/json/for_DateJsonConverter/when_writing_date_with_date_converter.ts +12 -0
  200. package/json/for_GuidJsonConverter/when_reading_guid_with_guid_converter.ts +13 -0
  201. package/json/for_GuidJsonConverter/when_writing_guid_with_guid_converter.ts +13 -0
  202. package/json/for_LineStringJsonConverter/when_deserializing_linestring.ts +19 -0
  203. package/json/for_LineStringJsonConverter/when_reading_linestring_with_linestring_converter.ts +24 -0
  204. package/json/for_LineStringJsonConverter/when_serializing_linestring.ts +25 -0
  205. package/json/for_LineStringJsonConverter/when_writing_linestring_with_linestring_converter.ts +27 -0
  206. package/json/for_PointJsonConverter/when_deserializing_point.ts +14 -0
  207. package/json/for_PointJsonConverter/when_reading_point_with_point_converter.ts +14 -0
  208. package/json/for_PointJsonConverter/when_serializing_point.ts +17 -0
  209. package/json/for_PointJsonConverter/when_writing_point_with_point_converter.ts +16 -0
  210. package/json/for_PolygonJsonConverter/when_deserializing_polygon_with_holes.ts +28 -0
  211. package/json/for_PolygonJsonConverter/when_deserializing_polygon_with_no_holes.ts +22 -0
  212. package/json/for_PolygonJsonConverter/when_reading_polygon_with_polygon_converter.ts +27 -0
  213. package/json/for_PolygonJsonConverter/when_serializing_polygon_with_holes.ts +53 -0
  214. package/json/for_PolygonJsonConverter/when_serializing_polygon_with_no_holes.ts +33 -0
  215. package/json/for_PolygonJsonConverter/when_writing_polygon_with_polygon_converter.ts +35 -0
  216. package/json/for_TimeSpanJsonConverter/when_reading_timespan_with_timespan_converter.ts +16 -0
  217. package/json/for_TimeSpanJsonConverter/when_writing_timespan_with_timespan_converter.ts +13 -0
  218. package/json/for_ValueMapJsonConverter/when_writing_valuemap_with_valuemap_converter.ts +28 -0
  219. package/json/index.ts +11 -0
  220. package/package.json +11 -1
  221. package/Coordinate.ts +0 -38
  222. package/dist/Coordinate.d.ts +0 -7
  223. package/dist/Coordinate.d.ts.map +0 -1
  224. package/dist/Coordinate.js +0 -27
  225. package/dist/Coordinate.js.map +0 -1
  226. package/dist/cjs/Coordinate.d.ts +0 -7
  227. package/dist/cjs/Coordinate.d.ts.map +0 -1
  228. package/dist/cjs/Coordinate.js +0 -32
  229. package/dist/cjs/Coordinate.js.map +0 -1
  230. package/dist/esm/Coordinate.d.ts +0 -7
  231. package/dist/esm/Coordinate.d.ts.map +0 -1
  232. package/dist/esm/Coordinate.js +0 -30
  233. package/dist/esm/Coordinate.js.map +0 -1
  234. package/for_Coordinate/when_creating_coordinate.ts +0 -11
  235. package/for_Coordinate/when_deserializing_coordinate.ts +0 -14
  236. package/for_Coordinate/when_deserializing_coordinate_with_missing_properties.ts +0 -13
  237. package/for_Coordinate/when_serializing_coordinate.ts +0 -14
@@ -1 +1 @@
1
- {"version":3,"file":"JsonSerializer.js","sources":["../../JsonSerializer.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { ConceptAs } from './ConceptAs';\nimport { Constructor } from './Constructor';\nimport { Coordinate } from './Coordinate';\nimport { DerivedType } from './DerivedType';\nimport { Field } from './Field';\nimport { Fields } from './Fields';\nimport { Guid } from './Guid';\nimport { TimeSpan } from './TimeSpan';\nimport { ValueMap } from './ValueMap';\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\ntype typeSerializer = (value: any) => any;\n\nconst typeConverters: Map<Constructor, typeSerializer> = new Map<Constructor, typeSerializer>([\n [Number, (value: number) => value],\n [String, (value: string) => value],\n [Boolean, (value: boolean) => value],\n [Date, (value: Date) => value.toISOString()],\n [Guid, (value: Guid) => value?.toString() ?? ''],\n [TimeSpan, (value: TimeSpan) => value?.toString() ?? ''],\n [Coordinate, (value: Coordinate) => value?.toJSON() ?? null],\n [ValueMap, (value: ValueMap<any, any>) => {\n const converted: any = {};\n for (const [key, mapValue] of value.entries()) {\n converted[serializeMapKey(key)] = convertTypesOnInstance(mapValue);\n }\n\n return converted;\n }]\n]);\n\nconst typeSerializers: Map<Constructor, typeSerializer> = new Map<Constructor, typeSerializer>([\n [Number, (value: any) => value],\n [String, (value: any) => value],\n [Boolean, (value: any) => value],\n [Date, (value: any) => new Date(value)],\n [Guid, (value: any) => Guid.parse(value.toString())],\n [TimeSpan, (value: any) => TimeSpan.parse(value.toString())],\n [Coordinate, (value: any) => {\n if (value === null || value === undefined) {\n throw new Error('Cannot deserialize null or undefined to Coordinate');\n }\n if (value.longitude === undefined || value.latitude === undefined) {\n throw new Error('Cannot deserialize Coordinate: longitude and latitude are required');\n }\n const coordinate = new Coordinate();\n coordinate.longitude = value.longitude;\n coordinate.latitude = value.latitude;\n return coordinate;\n }],\n]);\n\n/**\n * Checks if a constructor is a ConceptAs type.\n * @param {Constructor} type The constructor to check.\n * @returns {boolean} True if the type extends ConceptAs.\n */\nconst isConceptAs = (type: Constructor): boolean => {\n if (!type || !type.prototype) return false;\n \n // Check if the prototype chain includes ConceptAs\n let proto = type.prototype;\n while (proto) {\n // Check if this prototype is ConceptAs.prototype\n if (proto === ConceptAs.prototype) {\n return true;\n }\n proto = Object.getPrototypeOf(proto);\n }\n return false;\n};\n\nconst serializeValueForType = (type: Constructor, value: any) => {\n if (!value) return value;\n\n // If it's a ConceptAs instance, unwrap it and serialize the inner value recursively\n // This follows the C# pattern: recognize as concept, unwrap, then call serializer\n if (value instanceof ConceptAs) {\n const innerValue = value.value;\n // Recursively serialize the inner value to handle complex types\n // Use .constructor directly which works reliably for both primitives and objects\n return serializeValueForType(innerValue.constructor, innerValue);\n }\n\n if (typeConverters.has(type)) {\n return typeConverters.get(type)!(value);\n } else {\n return convertTypesOnInstance(value);\n }\n};\n\nconst deserializeValueFromType = (type: Constructor, value: any) => {\n // If it's a ConceptAs type, instantiate it with the value\n if (isConceptAs(type)) {\n return new type(value);\n }\n \n if (typeSerializers.has(type)) {\n return typeSerializers.get(type)!(value);\n } else {\n return JsonSerializer.deserialize(type, JSON.stringify(value));\n }\n};\n\nconst deserializeValueFromField = (field: Field, value: any) => {\n if (field.type === ValueMap) {\n return deserializeValueMapFromField(field, value);\n }\n\n // If it's a ConceptAs type, instantiate it with the value\n if (isConceptAs(field.type)) {\n return new field.type(value);\n }\n\n if (typeSerializers.has(field.type)) {\n return typeSerializers.get(field.type)!(value);\n } else {\n let type = field.type;\n if (value[JsonSerializer.DerivedTypeIdProperty]) {\n const derivedTypeId = value[JsonSerializer.DerivedTypeIdProperty];\n const candidates = [...field.derivatives, ...DerivedType.getDerivedTypesFor(field.type)];\n type = candidates.find(_ => DerivedType.get(_) == derivedTypeId) || type;\n }\n\n return JsonSerializer.deserialize(type, JSON.stringify(value));\n }\n};\n\nconst serializeMapKey = (key: any): string => {\n if (key === undefined || key === null) {\n return '';\n }\n\n if (typeof key === 'string') {\n return key;\n }\n\n if (typeof key === 'number' || typeof key === 'boolean' || typeof key === 'bigint') {\n return key.toString();\n }\n\n if (key instanceof Date) {\n return key.toISOString();\n }\n\n return JsonSerializer.serialize(key);\n};\n\nconst deserializeMapKey = (keyType: Constructor, key: string): any => {\n if (keyType === String) {\n return key;\n }\n\n if (keyType === Number) {\n return Number(key);\n }\n\n if (keyType === Boolean) {\n return key.toLowerCase() === 'true';\n }\n\n if (keyType === Date) {\n return new Date(key);\n }\n\n if (typeSerializers.has(keyType)) {\n return typeSerializers.get(keyType)!(key);\n }\n\n return JsonSerializer.deserialize(keyType, key);\n};\n\nconst deserializeMapValue = (valueType: Constructor | undefined, value: any): any => {\n if (!valueType) {\n return value;\n }\n\n if (typeSerializers.has(valueType)) {\n return typeSerializers.get(valueType)!(value);\n }\n\n return JsonSerializer.deserialize(valueType, JSON.stringify(value));\n};\n\nconst deserializeValueMapFromField = (field: Field, value: any): ValueMap<any, any> => {\n const valueMap = new ValueMap<any, any>();\n const keyType = field.genericArguments[0];\n const valueType = field.genericArguments[1];\n\n if (!value || !keyType) {\n return valueMap;\n }\n\n for (const key of Object.keys(value)) {\n const deserializedKey = deserializeMapKey(keyType, key);\n const deserializedValue = deserializeMapValue(valueType, value[key]);\n valueMap.set(deserializedKey, deserializedValue);\n }\n\n return valueMap;\n};\n\nconst convertTypesOnInstance = (instance: any) => {\n if (typeConverters.has(instance.constructor)) {\n return serializeValueForType(instance.constructor, instance);\n }\n\n const properties = Object.getOwnPropertyNames(instance);\n const converted: any = {};\n\n const derivedTypeId = DerivedType.get(instance.constructor);\n if (derivedTypeId) {\n converted[JsonSerializer.DerivedTypeIdProperty] = derivedTypeId;\n }\n properties.forEach(property => {\n let value = instance[property];\n if (value !== undefined) {\n if (Array.isArray(value)) {\n value = value.map(_ => convertTypesOnInstance(_));\n } else {\n value = serializeValueForType(value.__proto__.constructor, value);\n }\n }\n\n converted[property] = value;\n });\n\n return converted;\n};\n\n/**\n * Represents a serializer for JSON.\n */\nexport class JsonSerializer {\n static readonly DerivedTypeIdProperty: string = \"_derivedTypeId\";\n\n /**\n * Serialize with strong type information.\n * @param {*} value The value to serialize.\n * @returns A JSON string.\n */\n static serialize(value: any): string {\n const converted = convertTypesOnInstance(value);\n return JSON.stringify(converted);\n }\n\n /**\n * Deserialize a JSON string to the specific type.\n * @param {Constructor} targetType Type to deserialize to.\n * @param {string} json Actual JSON to deserialize.\n * @returns An instance of the target type.\n */\n static deserialize<TResult extends object>(targetType: Constructor<TResult>, json: string): TResult {\n const parsed = JSON.parse(json);\n return this.deserializeFromInstance<TResult>(targetType, parsed);\n }\n\n /**\n * Deserialize a array JSON string to an array of the specific instance type.\n * @param {Constructor} targetType Type to deserialize to.\n * @param {string} json Actual JSON to deserialize.\n * @returns An array of instances of the target type.\n */\n static deserializeArray<TResult extends object>(targetType: Constructor<TResult>, json: string): TResult[] {\n const parsed = JSON.parse(json);\n return this.deserializeArrayFromInstance(targetType, parsed);\n }\n\n /**\n * Deserialize an any instance to a specific instance type.\n * @param {Constructor} targetType Type to deserialize to.\n * @param {*} instance Actual instance to deserialize.\n * @returns An instance of the target type.\n */\n static deserializeFromInstance<TResult extends object>(targetType: Constructor<TResult>, instance: any): TResult {\n const fields = Fields.getFieldsForType(targetType as Constructor);\n\n if (typeSerializers.has(targetType)) {\n return deserializeValueFromType(targetType, instance);\n }\n\n const deserialized = new targetType();\n for (const field of fields) {\n let value = instance[field.name];\n if (value) {\n if (field.enumerable) {\n value = value.map(_ => deserializeValueFromField(field, _));\n } else {\n value = deserializeValueFromField(field, value);\n }\n }\n\n deserialized[field.name] = value;\n }\n\n if ((targetType as Constructor) == Object) {\n const objectFields = Object.keys(instance).filter((value) => {\n return !fields.some(_ => _.name == value);\n });\n\n for (const field of objectFields) {\n deserialized[field] = instance[field];\n }\n }\n\n return deserialized;\n }\n\n /**\n * Deserialize an array of any instances to an array of specific instance types.\n * @param {Constructor} targetType Type to deserialize to.\n * @param {instances} instances Actual instances to deserialize.\n * @returns An array of instances of the target type.\n */\n static deserializeArrayFromInstance<TResult extends object>(targetType: Constructor<TResult>, instances: any): TResult[] {\n const deserialized: TResult[] = [];\n\n for (const instance of instances) {\n deserialized.push(this.deserializeFromInstance<TResult>(targetType, instance));\n }\n\n return deserialized;\n }\n}\n"],"names":["Guid","TimeSpan","Coordinate","ValueMap","ConceptAs","DerivedType","Fields"],"mappings":"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"}
1
+ {"version":3,"file":"JsonSerializer.js","sources":["../../JsonSerializer.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { ConceptAs } from './ConceptAs';\nimport { Constructor } from './Constructor';\nimport { DerivedType } from './DerivedType';\nimport { Field } from './Field';\nimport { Fields } from './Fields';\nimport { ValueMap } from './ValueMap';\nimport { \n JsonConverter, \n DateJsonConverter, \n GuidJsonConverter, \n TimeSpanJsonConverter, \n PointJsonConverter,\n LineStringJsonConverter,\n PolygonJsonConverter,\n ValueMapJsonConverter\n} from './json';\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\ntype typeSerializer = (value: any) => any;\n\n// Initialize converters\nconst converters: JsonConverter[] = [\n new DateJsonConverter(),\n new GuidJsonConverter(),\n new TimeSpanJsonConverter(),\n new PointJsonConverter(),\n new LineStringJsonConverter(),\n new PolygonJsonConverter(),\n new ValueMapJsonConverter()\n];\n\n// Build converter maps from the converters\nconst typeConverters: Map<Constructor, JsonConverter> = new Map<Constructor, JsonConverter>();\nconst typeSerializers: Map<Constructor, JsonConverter> = new Map<Constructor, JsonConverter>();\n\nfor (const converter of converters) {\n typeConverters.set(converter.type, converter);\n typeSerializers.set(converter.type, converter);\n}\n\n// Add primitive type converters that don't need a full JsonConverter class\nconst primitiveConverters: Map<Constructor, typeSerializer> = new Map<Constructor, typeSerializer>([\n [Number, (value: number) => value],\n [String, (value: string) => value],\n [Boolean, (value: boolean) => value]\n]);\n\nconst primitiveSerializers: Map<Constructor, typeSerializer> = new Map<Constructor, typeSerializer>([\n [Number, (value: any) => value],\n [String, (value: any) => value],\n [Boolean, (value: any) => value]\n]);\n\n/**\n * Checks if a constructor is a ConceptAs type.\n * @param {Constructor} type The constructor to check.\n * @returns {boolean} True if the type extends ConceptAs.\n */\nconst isConceptAs = (type: Constructor): boolean => {\n if (!type || !type.prototype) return false;\n \n // Check if the prototype chain includes ConceptAs\n let proto = type.prototype;\n while (proto) {\n // Check if this prototype is ConceptAs.prototype\n if (proto === ConceptAs.prototype) {\n return true;\n }\n proto = Object.getPrototypeOf(proto);\n }\n return false;\n};\n\nconst serializeValueForType = (type: Constructor, value: any) => {\n if (!value) return value;\n\n // If it's a ConceptAs instance, unwrap it and serialize the inner value recursively\n // This follows the C# pattern: recognize as concept, unwrap, then call serializer\n if (value instanceof ConceptAs) {\n const innerValue = value.value;\n // Recursively serialize the inner value to handle complex types\n // Use .constructor directly which works reliably for both primitives and objects\n return serializeValueForType(innerValue.constructor, innerValue);\n }\n\n // Check if there's a registered converter\n if (typeConverters.has(type)) {\n const converter = typeConverters.get(type)!;\n return converter.write(value);\n }\n \n // Check primitive converters\n if (primitiveConverters.has(type)) {\n return primitiveConverters.get(type)!(value);\n }\n \n return convertTypesOnInstance(value);\n};\n\nconst deserializeValueFromType = (type: Constructor, value: any) => {\n // If it's a ConceptAs type, instantiate it with the value\n if (isConceptAs(type)) {\n return new type(value);\n }\n \n // Check if there's a registered converter\n if (typeSerializers.has(type)) {\n const converter = typeSerializers.get(type)!;\n return converter.read(value);\n }\n \n // Check primitive serializers\n if (primitiveSerializers.has(type)) {\n return primitiveSerializers.get(type)!(value);\n }\n \n return JsonSerializer.deserialize(type, JSON.stringify(value));\n};\n\nconst deserializeValueFromField = (field: Field, value: any) => {\n if (field.type === ValueMap) {\n return deserializeValueMapFromField(field, value);\n }\n\n // If it's a ConceptAs type, instantiate it with the value\n if (isConceptAs(field.type)) {\n return new field.type(value);\n }\n\n // Check if there's a registered converter\n if (typeSerializers.has(field.type)) {\n const converter = typeSerializers.get(field.type)!;\n return converter.read(value);\n }\n \n // Check primitive serializers\n if (primitiveSerializers.has(field.type)) {\n return primitiveSerializers.get(field.type)!(value);\n }\n \n let type = field.type;\n if (value[JsonSerializer.DerivedTypeIdProperty]) {\n const derivedTypeId = value[JsonSerializer.DerivedTypeIdProperty];\n const candidates = [...field.derivatives, ...DerivedType.getDerivedTypesFor(field.type)];\n type = candidates.find(_ => DerivedType.get(_) == derivedTypeId) || type;\n }\n\n return JsonSerializer.deserialize(type, JSON.stringify(value));\n};\n\nconst serializeMapKey = (key: any): string => {\n if (key === undefined || key === null) {\n return '';\n }\n\n if (typeof key === 'string') {\n return key;\n }\n\n if (typeof key === 'number' || typeof key === 'boolean' || typeof key === 'bigint') {\n return key.toString();\n }\n\n if (key instanceof Date) {\n return key.toISOString();\n }\n\n return JsonSerializer.serialize(key);\n};\n\nconst deserializeMapKey = (keyType: Constructor, key: string): any => {\n if (keyType === String) {\n return key;\n }\n\n if (keyType === Number) {\n return Number(key);\n }\n\n if (keyType === Boolean) {\n return key.toLowerCase() === 'true';\n }\n\n // Check if there's a converter for this type\n if (typeSerializers.has(keyType)) {\n const converter = typeSerializers.get(keyType)!;\n return converter.read(key);\n }\n\n return JsonSerializer.deserialize(keyType, key);\n};\n\nconst deserializeMapValue = (valueType: Constructor | undefined, value: any): any => {\n if (!valueType) {\n return value;\n }\n\n // Check if there's a converter for this type\n if (typeSerializers.has(valueType)) {\n const converter = typeSerializers.get(valueType)!;\n return converter.read(value);\n }\n\n return JsonSerializer.deserialize(valueType, JSON.stringify(value));\n};\n\nconst deserializeValueMapFromField = (field: Field, value: any): ValueMap<any, any> => {\n const valueMap = new ValueMap<any, any>();\n const keyType = field.genericArguments[0];\n const valueType = field.genericArguments[1];\n\n if (!value || !keyType) {\n return valueMap;\n }\n\n for (const key of Object.keys(value)) {\n const deserializedKey = deserializeMapKey(keyType, key);\n const deserializedValue = deserializeMapValue(valueType, value[key]);\n valueMap.set(deserializedKey, deserializedValue);\n }\n\n return valueMap;\n};\n\nconst convertTypesOnInstance = (instance: any) => {\n // Check if there's a converter for this type\n if (typeConverters.has(instance.constructor)) {\n return serializeValueForType(instance.constructor, instance);\n }\n \n // Check primitive converters\n if (primitiveConverters.has(instance.constructor)) {\n return primitiveConverters.get(instance.constructor)!(instance);\n }\n\n const properties = Object.getOwnPropertyNames(instance);\n const converted: any = {};\n\n const derivedTypeId = DerivedType.get(instance.constructor);\n if (derivedTypeId) {\n converted[JsonSerializer.DerivedTypeIdProperty] = derivedTypeId;\n }\n properties.forEach(property => {\n let value = instance[property];\n if (value !== undefined) {\n if (Array.isArray(value)) {\n value = value.map(_ => convertTypesOnInstance(_));\n } else {\n value = serializeValueForType(value.__proto__.constructor, value);\n }\n }\n\n converted[property] = value;\n });\n\n return converted;\n};\n\n// Initialize ValueMapJsonConverter with helper functions to avoid circular dependencies\n// Must be done after serializeMapKey and convertTypesOnInstance are defined\nValueMapJsonConverter.setHelpers(serializeMapKey, convertTypesOnInstance);\n\n/**\n * Represents a serializer for JSON.\n */\nexport class JsonSerializer {\n static readonly DerivedTypeIdProperty: string = \"_derivedTypeId\";\n\n /**\n * Serialize with strong type information.\n * @param {*} value The value to serialize.\n * @returns A JSON string.\n */\n static serialize(value: any): string {\n const converted = convertTypesOnInstance(value);\n return JSON.stringify(converted);\n }\n\n /**\n * Deserialize a JSON string to the specific type.\n * @param {Constructor} targetType Type to deserialize to.\n * @param {string} json Actual JSON to deserialize.\n * @returns An instance of the target type.\n */\n static deserialize<TResult extends object>(targetType: Constructor<TResult>, json: string): TResult {\n const parsed = JSON.parse(json);\n return this.deserializeFromInstance<TResult>(targetType, parsed);\n }\n\n /**\n * Deserialize a array JSON string to an array of the specific instance type.\n * @param {Constructor} targetType Type to deserialize to.\n * @param {string} json Actual JSON to deserialize.\n * @returns An array of instances of the target type.\n */\n static deserializeArray<TResult extends object>(targetType: Constructor<TResult>, json: string): TResult[] {\n const parsed = JSON.parse(json);\n return this.deserializeArrayFromInstance(targetType, parsed);\n }\n\n /**\n * Deserialize an any instance to a specific instance type.\n * @param {Constructor} targetType Type to deserialize to.\n * @param {*} instance Actual instance to deserialize.\n * @returns An instance of the target type.\n */\n static deserializeFromInstance<TResult extends object>(targetType: Constructor<TResult>, instance: any): TResult {\n const fields = Fields.getFieldsForType(targetType as Constructor);\n\n if (typeSerializers.has(targetType)) {\n return deserializeValueFromType(targetType, instance);\n }\n\n const deserialized = new targetType();\n for (const field of fields) {\n let value = instance[field.name];\n if (value) {\n if (field.enumerable) {\n value = value.map(_ => deserializeValueFromField(field, _));\n } else {\n value = deserializeValueFromField(field, value);\n }\n }\n\n deserialized[field.name] = value;\n }\n\n if ((targetType as Constructor) == Object) {\n const objectFields = Object.keys(instance).filter((value) => {\n return !fields.some(_ => _.name == value);\n });\n\n for (const field of objectFields) {\n deserialized[field] = instance[field];\n }\n }\n\n return deserialized;\n }\n\n /**\n * Deserialize an array of any instances to an array of specific instance types.\n * @param {Constructor} targetType Type to deserialize to.\n * @param {instances} instances Actual instances to deserialize.\n * @returns An array of instances of the target type.\n */\n static deserializeArrayFromInstance<TResult extends object>(targetType: Constructor<TResult>, instances: any): TResult[] {\n const deserialized: TResult[] = [];\n\n for (const instance of instances) {\n deserialized.push(this.deserializeFromInstance<TResult>(targetType, instance));\n }\n\n return deserialized;\n }\n}\n"],"names":["DateJsonConverter","GuidJsonConverter","TimeSpanJsonConverter","PointJsonConverter","LineStringJsonConverter","PolygonJsonConverter","ValueMapJsonConverter","ConceptAs","ValueMap","DerivedType","Fields"],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { Point } from './Point';
2
+ export declare class LineString {
3
+ coordinates: Point[];
4
+ constructor(coordinates: Point[]);
5
+ toJSON(): object;
6
+ }
7
+ //# sourceMappingURL=LineString.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LineString.d.ts","sourceRoot":"","sources":["../../../geospatial/LineString.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAKhC,qBAAa,UAAU;IACnB,WAAW,EAAG,KAAK,EAAE,CAAC;gBAMV,WAAW,EAAE,KAAK,EAAE;IAWhC,MAAM,IAAI,MAAM;CAMnB"}
@@ -0,0 +1,20 @@
1
+ 'use strict';
2
+
3
+ class LineString {
4
+ coordinates;
5
+ constructor(coordinates) {
6
+ if (coordinates.length < 2) {
7
+ throw new Error('LineString must have at least 2 points');
8
+ }
9
+ this.coordinates = coordinates;
10
+ }
11
+ toJSON() {
12
+ return {
13
+ type: 'LineString',
14
+ coordinates: this.coordinates.map(p => [p.longitude, p.latitude])
15
+ };
16
+ }
17
+ }
18
+
19
+ exports.LineString = LineString;
20
+ //# sourceMappingURL=LineString.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LineString.js","sources":["../../../geospatial/LineString.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { Point } from './Point';\n\n/**\n * Represents a line string composed of two or more points.\n */\nexport class LineString {\n coordinates!: Point[];\n\n /**\n * Creates a new LineString instance.\n * @param {Point[]} coordinates - The points that make up the line string (minimum 2 points).\n */\n constructor(coordinates: Point[]) {\n if (coordinates.length < 2) {\n throw new Error('LineString must have at least 2 points');\n }\n this.coordinates = coordinates;\n }\n\n /**\n * Converts the LineString to a GeoJSON representation.\n * @returns {object} GeoJSON representation.\n */\n toJSON(): object {\n return {\n type: 'LineString',\n coordinates: this.coordinates.map(p => [p.longitude, p.latitude])\n };\n }\n}\n"],"names":[],"mappings":";;MAQa,UAAU,CAAA;AACnB,IAAA,WAAW;AAMX,IAAA,WAAA,CAAY,WAAoB,EAAA;AAC5B,QAAA,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;AACxB,YAAA,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC;QAC7D;AACA,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;IAClC;IAMA,MAAM,GAAA;QACF,OAAO;AACH,YAAA,IAAI,EAAE,YAAY;YAClB,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC;SACnE;IACL;AACH;;;;"}
@@ -0,0 +1,7 @@
1
+ import { Point } from './Point';
2
+ export declare class LinearRing {
3
+ coordinates: Point[];
4
+ constructor(coordinates: Point[]);
5
+ toJSON(): number[][];
6
+ }
7
+ //# sourceMappingURL=LinearRing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LinearRing.d.ts","sourceRoot":"","sources":["../../../geospatial/LinearRing.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAKhC,qBAAa,UAAU;IACnB,WAAW,EAAG,KAAK,EAAE,CAAC;gBAMV,WAAW,EAAE,KAAK,EAAE;IAWhC,MAAM,IAAI,MAAM,EAAE,EAAE;CAGvB"}
@@ -0,0 +1,17 @@
1
+ 'use strict';
2
+
3
+ class LinearRing {
4
+ coordinates;
5
+ constructor(coordinates) {
6
+ if (coordinates.length < 4) {
7
+ throw new Error('LinearRing must have at least 4 points to form a closed ring');
8
+ }
9
+ this.coordinates = coordinates;
10
+ }
11
+ toJSON() {
12
+ return this.coordinates.map(p => [p.longitude, p.latitude]);
13
+ }
14
+ }
15
+
16
+ exports.LinearRing = LinearRing;
17
+ //# sourceMappingURL=LinearRing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LinearRing.js","sources":["../../../geospatial/LinearRing.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { Point } from './Point';\n\n/**\n * Represents a closed linear ring (polygon boundary).\n */\nexport class LinearRing {\n coordinates!: Point[];\n\n /**\n * Creates a new LinearRing instance.\n * @param {Point[]} coordinates - The points that make up the linear ring (minimum 4 points, first must equal last).\n */\n constructor(coordinates: Point[]) {\n if (coordinates.length < 4) {\n throw new Error('LinearRing must have at least 4 points to form a closed ring');\n }\n this.coordinates = coordinates;\n }\n\n /**\n * Converts the LinearRing to a GeoJSON coordinate array.\n * @returns {number[][]} GeoJSON coordinate array.\n */\n toJSON(): number[][] {\n return this.coordinates.map(p => [p.longitude, p.latitude]);\n }\n}\n"],"names":[],"mappings":";;MAQa,UAAU,CAAA;AACnB,IAAA,WAAW;AAMX,IAAA,WAAA,CAAY,WAAoB,EAAA;AAC5B,QAAA,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;AACxB,YAAA,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC;QACnF;AACA,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;IAClC;IAMA,MAAM,GAAA;QACF,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC/D;AACH;;;;"}
@@ -0,0 +1,7 @@
1
+ export declare class Point {
2
+ longitude: number;
3
+ latitude: number;
4
+ constructor(longitude: number, latitude: number);
5
+ toJSON(): object;
6
+ }
7
+ //# sourceMappingURL=Point.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Point.d.ts","sourceRoot":"","sources":["../../../geospatial/Point.ts"],"names":[],"mappings":"AAQA,qBAAa,KAAK;IAEd,SAAS,EAAG,MAAM,CAAC;IAGnB,QAAQ,EAAG,MAAM,CAAC;gBAON,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAS/C,MAAM,IAAI,MAAM;CAMnB"}
@@ -0,0 +1,30 @@
1
+ 'use strict';
2
+
3
+ var _tslib = require('../_virtual/_tslib.js');
4
+ var fieldDecorator = require('../fieldDecorator.js');
5
+
6
+ class Point {
7
+ longitude;
8
+ latitude;
9
+ constructor(longitude, latitude) {
10
+ this.longitude = longitude;
11
+ this.latitude = latitude;
12
+ }
13
+ toJSON() {
14
+ return {
15
+ type: 'Point',
16
+ coordinates: [this.longitude, this.latitude]
17
+ };
18
+ }
19
+ }
20
+ _tslib.__decorate([
21
+ fieldDecorator.field(Number),
22
+ _tslib.__metadata("design:type", Number)
23
+ ], Point.prototype, "longitude", void 0);
24
+ _tslib.__decorate([
25
+ fieldDecorator.field(Number),
26
+ _tslib.__metadata("design:type", Number)
27
+ ], Point.prototype, "latitude", void 0);
28
+
29
+ exports.Point = Point;
30
+ //# sourceMappingURL=Point.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Point.js","sources":["../../../geospatial/Point.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { field } from '../fieldDecorator';\n\n/**\n * Represents a geographic point with longitude and latitude.\n */\nexport class Point {\n @field(Number)\n longitude!: number;\n\n @field(Number)\n latitude!: number;\n\n /**\n * Creates a new Point instance.\n * @param {number} longitude - The longitude of the point.\n * @param {number} latitude - The latitude of the point.\n */\n constructor(longitude: number, latitude: number) {\n this.longitude = longitude;\n this.latitude = latitude;\n }\n\n /**\n * Converts the Point to a GeoJSON representation.\n * @returns {object} GeoJSON representation.\n */\n toJSON(): object {\n return {\n type: 'Point',\n coordinates: [this.longitude, this.latitude]\n };\n }\n}\n"],"names":["__decorate","field"],"mappings":";;;;;MAQa,KAAK,CAAA;AAEd,IAAA,SAAS;AAGT,IAAA,QAAQ;IAOR,WAAA,CAAY,SAAiB,EAAE,QAAgB,EAAA;AAC3C,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC1B,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;IAC5B;IAMA,MAAM,GAAA;QACF,OAAO;AACH,YAAA,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ;SAC9C;IACL;AACH;AAzBGA,iBAAA,CAAA;IADCC,oBAAK,CAAC,MAAM,CAAC;;AACK,CAAA,EAAA,KAAA,CAAA,SAAA,EAAA,WAAA,EAAA,MAAA,CAAA;AAGnBD,iBAAA,CAAA;IADCC,oBAAK,CAAC,MAAM,CAAC;;AACI,CAAA,EAAA,KAAA,CAAA,SAAA,EAAA,UAAA,EAAA,MAAA,CAAA;;;;"}
@@ -0,0 +1,8 @@
1
+ import { LinearRing } from './LinearRing';
2
+ export declare class Polygon {
3
+ shell: LinearRing;
4
+ holes: LinearRing[];
5
+ constructor(shell: LinearRing, holes?: LinearRing[]);
6
+ toJSON(): object;
7
+ }
8
+ //# sourceMappingURL=Polygon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Polygon.d.ts","sourceRoot":"","sources":["../../../geospatial/Polygon.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAK1C,qBAAa,OAAO;IAChB,KAAK,EAAG,UAAU,CAAC;IACnB,KAAK,EAAG,UAAU,EAAE,CAAC;gBAOT,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,UAAU,EAAE;IASnD,MAAM,IAAI,MAAM;CAUnB"}
@@ -0,0 +1,23 @@
1
+ 'use strict';
2
+
3
+ class Polygon {
4
+ shell;
5
+ holes;
6
+ constructor(shell, holes) {
7
+ this.shell = shell;
8
+ this.holes = holes || [];
9
+ }
10
+ toJSON() {
11
+ const rings = [this.shell.toJSON()];
12
+ if (this.holes && this.holes.length > 0) {
13
+ rings.push(...this.holes.map(h => h.toJSON()));
14
+ }
15
+ return {
16
+ type: 'Polygon',
17
+ coordinates: rings
18
+ };
19
+ }
20
+ }
21
+
22
+ exports.Polygon = Polygon;
23
+ //# sourceMappingURL=Polygon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Polygon.js","sources":["../../../geospatial/Polygon.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { LinearRing } from './LinearRing';\n\n/**\n * Represents a polygon with an outer shell and optional holes.\n */\nexport class Polygon {\n shell!: LinearRing;\n holes!: LinearRing[];\n\n /**\n * Creates a new Polygon instance.\n * @param {LinearRing} shell - The outer boundary of the polygon.\n * @param {LinearRing[]} holes - Optional inner boundaries (holes) within the polygon.\n */\n constructor(shell: LinearRing, holes?: LinearRing[]) {\n this.shell = shell;\n this.holes = holes || [];\n }\n\n /**\n * Converts the Polygon to a GeoJSON representation.\n * @returns {object} GeoJSON representation.\n */\n toJSON(): object {\n const rings = [this.shell.toJSON()];\n if (this.holes && this.holes.length > 0) {\n rings.push(...this.holes.map(h => h.toJSON()));\n }\n return {\n type: 'Polygon',\n coordinates: rings\n };\n }\n}\n"],"names":[],"mappings":";;MAQa,OAAO,CAAA;AAChB,IAAA,KAAK;AACL,IAAA,KAAK;IAOL,WAAA,CAAY,KAAiB,EAAE,KAAoB,EAAA;AAC/C,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,EAAE;IAC5B;IAMA,MAAM,GAAA;QACF,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;AACnC,QAAA,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YACrC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QAClD;QACA,OAAO;AACH,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,WAAW,EAAE;SAChB;IACL;AACH;;;;"}
@@ -0,0 +1,5 @@
1
+ export * from './Point';
2
+ export * from './LinearRing';
3
+ export * from './LineString';
4
+ export * from './Polygon';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../geospatial/index.ts"],"names":[],"mappings":"AAGA,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC"}
@@ -1,6 +1,7 @@
1
1
  export * from './ConceptAs';
2
2
  export * from './Constructor';
3
- export * from './Coordinate';
3
+ export * from './geospatial';
4
+ export * from './json';
4
5
  export * from './Field';
5
6
  export * from './Fields';
6
7
  export * from './Guid';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../index.ts"],"names":[],"mappings":"AAGA,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oCAAoC,CAAC;AACnD,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../index.ts"],"names":[],"mappings":"AAGA,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oCAAoC,CAAC;AACnD,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC"}
package/dist/cjs/index.js CHANGED
@@ -1,7 +1,18 @@
1
1
  'use strict';
2
2
 
3
3
  var ConceptAs = require('./ConceptAs.js');
4
- var Coordinate = require('./Coordinate.js');
4
+ var Point = require('./geospatial/Point.js');
5
+ var LinearRing = require('./geospatial/LinearRing.js');
6
+ var LineString = require('./geospatial/LineString.js');
7
+ var Polygon = require('./geospatial/Polygon.js');
8
+ var JsonConverter = require('./json/JsonConverter.js');
9
+ var DateJsonConverter = require('./json/DateJsonConverter.js');
10
+ var GuidJsonConverter = require('./json/GuidJsonConverter.js');
11
+ var TimeSpanJsonConverter = require('./json/TimeSpanJsonConverter.js');
12
+ var PointJsonConverter = require('./json/PointJsonConverter.js');
13
+ var LineStringJsonConverter = require('./json/LineStringJsonConverter.js');
14
+ var PolygonJsonConverter = require('./json/PolygonJsonConverter.js');
15
+ var ValueMapJsonConverter = require('./json/ValueMapJsonConverter.js');
5
16
  var Field = require('./Field.js');
6
17
  var Fields = require('./Fields.js');
7
18
  var Guid = require('./Guid.js');
@@ -17,7 +28,18 @@ var DerivedType = require('./DerivedType.js');
17
28
 
18
29
 
19
30
  exports.ConceptAs = ConceptAs.ConceptAs;
20
- exports.Coordinate = Coordinate.Coordinate;
31
+ exports.Point = Point.Point;
32
+ exports.LinearRing = LinearRing.LinearRing;
33
+ exports.LineString = LineString.LineString;
34
+ exports.Polygon = Polygon.Polygon;
35
+ exports.JsonConverter = JsonConverter.JsonConverter;
36
+ exports.DateJsonConverter = DateJsonConverter.DateJsonConverter;
37
+ exports.GuidJsonConverter = GuidJsonConverter.GuidJsonConverter;
38
+ exports.TimeSpanJsonConverter = TimeSpanJsonConverter.TimeSpanJsonConverter;
39
+ exports.PointJsonConverter = PointJsonConverter.PointJsonConverter;
40
+ exports.LineStringJsonConverter = LineStringJsonConverter.LineStringJsonConverter;
41
+ exports.PolygonJsonConverter = PolygonJsonConverter.PolygonJsonConverter;
42
+ exports.ValueMapJsonConverter = ValueMapJsonConverter.ValueMapJsonConverter;
21
43
  exports.Field = Field.Field;
22
44
  exports.Fields = Fields.Fields;
23
45
  exports.Guid = Guid.Guid;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,8 @@
1
+ import { Constructor } from '../Constructor';
2
+ import { JsonConverter } from './JsonConverter';
3
+ export declare class DateJsonConverter extends JsonConverter<Date> {
4
+ get type(): Constructor<Date>;
5
+ read(value: any): Date;
6
+ write(value: any): any;
7
+ }
8
+ //# sourceMappingURL=DateJsonConverter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DateJsonConverter.d.ts","sourceRoot":"","sources":["../../../json/DateJsonConverter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAOhD,qBAAa,iBAAkB,SAAQ,aAAa,CAAC,IAAI,CAAC;IAEtD,IAAI,IAAI,IAAI,WAAW,CAAC,IAAI,CAAC,CAE5B;IAGD,IAAI,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAKtB,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,GAAG;CAGzB"}
@@ -0,0 +1,18 @@
1
+ 'use strict';
2
+
3
+ var JsonConverter = require('./JsonConverter.js');
4
+
5
+ class DateJsonConverter extends JsonConverter.JsonConverter {
6
+ get type() {
7
+ return Date;
8
+ }
9
+ read(value) {
10
+ return new Date(value);
11
+ }
12
+ write(value) {
13
+ return value.toISOString();
14
+ }
15
+ }
16
+
17
+ exports.DateJsonConverter = DateJsonConverter;
18
+ //# sourceMappingURL=DateJsonConverter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DateJsonConverter.js","sources":["../../../json/DateJsonConverter.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { Constructor } from '../Constructor';\nimport { JsonConverter } from './JsonConverter';\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/**\n * JSON converter for Date type.\n */\nexport class DateJsonConverter extends JsonConverter<Date> {\n /** @inheritdoc */\n get type(): Constructor<Date> {\n return Date;\n }\n\n /** @inheritdoc */\n read(value: any): Date {\n return new Date(value);\n }\n\n /** @inheritdoc */\n write(value: any): any {\n return value.toISOString();\n }\n}\n"],"names":["JsonConverter"],"mappings":";;;;AAWM,MAAO,iBAAkB,SAAQA,2BAAmB,CAAA;AAEtD,IAAA,IAAI,IAAI,GAAA;AACJ,QAAA,OAAO,IAAI;IACf;AAGA,IAAA,IAAI,CAAC,KAAU,EAAA;AACX,QAAA,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC;IAC1B;AAGA,IAAA,KAAK,CAAC,KAAU,EAAA;AACZ,QAAA,OAAO,KAAK,CAAC,WAAW,EAAE;IAC9B;AACH;;;;"}
@@ -0,0 +1,9 @@
1
+ import { Constructor } from '../Constructor';
2
+ import { Guid } from '../Guid';
3
+ import { JsonConverter } from './JsonConverter';
4
+ export declare class GuidJsonConverter extends JsonConverter<Guid> {
5
+ get type(): Constructor<Guid>;
6
+ read(value: any): Guid;
7
+ write(value: any): any;
8
+ }
9
+ //# sourceMappingURL=GuidJsonConverter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GuidJsonConverter.d.ts","sourceRoot":"","sources":["../../../json/GuidJsonConverter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAOhD,qBAAa,iBAAkB,SAAQ,aAAa,CAAC,IAAI,CAAC;IAEtD,IAAI,IAAI,IAAI,WAAW,CAAC,IAAI,CAAC,CAE5B;IAGD,IAAI,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAKtB,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,GAAG;CAGzB"}
@@ -0,0 +1,19 @@
1
+ 'use strict';
2
+
3
+ var Guid = require('../Guid.js');
4
+ var JsonConverter = require('./JsonConverter.js');
5
+
6
+ class GuidJsonConverter extends JsonConverter.JsonConverter {
7
+ get type() {
8
+ return Guid.Guid;
9
+ }
10
+ read(value) {
11
+ return Guid.Guid.parse(value.toString());
12
+ }
13
+ write(value) {
14
+ return value?.toString() ?? '';
15
+ }
16
+ }
17
+
18
+ exports.GuidJsonConverter = GuidJsonConverter;
19
+ //# sourceMappingURL=GuidJsonConverter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GuidJsonConverter.js","sources":["../../../json/GuidJsonConverter.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { Constructor } from '../Constructor';\nimport { Guid } from '../Guid';\nimport { JsonConverter } from './JsonConverter';\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/**\n * JSON converter for Guid type.\n */\nexport class GuidJsonConverter extends JsonConverter<Guid> {\n /** @inheritdoc */\n get type(): Constructor<Guid> {\n return Guid;\n }\n\n /** @inheritdoc */\n read(value: any): Guid {\n return Guid.parse(value.toString());\n }\n\n /** @inheritdoc */\n write(value: any): any {\n return value?.toString() ?? '';\n }\n}\n"],"names":["JsonConverter","Guid"],"mappings":";;;;;AAYM,MAAO,iBAAkB,SAAQA,2BAAmB,CAAA;AAEtD,IAAA,IAAI,IAAI,GAAA;AACJ,QAAA,OAAOC,SAAI;IACf;AAGA,IAAA,IAAI,CAAC,KAAU,EAAA;QACX,OAAOA,SAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IACvC;AAGA,IAAA,KAAK,CAAC,KAAU,EAAA;AACZ,QAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE;IAClC;AACH;;;;"}
@@ -0,0 +1,8 @@
1
+ import { Constructor } from '../Constructor';
2
+ export declare abstract class JsonConverter<T = any> {
3
+ abstract get type(): Constructor<T>;
4
+ canConvert(typeToConvert: Constructor): boolean;
5
+ abstract read(value: any): T;
6
+ abstract write(value: T): any;
7
+ }
8
+ //# sourceMappingURL=JsonConverter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JsonConverter.d.ts","sourceRoot":"","sources":["../../../json/JsonConverter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAQ7C,8BAAsB,aAAa,CAAC,CAAC,GAAG,GAAG;IAIvC,QAAQ,KAAK,IAAI,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;IAOpC,UAAU,CAAC,aAAa,EAAE,WAAW,GAAG,OAAO;IAS/C,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC;IAO5B,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,GAAG;CAChC"}
@@ -0,0 +1,10 @@
1
+ 'use strict';
2
+
3
+ class JsonConverter {
4
+ canConvert(typeToConvert) {
5
+ return typeToConvert === this.type;
6
+ }
7
+ }
8
+
9
+ exports.JsonConverter = JsonConverter;
10
+ //# sourceMappingURL=JsonConverter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JsonConverter.js","sources":["../../../json/JsonConverter.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { Constructor } from '../Constructor';\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/**\n * Base class for JSON converters that handle serialization and deserialization of specific types.\n * Similar to System.Text.Json.Serialization.JsonConverter<T>.\n */\nexport abstract class JsonConverter<T = any> {\n /**\n * Gets the type that this converter handles.\n */\n abstract get type(): Constructor<T>;\n\n /**\n * Determines whether the converter can convert the specified type.\n * @param {Constructor} typeToConvert - The type to check.\n * @returns {boolean} True if the converter can convert the type; otherwise, false.\n */\n canConvert(typeToConvert: Constructor): boolean {\n return typeToConvert === this.type;\n }\n\n /**\n * Reads and converts the JSON to the target type.\n * @param {any} value - The value to deserialize.\n * @returns {T} The deserialized value.\n */\n abstract read(value: any): T;\n\n /**\n * Writes the value as JSON.\n * @param {T} value - The value to serialize.\n * @returns {any} The serialized value.\n */\n abstract write(value: T): any;\n}\n"],"names":[],"mappings":";;MAWsB,aAAa,CAAA;AAW/B,IAAA,UAAU,CAAC,aAA0B,EAAA;AACjC,QAAA,OAAO,aAAa,KAAK,IAAI,CAAC,IAAI;IACtC;AAeH;;;;"}
@@ -0,0 +1,9 @@
1
+ import { Constructor } from '../Constructor';
2
+ import { LineString } from '../geospatial';
3
+ import { JsonConverter } from './JsonConverter';
4
+ export declare class LineStringJsonConverter extends JsonConverter<LineString> {
5
+ get type(): Constructor<LineString>;
6
+ read(value: any): LineString;
7
+ write(value: any): any;
8
+ }
9
+ //# sourceMappingURL=LineStringJsonConverter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LineStringJsonConverter.d.ts","sourceRoot":"","sources":["../../../json/LineStringJsonConverter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAS,UAAU,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAOhD,qBAAa,uBAAwB,SAAQ,aAAa,CAAC,UAAU,CAAC;IAElE,IAAI,IAAI,IAAI,WAAW,CAAC,UAAU,CAAC,CAElC;IAGD,IAAI,CAAC,KAAK,EAAE,GAAG,GAAG,UAAU;IAY5B,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,GAAG;CAGzB"}
@@ -0,0 +1,27 @@
1
+ 'use strict';
2
+
3
+ var Point = require('../geospatial/Point.js');
4
+ var LineString = require('../geospatial/LineString.js');
5
+ var JsonConverter = require('./JsonConverter.js');
6
+
7
+ class LineStringJsonConverter extends JsonConverter.JsonConverter {
8
+ get type() {
9
+ return LineString.LineString;
10
+ }
11
+ read(value) {
12
+ if (value === null || value === undefined) {
13
+ throw new Error('Cannot deserialize null or undefined to LineString');
14
+ }
15
+ if (value.type !== 'LineString' || !value.coordinates || value.coordinates.length < 2) {
16
+ throw new Error('Cannot deserialize LineString: invalid GeoJSON format');
17
+ }
18
+ const points = value.coordinates.map((coord) => new Point.Point(coord[0], coord[1]));
19
+ return new LineString.LineString(points);
20
+ }
21
+ write(value) {
22
+ return value?.toJSON() ?? null;
23
+ }
24
+ }
25
+
26
+ exports.LineStringJsonConverter = LineStringJsonConverter;
27
+ //# sourceMappingURL=LineStringJsonConverter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LineStringJsonConverter.js","sources":["../../../json/LineStringJsonConverter.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { Constructor } from '../Constructor';\nimport { Point, LineString } from '../geospatial';\nimport { JsonConverter } from './JsonConverter';\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/**\n * JSON converter for LineString type (GeoJSON format).\n */\nexport class LineStringJsonConverter extends JsonConverter<LineString> {\n /** @inheritdoc */\n get type(): Constructor<LineString> {\n return LineString;\n }\n\n /** @inheritdoc */\n read(value: any): LineString {\n if (value === null || value === undefined) {\n throw new Error('Cannot deserialize null or undefined to LineString');\n }\n if (value.type !== 'LineString' || !value.coordinates || value.coordinates.length < 2) {\n throw new Error('Cannot deserialize LineString: invalid GeoJSON format');\n }\n const points = value.coordinates.map((coord: number[]) => new Point(coord[0], coord[1]));\n return new LineString(points);\n }\n\n /** @inheritdoc */\n write(value: any): any {\n return value?.toJSON() ?? null;\n }\n}\n"],"names":["JsonConverter","LineString","Point"],"mappings":";;;;;;AAYM,MAAO,uBAAwB,SAAQA,2BAAyB,CAAA;AAElE,IAAA,IAAI,IAAI,GAAA;AACJ,QAAA,OAAOC,qBAAU;IACrB;AAGA,IAAA,IAAI,CAAC,KAAU,EAAA;QACX,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;AACvC,YAAA,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC;QACzE;AACA,QAAA,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;AACnF,YAAA,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC;QAC5E;QACA,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,KAAe,KAAK,IAAIC,WAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACxF,QAAA,OAAO,IAAID,qBAAU,CAAC,MAAM,CAAC;IACjC;AAGA,IAAA,KAAK,CAAC,KAAU,EAAA;AACZ,QAAA,OAAO,KAAK,EAAE,MAAM,EAAE,IAAI,IAAI;IAClC;AACH;;;;"}
@@ -0,0 +1,9 @@
1
+ import { Constructor } from '../Constructor';
2
+ import { Point } from '../geospatial';
3
+ import { JsonConverter } from './JsonConverter';
4
+ export declare class PointJsonConverter extends JsonConverter<Point> {
5
+ get type(): Constructor<Point>;
6
+ read(value: any): Point;
7
+ write(value: any): any;
8
+ }
9
+ //# sourceMappingURL=PointJsonConverter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PointJsonConverter.d.ts","sourceRoot":"","sources":["../../../json/PointJsonConverter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAOhD,qBAAa,kBAAmB,SAAQ,aAAa,CAAC,KAAK,CAAC;IAExD,IAAI,IAAI,IAAI,WAAW,CAAC,KAAK,CAAC,CAE7B;IAGD,IAAI,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK;IAWvB,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,GAAG;CAGzB"}
@@ -0,0 +1,25 @@
1
+ 'use strict';
2
+
3
+ var Point = require('../geospatial/Point.js');
4
+ var JsonConverter = require('./JsonConverter.js');
5
+
6
+ class PointJsonConverter extends JsonConverter.JsonConverter {
7
+ get type() {
8
+ return Point.Point;
9
+ }
10
+ read(value) {
11
+ if (value === null || value === undefined) {
12
+ throw new Error('Cannot deserialize null or undefined to Point');
13
+ }
14
+ if (value.type !== 'Point' || !value.coordinates || value.coordinates.length !== 2) {
15
+ throw new Error('Cannot deserialize Point: invalid GeoJSON format');
16
+ }
17
+ return new Point.Point(value.coordinates[0], value.coordinates[1]);
18
+ }
19
+ write(value) {
20
+ return value?.toJSON() ?? null;
21
+ }
22
+ }
23
+
24
+ exports.PointJsonConverter = PointJsonConverter;
25
+ //# sourceMappingURL=PointJsonConverter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PointJsonConverter.js","sources":["../../../json/PointJsonConverter.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { Constructor } from '../Constructor';\nimport { Point } from '../geospatial';\nimport { JsonConverter } from './JsonConverter';\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/**\n * JSON converter for Point type (GeoJSON format).\n */\nexport class PointJsonConverter extends JsonConverter<Point> {\n /** @inheritdoc */\n get type(): Constructor<Point> {\n return Point;\n }\n\n /** @inheritdoc */\n read(value: any): Point {\n if (value === null || value === undefined) {\n throw new Error('Cannot deserialize null or undefined to Point');\n }\n if (value.type !== 'Point' || !value.coordinates || value.coordinates.length !== 2) {\n throw new Error('Cannot deserialize Point: invalid GeoJSON format');\n }\n return new Point(value.coordinates[0], value.coordinates[1]);\n }\n\n /** @inheritdoc */\n write(value: any): any {\n return value?.toJSON() ?? null;\n }\n}\n"],"names":["JsonConverter","Point"],"mappings":";;;;;AAYM,MAAO,kBAAmB,SAAQA,2BAAoB,CAAA;AAExD,IAAA,IAAI,IAAI,GAAA;AACJ,QAAA,OAAOC,WAAK;IAChB;AAGA,IAAA,IAAI,CAAC,KAAU,EAAA;QACX,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;AACvC,YAAA,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC;QACpE;AACA,QAAA,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;AAChF,YAAA,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC;QACvE;AACA,QAAA,OAAO,IAAIA,WAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAChE;AAGA,IAAA,KAAK,CAAC,KAAU,EAAA;AACZ,QAAA,OAAO,KAAK,EAAE,MAAM,EAAE,IAAI,IAAI;IAClC;AACH;;;;"}
@@ -0,0 +1,9 @@
1
+ import { Constructor } from '../Constructor';
2
+ import { Polygon } from '../geospatial';
3
+ import { JsonConverter } from './JsonConverter';
4
+ export declare class PolygonJsonConverter extends JsonConverter<Polygon> {
5
+ get type(): Constructor<Polygon>;
6
+ read(value: any): Polygon;
7
+ write(value: any): any;
8
+ }
9
+ //# sourceMappingURL=PolygonJsonConverter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PolygonJsonConverter.d.ts","sourceRoot":"","sources":["../../../json/PolygonJsonConverter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAqB,OAAO,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAOhD,qBAAa,oBAAqB,SAAQ,aAAa,CAAC,OAAO,CAAC;IAE5D,IAAI,IAAI,IAAI,WAAW,CAAC,OAAO,CAAC,CAE/B;IAGD,IAAI,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO;IAezB,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,GAAG;CAGzB"}
@@ -0,0 +1,29 @@
1
+ 'use strict';
2
+
3
+ var Point = require('../geospatial/Point.js');
4
+ var LinearRing = require('../geospatial/LinearRing.js');
5
+ var Polygon = require('../geospatial/Polygon.js');
6
+ var JsonConverter = require('./JsonConverter.js');
7
+
8
+ class PolygonJsonConverter extends JsonConverter.JsonConverter {
9
+ get type() {
10
+ return Polygon.Polygon;
11
+ }
12
+ read(value) {
13
+ if (value === null || value === undefined) {
14
+ throw new Error('Cannot deserialize null or undefined to Polygon');
15
+ }
16
+ if (value.type !== 'Polygon' || !value.coordinates || value.coordinates.length === 0) {
17
+ throw new Error('Cannot deserialize Polygon: invalid GeoJSON format');
18
+ }
19
+ const shell = new LinearRing.LinearRing(value.coordinates[0].map((coord) => new Point.Point(coord[0], coord[1])));
20
+ const holes = value.coordinates.slice(1).map((ring) => new LinearRing.LinearRing(ring.map((coord) => new Point.Point(coord[0], coord[1]))));
21
+ return new Polygon.Polygon(shell, holes);
22
+ }
23
+ write(value) {
24
+ return value?.toJSON() ?? null;
25
+ }
26
+ }
27
+
28
+ exports.PolygonJsonConverter = PolygonJsonConverter;
29
+ //# sourceMappingURL=PolygonJsonConverter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PolygonJsonConverter.js","sources":["../../../json/PolygonJsonConverter.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { Constructor } from '../Constructor';\nimport { Point, LinearRing, Polygon } from '../geospatial';\nimport { JsonConverter } from './JsonConverter';\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/**\n * JSON converter for Polygon type (GeoJSON format).\n */\nexport class PolygonJsonConverter extends JsonConverter<Polygon> {\n /** @inheritdoc */\n get type(): Constructor<Polygon> {\n return Polygon;\n }\n\n /** @inheritdoc */\n read(value: any): Polygon {\n if (value === null || value === undefined) {\n throw new Error('Cannot deserialize null or undefined to Polygon');\n }\n if (value.type !== 'Polygon' || !value.coordinates || value.coordinates.length === 0) {\n throw new Error('Cannot deserialize Polygon: invalid GeoJSON format');\n }\n const shell = new LinearRing(value.coordinates[0].map((coord: number[]) => new Point(coord[0], coord[1])));\n const holes = value.coordinates.slice(1).map((ring: number[][]) => \n new LinearRing(ring.map((coord: number[]) => new Point(coord[0], coord[1])))\n );\n return new Polygon(shell, holes);\n }\n\n /** @inheritdoc */\n write(value: any): any {\n return value?.toJSON() ?? null;\n }\n}\n"],"names":["JsonConverter","Polygon","LinearRing","Point"],"mappings":";;;;;;;AAYM,MAAO,oBAAqB,SAAQA,2BAAsB,CAAA;AAE5D,IAAA,IAAI,IAAI,GAAA;AACJ,QAAA,OAAOC,eAAO;IAClB;AAGA,IAAA,IAAI,CAAC,KAAU,EAAA;QACX,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;AACvC,YAAA,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC;QACtE;AACA,QAAA,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;AAClF,YAAA,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC;QACzE;AACA,QAAA,MAAM,KAAK,GAAG,IAAIC,qBAAU,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAe,KAAK,IAAIC,WAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1G,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAgB,KAC1D,IAAID,qBAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAe,KAAK,IAAIC,WAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAC/E;AACD,QAAA,OAAO,IAAIF,eAAO,CAAC,KAAK,EAAE,KAAK,CAAC;IACpC;AAGA,IAAA,KAAK,CAAC,KAAU,EAAA;AACZ,QAAA,OAAO,KAAK,EAAE,MAAM,EAAE,IAAI,IAAI;IAClC;AACH;;;;"}