@cratis/fundamentals 6.0.2 → 6.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Constructor.ts +2 -1
- package/Guid.ts +17 -2
- package/IEquatable.ts +1 -1
- package/JsonSerializer.ts +7 -5
- package/PropertyAccessor.ts +3 -1
- package/PropertyPathResolverProxyHandler.ts +3 -0
- package/README.md +1 -0
- package/derivedTypeDecorator.ts +3 -0
- package/dist/Constructor.d.ts +2 -0
- package/dist/Constructor.d.ts.map +1 -0
- package/dist/Constructor.js +2 -0
- package/dist/Constructor.js.map +1 -0
- package/dist/DerivedType.d.ts +6 -0
- package/dist/DerivedType.d.ts.map +1 -0
- package/dist/DerivedType.js +9 -0
- package/dist/DerivedType.js.map +1 -0
- package/dist/Field.d.ts +9 -0
- package/dist/Field.d.ts.map +1 -0
- package/dist/Field.js +13 -0
- package/dist/Field.js.map +1 -0
- package/dist/Fields.d.ts +8 -0
- package/dist/Fields.d.ts.map +1 -0
- package/dist/Fields.js +23 -0
- package/dist/Fields.js.map +1 -0
- package/dist/Guid.d.ts +14 -0
- package/dist/Guid.d.ts.map +1 -0
- package/dist/Guid.js +81 -0
- package/dist/Guid.js.map +1 -0
- package/dist/IEquatable.d.ts +4 -0
- package/dist/IEquatable.d.ts.map +1 -0
- package/dist/IEquatable.js +2 -0
- package/dist/IEquatable.js.map +1 -0
- package/dist/JsonSerializer.d.ts +10 -0
- package/dist/JsonSerializer.d.ts.map +1 -0
- package/dist/JsonSerializer.js +119 -0
- package/dist/JsonSerializer.js.map +1 -0
- package/dist/PropertyAccessor.d.ts +2 -0
- package/dist/PropertyAccessor.d.ts.map +1 -0
- package/dist/PropertyAccessor.js +2 -0
- package/dist/PropertyAccessor.js.map +1 -0
- package/dist/PropertyAccessorDescriptor.d.ts +10 -0
- package/dist/PropertyAccessorDescriptor.d.ts.map +1 -0
- package/dist/PropertyAccessorDescriptor.js +18 -0
- package/dist/PropertyAccessorDescriptor.js.map +1 -0
- package/dist/PropertyPathResolverProxyHandler.d.ts +12 -0
- package/dist/PropertyPathResolverProxyHandler.d.ts.map +1 -0
- package/dist/PropertyPathResolverProxyHandler.js +28 -0
- package/dist/PropertyPathResolverProxyHandler.js.map +1 -0
- package/dist/cjs/Constructor.d.ts +1 -1
- package/dist/cjs/Constructor.d.ts.map +1 -1
- package/dist/cjs/Field.js +4 -0
- package/dist/cjs/Field.js.map +1 -1
- package/dist/cjs/Guid.d.ts +2 -1
- package/dist/cjs/Guid.d.ts.map +1 -1
- package/dist/cjs/Guid.js +14 -6
- package/dist/cjs/Guid.js.map +1 -1
- package/dist/cjs/IEquatable.d.ts +1 -1
- package/dist/cjs/IEquatable.d.ts.map +1 -1
- package/dist/cjs/JsonSerializer.d.ts +4 -4
- package/dist/cjs/JsonSerializer.d.ts.map +1 -1
- package/dist/cjs/JsonSerializer.js +3 -3
- package/dist/cjs/JsonSerializer.js.map +1 -1
- package/dist/cjs/PropertyAccessor.d.ts +1 -1
- package/dist/cjs/PropertyAccessor.d.ts.map +1 -1
- package/dist/cjs/PropertyAccessorDescriptor.js +2 -0
- package/dist/cjs/PropertyAccessorDescriptor.js.map +1 -1
- package/dist/cjs/PropertyPathResolverProxyHandler.d.ts.map +1 -1
- package/dist/cjs/PropertyPathResolverProxyHandler.js +3 -2
- package/dist/cjs/PropertyPathResolverProxyHandler.js.map +1 -1
- package/dist/cjs/derivedTypeDecorator.d.ts.map +1 -1
- package/dist/cjs/derivedTypeDecorator.js.map +1 -1
- package/dist/cjs/fieldDecorator.d.ts.map +1 -1
- package/dist/cjs/fieldDecorator.js.map +1 -1
- package/dist/derivedTypeDecorator.d.ts +3 -0
- package/dist/derivedTypeDecorator.d.ts.map +1 -0
- package/dist/derivedTypeDecorator.js +8 -0
- package/dist/derivedTypeDecorator.js.map +1 -0
- package/dist/esm/Constructor.d.ts +1 -1
- package/dist/esm/Constructor.d.ts.map +1 -1
- package/dist/esm/Field.js +4 -0
- package/dist/esm/Field.js.map +1 -1
- package/dist/esm/Guid.d.ts +2 -1
- package/dist/esm/Guid.d.ts.map +1 -1
- package/dist/esm/Guid.js +14 -6
- package/dist/esm/Guid.js.map +1 -1
- package/dist/esm/IEquatable.d.ts +1 -1
- package/dist/esm/IEquatable.d.ts.map +1 -1
- package/dist/esm/JsonSerializer.d.ts +4 -4
- package/dist/esm/JsonSerializer.d.ts.map +1 -1
- package/dist/esm/JsonSerializer.js +3 -3
- package/dist/esm/JsonSerializer.js.map +1 -1
- package/dist/esm/PropertyAccessor.d.ts +1 -1
- package/dist/esm/PropertyAccessor.d.ts.map +1 -1
- package/dist/esm/PropertyAccessorDescriptor.js +2 -0
- package/dist/esm/PropertyAccessorDescriptor.js.map +1 -1
- package/dist/esm/PropertyPathResolverProxyHandler.d.ts.map +1 -1
- package/dist/esm/PropertyPathResolverProxyHandler.js +3 -2
- package/dist/esm/PropertyPathResolverProxyHandler.js.map +1 -1
- package/dist/esm/derivedTypeDecorator.d.ts.map +1 -1
- package/dist/esm/derivedTypeDecorator.js.map +1 -1
- package/dist/esm/fieldDecorator.d.ts.map +1 -1
- package/dist/esm/fieldDecorator.js.map +1 -1
- package/dist/fieldDecorator.d.ts +3 -0
- package/dist/fieldDecorator.d.ts.map +1 -0
- package/dist/fieldDecorator.js +7 -0
- package/dist/fieldDecorator.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/vite.config.d.mts +3 -0
- package/dist/vite.config.d.mts.map +1 -0
- package/dist/vite.config.mjs +5 -0
- package/dist/vite.config.mjs.map +1 -0
- package/fieldDecorator.ts +2 -0
- package/for_Guid/when_checking_equality/of_a_guid_and_a_number.ts +1 -1
- package/for_Guid/when_checking_string_is_valid_guid/and_it_has_invalid_bytes.ts +11 -0
- package/for_Guid/when_checking_string_is_valid_guid/and_it_has_same_length_but_is_not_a_guid.ts +11 -0
- package/for_Guid/when_checking_string_is_valid_guid/and_it_is.ts +11 -0
- package/for_Guid/when_getting_as/{and_input_is_string.ts → and_input_is_a_valid_string.ts} +1 -1
- package/for_Guid/when_getting_empty.ts +1 -1
- package/for_JsonSerializer/Types.ts +1 -0
- package/for_JsonSerializer/when_deserializing_array_of_complex_nested_object_with_multiple_wellknown_types.ts +78 -0
- package/for_JsonSerializer/when_deserializing_object_with_any_object_on_it.ts +1 -0
- package/package.json +4 -3
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export class PropertyPathResolverProxyHandler {
|
|
2
|
+
_root;
|
|
3
|
+
_property = '';
|
|
4
|
+
_segments = [];
|
|
5
|
+
constructor(_root) {
|
|
6
|
+
this._root = _root;
|
|
7
|
+
}
|
|
8
|
+
get property() {
|
|
9
|
+
return this._property;
|
|
10
|
+
}
|
|
11
|
+
get segments() {
|
|
12
|
+
return this._segments;
|
|
13
|
+
}
|
|
14
|
+
get path() {
|
|
15
|
+
return this._segments.join('.');
|
|
16
|
+
}
|
|
17
|
+
addSegment(segment) {
|
|
18
|
+
this._segments.push(segment);
|
|
19
|
+
}
|
|
20
|
+
get(target, p, receiver) {
|
|
21
|
+
const root = this._root || this;
|
|
22
|
+
const childProperty = new Proxy({}, new PropertyPathResolverProxyHandler(root));
|
|
23
|
+
this._property = p.toString();
|
|
24
|
+
root.addSegment(this._property);
|
|
25
|
+
return childProperty;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=PropertyPathResolverProxyHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PropertyPathResolverProxyHandler.js","sourceRoot":"","sources":["../PropertyPathResolverProxyHandler.ts"],"names":[],"mappings":"AAUA,MAAM,OAAO,gCAAgC;IAIZ;IAH7B,SAAS,GAAG,EAAE,CAAC;IACf,SAAS,GAAa,EAAE,CAAC;IAEzB,YAA6B,KAAwC;QAAxC,UAAK,GAAL,KAAK,CAAmC;IACrE,CAAC;IAED,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IAEO,UAAU,CAAC,OAAe;QAC9B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IAGD,GAAG,CAAC,MAAW,EAAE,CAAc,EAAE,QAAa;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC;QAEhC,MAAM,aAAa,GAAG,IAAI,KAAK,CAAC,EAAE,EAAE,IAAI,gCAAgC,CAAC,IAAI,CAAC,CAAC,CAAC;QAChF,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEhC,OAAO,aAAa,CAAC;IACzB,CAAC;CACJ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export type Constructor<T
|
|
1
|
+
export type Constructor<T = any> = new (...args: any[]) => T;
|
|
2
2
|
//# sourceMappingURL=Constructor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Constructor.d.ts","sourceRoot":"","sources":["../../Constructor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Constructor.d.ts","sourceRoot":"","sources":["../../Constructor.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,WAAW,CAAC,CAAC,GAAG,GAAG,IAAI,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC"}
|
package/dist/cjs/Field.js
CHANGED
package/dist/cjs/Field.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Field.js","sources":["../../Field.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/**\n * Represents a field on a type.\n */\n export class Field {\n constructor(readonly name: string, readonly type: Constructor, readonly enumerable: boolean, readonly derivatives: Constructor[]) {\n }\n}\n"],"names":[],"mappings":";;MAQc,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"Field.js","sources":["../../Field.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/**\n * Represents a field on a type.\n */\n export class Field {\n constructor(readonly name: string, readonly type: Constructor, readonly enumerable: boolean, readonly derivatives: Constructor[]) {\n }\n}\n"],"names":[],"mappings":";;MAQc,KAAK,CAAA;AACM,IAAA,IAAA;AAAuB,IAAA,IAAA;AAA4B,IAAA,UAAA;AAA8B,IAAA,WAAA;AAAtG,IAAA,WAAA,CAAqB,IAAY,EAAW,IAAiB,EAAW,UAAmB,EAAW,WAA0B,EAAA;QAA3G,IAAI,CAAA,IAAA,GAAJ,IAAI;QAAmB,IAAI,CAAA,IAAA,GAAJ,IAAI;QAAwB,IAAU,CAAA,UAAA,GAAV,UAAU;QAAoB,IAAW,CAAA,WAAA,GAAX,WAAW;;AAEpH;;;;"}
|
package/dist/cjs/Guid.d.ts
CHANGED
|
@@ -6,8 +6,9 @@ export declare class Guid implements IEquatable {
|
|
|
6
6
|
constructor(bytes: number[] | Uint8Array);
|
|
7
7
|
static create(): Guid;
|
|
8
8
|
static parse(guid: string): Guid;
|
|
9
|
+
static isGuid(value: string): boolean;
|
|
9
10
|
static as<T extends Guid = Guid>(input: string | T): T;
|
|
10
|
-
equals(other:
|
|
11
|
+
equals(other: object): boolean;
|
|
11
12
|
toString(): string;
|
|
12
13
|
}
|
|
13
14
|
//# sourceMappingURL=Guid.d.ts.map
|
package/dist/cjs/Guid.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Guid.d.ts","sourceRoot":"","sources":["../../Guid.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"Guid.d.ts","sourceRoot":"","sources":["../../Guid.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAoB1C,qBAAa,IAAK,YAAW,UAAU;IAcvB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,UAAU;IATjD,MAAM,CAAC,QAAQ,CAAC,KAAK,OAA8D;IAEnF,OAAO,CAAC,cAAc,CAAM;gBAOP,KAAK,EAAE,MAAM,EAAE,GAAG,UAAU;IAiBjD,MAAM,CAAC,MAAM,IAAI,IAAI;IAgCrB,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAehC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAUrC,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,IAAI,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC;IAUtD,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAa9B,QAAQ,IAAI,MAAM;CAGrB"}
|
package/dist/cjs/Guid.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
const guidRegex = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/;
|
|
3
4
|
const lookUpTable = [];
|
|
4
5
|
(() => {
|
|
5
6
|
for (let i = 0; i < 256; i += 1) {
|
|
@@ -10,9 +11,11 @@ const getString = (num) => {
|
|
|
10
11
|
return num.toString(16).padStart(2, '0');
|
|
11
12
|
};
|
|
12
13
|
class Guid {
|
|
14
|
+
bytes;
|
|
15
|
+
static empty = new Guid([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
|
|
16
|
+
_stringVersion = '';
|
|
13
17
|
constructor(bytes) {
|
|
14
18
|
this.bytes = bytes;
|
|
15
|
-
this._stringVersion = '';
|
|
16
19
|
this._stringVersion = '' +
|
|
17
20
|
getString(bytes[3]) + getString(bytes[2]) + getString(bytes[1]) + getString(bytes[0]) +
|
|
18
21
|
'-' +
|
|
@@ -52,12 +55,14 @@ class Guid {
|
|
|
52
55
|
static parse(guid) {
|
|
53
56
|
const bytes = [];
|
|
54
57
|
guid.split('-').map((number, index) => {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
bytesInChar === null || bytesInChar === void 0 ? void 0 : bytesInChar.map((byte) => { bytes.push(parseInt(byte, 16)); });
|
|
58
|
+
const bytesInChar = index < 3 ? number.match(/.{1,2}/g)?.reverse() : number.match(/.{1,2}/g);
|
|
59
|
+
bytesInChar?.map((byte) => { bytes.push(parseInt(byte, 16)); });
|
|
58
60
|
});
|
|
59
61
|
return new Guid(bytes);
|
|
60
62
|
}
|
|
63
|
+
static isGuid(value) {
|
|
64
|
+
return guidRegex.test(value);
|
|
65
|
+
}
|
|
61
66
|
static as(input) {
|
|
62
67
|
if (typeof input === 'string') {
|
|
63
68
|
return Guid.parse(input);
|
|
@@ -65,13 +70,16 @@ class Guid {
|
|
|
65
70
|
return input;
|
|
66
71
|
}
|
|
67
72
|
equals(other) {
|
|
68
|
-
|
|
73
|
+
const actualOther = other instanceof Guid ? other : other.toString();
|
|
74
|
+
if (typeof actualOther === 'string' && !Guid.isGuid(actualOther)) {
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
return Guid.as(actualOther).toString() === this.toString();
|
|
69
78
|
}
|
|
70
79
|
toString() {
|
|
71
80
|
return this._stringVersion;
|
|
72
81
|
}
|
|
73
82
|
}
|
|
74
|
-
Guid.empty = new Guid([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
|
|
75
83
|
|
|
76
84
|
exports.Guid = Guid;
|
|
77
85
|
//# sourceMappingURL=Guid.js.map
|
package/dist/cjs/Guid.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Guid.js","sources":["../../Guid.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 { IEquatable } from './IEquatable';\n\nconst lookUpTable: string[] = [];\n(() => {\n for (let i = 0; i < 256; i += 1) {\n lookUpTable[i] = (i < 16 ? '0' : '') + (i).toString(16);\n }\n})();\n\nconst getString = (num: number) => {\n return num.toString(16).padStart(2, '0');\n};\n\n/**\n * Represents a Guid according to the http://www.ietf.org/rfc/rfc4122.txt\n *\n * @export\n * @class Guid\n */\nexport class Guid implements IEquatable {\n\n /**\n * Gets an empty {Guid}\n */\n static readonly empty = new Guid([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);\n\n private _stringVersion = '';\n\n\n /**\n * Initializes a new instance of the {Guid} class.\n * @param {number[]|Uint8Array} bytes - The 16 bytes that represents a {Guid}.\n */\n constructor(readonly bytes: number[] | Uint8Array) {\n this._stringVersion = '' +\n getString(bytes[3]) + getString(bytes[2]) + getString(bytes[1]) + getString(bytes[0]) +\n '-' +\n getString(bytes[5]) + getString(bytes[4]) +\n '-' +\n getString(bytes[7]) + getString(bytes[6]) +\n '-' +\n getString(bytes[8]) + getString(bytes[9]) +\n '-' +\n getString(bytes[10]) + getString(bytes[11]) + getString(bytes[12]) + getString(bytes[13]) + getString(bytes[14]) + getString(bytes[15]);\n }\n\n /**\n * Create a new {Guid}\n * @returns {Guid}\n */\n static create(): Guid {\n const d0 = Math.random() * 0xFFFFFFFF | 0;\n const d1 = Math.random() * 0xFFFFFFFF | 0;\n const d2 = Math.random() * 0xFFFFFFFF | 0;\n const d3 = Math.random() * 0xFFFFFFFF | 0;\n\n const bytes = [\n lookUpTable[d0 & 0xFF],\n lookUpTable[d0 >> 8 & 0xFF],\n lookUpTable[d0 >> 16 & 0xFF],\n lookUpTable[d0 >> 24 & 0xFF],\n lookUpTable[d1 & 0xFF],\n lookUpTable[d1 >> 8 & 0xFF],\n lookUpTable[d1 >> 16 & 0x0F | 0x40],\n lookUpTable[d1 >> 24 & 0xFF],\n lookUpTable[d2 & 0x3F | 0x80],\n lookUpTable[d2 >> 8 & 0xFF],\n lookUpTable[d2 >> 16 & 0xFF],\n lookUpTable[d2 >> 24 & 0xFF],\n lookUpTable[d3 & 0xFF],\n lookUpTable[d3 >> 8 & 0xFF],\n lookUpTable[d3 >> 16 & 0xFF],\n lookUpTable[d3 >> 24 & 0xFF]\n ];\n\n return new Guid(bytes.map(_ => parseInt(`0x${_}`, 16)));\n }\n\n /**\n * Parses a string and turns it into a {Guid}.\n * @param {string} guid String representation of guid.\n */\n static parse(guid: string): Guid {\n const bytes: number[] = [];\n guid.split('-').map((number, index) => {\n const bytesInChar = index < 3 ? number.match(/.{1,2}/g)?.reverse() : number.match(/.{1,2}/g);\n bytesInChar?.map((byte) => { bytes.push(parseInt(byte, 16)); });\n });\n\n return new Guid(bytes);\n }\n\n /**\n * Parses if the type is a string parse, otherwise pass through the input as desired output type.\n * @template T Type to handle for\n * @param {string|T} input String or the generic type.\n * @returns identifier Parsed or passed through\n */\n static as<T extends Guid = Guid>(input: string | T): T {\n if (typeof input === 'string') {\n return Guid.parse(input) as T;\n }\n return input as T;\n }\n\n /**\n * @inheritdoc\n */\n equals(other:
|
|
1
|
+
{"version":3,"file":"Guid.js","sources":["../../Guid.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 { IEquatable } from './IEquatable';\n\nconst guidRegex = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/;\nconst lookUpTable: string[] = [];\n(() => {\n for (let i = 0; i < 256; i += 1) {\n lookUpTable[i] = (i < 16 ? '0' : '') + (i).toString(16);\n }\n})();\n\nconst getString = (num: number) => {\n return num.toString(16).padStart(2, '0');\n};\n\n/**\n * Represents a Guid according to the http://www.ietf.org/rfc/rfc4122.txt\n *\n * @export\n * @class Guid\n */\nexport class Guid implements IEquatable {\n\n /**\n * Gets an empty {Guid}\n */\n static readonly empty = new Guid([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);\n\n private _stringVersion = '';\n\n\n /**\n * Initializes a new instance of the {Guid} class.\n * @param {number[]|Uint8Array} bytes - The 16 bytes that represents a {Guid}.\n */\n constructor(readonly bytes: number[] | Uint8Array) {\n this._stringVersion = '' +\n getString(bytes[3]) + getString(bytes[2]) + getString(bytes[1]) + getString(bytes[0]) +\n '-' +\n getString(bytes[5]) + getString(bytes[4]) +\n '-' +\n getString(bytes[7]) + getString(bytes[6]) +\n '-' +\n getString(bytes[8]) + getString(bytes[9]) +\n '-' +\n getString(bytes[10]) + getString(bytes[11]) + getString(bytes[12]) + getString(bytes[13]) + getString(bytes[14]) + getString(bytes[15]);\n }\n\n /**\n * Create a new {Guid}\n * @returns {Guid}\n */\n static create(): Guid {\n const d0 = Math.random() * 0xFFFFFFFF | 0;\n const d1 = Math.random() * 0xFFFFFFFF | 0;\n const d2 = Math.random() * 0xFFFFFFFF | 0;\n const d3 = Math.random() * 0xFFFFFFFF | 0;\n\n const bytes = [\n lookUpTable[d0 & 0xFF],\n lookUpTable[d0 >> 8 & 0xFF],\n lookUpTable[d0 >> 16 & 0xFF],\n lookUpTable[d0 >> 24 & 0xFF],\n lookUpTable[d1 & 0xFF],\n lookUpTable[d1 >> 8 & 0xFF],\n lookUpTable[d1 >> 16 & 0x0F | 0x40],\n lookUpTable[d1 >> 24 & 0xFF],\n lookUpTable[d2 & 0x3F | 0x80],\n lookUpTable[d2 >> 8 & 0xFF],\n lookUpTable[d2 >> 16 & 0xFF],\n lookUpTable[d2 >> 24 & 0xFF],\n lookUpTable[d3 & 0xFF],\n lookUpTable[d3 >> 8 & 0xFF],\n lookUpTable[d3 >> 16 & 0xFF],\n lookUpTable[d3 >> 24 & 0xFF]\n ];\n\n return new Guid(bytes.map(_ => parseInt(`0x${_}`, 16)));\n }\n\n /**\n * Parses a string and turns it into a {Guid}.\n * @param {string} guid String representation of guid.\n */\n static parse(guid: string): Guid {\n const bytes: number[] = [];\n guid.split('-').map((number, index) => {\n const bytesInChar = index < 3 ? number.match(/.{1,2}/g)?.reverse() : number.match(/.{1,2}/g);\n bytesInChar?.map((byte) => { bytes.push(parseInt(byte, 16)); });\n });\n\n return new Guid(bytes);\n }\n\n /**\n * Check if a string is a valid {Guid}\n * @param {string} value Value to check.\n * @returns True if it is, false if not.\n */\n static isGuid(value: string): boolean {\n return guidRegex.test(value);\n }\n\n /**\n * Parses if the type is a string parse, otherwise pass through the input as desired output type.\n * @template T Type to handle for\n * @param {string|T} input String or the generic type.\n * @returns identifier Parsed or passed through\n */\n static as<T extends Guid = Guid>(input: string | T): T {\n if (typeof input === 'string') {\n return Guid.parse(input) as T;\n }\n return input as T;\n }\n\n /**\n * @inheritdoc\n */\n equals(other: object): boolean {\n const actualOther = other instanceof Guid ? other : other.toString();\n if (typeof actualOther === 'string' && !Guid.isGuid(actualOther)) {\n return false;\n }\n\n return Guid.as(actualOther).toString() === this.toString();\n }\n\n /**\n * Return a string representation of the {Guid} in the format: 00000000-0000-0000-0000-000000000000\n * @returns {string}\n */\n toString(): string {\n return this._stringVersion;\n }\n}\n"],"names":[],"mappings":"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"}
|
package/dist/cjs/IEquatable.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IEquatable.d.ts","sourceRoot":"","sources":["../../IEquatable.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,UAAU;IAOvB,MAAM,CAAC,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"IEquatable.d.ts","sourceRoot":"","sources":["../../IEquatable.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,UAAU;IAOvB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;CACjC"}
|
|
@@ -2,9 +2,9 @@ import { Constructor } from './Constructor';
|
|
|
2
2
|
export declare class JsonSerializer {
|
|
3
3
|
static readonly DerivedTypeIdProperty: string;
|
|
4
4
|
static serialize(value: any): string;
|
|
5
|
-
static deserialize<TResult extends
|
|
6
|
-
static deserializeArray<TResult extends
|
|
7
|
-
static deserializeFromInstance<TResult extends
|
|
8
|
-
static deserializeArrayFromInstance<TResult extends
|
|
5
|
+
static deserialize<TResult extends object>(targetType: Constructor<TResult>, json: string): TResult;
|
|
6
|
+
static deserializeArray<TResult extends object>(targetType: Constructor<TResult>, json: string): TResult[];
|
|
7
|
+
static deserializeFromInstance<TResult extends object>(targetType: Constructor<TResult>, instance: any): TResult;
|
|
8
|
+
static deserializeArrayFromInstance<TResult extends object>(targetType: Constructor<TResult>, instances: any): TResult[];
|
|
9
9
|
}
|
|
10
10
|
//# sourceMappingURL=JsonSerializer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JsonSerializer.d.ts","sourceRoot":"","sources":["../../JsonSerializer.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"JsonSerializer.d.ts","sourceRoot":"","sources":["../../JsonSerializer.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAoF5C,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"}
|
|
@@ -9,7 +9,7 @@ const typeConverters = new Map([
|
|
|
9
9
|
[String, (value) => value],
|
|
10
10
|
[Boolean, (value) => value],
|
|
11
11
|
[Date, (value) => value.toISOString()],
|
|
12
|
-
[Guid.Guid, (value) =>
|
|
12
|
+
[Guid.Guid, (value) => value?.toString() ?? '']
|
|
13
13
|
]);
|
|
14
14
|
const typeSerializers = new Map([
|
|
15
15
|
[Number, (value) => value],
|
|
@@ -70,6 +70,7 @@ const convertTypesOnInstance = (instance) => {
|
|
|
70
70
|
return converted;
|
|
71
71
|
};
|
|
72
72
|
class JsonSerializer {
|
|
73
|
+
static DerivedTypeIdProperty = "_derivedTypeId";
|
|
73
74
|
static serialize(value) {
|
|
74
75
|
const converted = convertTypesOnInstance(value);
|
|
75
76
|
return JSON.stringify(converted);
|
|
@@ -101,7 +102,7 @@ class JsonSerializer {
|
|
|
101
102
|
deserialized[field.name] = value;
|
|
102
103
|
}
|
|
103
104
|
if (targetType == Object) {
|
|
104
|
-
const objectFields = Object.keys(instance).filter((value
|
|
105
|
+
const objectFields = Object.keys(instance).filter((value) => {
|
|
105
106
|
return !fields.some(_ => _.name == value);
|
|
106
107
|
});
|
|
107
108
|
for (const field of objectFields) {
|
|
@@ -118,7 +119,6 @@ class JsonSerializer {
|
|
|
118
119
|
return deserialized;
|
|
119
120
|
}
|
|
120
121
|
}
|
|
121
|
-
JsonSerializer.DerivedTypeIdProperty = "_derivedTypeId";
|
|
122
122
|
|
|
123
123
|
exports.JsonSerializer = JsonSerializer;
|
|
124
124
|
//# sourceMappingURL=JsonSerializer.js.map
|
|
@@ -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 { Constructor } from './Constructor';\nimport { DerivedType } from './DerivedType';\nimport { Field } from './Field';\nimport { Fields } from './Fields';\nimport { Guid } from './Guid';\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]);\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]);\n\nconst serializeValueForType = (type: Constructor, value: any) => {\n if (!value) return value;\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 (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 (typeSerializers.has(field.type)) {\n return typeSerializers.get(field.type)!(value);\n } else {\n let type = field.type;\n if (field.derivatives.length > 0 && value[JsonSerializer.DerivedTypeIdProperty]) {\n const derivedTypeId = value[JsonSerializer.DerivedTypeIdProperty];\n type = field.derivatives.find(_ => DerivedType.get(_) == derivedTypeId) || type;\n }\n\n return JsonSerializer.deserialize(type, JSON.stringify(value));\n }\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 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 {}>(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 {}>(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 {}>(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, index, arr) => {\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 {}>(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","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 { Constructor } from './Constructor';\nimport { DerivedType } from './DerivedType';\nimport { Field } from './Field';\nimport { Fields } from './Fields';\nimport { Guid } from './Guid';\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]);\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]);\n\nconst serializeValueForType = (type: Constructor, value: any) => {\n if (!value) return value;\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 (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 (typeSerializers.has(field.type)) {\n return typeSerializers.get(field.type)!(value);\n } else {\n let type = field.type;\n if (field.derivatives.length > 0 && value[JsonSerializer.DerivedTypeIdProperty]) {\n const derivedTypeId = value[JsonSerializer.DerivedTypeIdProperty];\n type = field.derivatives.find(_ => DerivedType.get(_) == derivedTypeId) || type;\n }\n\n return JsonSerializer.deserialize(type, JSON.stringify(value));\n }\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 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","DerivedType","Fields"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export type PropertyAccessor<T =
|
|
1
|
+
export type PropertyAccessor<T = object> = (instance: T) => any;
|
|
2
2
|
//# sourceMappingURL=PropertyAccessor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PropertyAccessor.d.ts","sourceRoot":"","sources":["../../PropertyAccessor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PropertyAccessor.d.ts","sourceRoot":"","sources":["../../PropertyAccessor.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,gBAAgB,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,GAAG,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PropertyAccessorDescriptor.js","sources":["../../PropertyAccessorDescriptor.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 { PropertyAccessor } from './PropertyAccessor';\n\n/**\n * Represents the descriptor of a specific property accessor\n */\nexport class PropertyAccessorDescriptor {\n\n /**\n * Creates an instance of {PropertyAccessorDescriptor}.\n * @param {PropertyAccessor} _accessor - The actual accessor for accessing the property.\n * @param {Array<string>} _segments - The segments representing the path of the property accessor within an instance.\n */\n constructor(private readonly _accessor: PropertyAccessor, private readonly _segments: string[]) {\n }\n\n /**\n * Gets the actual accessor.\n * @returns {PropertyAccessor}\n */\n get accessor(): PropertyAccessor {\n return this._accessor;\n }\n\n /**\n * Gets the segments that constitute the deep path within the object instance for accessing the underlying property.\n * @returns {ReadonlyArray<string>}\n */\n get segments(): readonly string[] {\n return this._segments;\n }\n\n /**\n * Gets the full path to the property\n * @returns {string}\n */\n get path(): string {\n return this._segments.join('.');\n }\n}\n"],"names":[],"mappings":";;MAQa,0BAA0B,CAAA;
|
|
1
|
+
{"version":3,"file":"PropertyAccessorDescriptor.js","sources":["../../PropertyAccessorDescriptor.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 { PropertyAccessor } from './PropertyAccessor';\n\n/**\n * Represents the descriptor of a specific property accessor\n */\nexport class PropertyAccessorDescriptor {\n\n /**\n * Creates an instance of {PropertyAccessorDescriptor}.\n * @param {PropertyAccessor} _accessor - The actual accessor for accessing the property.\n * @param {Array<string>} _segments - The segments representing the path of the property accessor within an instance.\n */\n constructor(private readonly _accessor: PropertyAccessor, private readonly _segments: string[]) {\n }\n\n /**\n * Gets the actual accessor.\n * @returns {PropertyAccessor}\n */\n get accessor(): PropertyAccessor {\n return this._accessor;\n }\n\n /**\n * Gets the segments that constitute the deep path within the object instance for accessing the underlying property.\n * @returns {ReadonlyArray<string>}\n */\n get segments(): readonly string[] {\n return this._segments;\n }\n\n /**\n * Gets the full path to the property\n * @returns {string}\n */\n get path(): string {\n return this._segments.join('.');\n }\n}\n"],"names":[],"mappings":";;MAQa,0BAA0B,CAAA;AAON,IAAA,SAAA;AAA8C,IAAA,SAAA;IAA3E,WAA6B,CAAA,SAA2B,EAAmB,SAAmB,EAAA;QAAjE,IAAS,CAAA,SAAA,GAAT,SAAS;QAAqC,IAAS,CAAA,SAAA,GAAT,SAAS;;AAOpF,IAAA,IAAI,QAAQ,GAAA;QACR,OAAO,IAAI,CAAC,SAAS;;AAOzB,IAAA,IAAI,QAAQ,GAAA;QACR,OAAO,IAAI,CAAC,SAAS;;AAOzB,IAAA,IAAI,IAAI,GAAA;QACJ,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;;AAEtC;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PropertyPathResolverProxyHandler.d.ts","sourceRoot":"","sources":["../../PropertyPathResolverProxyHandler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PropertyPathResolverProxyHandler.d.ts","sourceRoot":"","sources":["../../PropertyPathResolverProxyHandler.ts"],"names":[],"mappings":"AAUA,qBAAa,gCAAiC,YAAW,YAAY,CAAC,GAAG,CAAC;IAI1D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;IAHnC,SAAS,SAAM;IACf,SAAS,EAAE,MAAM,EAAE,CAAM;gBAEI,KAAK,CAAC,EAAE,gCAAgC,YAAA;IAGrE,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,IAAI,QAAQ,IAAI,SAAS,MAAM,EAAE,CAEhC;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,OAAO,CAAC,UAAU;IAKlB,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,GAAG,GAAG;CASvD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PropertyPathResolverProxyHandler.js","sources":["../../PropertyPathResolverProxyHandler.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\n/**\n * Object proxy handler\n * @template TObject\n */\nexport class PropertyPathResolverProxyHandler implements ProxyHandler<any> {\n _property = '';\n _segments: string[] = [];\n\n constructor(private readonly _root?: PropertyPathResolverProxyHandler) {\n }\n\n get property(): string {\n return this._property;\n }\n\n get segments(): readonly string[] {\n return this._segments;\n }\n\n get path(): string {\n return this._segments.join('.');\n }\n\n private addSegment(segment: string) {\n this._segments.push(segment);\n }\n\n /** @inheritdoc */\n get(target: any, p: PropertyKey, receiver: any): any {\n const root = this._root || this;\n\n const childProperty = new Proxy({}, new PropertyPathResolverProxyHandler(root));\n this._property = p.toString();\n root.addSegment(this._property);\n\n return childProperty;\n }\n}\n"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"PropertyPathResolverProxyHandler.js","sources":["../../PropertyPathResolverProxyHandler.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\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unused-vars */\n\n/**\n * Object proxy handler\n * @template TObject\n */\nexport class PropertyPathResolverProxyHandler implements ProxyHandler<any> {\n _property = '';\n _segments: string[] = [];\n\n constructor(private readonly _root?: PropertyPathResolverProxyHandler) {\n }\n\n get property(): string {\n return this._property;\n }\n\n get segments(): readonly string[] {\n return this._segments;\n }\n\n get path(): string {\n return this._segments.join('.');\n }\n\n private addSegment(segment: string) {\n this._segments.push(segment);\n }\n\n /** @inheritdoc */\n get(target: any, p: PropertyKey, receiver: any): any {\n const root = this._root || this;\n\n const childProperty = new Proxy({}, new PropertyPathResolverProxyHandler(root));\n this._property = p.toString();\n root.addSegment(this._property);\n\n return childProperty;\n }\n}\n"],"names":[],"mappings":";;MAUa,gCAAgC,CAAA;AAIZ,IAAA,KAAA;IAH7B,SAAS,GAAG,EAAE;IACd,SAAS,GAAa,EAAE;AAExB,IAAA,WAAA,CAA6B,KAAwC,EAAA;QAAxC,IAAK,CAAA,KAAA,GAAL,KAAK;;AAGlC,IAAA,IAAI,QAAQ,GAAA;QACR,OAAO,IAAI,CAAC,SAAS;;AAGzB,IAAA,IAAI,QAAQ,GAAA;QACR,OAAO,IAAI,CAAC,SAAS;;AAGzB,IAAA,IAAI,IAAI,GAAA;QACJ,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;;AAG3B,IAAA,UAAU,CAAC,OAAe,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;;AAIhC,IAAA,GAAG,CAAC,MAAW,EAAE,CAAc,EAAE,QAAa,EAAA;AAC1C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI;AAE/B,QAAA,MAAM,aAAa,GAAG,IAAI,KAAK,CAAC,EAAE,EAAE,IAAI,gCAAgC,CAAC,IAAI,CAAC,CAAC;AAC/E,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,QAAQ,EAAE;AAC7B,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;AAE/B,QAAA,OAAO,aAAa;;AAE3B;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"derivedTypeDecorator.d.ts","sourceRoot":"","sources":["../../derivedTypeDecorator.ts"],"names":[],"mappings":"AAGA,OAAO,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"derivedTypeDecorator.d.ts","sourceRoot":"","sources":["../../derivedTypeDecorator.ts"],"names":[],"mappings":"AAGA,OAAO,kBAAkB,CAAC;AAM1B,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,YACjB,GAAG,UAG/B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"derivedTypeDecorator.js","sources":["../../derivedTypeDecorator.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 'reflect-metadata';\nimport { DerivedType } from './DerivedType';\n\nexport function derivedType(identifier: string) {\n return function (target: any) {\n DerivedType.set(target, identifier);\n };\n}\n"],"names":["DerivedType"],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"derivedTypeDecorator.js","sources":["../../derivedTypeDecorator.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 'reflect-metadata';\nimport { DerivedType } from './DerivedType';\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nexport function derivedType(identifier: string) {\n return function (target: any) {\n DerivedType.set(target, identifier);\n };\n}\n"],"names":["DerivedType"],"mappings":";;;;;AASM,SAAU,WAAW,CAAC,UAAkB,EAAA;AAC1C,IAAA,OAAO,UAAU,MAAW,EAAA;AACxB,QAAAA,uBAAW,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC;AACvC,KAAC;AACL;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fieldDecorator.d.ts","sourceRoot":"","sources":["../../fieldDecorator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"fieldDecorator.d.ts","sourceRoot":"","sources":["../../fieldDecorator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAK5C,wBAAgB,KAAK,CAAC,UAAU,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,WAAW,EAAE,YACnE,GAAG,eAAe,MAAM,UAGpD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fieldDecorator.js","sources":["../../fieldDecorator.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 { Fields } from './Fields';\n\nexport function field(targetType: Constructor, enumerable?: boolean, derivatives?: Constructor[]) {\n return function (target: any, propertyKey: string) {\n Fields.addFieldToType(target.constructor, propertyKey, targetType, enumerable || false, derivatives || []);\n };\n}\n"],"names":["Fields"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"fieldDecorator.js","sources":["../../fieldDecorator.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 { Fields } from './Fields';\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nexport function field(targetType: Constructor, enumerable?: boolean, derivatives?: Constructor[]) {\n return function (target: any, propertyKey: string) {\n Fields.addFieldToType(target.constructor, propertyKey, targetType, enumerable || false, derivatives || []);\n };\n}\n"],"names":["Fields"],"mappings":";;;;SAQgB,KAAK,CAAC,UAAuB,EAAE,UAAoB,EAAE,WAA2B,EAAA;IAC5F,OAAO,UAAU,MAAW,EAAE,WAAmB,EAAA;AAC7C,QAAAA,aAAM,CAAC,cAAc,CAAC,MAAM,CAAC,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,IAAI,KAAK,EAAE,WAAW,IAAI,EAAE,CAAC;AAC9G,KAAC;AACL;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"derivedTypeDecorator.d.ts","sourceRoot":"","sources":["../derivedTypeDecorator.ts"],"names":[],"mappings":"AAGA,OAAO,kBAAkB,CAAC;AAM1B,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,YACjB,GAAG,UAG/B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"derivedTypeDecorator.js","sourceRoot":"","sources":["../derivedTypeDecorator.ts"],"names":[],"mappings":"AAGA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAK5C,MAAM,UAAU,WAAW,CAAC,UAAkB;IAC1C,OAAO,UAAU,MAAW;QACxB,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACxC,CAAC,CAAC;AACN,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export type Constructor<T
|
|
1
|
+
export type Constructor<T = any> = new (...args: any[]) => T;
|
|
2
2
|
//# sourceMappingURL=Constructor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Constructor.d.ts","sourceRoot":"","sources":["../../Constructor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Constructor.d.ts","sourceRoot":"","sources":["../../Constructor.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,WAAW,CAAC,CAAC,GAAG,GAAG,IAAI,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC"}
|
package/dist/esm/Field.js
CHANGED
package/dist/esm/Field.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Field.js","sources":["../../Field.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/**\n * Represents a field on a type.\n */\n export class Field {\n constructor(readonly name: string, readonly type: Constructor, readonly enumerable: boolean, readonly derivatives: Constructor[]) {\n }\n}\n"],"names":[],"mappings":"MAQc,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"Field.js","sources":["../../Field.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/**\n * Represents a field on a type.\n */\n export class Field {\n constructor(readonly name: string, readonly type: Constructor, readonly enumerable: boolean, readonly derivatives: Constructor[]) {\n }\n}\n"],"names":[],"mappings":"MAQc,KAAK,CAAA;AACM,IAAA,IAAA;AAAuB,IAAA,IAAA;AAA4B,IAAA,UAAA;AAA8B,IAAA,WAAA;AAAtG,IAAA,WAAA,CAAqB,IAAY,EAAW,IAAiB,EAAW,UAAmB,EAAW,WAA0B,EAAA;QAA3G,IAAI,CAAA,IAAA,GAAJ,IAAI;QAAmB,IAAI,CAAA,IAAA,GAAJ,IAAI;QAAwB,IAAU,CAAA,UAAA,GAAV,UAAU;QAAoB,IAAW,CAAA,WAAA,GAAX,WAAW;;AAEpH;;;;"}
|
package/dist/esm/Guid.d.ts
CHANGED
|
@@ -6,8 +6,9 @@ export declare class Guid implements IEquatable {
|
|
|
6
6
|
constructor(bytes: number[] | Uint8Array);
|
|
7
7
|
static create(): Guid;
|
|
8
8
|
static parse(guid: string): Guid;
|
|
9
|
+
static isGuid(value: string): boolean;
|
|
9
10
|
static as<T extends Guid = Guid>(input: string | T): T;
|
|
10
|
-
equals(other:
|
|
11
|
+
equals(other: object): boolean;
|
|
11
12
|
toString(): string;
|
|
12
13
|
}
|
|
13
14
|
//# sourceMappingURL=Guid.d.ts.map
|
package/dist/esm/Guid.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Guid.d.ts","sourceRoot":"","sources":["../../Guid.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"Guid.d.ts","sourceRoot":"","sources":["../../Guid.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAoB1C,qBAAa,IAAK,YAAW,UAAU;IAcvB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,UAAU;IATjD,MAAM,CAAC,QAAQ,CAAC,KAAK,OAA8D;IAEnF,OAAO,CAAC,cAAc,CAAM;gBAOP,KAAK,EAAE,MAAM,EAAE,GAAG,UAAU;IAiBjD,MAAM,CAAC,MAAM,IAAI,IAAI;IAgCrB,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAehC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAUrC,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,IAAI,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC;IAUtD,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAa9B,QAAQ,IAAI,MAAM;CAGrB"}
|
package/dist/esm/Guid.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
const guidRegex = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/;
|
|
1
2
|
const lookUpTable = [];
|
|
2
3
|
(() => {
|
|
3
4
|
for (let i = 0; i < 256; i += 1) {
|
|
@@ -8,9 +9,11 @@ const getString = (num) => {
|
|
|
8
9
|
return num.toString(16).padStart(2, '0');
|
|
9
10
|
};
|
|
10
11
|
class Guid {
|
|
12
|
+
bytes;
|
|
13
|
+
static empty = new Guid([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
|
|
14
|
+
_stringVersion = '';
|
|
11
15
|
constructor(bytes) {
|
|
12
16
|
this.bytes = bytes;
|
|
13
|
-
this._stringVersion = '';
|
|
14
17
|
this._stringVersion = '' +
|
|
15
18
|
getString(bytes[3]) + getString(bytes[2]) + getString(bytes[1]) + getString(bytes[0]) +
|
|
16
19
|
'-' +
|
|
@@ -50,12 +53,14 @@ class Guid {
|
|
|
50
53
|
static parse(guid) {
|
|
51
54
|
const bytes = [];
|
|
52
55
|
guid.split('-').map((number, index) => {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
bytesInChar === null || bytesInChar === void 0 ? void 0 : bytesInChar.map((byte) => { bytes.push(parseInt(byte, 16)); });
|
|
56
|
+
const bytesInChar = index < 3 ? number.match(/.{1,2}/g)?.reverse() : number.match(/.{1,2}/g);
|
|
57
|
+
bytesInChar?.map((byte) => { bytes.push(parseInt(byte, 16)); });
|
|
56
58
|
});
|
|
57
59
|
return new Guid(bytes);
|
|
58
60
|
}
|
|
61
|
+
static isGuid(value) {
|
|
62
|
+
return guidRegex.test(value);
|
|
63
|
+
}
|
|
59
64
|
static as(input) {
|
|
60
65
|
if (typeof input === 'string') {
|
|
61
66
|
return Guid.parse(input);
|
|
@@ -63,13 +68,16 @@ class Guid {
|
|
|
63
68
|
return input;
|
|
64
69
|
}
|
|
65
70
|
equals(other) {
|
|
66
|
-
|
|
71
|
+
const actualOther = other instanceof Guid ? other : other.toString();
|
|
72
|
+
if (typeof actualOther === 'string' && !Guid.isGuid(actualOther)) {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
return Guid.as(actualOther).toString() === this.toString();
|
|
67
76
|
}
|
|
68
77
|
toString() {
|
|
69
78
|
return this._stringVersion;
|
|
70
79
|
}
|
|
71
80
|
}
|
|
72
|
-
Guid.empty = new Guid([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
|
|
73
81
|
|
|
74
82
|
export { Guid };
|
|
75
83
|
//# sourceMappingURL=Guid.js.map
|
package/dist/esm/Guid.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Guid.js","sources":["../../Guid.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 { IEquatable } from './IEquatable';\n\nconst lookUpTable: string[] = [];\n(() => {\n for (let i = 0; i < 256; i += 1) {\n lookUpTable[i] = (i < 16 ? '0' : '') + (i).toString(16);\n }\n})();\n\nconst getString = (num: number) => {\n return num.toString(16).padStart(2, '0');\n};\n\n/**\n * Represents a Guid according to the http://www.ietf.org/rfc/rfc4122.txt\n *\n * @export\n * @class Guid\n */\nexport class Guid implements IEquatable {\n\n /**\n * Gets an empty {Guid}\n */\n static readonly empty = new Guid([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);\n\n private _stringVersion = '';\n\n\n /**\n * Initializes a new instance of the {Guid} class.\n * @param {number[]|Uint8Array} bytes - The 16 bytes that represents a {Guid}.\n */\n constructor(readonly bytes: number[] | Uint8Array) {\n this._stringVersion = '' +\n getString(bytes[3]) + getString(bytes[2]) + getString(bytes[1]) + getString(bytes[0]) +\n '-' +\n getString(bytes[5]) + getString(bytes[4]) +\n '-' +\n getString(bytes[7]) + getString(bytes[6]) +\n '-' +\n getString(bytes[8]) + getString(bytes[9]) +\n '-' +\n getString(bytes[10]) + getString(bytes[11]) + getString(bytes[12]) + getString(bytes[13]) + getString(bytes[14]) + getString(bytes[15]);\n }\n\n /**\n * Create a new {Guid}\n * @returns {Guid}\n */\n static create(): Guid {\n const d0 = Math.random() * 0xFFFFFFFF | 0;\n const d1 = Math.random() * 0xFFFFFFFF | 0;\n const d2 = Math.random() * 0xFFFFFFFF | 0;\n const d3 = Math.random() * 0xFFFFFFFF | 0;\n\n const bytes = [\n lookUpTable[d0 & 0xFF],\n lookUpTable[d0 >> 8 & 0xFF],\n lookUpTable[d0 >> 16 & 0xFF],\n lookUpTable[d0 >> 24 & 0xFF],\n lookUpTable[d1 & 0xFF],\n lookUpTable[d1 >> 8 & 0xFF],\n lookUpTable[d1 >> 16 & 0x0F | 0x40],\n lookUpTable[d1 >> 24 & 0xFF],\n lookUpTable[d2 & 0x3F | 0x80],\n lookUpTable[d2 >> 8 & 0xFF],\n lookUpTable[d2 >> 16 & 0xFF],\n lookUpTable[d2 >> 24 & 0xFF],\n lookUpTable[d3 & 0xFF],\n lookUpTable[d3 >> 8 & 0xFF],\n lookUpTable[d3 >> 16 & 0xFF],\n lookUpTable[d3 >> 24 & 0xFF]\n ];\n\n return new Guid(bytes.map(_ => parseInt(`0x${_}`, 16)));\n }\n\n /**\n * Parses a string and turns it into a {Guid}.\n * @param {string} guid String representation of guid.\n */\n static parse(guid: string): Guid {\n const bytes: number[] = [];\n guid.split('-').map((number, index) => {\n const bytesInChar = index < 3 ? number.match(/.{1,2}/g)?.reverse() : number.match(/.{1,2}/g);\n bytesInChar?.map((byte) => { bytes.push(parseInt(byte, 16)); });\n });\n\n return new Guid(bytes);\n }\n\n /**\n * Parses if the type is a string parse, otherwise pass through the input as desired output type.\n * @template T Type to handle for\n * @param {string|T} input String or the generic type.\n * @returns identifier Parsed or passed through\n */\n static as<T extends Guid = Guid>(input: string | T): T {\n if (typeof input === 'string') {\n return Guid.parse(input) as T;\n }\n return input as T;\n }\n\n /**\n * @inheritdoc\n */\n equals(other:
|
|
1
|
+
{"version":3,"file":"Guid.js","sources":["../../Guid.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 { IEquatable } from './IEquatable';\n\nconst guidRegex = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/;\nconst lookUpTable: string[] = [];\n(() => {\n for (let i = 0; i < 256; i += 1) {\n lookUpTable[i] = (i < 16 ? '0' : '') + (i).toString(16);\n }\n})();\n\nconst getString = (num: number) => {\n return num.toString(16).padStart(2, '0');\n};\n\n/**\n * Represents a Guid according to the http://www.ietf.org/rfc/rfc4122.txt\n *\n * @export\n * @class Guid\n */\nexport class Guid implements IEquatable {\n\n /**\n * Gets an empty {Guid}\n */\n static readonly empty = new Guid([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);\n\n private _stringVersion = '';\n\n\n /**\n * Initializes a new instance of the {Guid} class.\n * @param {number[]|Uint8Array} bytes - The 16 bytes that represents a {Guid}.\n */\n constructor(readonly bytes: number[] | Uint8Array) {\n this._stringVersion = '' +\n getString(bytes[3]) + getString(bytes[2]) + getString(bytes[1]) + getString(bytes[0]) +\n '-' +\n getString(bytes[5]) + getString(bytes[4]) +\n '-' +\n getString(bytes[7]) + getString(bytes[6]) +\n '-' +\n getString(bytes[8]) + getString(bytes[9]) +\n '-' +\n getString(bytes[10]) + getString(bytes[11]) + getString(bytes[12]) + getString(bytes[13]) + getString(bytes[14]) + getString(bytes[15]);\n }\n\n /**\n * Create a new {Guid}\n * @returns {Guid}\n */\n static create(): Guid {\n const d0 = Math.random() * 0xFFFFFFFF | 0;\n const d1 = Math.random() * 0xFFFFFFFF | 0;\n const d2 = Math.random() * 0xFFFFFFFF | 0;\n const d3 = Math.random() * 0xFFFFFFFF | 0;\n\n const bytes = [\n lookUpTable[d0 & 0xFF],\n lookUpTable[d0 >> 8 & 0xFF],\n lookUpTable[d0 >> 16 & 0xFF],\n lookUpTable[d0 >> 24 & 0xFF],\n lookUpTable[d1 & 0xFF],\n lookUpTable[d1 >> 8 & 0xFF],\n lookUpTable[d1 >> 16 & 0x0F | 0x40],\n lookUpTable[d1 >> 24 & 0xFF],\n lookUpTable[d2 & 0x3F | 0x80],\n lookUpTable[d2 >> 8 & 0xFF],\n lookUpTable[d2 >> 16 & 0xFF],\n lookUpTable[d2 >> 24 & 0xFF],\n lookUpTable[d3 & 0xFF],\n lookUpTable[d3 >> 8 & 0xFF],\n lookUpTable[d3 >> 16 & 0xFF],\n lookUpTable[d3 >> 24 & 0xFF]\n ];\n\n return new Guid(bytes.map(_ => parseInt(`0x${_}`, 16)));\n }\n\n /**\n * Parses a string and turns it into a {Guid}.\n * @param {string} guid String representation of guid.\n */\n static parse(guid: string): Guid {\n const bytes: number[] = [];\n guid.split('-').map((number, index) => {\n const bytesInChar = index < 3 ? number.match(/.{1,2}/g)?.reverse() : number.match(/.{1,2}/g);\n bytesInChar?.map((byte) => { bytes.push(parseInt(byte, 16)); });\n });\n\n return new Guid(bytes);\n }\n\n /**\n * Check if a string is a valid {Guid}\n * @param {string} value Value to check.\n * @returns True if it is, false if not.\n */\n static isGuid(value: string): boolean {\n return guidRegex.test(value);\n }\n\n /**\n * Parses if the type is a string parse, otherwise pass through the input as desired output type.\n * @template T Type to handle for\n * @param {string|T} input String or the generic type.\n * @returns identifier Parsed or passed through\n */\n static as<T extends Guid = Guid>(input: string | T): T {\n if (typeof input === 'string') {\n return Guid.parse(input) as T;\n }\n return input as T;\n }\n\n /**\n * @inheritdoc\n */\n equals(other: object): boolean {\n const actualOther = other instanceof Guid ? other : other.toString();\n if (typeof actualOther === 'string' && !Guid.isGuid(actualOther)) {\n return false;\n }\n\n return Guid.as(actualOther).toString() === this.toString();\n }\n\n /**\n * Return a string representation of the {Guid} in the format: 00000000-0000-0000-0000-000000000000\n * @returns {string}\n */\n toString(): string {\n return this._stringVersion;\n }\n}\n"],"names":[],"mappings":"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"}
|
package/dist/esm/IEquatable.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IEquatable.d.ts","sourceRoot":"","sources":["../../IEquatable.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,UAAU;IAOvB,MAAM,CAAC,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"IEquatable.d.ts","sourceRoot":"","sources":["../../IEquatable.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,UAAU;IAOvB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;CACjC"}
|
|
@@ -2,9 +2,9 @@ import { Constructor } from './Constructor';
|
|
|
2
2
|
export declare class JsonSerializer {
|
|
3
3
|
static readonly DerivedTypeIdProperty: string;
|
|
4
4
|
static serialize(value: any): string;
|
|
5
|
-
static deserialize<TResult extends
|
|
6
|
-
static deserializeArray<TResult extends
|
|
7
|
-
static deserializeFromInstance<TResult extends
|
|
8
|
-
static deserializeArrayFromInstance<TResult extends
|
|
5
|
+
static deserialize<TResult extends object>(targetType: Constructor<TResult>, json: string): TResult;
|
|
6
|
+
static deserializeArray<TResult extends object>(targetType: Constructor<TResult>, json: string): TResult[];
|
|
7
|
+
static deserializeFromInstance<TResult extends object>(targetType: Constructor<TResult>, instance: any): TResult;
|
|
8
|
+
static deserializeArrayFromInstance<TResult extends object>(targetType: Constructor<TResult>, instances: any): TResult[];
|
|
9
9
|
}
|
|
10
10
|
//# sourceMappingURL=JsonSerializer.d.ts.map
|