@cratis/fundamentals 7.2.4 → 7.3.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/Guid.ts +6 -1
- package/JsonSerializer.ts +4 -1
- package/TimeSpan.ts +162 -0
- package/dist/Guid.d.ts +2 -2
- package/dist/Guid.d.ts.map +1 -1
- package/dist/Guid.js +4 -0
- package/dist/Guid.js.map +1 -1
- package/dist/JsonSerializer.d.ts.map +1 -1
- package/dist/JsonSerializer.js +4 -1
- package/dist/JsonSerializer.js.map +1 -1
- package/dist/TimeSpan.d.ts +21 -0
- package/dist/TimeSpan.d.ts.map +1 -0
- package/dist/TimeSpan.js +151 -0
- package/dist/TimeSpan.js.map +1 -0
- package/dist/cjs/Guid.d.ts +2 -2
- package/dist/cjs/Guid.d.ts.map +1 -1
- package/dist/cjs/Guid.js +4 -0
- package/dist/cjs/Guid.js.map +1 -1
- package/dist/cjs/JsonSerializer.d.ts.map +1 -1
- package/dist/cjs/JsonSerializer.js +4 -1
- package/dist/cjs/JsonSerializer.js.map +1 -1
- package/dist/cjs/TimeSpan.d.ts +21 -0
- package/dist/cjs/TimeSpan.d.ts.map +1 -0
- package/dist/cjs/TimeSpan.js +156 -0
- package/dist/cjs/TimeSpan.js.map +1 -0
- package/dist/cjs/_virtual/_tslib.js +38 -0
- package/dist/cjs/_virtual/_tslib.js.map +1 -0
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +2 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/esm/Guid.d.ts +2 -2
- package/dist/esm/Guid.d.ts.map +1 -1
- package/dist/esm/Guid.js +4 -0
- package/dist/esm/Guid.js.map +1 -1
- package/dist/esm/JsonSerializer.d.ts.map +1 -1
- package/dist/esm/JsonSerializer.js +4 -1
- package/dist/esm/JsonSerializer.js.map +1 -1
- package/dist/esm/TimeSpan.d.ts +21 -0
- package/dist/esm/TimeSpan.d.ts.map +1 -0
- package/dist/esm/TimeSpan.js +154 -0
- package/dist/esm/TimeSpan.js.map +1 -0
- package/dist/esm/_virtual/_tslib.js +35 -0
- package/dist/esm/_virtual/_tslib.js.map +1 -0
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/for_Guid/when_constructing_with_undefined_bytes.ts +10 -0
- package/for_TimeSpan/when_calculating_total_values.ts +14 -0
- package/for_TimeSpan/when_converting_simple_time_to_string.ts +12 -0
- package/for_TimeSpan/when_converting_to_json.ts +12 -0
- package/for_TimeSpan/when_converting_to_string.ts +12 -0
- package/for_TimeSpan/when_parsing_negative_time.ts +15 -0
- package/for_TimeSpan/when_parsing_simple_time.ts +15 -0
- package/for_TimeSpan/when_parsing_time_with_days.ts +14 -0
- package/for_TimeSpan/when_parsing_time_with_fractional_seconds.ts +16 -0
- package/for_TimeSpan/when_parsing_time_with_trailing_zeros_in_fractional_part.ts +12 -0
- package/for_TimeSpan/when_parsing_zero_time.ts +16 -0
- package/index.ts +1 -0
- package/package.json +1 -1
package/Guid.ts
CHANGED
|
@@ -35,7 +35,12 @@ export class Guid implements IEquatable {
|
|
|
35
35
|
* Initializes a new instance of the {Guid} class.
|
|
36
36
|
* @param {number[]|Uint8Array} bytes - The 16 bytes that represents a {Guid}.
|
|
37
37
|
*/
|
|
38
|
-
constructor(readonly bytes: number[] | Uint8Array) {
|
|
38
|
+
constructor(readonly bytes: number[] | Uint8Array | undefined) {
|
|
39
|
+
if( bytes === undefined ) {
|
|
40
|
+
this._stringVersion = Guid.empty.toString();
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
|
|
39
44
|
this._stringVersion = '' +
|
|
40
45
|
getString(bytes[3]) + getString(bytes[2]) + getString(bytes[1]) + getString(bytes[0]) +
|
|
41
46
|
'-' +
|
package/JsonSerializer.ts
CHANGED
|
@@ -6,6 +6,7 @@ import { DerivedType } from './DerivedType';
|
|
|
6
6
|
import { Field } from './Field';
|
|
7
7
|
import { Fields } from './Fields';
|
|
8
8
|
import { Guid } from './Guid';
|
|
9
|
+
import { TimeSpan } from './TimeSpan';
|
|
9
10
|
|
|
10
11
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
11
12
|
|
|
@@ -16,7 +17,8 @@ const typeConverters: Map<Constructor, typeSerializer> = new Map<Constructor, ty
|
|
|
16
17
|
[String, (value: string) => value],
|
|
17
18
|
[Boolean, (value: boolean) => value],
|
|
18
19
|
[Date, (value: Date) => value.toISOString()],
|
|
19
|
-
[Guid, (value: Guid) => value?.toString() ?? '']
|
|
20
|
+
[Guid, (value: Guid) => value?.toString() ?? ''],
|
|
21
|
+
[TimeSpan, (value: TimeSpan) => value?.toString() ?? '']
|
|
20
22
|
]);
|
|
21
23
|
|
|
22
24
|
const typeSerializers: Map<Constructor, typeSerializer> = new Map<Constructor, typeSerializer>([
|
|
@@ -25,6 +27,7 @@ const typeSerializers: Map<Constructor, typeSerializer> = new Map<Constructor, t
|
|
|
25
27
|
[Boolean, (value: any) => value],
|
|
26
28
|
[Date, (value: any) => new Date(value)],
|
|
27
29
|
[Guid, (value: any) => Guid.parse(value.toString())],
|
|
30
|
+
[TimeSpan, (value: any) => TimeSpan.parse(value.toString())],
|
|
28
31
|
]);
|
|
29
32
|
|
|
30
33
|
const serializeValueForType = (type: Constructor, value: any) => {
|
package/TimeSpan.ts
ADDED
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
2
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
|
+
|
|
4
|
+
import { field } from './fieldDecorator';
|
|
5
|
+
|
|
6
|
+
const timeSpanRegex = /^(-)?(?:(\d+)\.)?(\d{1,2}):(\d{2}):(\d{2})(?:\.(\d{1,7}))?$/;
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Represents a time interval.
|
|
10
|
+
*/
|
|
11
|
+
export class TimeSpan {
|
|
12
|
+
|
|
13
|
+
@field(Number)
|
|
14
|
+
ticks!: number;
|
|
15
|
+
|
|
16
|
+
@field(Number)
|
|
17
|
+
days!: number;
|
|
18
|
+
|
|
19
|
+
@field(Number)
|
|
20
|
+
hours!: number;
|
|
21
|
+
|
|
22
|
+
@field(Number)
|
|
23
|
+
milliseconds!: number;
|
|
24
|
+
|
|
25
|
+
@field(Number)
|
|
26
|
+
microseconds!: number;
|
|
27
|
+
|
|
28
|
+
@field(Number)
|
|
29
|
+
nanoseconds!: number;
|
|
30
|
+
|
|
31
|
+
@field(Number)
|
|
32
|
+
minutes!: number;
|
|
33
|
+
|
|
34
|
+
@field(Number)
|
|
35
|
+
seconds!: number;
|
|
36
|
+
|
|
37
|
+
@field(Number)
|
|
38
|
+
totalDays!: number;
|
|
39
|
+
|
|
40
|
+
@field(Number)
|
|
41
|
+
totalHours!: number;
|
|
42
|
+
|
|
43
|
+
@field(Number)
|
|
44
|
+
totalMilliseconds!: number;
|
|
45
|
+
|
|
46
|
+
@field(Number)
|
|
47
|
+
totalMicroseconds!: number;
|
|
48
|
+
|
|
49
|
+
@field(Number)
|
|
50
|
+
totalNanoseconds!: number;
|
|
51
|
+
|
|
52
|
+
@field(Number)
|
|
53
|
+
totalMinutes!: number;
|
|
54
|
+
|
|
55
|
+
@field(Number)
|
|
56
|
+
totalSeconds!: number;
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Parses a C# compatible TimeSpan string and returns a TimeSpan instance.
|
|
60
|
+
* The string format should match: [-][d.]hh:mm:ss[.fffffff]
|
|
61
|
+
* @param {string} value String representation of TimeSpan.
|
|
62
|
+
* @returns {TimeSpan} A TimeSpan instance with all properties populated.
|
|
63
|
+
* @throws {Error} If the string format is invalid.
|
|
64
|
+
*/
|
|
65
|
+
static parse(value: string): TimeSpan {
|
|
66
|
+
const match = timeSpanRegex.exec(value);
|
|
67
|
+
if (match === null) {
|
|
68
|
+
throw new Error(`Invalid TimeSpan format: ${value}`);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const isNegative = match[1] === '-';
|
|
72
|
+
const days = match[2] ? parseInt(match[2], 10) : 0;
|
|
73
|
+
const hours = parseInt(match[3], 10);
|
|
74
|
+
const minutes = parseInt(match[4], 10);
|
|
75
|
+
const seconds = parseInt(match[5], 10);
|
|
76
|
+
const fractionalSeconds = match[6] ? match[6].padEnd(7, '0') : '0000000';
|
|
77
|
+
|
|
78
|
+
const ticksPerDay = 864000000000;
|
|
79
|
+
const ticksPerHour = 36000000000;
|
|
80
|
+
const ticksPerMinute = 600000000;
|
|
81
|
+
const ticksPerSecond = 10000000;
|
|
82
|
+
|
|
83
|
+
const ticks =
|
|
84
|
+
days * ticksPerDay +
|
|
85
|
+
hours * ticksPerHour +
|
|
86
|
+
minutes * ticksPerMinute +
|
|
87
|
+
seconds * ticksPerSecond +
|
|
88
|
+
parseInt(fractionalSeconds, 10);
|
|
89
|
+
|
|
90
|
+
const finalTicks = isNegative ? -ticks : ticks;
|
|
91
|
+
|
|
92
|
+
const timeSpan = new TimeSpan();
|
|
93
|
+
timeSpan.ticks = finalTicks;
|
|
94
|
+
timeSpan.days = Math.floor(Math.abs(finalTicks) / ticksPerDay) * (isNegative ? -1 : 1);
|
|
95
|
+
timeSpan.hours = Math.floor((Math.abs(finalTicks) / ticksPerHour) % 24);
|
|
96
|
+
timeSpan.minutes = Math.floor((Math.abs(finalTicks) / ticksPerMinute) % 60);
|
|
97
|
+
timeSpan.seconds = Math.floor((Math.abs(finalTicks) / ticksPerSecond) % 60);
|
|
98
|
+
timeSpan.milliseconds = Math.floor((Math.abs(finalTicks) / 10000) % 1000);
|
|
99
|
+
timeSpan.microseconds = Math.floor((Math.abs(finalTicks) / 10) % 1000);
|
|
100
|
+
timeSpan.nanoseconds = Math.floor((Math.abs(finalTicks) % 10) * 100);
|
|
101
|
+
timeSpan.totalDays = finalTicks / ticksPerDay;
|
|
102
|
+
timeSpan.totalHours = finalTicks / ticksPerHour;
|
|
103
|
+
timeSpan.totalMinutes = finalTicks / ticksPerMinute;
|
|
104
|
+
timeSpan.totalSeconds = finalTicks / ticksPerSecond;
|
|
105
|
+
timeSpan.totalMilliseconds = finalTicks / 10000;
|
|
106
|
+
timeSpan.totalMicroseconds = finalTicks / 10;
|
|
107
|
+
timeSpan.totalNanoseconds = finalTicks * 100;
|
|
108
|
+
|
|
109
|
+
return timeSpan;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Converts the TimeSpan to a C# compatible string format.
|
|
114
|
+
* Returns the TimeSpan in format: [-][d.]hh:mm:ss[.fffffff]
|
|
115
|
+
* @returns {string} C# compatible TimeSpan string representation.
|
|
116
|
+
*/
|
|
117
|
+
toString(): string {
|
|
118
|
+
const isNegative = this.ticks < 0;
|
|
119
|
+
const absTicks = Math.abs(this.ticks);
|
|
120
|
+
|
|
121
|
+
const ticksPerDay = 864000000000;
|
|
122
|
+
const ticksPerHour = 36000000000;
|
|
123
|
+
const ticksPerMinute = 600000000;
|
|
124
|
+
const ticksPerSecond = 10000000;
|
|
125
|
+
|
|
126
|
+
const days = Math.floor(absTicks / ticksPerDay);
|
|
127
|
+
const hours = Math.floor((absTicks / ticksPerHour) % 24);
|
|
128
|
+
const minutes = Math.floor((absTicks / ticksPerMinute) % 60);
|
|
129
|
+
const seconds = Math.floor((absTicks / ticksPerSecond) % 60);
|
|
130
|
+
const fractionalTicks = absTicks % ticksPerSecond;
|
|
131
|
+
|
|
132
|
+
const parts: string[] = [];
|
|
133
|
+
|
|
134
|
+
if (isNegative) {
|
|
135
|
+
parts.push('-');
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
if (days > 0) {
|
|
139
|
+
parts.push(`${days}.`);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
parts.push(`${hours.toString().padStart(2, '0')}:`);
|
|
143
|
+
parts.push(`${minutes.toString().padStart(2, '0')}:`);
|
|
144
|
+
parts.push(`${seconds.toString().padStart(2, '0')}`);
|
|
145
|
+
|
|
146
|
+
if (fractionalTicks > 0) {
|
|
147
|
+
const fractionalStr = fractionalTicks.toString().padStart(7, '0').replace(/0+$/, '');
|
|
148
|
+
parts.push(`.${fractionalStr}`);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
return parts.join('');
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Converts the TimeSpan to a JSON string that works in JSON serialization.
|
|
156
|
+
* Returns the TimeSpan in C# compatible format: [-][d.]hh:mm:ss[.fffffff]
|
|
157
|
+
* @returns {string} C# compatible TimeSpan string representation.
|
|
158
|
+
*/
|
|
159
|
+
toJSON(): string {
|
|
160
|
+
return this.toString();
|
|
161
|
+
}
|
|
162
|
+
}
|
package/dist/Guid.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { IEquatable } from './IEquatable';
|
|
2
2
|
export declare class Guid implements IEquatable {
|
|
3
|
-
readonly bytes: number[] | Uint8Array;
|
|
3
|
+
readonly bytes: number[] | Uint8Array | undefined;
|
|
4
4
|
static readonly empty: Guid;
|
|
5
5
|
private _stringVersion;
|
|
6
|
-
constructor(bytes: number[] | Uint8Array);
|
|
6
|
+
constructor(bytes: number[] | Uint8Array | undefined);
|
|
7
7
|
static create(): Guid;
|
|
8
8
|
static parse(guid: string): Guid;
|
|
9
9
|
static isGuid(value: string): boolean;
|
package/dist/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;AAoB1C,qBAAa,IAAK,YAAW,UAAU;IAcvB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,UAAU;
|
|
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,GAAG,SAAS;IAT7D,MAAM,CAAC,QAAQ,CAAC,KAAK,OAA8D;IAEnF,OAAO,CAAC,cAAc,CAAM;gBAOP,KAAK,EAAE,MAAM,EAAE,GAAG,UAAU,GAAG,SAAS;IAsB7D,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;IAQlB,MAAM,IAAI,MAAM;CAGnB"}
|
package/dist/Guid.js
CHANGED
|
@@ -14,6 +14,10 @@ export class Guid {
|
|
|
14
14
|
_stringVersion = '';
|
|
15
15
|
constructor(bytes) {
|
|
16
16
|
this.bytes = bytes;
|
|
17
|
+
if (bytes === undefined) {
|
|
18
|
+
this._stringVersion = Guid.empty.toString();
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
17
21
|
this._stringVersion = '' +
|
|
18
22
|
getString(bytes[3]) + getString(bytes[2]) + getString(bytes[1]) + getString(bytes[0]) +
|
|
19
23
|
'-' +
|
package/dist/Guid.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Guid.js","sourceRoot":"","sources":["../Guid.ts"],"names":[],"mappings":"AAKA,MAAM,SAAS,GAAG,+EAA+E,CAAC;AAClG,MAAM,WAAW,GAAa,EAAE,CAAC;AACjC,CAAC,GAAG,EAAE;IACF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC5D,CAAC;AACL,CAAC,CAAC,EAAE,CAAC;AAEL,MAAM,SAAS,GAAG,CAAC,GAAW,EAAE,EAAE;IAC9B,OAAO,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC7C,CAAC,CAAC;AAQF,MAAM,OAAO,IAAI;IAcQ;IATrB,MAAM,CAAU,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAE3E,cAAc,GAAG,EAAE,CAAC;IAO5B,YAAqB,
|
|
1
|
+
{"version":3,"file":"Guid.js","sourceRoot":"","sources":["../Guid.ts"],"names":[],"mappings":"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"}
|
|
@@ -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;AAuF5C,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"}
|
package/dist/JsonSerializer.js
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { DerivedType } from './DerivedType';
|
|
2
2
|
import { Fields } from './Fields';
|
|
3
3
|
import { Guid } from './Guid';
|
|
4
|
+
import { TimeSpan } from './TimeSpan';
|
|
4
5
|
const typeConverters = new Map([
|
|
5
6
|
[Number, (value) => value],
|
|
6
7
|
[String, (value) => value],
|
|
7
8
|
[Boolean, (value) => value],
|
|
8
9
|
[Date, (value) => value.toISOString()],
|
|
9
|
-
[Guid, (value) => value?.toString() ?? '']
|
|
10
|
+
[Guid, (value) => value?.toString() ?? ''],
|
|
11
|
+
[TimeSpan, (value) => value?.toString() ?? '']
|
|
10
12
|
]);
|
|
11
13
|
const typeSerializers = new Map([
|
|
12
14
|
[Number, (value) => value],
|
|
@@ -14,6 +16,7 @@ const typeSerializers = new Map([
|
|
|
14
16
|
[Boolean, (value) => value],
|
|
15
17
|
[Date, (value) => new Date(value)],
|
|
16
18
|
[Guid, (value) => Guid.parse(value.toString())],
|
|
19
|
+
[TimeSpan, (value) => TimeSpan.parse(value.toString())],
|
|
17
20
|
]);
|
|
18
21
|
const serializeValueForType = (type, value) => {
|
|
19
22
|
if (!value)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JsonSerializer.js","sourceRoot":"","sources":["../JsonSerializer.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"JsonSerializer.js","sourceRoot":"","sources":["../JsonSerializer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export declare class TimeSpan {
|
|
2
|
+
ticks: number;
|
|
3
|
+
days: number;
|
|
4
|
+
hours: number;
|
|
5
|
+
milliseconds: number;
|
|
6
|
+
microseconds: number;
|
|
7
|
+
nanoseconds: number;
|
|
8
|
+
minutes: number;
|
|
9
|
+
seconds: number;
|
|
10
|
+
totalDays: number;
|
|
11
|
+
totalHours: number;
|
|
12
|
+
totalMilliseconds: number;
|
|
13
|
+
totalMicroseconds: number;
|
|
14
|
+
totalNanoseconds: number;
|
|
15
|
+
totalMinutes: number;
|
|
16
|
+
totalSeconds: number;
|
|
17
|
+
static parse(value: string): TimeSpan;
|
|
18
|
+
toString(): string;
|
|
19
|
+
toJSON(): string;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=TimeSpan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TimeSpan.d.ts","sourceRoot":"","sources":["../TimeSpan.ts"],"names":[],"mappings":"AAUA,qBAAa,QAAQ;IAGjB,KAAK,EAAG,MAAM,CAAC;IAGf,IAAI,EAAG,MAAM,CAAC;IAGd,KAAK,EAAG,MAAM,CAAC;IAGf,YAAY,EAAG,MAAM,CAAC;IAGtB,YAAY,EAAG,MAAM,CAAC;IAGtB,WAAW,EAAG,MAAM,CAAC;IAGrB,OAAO,EAAG,MAAM,CAAC;IAGjB,OAAO,EAAG,MAAM,CAAC;IAGjB,SAAS,EAAG,MAAM,CAAC;IAGnB,UAAU,EAAG,MAAM,CAAC;IAGpB,iBAAiB,EAAG,MAAM,CAAC;IAG3B,iBAAiB,EAAG,MAAM,CAAC;IAG3B,gBAAgB,EAAG,MAAM,CAAC;IAG1B,YAAY,EAAG,MAAM,CAAC;IAGtB,YAAY,EAAG,MAAM,CAAC;IAStB,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ;IAoDrC,QAAQ,IAAI,MAAM;IA0ClB,MAAM,IAAI,MAAM;CAGnB"}
|
package/dist/TimeSpan.js
ADDED
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { __decorate, __metadata } from "tslib";
|
|
2
|
+
import { field } from './fieldDecorator';
|
|
3
|
+
const timeSpanRegex = /^(-)?(?:(\d+)\.)?(\d{1,2}):(\d{2}):(\d{2})(?:\.(\d{1,7}))?$/;
|
|
4
|
+
export class TimeSpan {
|
|
5
|
+
ticks;
|
|
6
|
+
days;
|
|
7
|
+
hours;
|
|
8
|
+
milliseconds;
|
|
9
|
+
microseconds;
|
|
10
|
+
nanoseconds;
|
|
11
|
+
minutes;
|
|
12
|
+
seconds;
|
|
13
|
+
totalDays;
|
|
14
|
+
totalHours;
|
|
15
|
+
totalMilliseconds;
|
|
16
|
+
totalMicroseconds;
|
|
17
|
+
totalNanoseconds;
|
|
18
|
+
totalMinutes;
|
|
19
|
+
totalSeconds;
|
|
20
|
+
static parse(value) {
|
|
21
|
+
const match = timeSpanRegex.exec(value);
|
|
22
|
+
if (match === null) {
|
|
23
|
+
throw new Error(`Invalid TimeSpan format: ${value}`);
|
|
24
|
+
}
|
|
25
|
+
const isNegative = match[1] === '-';
|
|
26
|
+
const days = match[2] ? parseInt(match[2], 10) : 0;
|
|
27
|
+
const hours = parseInt(match[3], 10);
|
|
28
|
+
const minutes = parseInt(match[4], 10);
|
|
29
|
+
const seconds = parseInt(match[5], 10);
|
|
30
|
+
const fractionalSeconds = match[6] ? match[6].padEnd(7, '0') : '0000000';
|
|
31
|
+
const ticksPerDay = 864000000000;
|
|
32
|
+
const ticksPerHour = 36000000000;
|
|
33
|
+
const ticksPerMinute = 600000000;
|
|
34
|
+
const ticksPerSecond = 10000000;
|
|
35
|
+
const ticks = days * ticksPerDay +
|
|
36
|
+
hours * ticksPerHour +
|
|
37
|
+
minutes * ticksPerMinute +
|
|
38
|
+
seconds * ticksPerSecond +
|
|
39
|
+
parseInt(fractionalSeconds, 10);
|
|
40
|
+
const finalTicks = isNegative ? -ticks : ticks;
|
|
41
|
+
const timeSpan = new TimeSpan();
|
|
42
|
+
timeSpan.ticks = finalTicks;
|
|
43
|
+
timeSpan.days = Math.floor(Math.abs(finalTicks) / ticksPerDay) * (isNegative ? -1 : 1);
|
|
44
|
+
timeSpan.hours = Math.floor((Math.abs(finalTicks) / ticksPerHour) % 24);
|
|
45
|
+
timeSpan.minutes = Math.floor((Math.abs(finalTicks) / ticksPerMinute) % 60);
|
|
46
|
+
timeSpan.seconds = Math.floor((Math.abs(finalTicks) / ticksPerSecond) % 60);
|
|
47
|
+
timeSpan.milliseconds = Math.floor((Math.abs(finalTicks) / 10000) % 1000);
|
|
48
|
+
timeSpan.microseconds = Math.floor((Math.abs(finalTicks) / 10) % 1000);
|
|
49
|
+
timeSpan.nanoseconds = Math.floor((Math.abs(finalTicks) % 10) * 100);
|
|
50
|
+
timeSpan.totalDays = finalTicks / ticksPerDay;
|
|
51
|
+
timeSpan.totalHours = finalTicks / ticksPerHour;
|
|
52
|
+
timeSpan.totalMinutes = finalTicks / ticksPerMinute;
|
|
53
|
+
timeSpan.totalSeconds = finalTicks / ticksPerSecond;
|
|
54
|
+
timeSpan.totalMilliseconds = finalTicks / 10000;
|
|
55
|
+
timeSpan.totalMicroseconds = finalTicks / 10;
|
|
56
|
+
timeSpan.totalNanoseconds = finalTicks * 100;
|
|
57
|
+
return timeSpan;
|
|
58
|
+
}
|
|
59
|
+
toString() {
|
|
60
|
+
const isNegative = this.ticks < 0;
|
|
61
|
+
const absTicks = Math.abs(this.ticks);
|
|
62
|
+
const ticksPerDay = 864000000000;
|
|
63
|
+
const ticksPerHour = 36000000000;
|
|
64
|
+
const ticksPerMinute = 600000000;
|
|
65
|
+
const ticksPerSecond = 10000000;
|
|
66
|
+
const days = Math.floor(absTicks / ticksPerDay);
|
|
67
|
+
const hours = Math.floor((absTicks / ticksPerHour) % 24);
|
|
68
|
+
const minutes = Math.floor((absTicks / ticksPerMinute) % 60);
|
|
69
|
+
const seconds = Math.floor((absTicks / ticksPerSecond) % 60);
|
|
70
|
+
const fractionalTicks = absTicks % ticksPerSecond;
|
|
71
|
+
const parts = [];
|
|
72
|
+
if (isNegative) {
|
|
73
|
+
parts.push('-');
|
|
74
|
+
}
|
|
75
|
+
if (days > 0) {
|
|
76
|
+
parts.push(`${days}.`);
|
|
77
|
+
}
|
|
78
|
+
parts.push(`${hours.toString().padStart(2, '0')}:`);
|
|
79
|
+
parts.push(`${minutes.toString().padStart(2, '0')}:`);
|
|
80
|
+
parts.push(`${seconds.toString().padStart(2, '0')}`);
|
|
81
|
+
if (fractionalTicks > 0) {
|
|
82
|
+
const fractionalStr = fractionalTicks.toString().padStart(7, '0').replace(/0+$/, '');
|
|
83
|
+
parts.push(`.${fractionalStr}`);
|
|
84
|
+
}
|
|
85
|
+
return parts.join('');
|
|
86
|
+
}
|
|
87
|
+
toJSON() {
|
|
88
|
+
return this.toString();
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
__decorate([
|
|
92
|
+
field(Number),
|
|
93
|
+
__metadata("design:type", Number)
|
|
94
|
+
], TimeSpan.prototype, "ticks", void 0);
|
|
95
|
+
__decorate([
|
|
96
|
+
field(Number),
|
|
97
|
+
__metadata("design:type", Number)
|
|
98
|
+
], TimeSpan.prototype, "days", void 0);
|
|
99
|
+
__decorate([
|
|
100
|
+
field(Number),
|
|
101
|
+
__metadata("design:type", Number)
|
|
102
|
+
], TimeSpan.prototype, "hours", void 0);
|
|
103
|
+
__decorate([
|
|
104
|
+
field(Number),
|
|
105
|
+
__metadata("design:type", Number)
|
|
106
|
+
], TimeSpan.prototype, "milliseconds", void 0);
|
|
107
|
+
__decorate([
|
|
108
|
+
field(Number),
|
|
109
|
+
__metadata("design:type", Number)
|
|
110
|
+
], TimeSpan.prototype, "microseconds", void 0);
|
|
111
|
+
__decorate([
|
|
112
|
+
field(Number),
|
|
113
|
+
__metadata("design:type", Number)
|
|
114
|
+
], TimeSpan.prototype, "nanoseconds", void 0);
|
|
115
|
+
__decorate([
|
|
116
|
+
field(Number),
|
|
117
|
+
__metadata("design:type", Number)
|
|
118
|
+
], TimeSpan.prototype, "minutes", void 0);
|
|
119
|
+
__decorate([
|
|
120
|
+
field(Number),
|
|
121
|
+
__metadata("design:type", Number)
|
|
122
|
+
], TimeSpan.prototype, "seconds", void 0);
|
|
123
|
+
__decorate([
|
|
124
|
+
field(Number),
|
|
125
|
+
__metadata("design:type", Number)
|
|
126
|
+
], TimeSpan.prototype, "totalDays", void 0);
|
|
127
|
+
__decorate([
|
|
128
|
+
field(Number),
|
|
129
|
+
__metadata("design:type", Number)
|
|
130
|
+
], TimeSpan.prototype, "totalHours", void 0);
|
|
131
|
+
__decorate([
|
|
132
|
+
field(Number),
|
|
133
|
+
__metadata("design:type", Number)
|
|
134
|
+
], TimeSpan.prototype, "totalMilliseconds", void 0);
|
|
135
|
+
__decorate([
|
|
136
|
+
field(Number),
|
|
137
|
+
__metadata("design:type", Number)
|
|
138
|
+
], TimeSpan.prototype, "totalMicroseconds", void 0);
|
|
139
|
+
__decorate([
|
|
140
|
+
field(Number),
|
|
141
|
+
__metadata("design:type", Number)
|
|
142
|
+
], TimeSpan.prototype, "totalNanoseconds", void 0);
|
|
143
|
+
__decorate([
|
|
144
|
+
field(Number),
|
|
145
|
+
__metadata("design:type", Number)
|
|
146
|
+
], TimeSpan.prototype, "totalMinutes", void 0);
|
|
147
|
+
__decorate([
|
|
148
|
+
field(Number),
|
|
149
|
+
__metadata("design:type", Number)
|
|
150
|
+
], TimeSpan.prototype, "totalSeconds", void 0);
|
|
151
|
+
//# sourceMappingURL=TimeSpan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TimeSpan.js","sourceRoot":"","sources":["../TimeSpan.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/Guid.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { IEquatable } from './IEquatable';
|
|
2
2
|
export declare class Guid implements IEquatable {
|
|
3
|
-
readonly bytes: number[] | Uint8Array;
|
|
3
|
+
readonly bytes: number[] | Uint8Array | undefined;
|
|
4
4
|
static readonly empty: Guid;
|
|
5
5
|
private _stringVersion;
|
|
6
|
-
constructor(bytes: number[] | Uint8Array);
|
|
6
|
+
constructor(bytes: number[] | Uint8Array | undefined);
|
|
7
7
|
static create(): Guid;
|
|
8
8
|
static parse(guid: string): Guid;
|
|
9
9
|
static isGuid(value: string): boolean;
|
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;AAoB1C,qBAAa,IAAK,YAAW,UAAU;IAcvB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,UAAU;
|
|
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,GAAG,SAAS;IAT7D,MAAM,CAAC,QAAQ,CAAC,KAAK,OAA8D;IAEnF,OAAO,CAAC,cAAc,CAAM;gBAOP,KAAK,EAAE,MAAM,EAAE,GAAG,UAAU,GAAG,SAAS;IAsB7D,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;IAQlB,MAAM,IAAI,MAAM;CAGnB"}
|
package/dist/cjs/Guid.js
CHANGED
|
@@ -16,6 +16,10 @@ class Guid {
|
|
|
16
16
|
_stringVersion = '';
|
|
17
17
|
constructor(bytes) {
|
|
18
18
|
this.bytes = bytes;
|
|
19
|
+
if (bytes === undefined) {
|
|
20
|
+
this._stringVersion = Guid.empty.toString();
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
19
23
|
this._stringVersion = '' +
|
|
20
24
|
getString(bytes[3]) + getString(bytes[2]) + getString(bytes[1]) + getString(bytes[0]) +
|
|
21
25
|
'-' +
|
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 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 /**\n * Converts the {Guid} to a string that works in JSON serialization.\n * @returns {string}\n */\n toJSON(): string {\n return this._stringVersion;\n }\n}\n"],"names":[],"mappings":";;AAKA,MAAM,SAAS,GAAG,+EAA+E;AACjG,MAAM,WAAW,GAAa,EAAE;AAChC,CAAC,MAAK;AACF,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;QAC7B,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC;IAC3D;AACJ,CAAC,GAAG;AAEJ,MAAM,SAAS,GAAG,CAAC,GAAW,KAAI;AAC9B,IAAA,OAAO,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AAC5C,CAAC;MAQY,IAAI,CAAA;AAcQ,IAAA,KAAA;AATrB,IAAA,OAAgB,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAE1E,cAAc,GAAG,EAAE;AAO3B,IAAA,WAAA,CAAqB,
|
|
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 | undefined) {\n if( bytes === undefined ) {\n this._stringVersion = Guid.empty.toString();\n return;\n }\n\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 /**\n * Converts the {Guid} to a string that works in JSON serialization.\n * @returns {string}\n */\n toJSON(): string {\n return this._stringVersion;\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -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;AAuF5C,qBAAa,cAAc;IACvB,MAAM,CAAC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAoB;IAOjE,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM;IAWpC,MAAM,CAAC,WAAW,CAAC,OAAO,SAAS,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAWnG,MAAM,CAAC,gBAAgB,CAAC,OAAO,SAAS,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,EAAE;IAW1G,MAAM,CAAC,uBAAuB,CAAC,OAAO,SAAS,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,GAAG,GAAG,OAAO;IAwChH,MAAM,CAAC,4BAA4B,CAAC,OAAO,SAAS,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,GAAG,GAAG,OAAO,EAAE;CAS3H"}
|
|
@@ -3,13 +3,15 @@
|
|
|
3
3
|
var DerivedType = require('./DerivedType.js');
|
|
4
4
|
var Fields = require('./Fields.js');
|
|
5
5
|
var Guid = require('./Guid.js');
|
|
6
|
+
var TimeSpan = require('./TimeSpan.js');
|
|
6
7
|
|
|
7
8
|
const typeConverters = new Map([
|
|
8
9
|
[Number, (value) => value],
|
|
9
10
|
[String, (value) => value],
|
|
10
11
|
[Boolean, (value) => value],
|
|
11
12
|
[Date, (value) => value.toISOString()],
|
|
12
|
-
[Guid.Guid, (value) => value?.toString() ?? '']
|
|
13
|
+
[Guid.Guid, (value) => value?.toString() ?? ''],
|
|
14
|
+
[TimeSpan.TimeSpan, (value) => value?.toString() ?? '']
|
|
13
15
|
]);
|
|
14
16
|
const typeSerializers = new Map([
|
|
15
17
|
[Number, (value) => value],
|
|
@@ -17,6 +19,7 @@ const typeSerializers = new Map([
|
|
|
17
19
|
[Boolean, (value) => value],
|
|
18
20
|
[Date, (value) => new Date(value)],
|
|
19
21
|
[Guid.Guid, (value) => Guid.Guid.parse(value.toString())],
|
|
22
|
+
[TimeSpan.TimeSpan, (value) => TimeSpan.TimeSpan.parse(value.toString())],
|
|
20
23
|
]);
|
|
21
24
|
const serializeValueForType = (type, value) => {
|
|
22
25
|
if (!value)
|