@cratis/fundamentals 7.15.0 → 7.15.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/JsonSerializer.ts +88 -56
- package/dist/JsonSerializer.d.ts.map +1 -1
- package/dist/JsonSerializer.js +50 -54
- package/dist/JsonSerializer.js.map +1 -1
- package/dist/cjs/JsonSerializer.d.ts.map +1 -1
- package/dist/cjs/JsonSerializer.js +56 -54
- package/dist/cjs/JsonSerializer.js.map +1 -1
- package/dist/cjs/geospatial/LineString.d.ts +7 -0
- package/dist/cjs/geospatial/LineString.d.ts.map +1 -0
- package/dist/cjs/geospatial/LineString.js +20 -0
- package/dist/cjs/geospatial/LineString.js.map +1 -0
- package/dist/cjs/geospatial/LinearRing.d.ts +7 -0
- package/dist/cjs/geospatial/LinearRing.d.ts.map +1 -0
- package/dist/cjs/geospatial/LinearRing.js +17 -0
- package/dist/cjs/geospatial/LinearRing.js.map +1 -0
- package/dist/cjs/geospatial/Point.d.ts +7 -0
- package/dist/cjs/geospatial/Point.d.ts.map +1 -0
- package/dist/cjs/geospatial/Point.js +30 -0
- package/dist/cjs/geospatial/Point.js.map +1 -0
- package/dist/cjs/geospatial/Polygon.d.ts +8 -0
- package/dist/cjs/geospatial/Polygon.d.ts.map +1 -0
- package/dist/cjs/geospatial/Polygon.js +23 -0
- package/dist/cjs/geospatial/Polygon.js.map +1 -0
- package/dist/cjs/geospatial/index.d.ts +5 -0
- package/dist/cjs/geospatial/index.d.ts.map +1 -0
- package/dist/cjs/index.d.ts +2 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +24 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/json/DateJsonConverter.d.ts +8 -0
- package/dist/cjs/json/DateJsonConverter.d.ts.map +1 -0
- package/dist/cjs/json/DateJsonConverter.js +18 -0
- package/dist/cjs/json/DateJsonConverter.js.map +1 -0
- package/dist/cjs/json/GuidJsonConverter.d.ts +9 -0
- package/dist/cjs/json/GuidJsonConverter.d.ts.map +1 -0
- package/dist/cjs/json/GuidJsonConverter.js +19 -0
- package/dist/cjs/json/GuidJsonConverter.js.map +1 -0
- package/dist/cjs/json/JsonConverter.d.ts +8 -0
- package/dist/cjs/json/JsonConverter.d.ts.map +1 -0
- package/dist/cjs/json/JsonConverter.js +10 -0
- package/dist/cjs/json/JsonConverter.js.map +1 -0
- package/dist/cjs/json/LineStringJsonConverter.d.ts +9 -0
- package/dist/cjs/json/LineStringJsonConverter.d.ts.map +1 -0
- package/dist/cjs/json/LineStringJsonConverter.js +27 -0
- package/dist/cjs/json/LineStringJsonConverter.js.map +1 -0
- package/dist/cjs/json/PointJsonConverter.d.ts +9 -0
- package/dist/cjs/json/PointJsonConverter.d.ts.map +1 -0
- package/dist/cjs/json/PointJsonConverter.js +28 -0
- package/dist/cjs/json/PointJsonConverter.js.map +1 -0
- package/dist/cjs/json/PolygonJsonConverter.d.ts +9 -0
- package/dist/cjs/json/PolygonJsonConverter.d.ts.map +1 -0
- package/dist/cjs/json/PolygonJsonConverter.js +29 -0
- package/dist/cjs/json/PolygonJsonConverter.js.map +1 -0
- package/dist/cjs/json/TimeSpanJsonConverter.d.ts +9 -0
- package/dist/cjs/json/TimeSpanJsonConverter.d.ts.map +1 -0
- package/dist/cjs/json/TimeSpanJsonConverter.js +19 -0
- package/dist/cjs/json/TimeSpanJsonConverter.js.map +1 -0
- package/dist/cjs/json/ValueMapJsonConverter.d.ts +12 -0
- package/dist/cjs/json/ValueMapJsonConverter.d.ts.map +1 -0
- package/dist/cjs/json/ValueMapJsonConverter.js +33 -0
- package/dist/cjs/json/ValueMapJsonConverter.js.map +1 -0
- package/dist/cjs/json/index.d.ts +9 -0
- package/dist/cjs/json/index.d.ts.map +1 -0
- package/dist/esm/JsonSerializer.d.ts.map +1 -1
- package/dist/esm/JsonSerializer.js +56 -54
- package/dist/esm/JsonSerializer.js.map +1 -1
- package/dist/esm/geospatial/LineString.d.ts +7 -0
- package/dist/esm/geospatial/LineString.d.ts.map +1 -0
- package/dist/esm/geospatial/LineString.js +18 -0
- package/dist/esm/geospatial/LineString.js.map +1 -0
- package/dist/esm/geospatial/LinearRing.d.ts +7 -0
- package/dist/esm/geospatial/LinearRing.d.ts.map +1 -0
- package/dist/esm/geospatial/LinearRing.js +15 -0
- package/dist/esm/geospatial/LinearRing.js.map +1 -0
- package/dist/esm/geospatial/Point.d.ts +7 -0
- package/dist/esm/geospatial/Point.d.ts.map +1 -0
- package/dist/esm/geospatial/Point.js +28 -0
- package/dist/esm/geospatial/Point.js.map +1 -0
- package/dist/esm/geospatial/Polygon.d.ts +8 -0
- package/dist/esm/geospatial/Polygon.d.ts.map +1 -0
- package/dist/esm/geospatial/Polygon.js +21 -0
- package/dist/esm/geospatial/Polygon.js.map +1 -0
- package/dist/esm/geospatial/index.d.ts +5 -0
- package/dist/esm/geospatial/index.d.ts.map +1 -0
- package/dist/esm/index.d.ts +2 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +12 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/json/DateJsonConverter.d.ts +8 -0
- package/dist/esm/json/DateJsonConverter.d.ts.map +1 -0
- package/dist/esm/json/DateJsonConverter.js +16 -0
- package/dist/esm/json/DateJsonConverter.js.map +1 -0
- package/dist/esm/json/GuidJsonConverter.d.ts +9 -0
- package/dist/esm/json/GuidJsonConverter.d.ts.map +1 -0
- package/dist/esm/json/GuidJsonConverter.js +17 -0
- package/dist/esm/json/GuidJsonConverter.js.map +1 -0
- package/dist/esm/json/JsonConverter.d.ts +8 -0
- package/dist/esm/json/JsonConverter.d.ts.map +1 -0
- package/dist/esm/json/JsonConverter.js +8 -0
- package/dist/esm/json/JsonConverter.js.map +1 -0
- package/dist/esm/json/LineStringJsonConverter.d.ts +9 -0
- package/dist/esm/json/LineStringJsonConverter.d.ts.map +1 -0
- package/dist/esm/json/LineStringJsonConverter.js +25 -0
- package/dist/esm/json/LineStringJsonConverter.js.map +1 -0
- package/dist/esm/json/PointJsonConverter.d.ts +9 -0
- package/dist/esm/json/PointJsonConverter.d.ts.map +1 -0
- package/dist/esm/json/PointJsonConverter.js +26 -0
- package/dist/esm/json/PointJsonConverter.js.map +1 -0
- package/dist/esm/json/PolygonJsonConverter.d.ts +9 -0
- package/dist/esm/json/PolygonJsonConverter.d.ts.map +1 -0
- package/dist/esm/json/PolygonJsonConverter.js +27 -0
- package/dist/esm/json/PolygonJsonConverter.js.map +1 -0
- package/dist/esm/json/TimeSpanJsonConverter.d.ts +9 -0
- package/dist/esm/json/TimeSpanJsonConverter.d.ts.map +1 -0
- package/dist/esm/json/TimeSpanJsonConverter.js +17 -0
- package/dist/esm/json/TimeSpanJsonConverter.js.map +1 -0
- package/dist/esm/json/ValueMapJsonConverter.d.ts +12 -0
- package/dist/esm/json/ValueMapJsonConverter.d.ts.map +1 -0
- package/dist/esm/json/ValueMapJsonConverter.js +31 -0
- package/dist/esm/json/ValueMapJsonConverter.js.map +1 -0
- package/dist/esm/json/index.d.ts +9 -0
- package/dist/esm/json/index.d.ts.map +1 -0
- package/dist/geospatial/LineString.d.ts +7 -0
- package/dist/geospatial/LineString.d.ts.map +1 -0
- package/dist/geospatial/LineString.js +16 -0
- package/dist/geospatial/LineString.js.map +1 -0
- package/dist/geospatial/LinearRing.d.ts +7 -0
- package/dist/geospatial/LinearRing.d.ts.map +1 -0
- package/dist/geospatial/LinearRing.js +13 -0
- package/dist/geospatial/LinearRing.js.map +1 -0
- package/dist/geospatial/Point.d.ts +7 -0
- package/dist/geospatial/Point.d.ts.map +1 -0
- package/dist/geospatial/Point.js +25 -0
- package/dist/geospatial/Point.js.map +1 -0
- package/dist/geospatial/Polygon.d.ts +8 -0
- package/dist/geospatial/Polygon.d.ts.map +1 -0
- package/dist/geospatial/Polygon.js +19 -0
- package/dist/geospatial/Polygon.js.map +1 -0
- package/dist/geospatial/index.d.ts +5 -0
- package/dist/geospatial/index.d.ts.map +1 -0
- package/dist/geospatial/index.js +5 -0
- package/dist/geospatial/index.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/json/DateJsonConverter.d.ts +8 -0
- package/dist/json/DateJsonConverter.d.ts.map +1 -0
- package/dist/json/DateJsonConverter.js +13 -0
- package/dist/json/DateJsonConverter.js.map +1 -0
- package/dist/json/GuidJsonConverter.d.ts +9 -0
- package/dist/json/GuidJsonConverter.d.ts.map +1 -0
- package/dist/json/GuidJsonConverter.js +14 -0
- package/dist/json/GuidJsonConverter.js.map +1 -0
- package/dist/json/JsonConverter.d.ts +8 -0
- package/dist/json/JsonConverter.d.ts.map +1 -0
- package/dist/json/JsonConverter.js +6 -0
- package/dist/json/JsonConverter.js.map +1 -0
- package/dist/json/LineStringJsonConverter.d.ts +9 -0
- package/dist/json/LineStringJsonConverter.d.ts.map +1 -0
- package/dist/json/LineStringJsonConverter.js +21 -0
- package/dist/json/LineStringJsonConverter.js.map +1 -0
- package/dist/json/PointJsonConverter.d.ts +9 -0
- package/dist/json/PointJsonConverter.d.ts.map +1 -0
- package/dist/json/PointJsonConverter.js +23 -0
- package/dist/json/PointJsonConverter.js.map +1 -0
- package/dist/json/PolygonJsonConverter.d.ts +9 -0
- package/dist/json/PolygonJsonConverter.d.ts.map +1 -0
- package/dist/json/PolygonJsonConverter.js +22 -0
- package/dist/json/PolygonJsonConverter.js.map +1 -0
- package/dist/json/TimeSpanJsonConverter.d.ts +9 -0
- package/dist/json/TimeSpanJsonConverter.d.ts.map +1 -0
- package/dist/json/TimeSpanJsonConverter.js +14 -0
- package/dist/json/TimeSpanJsonConverter.js.map +1 -0
- package/dist/json/ValueMapJsonConverter.d.ts +12 -0
- package/dist/json/ValueMapJsonConverter.d.ts.map +1 -0
- package/dist/json/ValueMapJsonConverter.js +28 -0
- package/dist/json/ValueMapJsonConverter.js.map +1 -0
- package/dist/json/index.d.ts +9 -0
- package/dist/json/index.d.ts.map +1 -0
- package/dist/json/index.js +9 -0
- package/dist/json/index.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/geospatial/LineString.ts +33 -0
- package/geospatial/LinearRing.ts +30 -0
- package/geospatial/Point.ts +36 -0
- package/geospatial/Polygon.ts +37 -0
- package/geospatial/index.ts +7 -0
- package/index.ts +2 -1
- package/json/DateJsonConverter.ts +27 -0
- package/json/GuidJsonConverter.ts +28 -0
- package/json/JsonConverter.ts +40 -0
- package/json/LineStringJsonConverter.ts +35 -0
- package/json/PointJsonConverter.ts +37 -0
- package/json/PolygonJsonConverter.ts +38 -0
- package/json/TimeSpanJsonConverter.ts +28 -0
- package/json/ValueMapJsonConverter.ts +57 -0
- package/json/for_DateJsonConverter/when_reading_date_with_date_converter.ts +12 -0
- package/json/for_DateJsonConverter/when_writing_date_with_date_converter.ts +12 -0
- package/json/for_GuidJsonConverter/when_reading_guid_with_guid_converter.ts +13 -0
- package/json/for_GuidJsonConverter/when_writing_guid_with_guid_converter.ts +13 -0
- package/json/for_LineStringJsonConverter/when_deserializing_linestring.ts +19 -0
- package/json/for_LineStringJsonConverter/when_reading_linestring_with_linestring_converter.ts +24 -0
- package/json/for_LineStringJsonConverter/when_serializing_linestring.ts +25 -0
- package/json/for_LineStringJsonConverter/when_writing_linestring_with_linestring_converter.ts +27 -0
- package/json/for_PointJsonConverter/when_deserializing_point.ts +14 -0
- package/json/for_PointJsonConverter/when_reading_point_with_point_converter.ts +14 -0
- package/json/for_PointJsonConverter/when_serializing_point.ts +17 -0
- package/json/for_PointJsonConverter/when_writing_point_with_point_converter.ts +16 -0
- package/json/for_PolygonJsonConverter/when_deserializing_polygon_with_holes.ts +28 -0
- package/json/for_PolygonJsonConverter/when_deserializing_polygon_with_no_holes.ts +22 -0
- package/json/for_PolygonJsonConverter/when_reading_polygon_with_polygon_converter.ts +27 -0
- package/json/for_PolygonJsonConverter/when_serializing_polygon_with_holes.ts +53 -0
- package/json/for_PolygonJsonConverter/when_serializing_polygon_with_no_holes.ts +33 -0
- package/json/for_PolygonJsonConverter/when_writing_polygon_with_polygon_converter.ts +35 -0
- package/json/for_TimeSpanJsonConverter/when_reading_timespan_with_timespan_converter.ts +16 -0
- package/json/for_TimeSpanJsonConverter/when_writing_timespan_with_timespan_converter.ts +13 -0
- package/json/for_ValueMapJsonConverter/when_writing_valuemap_with_valuemap_converter.ts +28 -0
- package/json/index.ts +11 -0
- package/package.json +11 -1
- package/Coordinate.ts +0 -38
- package/dist/Coordinate.d.ts +0 -7
- package/dist/Coordinate.d.ts.map +0 -1
- package/dist/Coordinate.js +0 -27
- package/dist/Coordinate.js.map +0 -1
- package/dist/cjs/Coordinate.d.ts +0 -7
- package/dist/cjs/Coordinate.d.ts.map +0 -1
- package/dist/cjs/Coordinate.js +0 -32
- package/dist/cjs/Coordinate.js.map +0 -1
- package/dist/esm/Coordinate.d.ts +0 -7
- package/dist/esm/Coordinate.d.ts.map +0 -1
- package/dist/esm/Coordinate.js +0 -30
- package/dist/esm/Coordinate.js.map +0 -1
- package/for_Coordinate/when_creating_coordinate.ts +0 -11
- package/for_Coordinate/when_deserializing_coordinate.ts +0 -14
- package/for_Coordinate/when_deserializing_coordinate_with_missing_properties.ts +0 -13
- package/for_Coordinate/when_serializing_coordinate.ts +0 -14
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Constructor } from '../Constructor';
|
|
2
|
+
import { TimeSpan } from '../TimeSpan';
|
|
3
|
+
import { JsonConverter } from './JsonConverter';
|
|
4
|
+
export declare class TimeSpanJsonConverter extends JsonConverter<TimeSpan> {
|
|
5
|
+
get type(): Constructor<TimeSpan>;
|
|
6
|
+
read(value: any): TimeSpan;
|
|
7
|
+
write(value: any): any;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=TimeSpanJsonConverter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TimeSpanJsonConverter.d.ts","sourceRoot":"","sources":["../../../json/TimeSpanJsonConverter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAOhD,qBAAa,qBAAsB,SAAQ,aAAa,CAAC,QAAQ,CAAC;IAE9D,IAAI,IAAI,IAAI,WAAW,CAAC,QAAQ,CAAC,CAEhC;IAGD,IAAI,CAAC,KAAK,EAAE,GAAG,GAAG,QAAQ;IAK1B,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,GAAG;CAGzB"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var TimeSpan = require('../TimeSpan.js');
|
|
4
|
+
var JsonConverter = require('./JsonConverter.js');
|
|
5
|
+
|
|
6
|
+
class TimeSpanJsonConverter extends JsonConverter.JsonConverter {
|
|
7
|
+
get type() {
|
|
8
|
+
return TimeSpan.TimeSpan;
|
|
9
|
+
}
|
|
10
|
+
read(value) {
|
|
11
|
+
return TimeSpan.TimeSpan.parse(value.toString());
|
|
12
|
+
}
|
|
13
|
+
write(value) {
|
|
14
|
+
return value?.toString() ?? '';
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
exports.TimeSpanJsonConverter = TimeSpanJsonConverter;
|
|
19
|
+
//# sourceMappingURL=TimeSpanJsonConverter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TimeSpanJsonConverter.js","sources":["../../../json/TimeSpanJsonConverter.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 { TimeSpan } from '../TimeSpan';\nimport { JsonConverter } from './JsonConverter';\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/**\n * JSON converter for TimeSpan type.\n */\nexport class TimeSpanJsonConverter extends JsonConverter<TimeSpan> {\n /** @inheritdoc */\n get type(): Constructor<TimeSpan> {\n return TimeSpan;\n }\n\n /** @inheritdoc */\n read(value: any): TimeSpan {\n return TimeSpan.parse(value.toString());\n }\n\n /** @inheritdoc */\n write(value: any): any {\n return value?.toString() ?? '';\n }\n}\n"],"names":["JsonConverter","TimeSpan"],"mappings":";;;;;AAYM,MAAO,qBAAsB,SAAQA,2BAAuB,CAAA;AAE9D,IAAA,IAAI,IAAI,GAAA;AACJ,QAAA,OAAOC,iBAAQ;IACnB;AAGA,IAAA,IAAI,CAAC,KAAU,EAAA;QACX,OAAOA,iBAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC3C;AAGA,IAAA,KAAK,CAAC,KAAU,EAAA;AACZ,QAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE;IAClC;AACH;;;;"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Constructor } from '../Constructor';
|
|
2
|
+
import { ValueMap } from '../ValueMap';
|
|
3
|
+
import { JsonConverter } from './JsonConverter';
|
|
4
|
+
export declare class ValueMapJsonConverter extends JsonConverter<ValueMap<any, any>> {
|
|
5
|
+
private static serializeMapKey;
|
|
6
|
+
private static convertTypesOnInstance;
|
|
7
|
+
static setHelpers(serializeMapKey: (key: any) => string, convertTypesOnInstance: (instance: any) => any): void;
|
|
8
|
+
get type(): Constructor<ValueMap<any, any>>;
|
|
9
|
+
read(_value: any): ValueMap<any, any>;
|
|
10
|
+
write(value: ValueMap<any, any>): any;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=ValueMapJsonConverter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ValueMapJsonConverter.d.ts","sourceRoot":"","sources":["../../../json/ValueMapJsonConverter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAYhD,qBAAa,qBAAsB,SAAQ,aAAa,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAExE,OAAO,CAAC,MAAM,CAAC,eAAe,CAAuC;IACrE,OAAO,CAAC,MAAM,CAAC,sBAAsB,CAAyC;IAK9E,MAAM,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,EAAE,sBAAsB,EAAE,CAAC,QAAQ,EAAE,GAAG,KAAK,GAAG,GAAG,IAAI;IAM9G,IAAI,IAAI,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAE1C;IAGD,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;IASrC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG;CAWxC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var ValueMap = require('../ValueMap.js');
|
|
4
|
+
var JsonConverter = require('./JsonConverter.js');
|
|
5
|
+
|
|
6
|
+
class ValueMapJsonConverter extends JsonConverter.JsonConverter {
|
|
7
|
+
static serializeMapKey = null;
|
|
8
|
+
static convertTypesOnInstance = null;
|
|
9
|
+
static setHelpers(serializeMapKey, convertTypesOnInstance) {
|
|
10
|
+
ValueMapJsonConverter.serializeMapKey = serializeMapKey;
|
|
11
|
+
ValueMapJsonConverter.convertTypesOnInstance = convertTypesOnInstance;
|
|
12
|
+
}
|
|
13
|
+
get type() {
|
|
14
|
+
return ValueMap.ValueMap;
|
|
15
|
+
}
|
|
16
|
+
read(_value) {
|
|
17
|
+
const valueMap = new ValueMap.ValueMap();
|
|
18
|
+
return valueMap;
|
|
19
|
+
}
|
|
20
|
+
write(value) {
|
|
21
|
+
if (!ValueMapJsonConverter.serializeMapKey || !ValueMapJsonConverter.convertTypesOnInstance) {
|
|
22
|
+
throw new Error('ValueMapJsonConverter helpers not initialized. Call setHelpers() first.');
|
|
23
|
+
}
|
|
24
|
+
const converted = {};
|
|
25
|
+
for (const [key, mapValue] of value.entries()) {
|
|
26
|
+
converted[ValueMapJsonConverter.serializeMapKey(key)] = ValueMapJsonConverter.convertTypesOnInstance(mapValue);
|
|
27
|
+
}
|
|
28
|
+
return converted;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
exports.ValueMapJsonConverter = ValueMapJsonConverter;
|
|
33
|
+
//# sourceMappingURL=ValueMapJsonConverter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ValueMapJsonConverter.js","sources":["../../../json/ValueMapJsonConverter.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 { ValueMap } from '../ValueMap';\nimport { JsonConverter } from './JsonConverter';\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unused-vars */\n\n/**\n * JSON converter for ValueMap type.\n * \n * Note: ValueMap deserialization is handled separately by JsonSerializer.deserializeValueMapFromField\n * based on field metadata to properly deserialize keys and values according to their types.\n * The read() method is not used directly during normal deserialization.\n */\nexport class ValueMapJsonConverter extends JsonConverter<ValueMap<any, any>> {\n // Circular dependency workaround - these will be injected by JsonSerializer\n private static serializeMapKey: ((key: any) => string) | null = null;\n private static convertTypesOnInstance: ((instance: any) => any) | null = null;\n\n /**\n * Sets the required helper functions from JsonSerializer to avoid circular dependencies.\n */\n static setHelpers(serializeMapKey: (key: any) => string, convertTypesOnInstance: (instance: any) => any): void {\n ValueMapJsonConverter.serializeMapKey = serializeMapKey;\n ValueMapJsonConverter.convertTypesOnInstance = convertTypesOnInstance;\n }\n\n /** @inheritdoc */\n get type(): Constructor<ValueMap<any, any>> {\n return ValueMap;\n }\n\n /** @inheritdoc */\n read(_value: any): ValueMap<any, any> {\n // ValueMap deserialization is handled separately by JsonSerializer.deserializeValueMapFromField\n // based on field metadata to properly deserialize keys and values according to their types.\n // This method should not be called directly during normal deserialization.\n const valueMap = new ValueMap<any, any>();\n return valueMap;\n }\n\n /** @inheritdoc */\n write(value: ValueMap<any, any>): any {\n if (!ValueMapJsonConverter.serializeMapKey || !ValueMapJsonConverter.convertTypesOnInstance) {\n throw new Error('ValueMapJsonConverter helpers not initialized. Call setHelpers() first.');\n }\n\n const converted: any = {};\n for (const [key, mapValue] of value.entries()) {\n converted[ValueMapJsonConverter.serializeMapKey(key)] = ValueMapJsonConverter.convertTypesOnInstance(mapValue);\n }\n return converted;\n }\n}\n"],"names":["JsonConverter","ValueMap"],"mappings":";;;;;AAiBM,MAAO,qBAAsB,SAAQA,2BAAiC,CAAA;AAEhE,IAAA,OAAO,eAAe,GAAkC,IAAI;AAC5D,IAAA,OAAO,sBAAsB,GAAoC,IAAI;AAK7E,IAAA,OAAO,UAAU,CAAC,eAAqC,EAAE,sBAA8C,EAAA;AACnG,QAAA,qBAAqB,CAAC,eAAe,GAAG,eAAe;AACvD,QAAA,qBAAqB,CAAC,sBAAsB,GAAG,sBAAsB;IACzE;AAGA,IAAA,IAAI,IAAI,GAAA;AACJ,QAAA,OAAOC,iBAAQ;IACnB;AAGA,IAAA,IAAI,CAAC,MAAW,EAAA;AAIZ,QAAA,MAAM,QAAQ,GAAG,IAAIA,iBAAQ,EAAY;AACzC,QAAA,OAAO,QAAQ;IACnB;AAGA,IAAA,KAAK,CAAC,KAAyB,EAAA;QAC3B,IAAI,CAAC,qBAAqB,CAAC,eAAe,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,EAAE;AACzF,YAAA,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC;QAC9F;QAEA,MAAM,SAAS,GAAQ,EAAE;AACzB,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE;AAC3C,YAAA,SAAS,CAAC,qBAAqB,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,qBAAqB,CAAC,sBAAsB,CAAC,QAAQ,CAAC;QAClH;AACA,QAAA,OAAO,SAAS;IACpB;;;;;"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from './JsonConverter';
|
|
2
|
+
export * from './DateJsonConverter';
|
|
3
|
+
export * from './GuidJsonConverter';
|
|
4
|
+
export * from './TimeSpanJsonConverter';
|
|
5
|
+
export * from './PointJsonConverter';
|
|
6
|
+
export * from './LineStringJsonConverter';
|
|
7
|
+
export * from './PolygonJsonConverter';
|
|
8
|
+
export * from './ValueMapJsonConverter';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../json/index.ts"],"names":[],"mappings":"AAGA,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JsonSerializer.d.ts","sourceRoot":"","sources":["../../JsonSerializer.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;
|
|
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,46 +1,39 @@
|
|
|
1
1
|
import { ConceptAs } from './ConceptAs.js';
|
|
2
|
-
import { Coordinate } from './Coordinate.js';
|
|
3
2
|
import { DerivedType } from './DerivedType.js';
|
|
4
3
|
import { Fields } from './Fields.js';
|
|
5
|
-
import { Guid } from './Guid.js';
|
|
6
|
-
import { TimeSpan } from './TimeSpan.js';
|
|
7
4
|
import { ValueMap } from './ValueMap.js';
|
|
5
|
+
import { DateJsonConverter } from './json/DateJsonConverter.js';
|
|
6
|
+
import { GuidJsonConverter } from './json/GuidJsonConverter.js';
|
|
7
|
+
import { TimeSpanJsonConverter } from './json/TimeSpanJsonConverter.js';
|
|
8
|
+
import { PointJsonConverter } from './json/PointJsonConverter.js';
|
|
9
|
+
import { LineStringJsonConverter } from './json/LineStringJsonConverter.js';
|
|
10
|
+
import { PolygonJsonConverter } from './json/PolygonJsonConverter.js';
|
|
11
|
+
import { ValueMapJsonConverter } from './json/ValueMapJsonConverter.js';
|
|
8
12
|
|
|
9
|
-
const
|
|
13
|
+
const converters = [
|
|
14
|
+
new DateJsonConverter(),
|
|
15
|
+
new GuidJsonConverter(),
|
|
16
|
+
new TimeSpanJsonConverter(),
|
|
17
|
+
new PointJsonConverter(),
|
|
18
|
+
new LineStringJsonConverter(),
|
|
19
|
+
new PolygonJsonConverter(),
|
|
20
|
+
new ValueMapJsonConverter()
|
|
21
|
+
];
|
|
22
|
+
const typeConverters = new Map();
|
|
23
|
+
const typeSerializers = new Map();
|
|
24
|
+
for (const converter of converters) {
|
|
25
|
+
typeConverters.set(converter.type, converter);
|
|
26
|
+
typeSerializers.set(converter.type, converter);
|
|
27
|
+
}
|
|
28
|
+
const primitiveConverters = new Map([
|
|
10
29
|
[Number, (value) => value],
|
|
11
30
|
[String, (value) => value],
|
|
12
|
-
[Boolean, (value) => value]
|
|
13
|
-
[Date, (value) => value.toISOString()],
|
|
14
|
-
[Guid, (value) => value?.toString() ?? ''],
|
|
15
|
-
[TimeSpan, (value) => value?.toString() ?? ''],
|
|
16
|
-
[Coordinate, (value) => value?.toJSON() ?? null],
|
|
17
|
-
[ValueMap, (value) => {
|
|
18
|
-
const converted = {};
|
|
19
|
-
for (const [key, mapValue] of value.entries()) {
|
|
20
|
-
converted[serializeMapKey(key)] = convertTypesOnInstance(mapValue);
|
|
21
|
-
}
|
|
22
|
-
return converted;
|
|
23
|
-
}]
|
|
31
|
+
[Boolean, (value) => value]
|
|
24
32
|
]);
|
|
25
|
-
const
|
|
33
|
+
const primitiveSerializers = new Map([
|
|
26
34
|
[Number, (value) => value],
|
|
27
35
|
[String, (value) => value],
|
|
28
|
-
[Boolean, (value) => value]
|
|
29
|
-
[Date, (value) => new Date(value)],
|
|
30
|
-
[Guid, (value) => Guid.parse(value.toString())],
|
|
31
|
-
[TimeSpan, (value) => TimeSpan.parse(value.toString())],
|
|
32
|
-
[Coordinate, (value) => {
|
|
33
|
-
if (value === null || value === undefined) {
|
|
34
|
-
throw new Error('Cannot deserialize null or undefined to Coordinate');
|
|
35
|
-
}
|
|
36
|
-
if (value.longitude === undefined || value.latitude === undefined) {
|
|
37
|
-
throw new Error('Cannot deserialize Coordinate: longitude and latitude are required');
|
|
38
|
-
}
|
|
39
|
-
const coordinate = new Coordinate();
|
|
40
|
-
coordinate.longitude = value.longitude;
|
|
41
|
-
coordinate.latitude = value.latitude;
|
|
42
|
-
return coordinate;
|
|
43
|
-
}],
|
|
36
|
+
[Boolean, (value) => value]
|
|
44
37
|
]);
|
|
45
38
|
const isConceptAs = (type) => {
|
|
46
39
|
if (!type || !type.prototype)
|
|
@@ -62,22 +55,26 @@ const serializeValueForType = (type, value) => {
|
|
|
62
55
|
return serializeValueForType(innerValue.constructor, innerValue);
|
|
63
56
|
}
|
|
64
57
|
if (typeConverters.has(type)) {
|
|
65
|
-
|
|
58
|
+
const converter = typeConverters.get(type);
|
|
59
|
+
return converter.write(value);
|
|
66
60
|
}
|
|
67
|
-
|
|
68
|
-
return
|
|
61
|
+
if (primitiveConverters.has(type)) {
|
|
62
|
+
return primitiveConverters.get(type)(value);
|
|
69
63
|
}
|
|
64
|
+
return convertTypesOnInstance(value);
|
|
70
65
|
};
|
|
71
66
|
const deserializeValueFromType = (type, value) => {
|
|
72
67
|
if (isConceptAs(type)) {
|
|
73
68
|
return new type(value);
|
|
74
69
|
}
|
|
75
70
|
if (typeSerializers.has(type)) {
|
|
76
|
-
|
|
71
|
+
const converter = typeSerializers.get(type);
|
|
72
|
+
return converter.read(value);
|
|
77
73
|
}
|
|
78
|
-
|
|
79
|
-
return
|
|
74
|
+
if (primitiveSerializers.has(type)) {
|
|
75
|
+
return primitiveSerializers.get(type)(value);
|
|
80
76
|
}
|
|
77
|
+
return JsonSerializer.deserialize(type, JSON.stringify(value));
|
|
81
78
|
};
|
|
82
79
|
const deserializeValueFromField = (field, value) => {
|
|
83
80
|
if (field.type === ValueMap) {
|
|
@@ -87,17 +84,19 @@ const deserializeValueFromField = (field, value) => {
|
|
|
87
84
|
return new field.type(value);
|
|
88
85
|
}
|
|
89
86
|
if (typeSerializers.has(field.type)) {
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
else {
|
|
93
|
-
let type = field.type;
|
|
94
|
-
if (value[JsonSerializer.DerivedTypeIdProperty]) {
|
|
95
|
-
const derivedTypeId = value[JsonSerializer.DerivedTypeIdProperty];
|
|
96
|
-
const candidates = [...field.derivatives, ...DerivedType.getDerivedTypesFor(field.type)];
|
|
97
|
-
type = candidates.find(_ => DerivedType.get(_) == derivedTypeId) || type;
|
|
98
|
-
}
|
|
99
|
-
return JsonSerializer.deserialize(type, JSON.stringify(value));
|
|
87
|
+
const converter = typeSerializers.get(field.type);
|
|
88
|
+
return converter.read(value);
|
|
100
89
|
}
|
|
90
|
+
if (primitiveSerializers.has(field.type)) {
|
|
91
|
+
return primitiveSerializers.get(field.type)(value);
|
|
92
|
+
}
|
|
93
|
+
let type = field.type;
|
|
94
|
+
if (value[JsonSerializer.DerivedTypeIdProperty]) {
|
|
95
|
+
const derivedTypeId = value[JsonSerializer.DerivedTypeIdProperty];
|
|
96
|
+
const candidates = [...field.derivatives, ...DerivedType.getDerivedTypesFor(field.type)];
|
|
97
|
+
type = candidates.find(_ => DerivedType.get(_) == derivedTypeId) || type;
|
|
98
|
+
}
|
|
99
|
+
return JsonSerializer.deserialize(type, JSON.stringify(value));
|
|
101
100
|
};
|
|
102
101
|
const serializeMapKey = (key) => {
|
|
103
102
|
if (key === undefined || key === null) {
|
|
@@ -124,11 +123,9 @@ const deserializeMapKey = (keyType, key) => {
|
|
|
124
123
|
if (keyType === Boolean) {
|
|
125
124
|
return key.toLowerCase() === 'true';
|
|
126
125
|
}
|
|
127
|
-
if (keyType === Date) {
|
|
128
|
-
return new Date(key);
|
|
129
|
-
}
|
|
130
126
|
if (typeSerializers.has(keyType)) {
|
|
131
|
-
|
|
127
|
+
const converter = typeSerializers.get(keyType);
|
|
128
|
+
return converter.read(key);
|
|
132
129
|
}
|
|
133
130
|
return JsonSerializer.deserialize(keyType, key);
|
|
134
131
|
};
|
|
@@ -137,7 +134,8 @@ const deserializeMapValue = (valueType, value) => {
|
|
|
137
134
|
return value;
|
|
138
135
|
}
|
|
139
136
|
if (typeSerializers.has(valueType)) {
|
|
140
|
-
|
|
137
|
+
const converter = typeSerializers.get(valueType);
|
|
138
|
+
return converter.read(value);
|
|
141
139
|
}
|
|
142
140
|
return JsonSerializer.deserialize(valueType, JSON.stringify(value));
|
|
143
141
|
};
|
|
@@ -159,6 +157,9 @@ const convertTypesOnInstance = (instance) => {
|
|
|
159
157
|
if (typeConverters.has(instance.constructor)) {
|
|
160
158
|
return serializeValueForType(instance.constructor, instance);
|
|
161
159
|
}
|
|
160
|
+
if (primitiveConverters.has(instance.constructor)) {
|
|
161
|
+
return primitiveConverters.get(instance.constructor)(instance);
|
|
162
|
+
}
|
|
162
163
|
const properties = Object.getOwnPropertyNames(instance);
|
|
163
164
|
const converted = {};
|
|
164
165
|
const derivedTypeId = DerivedType.get(instance.constructor);
|
|
@@ -179,6 +180,7 @@ const convertTypesOnInstance = (instance) => {
|
|
|
179
180
|
});
|
|
180
181
|
return converted;
|
|
181
182
|
};
|
|
183
|
+
ValueMapJsonConverter.setHelpers(serializeMapKey, convertTypesOnInstance);
|
|
182
184
|
class JsonSerializer {
|
|
183
185
|
static DerivedTypeIdProperty = "_derivedTypeId";
|
|
184
186
|
static serialize(value) {
|
|
@@ -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":[],"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":[],"mappings":"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"}
|
|
@@ -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,18 @@
|
|
|
1
|
+
class LineString {
|
|
2
|
+
coordinates;
|
|
3
|
+
constructor(coordinates) {
|
|
4
|
+
if (coordinates.length < 2) {
|
|
5
|
+
throw new Error('LineString must have at least 2 points');
|
|
6
|
+
}
|
|
7
|
+
this.coordinates = coordinates;
|
|
8
|
+
}
|
|
9
|
+
toJSON() {
|
|
10
|
+
return {
|
|
11
|
+
type: 'LineString',
|
|
12
|
+
coordinates: this.coordinates.map(p => [p.longitude, p.latitude])
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export { LineString };
|
|
18
|
+
//# 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 @@
|
|
|
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,15 @@
|
|
|
1
|
+
class LinearRing {
|
|
2
|
+
coordinates;
|
|
3
|
+
constructor(coordinates) {
|
|
4
|
+
if (coordinates.length < 4) {
|
|
5
|
+
throw new Error('LinearRing must have at least 4 points to form a closed ring');
|
|
6
|
+
}
|
|
7
|
+
this.coordinates = coordinates;
|
|
8
|
+
}
|
|
9
|
+
toJSON() {
|
|
10
|
+
return this.coordinates.map(p => [p.longitude, p.latitude]);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export { LinearRing };
|
|
15
|
+
//# 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 @@
|
|
|
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,28 @@
|
|
|
1
|
+
import { __decorate, __metadata } from '../_virtual/_tslib.js';
|
|
2
|
+
import { field } from '../fieldDecorator.js';
|
|
3
|
+
|
|
4
|
+
class Point {
|
|
5
|
+
longitude;
|
|
6
|
+
latitude;
|
|
7
|
+
constructor(longitude, latitude) {
|
|
8
|
+
this.longitude = longitude;
|
|
9
|
+
this.latitude = latitude;
|
|
10
|
+
}
|
|
11
|
+
toJSON() {
|
|
12
|
+
return {
|
|
13
|
+
type: 'Point',
|
|
14
|
+
coordinates: [this.longitude, this.latitude]
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
__decorate([
|
|
19
|
+
field(Number),
|
|
20
|
+
__metadata("design:type", Number)
|
|
21
|
+
], Point.prototype, "longitude", void 0);
|
|
22
|
+
__decorate([
|
|
23
|
+
field(Number),
|
|
24
|
+
__metadata("design:type", Number)
|
|
25
|
+
], Point.prototype, "latitude", void 0);
|
|
26
|
+
|
|
27
|
+
export { Point };
|
|
28
|
+
//# 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":[],"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;AAzBG,UAAA,CAAA;IADC,KAAK,CAAC,MAAM,CAAC;;AACK,CAAA,EAAA,KAAA,CAAA,SAAA,EAAA,WAAA,EAAA,MAAA,CAAA;AAGnB,UAAA,CAAA;IADC,KAAK,CAAC,MAAM,CAAC;;AACI,CAAA,EAAA,KAAA,CAAA,SAAA,EAAA,UAAA,EAAA,MAAA,CAAA;;;;"}
|
|
@@ -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,21 @@
|
|
|
1
|
+
class Polygon {
|
|
2
|
+
shell;
|
|
3
|
+
holes;
|
|
4
|
+
constructor(shell, holes) {
|
|
5
|
+
this.shell = shell;
|
|
6
|
+
this.holes = holes || [];
|
|
7
|
+
}
|
|
8
|
+
toJSON() {
|
|
9
|
+
const rings = [this.shell.toJSON()];
|
|
10
|
+
if (this.holes && this.holes.length > 0) {
|
|
11
|
+
rings.push(...this.holes.map(h => h.toJSON()));
|
|
12
|
+
}
|
|
13
|
+
return {
|
|
14
|
+
type: 'Polygon',
|
|
15
|
+
coordinates: rings
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export { Polygon };
|
|
21
|
+
//# 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 @@
|
|
|
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"}
|
package/dist/esm/index.d.ts
CHANGED
package/dist/esm/index.d.ts.map
CHANGED
|
@@ -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/esm/index.js
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
export { ConceptAs } from './ConceptAs.js';
|
|
2
|
-
export {
|
|
2
|
+
export { Point } from './geospatial/Point.js';
|
|
3
|
+
export { LinearRing } from './geospatial/LinearRing.js';
|
|
4
|
+
export { LineString } from './geospatial/LineString.js';
|
|
5
|
+
export { Polygon } from './geospatial/Polygon.js';
|
|
6
|
+
export { JsonConverter } from './json/JsonConverter.js';
|
|
7
|
+
export { DateJsonConverter } from './json/DateJsonConverter.js';
|
|
8
|
+
export { GuidJsonConverter } from './json/GuidJsonConverter.js';
|
|
9
|
+
export { TimeSpanJsonConverter } from './json/TimeSpanJsonConverter.js';
|
|
10
|
+
export { PointJsonConverter } from './json/PointJsonConverter.js';
|
|
11
|
+
export { LineStringJsonConverter } from './json/LineStringJsonConverter.js';
|
|
12
|
+
export { PolygonJsonConverter } from './json/PolygonJsonConverter.js';
|
|
13
|
+
export { ValueMapJsonConverter } from './json/ValueMapJsonConverter.js';
|
|
3
14
|
export { Field } from './Field.js';
|
|
4
15
|
export { Fields } from './Fields.js';
|
|
5
16
|
export { Guid } from './Guid.js';
|
package/dist/esm/index.js.map
CHANGED
|
@@ -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"}
|