@cratis/fundamentals 7.7.11 → 7.8.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/Field.ts +6 -1
- package/Fields.ts +2 -2
- package/JsonSerializer.ts +88 -1
- package/ValueMap.ts +62 -0
- package/dist/Field.d.ts +2 -1
- package/dist/Field.d.ts.map +1 -1
- package/dist/Field.js +3 -1
- package/dist/Field.js.map +1 -1
- package/dist/Fields.d.ts +1 -1
- package/dist/Fields.d.ts.map +1 -1
- package/dist/Fields.js +2 -2
- package/dist/Fields.js.map +1 -1
- package/dist/JsonSerializer.d.ts.map +1 -1
- package/dist/JsonSerializer.js +68 -1
- package/dist/JsonSerializer.js.map +1 -1
- package/dist/ValueMap.d.ts +8 -0
- package/dist/ValueMap.d.ts.map +1 -0
- package/dist/ValueMap.js +32 -0
- package/dist/ValueMap.js.map +1 -0
- package/dist/cjs/Field.d.ts +2 -1
- package/dist/cjs/Field.d.ts.map +1 -1
- package/dist/cjs/Field.js +3 -1
- package/dist/cjs/Field.js.map +1 -1
- package/dist/cjs/Fields.d.ts +1 -1
- package/dist/cjs/Fields.d.ts.map +1 -1
- package/dist/cjs/Fields.js +2 -2
- package/dist/cjs/Fields.js.map +1 -1
- package/dist/cjs/JsonSerializer.d.ts.map +1 -1
- package/dist/cjs/JsonSerializer.js +68 -1
- package/dist/cjs/JsonSerializer.js.map +1 -1
- package/dist/cjs/ValueMap.d.ts +8 -0
- package/dist/cjs/ValueMap.d.ts.map +1 -0
- package/dist/cjs/ValueMap.js +36 -0
- package/dist/cjs/ValueMap.js.map +1 -0
- package/dist/cjs/fieldDecorator.d.ts +7 -1
- package/dist/cjs/fieldDecorator.d.ts.map +1 -1
- package/dist/cjs/fieldDecorator.js +8 -2
- package/dist/cjs/fieldDecorator.js.map +1 -1
- 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/Field.d.ts +2 -1
- package/dist/esm/Field.d.ts.map +1 -1
- package/dist/esm/Field.js +3 -1
- package/dist/esm/Field.js.map +1 -1
- package/dist/esm/Fields.d.ts +1 -1
- package/dist/esm/Fields.d.ts.map +1 -1
- package/dist/esm/Fields.js +2 -2
- package/dist/esm/Fields.js.map +1 -1
- package/dist/esm/JsonSerializer.d.ts.map +1 -1
- package/dist/esm/JsonSerializer.js +68 -1
- package/dist/esm/JsonSerializer.js.map +1 -1
- package/dist/esm/ValueMap.d.ts +8 -0
- package/dist/esm/ValueMap.d.ts.map +1 -0
- package/dist/esm/ValueMap.js +34 -0
- package/dist/esm/ValueMap.js.map +1 -0
- package/dist/esm/fieldDecorator.d.ts +7 -1
- package/dist/esm/fieldDecorator.d.ts.map +1 -1
- package/dist/esm/fieldDecorator.js +8 -2
- package/dist/esm/fieldDecorator.js.map +1 -1
- 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/fieldDecorator.d.ts +7 -1
- package/dist/fieldDecorator.d.ts.map +1 -1
- package/dist/fieldDecorator.js +8 -2
- package/dist/fieldDecorator.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/fieldDecorator.ts +16 -2
- package/for_Fields/when_adding_fiields_to_type.ts +4 -3
- package/for_JsonSerializer/Types.ts +12 -0
- package/for_JsonSerializer/when_deserializing_object_with_value_map.ts +63 -0
- package/for_JsonSerializer/when_serializing_object_with_value_map.ts +34 -0
- package/index.ts +1 -0
- package/package.json +1 -1
package/Field.ts
CHANGED
|
@@ -7,6 +7,11 @@ import { Constructor } from './Constructor';
|
|
|
7
7
|
* Represents a field on a type.
|
|
8
8
|
*/
|
|
9
9
|
export class Field {
|
|
10
|
-
constructor(
|
|
10
|
+
constructor(
|
|
11
|
+
readonly name: string,
|
|
12
|
+
readonly type: Constructor,
|
|
13
|
+
readonly enumerable: boolean,
|
|
14
|
+
readonly derivatives: Constructor[],
|
|
15
|
+
readonly genericArguments: Constructor[]) {
|
|
11
16
|
}
|
|
12
17
|
}
|
package/Fields.ts
CHANGED
|
@@ -9,12 +9,12 @@ import { Field } from './Field';
|
|
|
9
9
|
* Represents a system working with fields on types.
|
|
10
10
|
*/
|
|
11
11
|
export class Fields {
|
|
12
|
-
static addFieldToType(target: Constructor, field: string, fieldType: Constructor, enumerable: boolean, derivatives: Constructor[]) {
|
|
12
|
+
static addFieldToType(target: Constructor, field: string, fieldType: Constructor, enumerable: boolean, derivatives: Constructor[], genericArguments: Constructor[]) {
|
|
13
13
|
let fields: Map<string, Field> = new Map<string, Field>();
|
|
14
14
|
if (Reflect.hasOwnMetadata('fields', target)) {
|
|
15
15
|
fields = Reflect.getOwnMetadata('fields', target);
|
|
16
16
|
}
|
|
17
|
-
fields.set(field, new Field(field, fieldType, enumerable, derivatives));
|
|
17
|
+
fields.set(field, new Field(field, fieldType, enumerable, derivatives, genericArguments));
|
|
18
18
|
Reflect.defineMetadata('fields', fields, target);
|
|
19
19
|
}
|
|
20
20
|
|
package/JsonSerializer.ts
CHANGED
|
@@ -7,6 +7,7 @@ import { Field } from './Field';
|
|
|
7
7
|
import { Fields } from './Fields';
|
|
8
8
|
import { Guid } from './Guid';
|
|
9
9
|
import { TimeSpan } from './TimeSpan';
|
|
10
|
+
import { ValueMap } from './ValueMap';
|
|
10
11
|
|
|
11
12
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
12
13
|
|
|
@@ -18,7 +19,15 @@ const typeConverters: Map<Constructor, typeSerializer> = new Map<Constructor, ty
|
|
|
18
19
|
[Boolean, (value: boolean) => value],
|
|
19
20
|
[Date, (value: Date) => value.toISOString()],
|
|
20
21
|
[Guid, (value: Guid) => value?.toString() ?? ''],
|
|
21
|
-
[TimeSpan, (value: TimeSpan) => value?.toString() ?? '']
|
|
22
|
+
[TimeSpan, (value: TimeSpan) => value?.toString() ?? ''],
|
|
23
|
+
[ValueMap, (value: ValueMap<any, any>) => {
|
|
24
|
+
const converted: any = {};
|
|
25
|
+
for (const [key, mapValue] of value.entries()) {
|
|
26
|
+
converted[serializeMapKey(key)] = convertTypesOnInstance(mapValue);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return converted;
|
|
30
|
+
}]
|
|
22
31
|
]);
|
|
23
32
|
|
|
24
33
|
const typeSerializers: Map<Constructor, typeSerializer> = new Map<Constructor, typeSerializer>([
|
|
@@ -49,6 +58,10 @@ const deserializeValueFromType = (type: Constructor, value: any) => {
|
|
|
49
58
|
};
|
|
50
59
|
|
|
51
60
|
const deserializeValueFromField = (field: Field, value: any) => {
|
|
61
|
+
if (field.type === ValueMap) {
|
|
62
|
+
return deserializeValueMapFromField(field, value);
|
|
63
|
+
}
|
|
64
|
+
|
|
52
65
|
if (typeSerializers.has(field.type)) {
|
|
53
66
|
return typeSerializers.get(field.type)!(value);
|
|
54
67
|
} else {
|
|
@@ -62,6 +75,80 @@ const deserializeValueFromField = (field: Field, value: any) => {
|
|
|
62
75
|
}
|
|
63
76
|
};
|
|
64
77
|
|
|
78
|
+
const serializeMapKey = (key: any): string => {
|
|
79
|
+
if (key === undefined || key === null) {
|
|
80
|
+
return '';
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
if (typeof key === 'string') {
|
|
84
|
+
return key;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
if (typeof key === 'number' || typeof key === 'boolean' || typeof key === 'bigint') {
|
|
88
|
+
return key.toString();
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
if (key instanceof Date) {
|
|
92
|
+
return key.toISOString();
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
return JsonSerializer.serialize(key);
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
const deserializeMapKey = (keyType: Constructor, key: string): any => {
|
|
99
|
+
if (keyType === String) {
|
|
100
|
+
return key;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
if (keyType === Number) {
|
|
104
|
+
return Number(key);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
if (keyType === Boolean) {
|
|
108
|
+
return key.toLowerCase() === 'true';
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
if (keyType === Date) {
|
|
112
|
+
return new Date(key);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
if (typeSerializers.has(keyType)) {
|
|
116
|
+
return typeSerializers.get(keyType)!(key);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
return JsonSerializer.deserialize(keyType, key);
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
const deserializeMapValue = (valueType: Constructor | undefined, value: any): any => {
|
|
123
|
+
if (!valueType) {
|
|
124
|
+
return value;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
if (typeSerializers.has(valueType)) {
|
|
128
|
+
return typeSerializers.get(valueType)!(value);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
return JsonSerializer.deserialize(valueType, JSON.stringify(value));
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
const deserializeValueMapFromField = (field: Field, value: any): ValueMap<any, any> => {
|
|
135
|
+
const valueMap = new ValueMap<any, any>();
|
|
136
|
+
const keyType = field.genericArguments[0];
|
|
137
|
+
const valueType = field.genericArguments[1];
|
|
138
|
+
|
|
139
|
+
if (!value || !keyType) {
|
|
140
|
+
return valueMap;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
for (const key of Object.keys(value)) {
|
|
144
|
+
const deserializedKey = deserializeMapKey(keyType, key);
|
|
145
|
+
const deserializedValue = deserializeMapValue(valueType, value[key]);
|
|
146
|
+
valueMap.set(deserializedKey, deserializedValue);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
return valueMap;
|
|
150
|
+
};
|
|
151
|
+
|
|
65
152
|
const convertTypesOnInstance = (instance: any) => {
|
|
66
153
|
if (typeConverters.has(instance.constructor)) {
|
|
67
154
|
return serializeValueForType(instance.constructor, instance);
|
package/ValueMap.ts
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
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
|
+
/**
|
|
5
|
+
* Represents a map that compares object keys by value.
|
|
6
|
+
*/
|
|
7
|
+
export class ValueMap<TKey, TValue> {
|
|
8
|
+
private readonly _entries: Array<[TKey, TValue]> = [];
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Adds a new entry or updates an existing entry for the provided key.
|
|
12
|
+
*
|
|
13
|
+
* @param key Key to add or update.
|
|
14
|
+
* @param value Value to associate with the key.
|
|
15
|
+
* @returns The current map instance for chaining.
|
|
16
|
+
*/
|
|
17
|
+
set(key: TKey, value: TValue): this {
|
|
18
|
+
const index = this._entries.findIndex(([existingKey]) => this.equals(existingKey, key));
|
|
19
|
+
if (index >= 0) {
|
|
20
|
+
this._entries[index][1] = value;
|
|
21
|
+
} else {
|
|
22
|
+
this._entries.push([key, value]);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
return this;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Gets the value associated with the provided key.
|
|
30
|
+
*
|
|
31
|
+
* @param key Key to look up.
|
|
32
|
+
* @returns The matching value, or undefined when no entry matches.
|
|
33
|
+
*/
|
|
34
|
+
get(key: TKey): TValue | undefined {
|
|
35
|
+
return this._entries.find(([existingKey]) => this.equals(existingKey, key))?.[1];
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Gets an iterator over all key-value entries in insertion order.
|
|
40
|
+
*
|
|
41
|
+
* @returns Iterator for the map entries.
|
|
42
|
+
*/
|
|
43
|
+
entries(): IterableIterator<[TKey, TValue]> {
|
|
44
|
+
return this._entries.values();
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
private equals(first: TKey, second: TKey): boolean {
|
|
48
|
+
if (first === second) {
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
if (first === undefined || first === null || second === undefined || second === null) {
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
if (typeof first === 'object' && typeof second === 'object') {
|
|
57
|
+
return JSON.stringify(first) === JSON.stringify(second);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
}
|
package/dist/Field.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ export declare class Field {
|
|
|
4
4
|
readonly type: Constructor;
|
|
5
5
|
readonly enumerable: boolean;
|
|
6
6
|
readonly derivatives: Constructor[];
|
|
7
|
-
|
|
7
|
+
readonly genericArguments: Constructor[];
|
|
8
|
+
constructor(name: string, type: Constructor, enumerable: boolean, derivatives: Constructor[], genericArguments: Constructor[]);
|
|
8
9
|
}
|
|
9
10
|
//# sourceMappingURL=Field.d.ts.map
|
package/dist/Field.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Field.d.ts","sourceRoot":"","sources":["../Field.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAK3C,qBAAa,KAAK;
|
|
1
|
+
{"version":3,"file":"Field.d.ts","sourceRoot":"","sources":["../Field.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAK3C,qBAAa,KAAK;IAEX,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,IAAI,EAAE,WAAW;IAC1B,QAAQ,CAAC,UAAU,EAAE,OAAO;IAC5B,QAAQ,CAAC,WAAW,EAAE,WAAW,EAAE;IACnC,QAAQ,CAAC,gBAAgB,EAAE,WAAW,EAAE;gBAJ/B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,WAAW,EACjB,UAAU,EAAE,OAAO,EACnB,WAAW,EAAE,WAAW,EAAE,EAC1B,gBAAgB,EAAE,WAAW,EAAE;CAE/C"}
|
package/dist/Field.js
CHANGED
|
@@ -3,11 +3,13 @@ export class Field {
|
|
|
3
3
|
type;
|
|
4
4
|
enumerable;
|
|
5
5
|
derivatives;
|
|
6
|
-
|
|
6
|
+
genericArguments;
|
|
7
|
+
constructor(name, type, enumerable, derivatives, genericArguments) {
|
|
7
8
|
this.name = name;
|
|
8
9
|
this.type = type;
|
|
9
10
|
this.enumerable = enumerable;
|
|
10
11
|
this.derivatives = derivatives;
|
|
12
|
+
this.genericArguments = genericArguments;
|
|
11
13
|
}
|
|
12
14
|
}
|
|
13
15
|
//# sourceMappingURL=Field.js.map
|
package/dist/Field.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Field.js","sourceRoot":"","sources":["../Field.ts"],"names":[],"mappings":"AAQC,MAAM,OAAO,KAAK;
|
|
1
|
+
{"version":3,"file":"Field.js","sourceRoot":"","sources":["../Field.ts"],"names":[],"mappings":"AAQC,MAAM,OAAO,KAAK;IAEF;IACA;IACA;IACA;IACA;IALb,YACa,IAAY,EACZ,IAAiB,EACjB,UAAmB,EACnB,WAA0B,EAC1B,gBAA+B;QAJ/B,SAAI,GAAJ,IAAI,CAAQ;QACZ,SAAI,GAAJ,IAAI,CAAa;QACjB,eAAU,GAAV,UAAU,CAAS;QACnB,gBAAW,GAAX,WAAW,CAAe;QAC1B,qBAAgB,GAAhB,gBAAgB,CAAe;IAC5C,CAAC;CACJ"}
|
package/dist/Fields.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import 'reflect-metadata';
|
|
|
2
2
|
import { Constructor } from './Constructor';
|
|
3
3
|
import { Field } from './Field';
|
|
4
4
|
export declare class Fields {
|
|
5
|
-
static addFieldToType(target: Constructor, field: string, fieldType: Constructor, enumerable: boolean, derivatives: Constructor[]): void;
|
|
5
|
+
static addFieldToType(target: Constructor, field: string, fieldType: Constructor, enumerable: boolean, derivatives: Constructor[], genericArguments: Constructor[]): void;
|
|
6
6
|
static getFieldsForType(target: Constructor): Field[];
|
|
7
7
|
}
|
|
8
8
|
//# sourceMappingURL=Fields.d.ts.map
|
package/dist/Fields.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Fields.d.ts","sourceRoot":"","sources":["../Fields.ts"],"names":[],"mappings":"AAGA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAKhC,qBAAa,MAAM;IACf,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE;
|
|
1
|
+
{"version":3,"file":"Fields.d.ts","sourceRoot":"","sources":["../Fields.ts"],"names":[],"mappings":"AAGA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAKhC,qBAAa,MAAM;IACf,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,gBAAgB,EAAE,WAAW,EAAE;IASlK,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,KAAK,EAAE;CAWxD"}
|
package/dist/Fields.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import 'reflect-metadata';
|
|
2
2
|
import { Field } from './Field';
|
|
3
3
|
export class Fields {
|
|
4
|
-
static addFieldToType(target, field, fieldType, enumerable, derivatives) {
|
|
4
|
+
static addFieldToType(target, field, fieldType, enumerable, derivatives, genericArguments) {
|
|
5
5
|
let fields = new Map();
|
|
6
6
|
if (Reflect.hasOwnMetadata('fields', target)) {
|
|
7
7
|
fields = Reflect.getOwnMetadata('fields', target);
|
|
8
8
|
}
|
|
9
|
-
fields.set(field, new Field(field, fieldType, enumerable, derivatives));
|
|
9
|
+
fields.set(field, new Field(field, fieldType, enumerable, derivatives, genericArguments));
|
|
10
10
|
Reflect.defineMetadata('fields', fields, target);
|
|
11
11
|
}
|
|
12
12
|
static getFieldsForType(target) {
|
package/dist/Fields.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Fields.js","sourceRoot":"","sources":["../Fields.ts"],"names":[],"mappings":"AAGA,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAKhC,MAAM,OAAO,MAAM;IACf,MAAM,CAAC,cAAc,CAAC,MAAmB,EAAE,KAAa,EAAE,SAAsB,EAAE,UAAmB,EAAE,WAA0B;
|
|
1
|
+
{"version":3,"file":"Fields.js","sourceRoot":"","sources":["../Fields.ts"],"names":[],"mappings":"AAGA,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAKhC,MAAM,OAAO,MAAM;IACf,MAAM,CAAC,cAAc,CAAC,MAAmB,EAAE,KAAa,EAAE,SAAsB,EAAE,UAAmB,EAAE,WAA0B,EAAE,gBAA+B;QAC9J,IAAI,MAAM,GAAuB,IAAI,GAAG,EAAiB,CAAC;QAC1D,IAAI,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC;YAC3C,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACtD,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAC,CAAC;QAC1F,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,CAAC,gBAAgB,CAAC,MAAmB;QACvC,MAAM,MAAM,GAAY,EAAE,CAAC;QAC3B,IAAI,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC;YAC3C,MAAM,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAuB,CAAC;YACjF,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;gBACtC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1B,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ"}
|
|
@@ -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;AA8K5C,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
|
@@ -2,13 +2,21 @@ import { DerivedType } from './DerivedType';
|
|
|
2
2
|
import { Fields } from './Fields';
|
|
3
3
|
import { Guid } from './Guid';
|
|
4
4
|
import { TimeSpan } from './TimeSpan';
|
|
5
|
+
import { ValueMap } from './ValueMap';
|
|
5
6
|
const typeConverters = new Map([
|
|
6
7
|
[Number, (value) => value],
|
|
7
8
|
[String, (value) => value],
|
|
8
9
|
[Boolean, (value) => value],
|
|
9
10
|
[Date, (value) => value.toISOString()],
|
|
10
11
|
[Guid, (value) => value?.toString() ?? ''],
|
|
11
|
-
[TimeSpan, (value) => value?.toString() ?? '']
|
|
12
|
+
[TimeSpan, (value) => value?.toString() ?? ''],
|
|
13
|
+
[ValueMap, (value) => {
|
|
14
|
+
const converted = {};
|
|
15
|
+
for (const [key, mapValue] of value.entries()) {
|
|
16
|
+
converted[serializeMapKey(key)] = convertTypesOnInstance(mapValue);
|
|
17
|
+
}
|
|
18
|
+
return converted;
|
|
19
|
+
}]
|
|
12
20
|
]);
|
|
13
21
|
const typeSerializers = new Map([
|
|
14
22
|
[Number, (value) => value],
|
|
@@ -37,6 +45,9 @@ const deserializeValueFromType = (type, value) => {
|
|
|
37
45
|
}
|
|
38
46
|
};
|
|
39
47
|
const deserializeValueFromField = (field, value) => {
|
|
48
|
+
if (field.type === ValueMap) {
|
|
49
|
+
return deserializeValueMapFromField(field, value);
|
|
50
|
+
}
|
|
40
51
|
if (typeSerializers.has(field.type)) {
|
|
41
52
|
return typeSerializers.get(field.type)(value);
|
|
42
53
|
}
|
|
@@ -49,6 +60,62 @@ const deserializeValueFromField = (field, value) => {
|
|
|
49
60
|
return JsonSerializer.deserialize(type, JSON.stringify(value));
|
|
50
61
|
}
|
|
51
62
|
};
|
|
63
|
+
const serializeMapKey = (key) => {
|
|
64
|
+
if (key === undefined || key === null) {
|
|
65
|
+
return '';
|
|
66
|
+
}
|
|
67
|
+
if (typeof key === 'string') {
|
|
68
|
+
return key;
|
|
69
|
+
}
|
|
70
|
+
if (typeof key === 'number' || typeof key === 'boolean' || typeof key === 'bigint') {
|
|
71
|
+
return key.toString();
|
|
72
|
+
}
|
|
73
|
+
if (key instanceof Date) {
|
|
74
|
+
return key.toISOString();
|
|
75
|
+
}
|
|
76
|
+
return JsonSerializer.serialize(key);
|
|
77
|
+
};
|
|
78
|
+
const deserializeMapKey = (keyType, key) => {
|
|
79
|
+
if (keyType === String) {
|
|
80
|
+
return key;
|
|
81
|
+
}
|
|
82
|
+
if (keyType === Number) {
|
|
83
|
+
return Number(key);
|
|
84
|
+
}
|
|
85
|
+
if (keyType === Boolean) {
|
|
86
|
+
return key.toLowerCase() === 'true';
|
|
87
|
+
}
|
|
88
|
+
if (keyType === Date) {
|
|
89
|
+
return new Date(key);
|
|
90
|
+
}
|
|
91
|
+
if (typeSerializers.has(keyType)) {
|
|
92
|
+
return typeSerializers.get(keyType)(key);
|
|
93
|
+
}
|
|
94
|
+
return JsonSerializer.deserialize(keyType, key);
|
|
95
|
+
};
|
|
96
|
+
const deserializeMapValue = (valueType, value) => {
|
|
97
|
+
if (!valueType) {
|
|
98
|
+
return value;
|
|
99
|
+
}
|
|
100
|
+
if (typeSerializers.has(valueType)) {
|
|
101
|
+
return typeSerializers.get(valueType)(value);
|
|
102
|
+
}
|
|
103
|
+
return JsonSerializer.deserialize(valueType, JSON.stringify(value));
|
|
104
|
+
};
|
|
105
|
+
const deserializeValueMapFromField = (field, value) => {
|
|
106
|
+
const valueMap = new ValueMap();
|
|
107
|
+
const keyType = field.genericArguments[0];
|
|
108
|
+
const valueType = field.genericArguments[1];
|
|
109
|
+
if (!value || !keyType) {
|
|
110
|
+
return valueMap;
|
|
111
|
+
}
|
|
112
|
+
for (const key of Object.keys(value)) {
|
|
113
|
+
const deserializedKey = deserializeMapKey(keyType, key);
|
|
114
|
+
const deserializedValue = deserializeMapValue(valueType, value[key]);
|
|
115
|
+
valueMap.set(deserializedKey, deserializedValue);
|
|
116
|
+
}
|
|
117
|
+
return valueMap;
|
|
118
|
+
};
|
|
52
119
|
const convertTypesOnInstance = (instance) => {
|
|
53
120
|
if (typeConverters.has(instance.constructor)) {
|
|
54
121
|
return serializeValueForType(instance.constructor, instance);
|
|
@@ -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;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAMtC,MAAM,cAAc,GAAqC,IAAI,GAAG,CAA8B;IAC1F,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC;IAClC,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC;IAClC,CAAC,OAAO,EAAE,CAAC,KAAc,EAAE,EAAE,CAAC,KAAK,CAAC;IACpC,CAAC,IAAI,EAAE,CAAC,KAAW,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;IAC5C,CAAC,IAAI,EAAE,CAAC,KAAW,EAAE,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAChD,CAAC,QAAQ,EAAE,CAAC,KAAe,EAAE,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"JsonSerializer.js","sourceRoot":"","sources":["../JsonSerializer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ValueMap.d.ts","sourceRoot":"","sources":["../ValueMap.ts"],"names":[],"mappings":"AAMA,qBAAa,QAAQ,CAAC,IAAI,EAAE,MAAM;IAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6B;IAStD,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAiBnC,GAAG,CAAC,GAAG,EAAE,IAAI,GAAG,MAAM,GAAG,SAAS;IASlC,OAAO,IAAI,gBAAgB,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAI3C,OAAO,CAAC,MAAM;CAejB"}
|
package/dist/ValueMap.js
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export class ValueMap {
|
|
2
|
+
_entries = [];
|
|
3
|
+
set(key, value) {
|
|
4
|
+
const index = this._entries.findIndex(([existingKey]) => this.equals(existingKey, key));
|
|
5
|
+
if (index >= 0) {
|
|
6
|
+
this._entries[index][1] = value;
|
|
7
|
+
}
|
|
8
|
+
else {
|
|
9
|
+
this._entries.push([key, value]);
|
|
10
|
+
}
|
|
11
|
+
return this;
|
|
12
|
+
}
|
|
13
|
+
get(key) {
|
|
14
|
+
return this._entries.find(([existingKey]) => this.equals(existingKey, key))?.[1];
|
|
15
|
+
}
|
|
16
|
+
entries() {
|
|
17
|
+
return this._entries.values();
|
|
18
|
+
}
|
|
19
|
+
equals(first, second) {
|
|
20
|
+
if (first === second) {
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
if (first === undefined || first === null || second === undefined || second === null) {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
if (typeof first === 'object' && typeof second === 'object') {
|
|
27
|
+
return JSON.stringify(first) === JSON.stringify(second);
|
|
28
|
+
}
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=ValueMap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ValueMap.js","sourceRoot":"","sources":["../ValueMap.ts"],"names":[],"mappings":"AAMA,MAAM,OAAO,QAAQ;IACA,QAAQ,GAA0B,EAAE,CAAC;IAStD,GAAG,CAAC,GAAS,EAAE,KAAa;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC;QACxF,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YACb,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;QACpC,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;QACrC,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAQD,GAAG,CAAC,GAAS;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACrF,CAAC;IAOD,OAAO;QACH,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;IAClC,CAAC;IAEO,MAAM,CAAC,KAAW,EAAE,MAAY;QACpC,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACnF,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC1D,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC5D,CAAC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;CACJ"}
|
package/dist/cjs/Field.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ export declare class Field {
|
|
|
4
4
|
readonly type: Constructor;
|
|
5
5
|
readonly enumerable: boolean;
|
|
6
6
|
readonly derivatives: Constructor[];
|
|
7
|
-
|
|
7
|
+
readonly genericArguments: Constructor[];
|
|
8
|
+
constructor(name: string, type: Constructor, enumerable: boolean, derivatives: Constructor[], genericArguments: Constructor[]);
|
|
8
9
|
}
|
|
9
10
|
//# sourceMappingURL=Field.d.ts.map
|
package/dist/cjs/Field.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Field.d.ts","sourceRoot":"","sources":["../../Field.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAK3C,qBAAa,KAAK;
|
|
1
|
+
{"version":3,"file":"Field.d.ts","sourceRoot":"","sources":["../../Field.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAK3C,qBAAa,KAAK;IAEX,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,IAAI,EAAE,WAAW;IAC1B,QAAQ,CAAC,UAAU,EAAE,OAAO;IAC5B,QAAQ,CAAC,WAAW,EAAE,WAAW,EAAE;IACnC,QAAQ,CAAC,gBAAgB,EAAE,WAAW,EAAE;gBAJ/B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,WAAW,EACjB,UAAU,EAAE,OAAO,EACnB,WAAW,EAAE,WAAW,EAAE,EAC1B,gBAAgB,EAAE,WAAW,EAAE;CAE/C"}
|
package/dist/cjs/Field.js
CHANGED
|
@@ -5,11 +5,13 @@ class Field {
|
|
|
5
5
|
type;
|
|
6
6
|
enumerable;
|
|
7
7
|
derivatives;
|
|
8
|
-
|
|
8
|
+
genericArguments;
|
|
9
|
+
constructor(name, type, enumerable, derivatives, genericArguments) {
|
|
9
10
|
this.name = name;
|
|
10
11
|
this.type = type;
|
|
11
12
|
this.enumerable = enumerable;
|
|
12
13
|
this.derivatives = derivatives;
|
|
14
|
+
this.genericArguments = genericArguments;
|
|
13
15
|
}
|
|
14
16
|
}
|
|
15
17
|
|
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
|
|
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(\n readonly name: string,\n readonly type: Constructor,\n readonly enumerable: boolean,\n readonly derivatives: Constructor[],\n readonly genericArguments: Constructor[]) {\n }\n}\n"],"names":[],"mappings":";;MAQc,KAAK,CAAA;AAEF,IAAA,IAAA;AACA,IAAA,IAAA;AACA,IAAA,UAAA;AACA,IAAA,WAAA;AACA,IAAA,gBAAA;IALb,WAAA,CACa,IAAY,EACZ,IAAiB,EACjB,UAAmB,EACnB,WAA0B,EAC1B,gBAA+B,EAAA;QAJ/B,IAAA,CAAA,IAAI,GAAJ,IAAI;QACJ,IAAA,CAAA,IAAI,GAAJ,IAAI;QACJ,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,WAAW,GAAX,WAAW;QACX,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;IAC7B;AACH;;;;"}
|
package/dist/cjs/Fields.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import 'reflect-metadata';
|
|
|
2
2
|
import { Constructor } from './Constructor';
|
|
3
3
|
import { Field } from './Field';
|
|
4
4
|
export declare class Fields {
|
|
5
|
-
static addFieldToType(target: Constructor, field: string, fieldType: Constructor, enumerable: boolean, derivatives: Constructor[]): void;
|
|
5
|
+
static addFieldToType(target: Constructor, field: string, fieldType: Constructor, enumerable: boolean, derivatives: Constructor[], genericArguments: Constructor[]): void;
|
|
6
6
|
static getFieldsForType(target: Constructor): Field[];
|
|
7
7
|
}
|
|
8
8
|
//# sourceMappingURL=Fields.d.ts.map
|
package/dist/cjs/Fields.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Fields.d.ts","sourceRoot":"","sources":["../../Fields.ts"],"names":[],"mappings":"AAGA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAKhC,qBAAa,MAAM;IACf,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE;
|
|
1
|
+
{"version":3,"file":"Fields.d.ts","sourceRoot":"","sources":["../../Fields.ts"],"names":[],"mappings":"AAGA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAKhC,qBAAa,MAAM;IACf,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,gBAAgB,EAAE,WAAW,EAAE;IASlK,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,KAAK,EAAE;CAWxD"}
|
package/dist/cjs/Fields.js
CHANGED
|
@@ -4,12 +4,12 @@ require('reflect-metadata');
|
|
|
4
4
|
var Field = require('./Field.js');
|
|
5
5
|
|
|
6
6
|
class Fields {
|
|
7
|
-
static addFieldToType(target, field, fieldType, enumerable, derivatives) {
|
|
7
|
+
static addFieldToType(target, field, fieldType, enumerable, derivatives, genericArguments) {
|
|
8
8
|
let fields = new Map();
|
|
9
9
|
if (Reflect.hasOwnMetadata('fields', target)) {
|
|
10
10
|
fields = Reflect.getOwnMetadata('fields', target);
|
|
11
11
|
}
|
|
12
|
-
fields.set(field, new Field.Field(field, fieldType, enumerable, derivatives));
|
|
12
|
+
fields.set(field, new Field.Field(field, fieldType, enumerable, derivatives, genericArguments));
|
|
13
13
|
Reflect.defineMetadata('fields', fields, target);
|
|
14
14
|
}
|
|
15
15
|
static getFieldsForType(target) {
|
package/dist/cjs/Fields.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Fields.js","sources":["../../Fields.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 { Constructor } from './Constructor';\nimport { Field } from './Field';\n\n/**\n * Represents a system working with fields on types.\n */\nexport class Fields {\n static addFieldToType(target: Constructor, field: string, fieldType: Constructor, enumerable: boolean, derivatives: Constructor[]) {\n let fields: Map<string, Field> = new Map<string, Field>();\n if (Reflect.hasOwnMetadata('fields', target)) {\n fields = Reflect.getOwnMetadata('fields', target);\n }\n fields.set(field, new Field(field, fieldType, enumerable, derivatives));\n Reflect.defineMetadata('fields', fields, target);\n }\n\n static getFieldsForType(target: Constructor): Field[] {\n const fields: Field[] = [];\n if (Reflect.hasOwnMetadata('fields', target)) {\n const fieldsMap = Reflect.getOwnMetadata('fields', target) as Map<string, Field>;\n for (const field of fieldsMap.entries()) {\n fields.push(field[1]);\n }\n }\n\n return fields;\n }\n}\n"],"names":["Field"],"mappings":";;;;;MAUa,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"Fields.js","sources":["../../Fields.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 { Constructor } from './Constructor';\nimport { Field } from './Field';\n\n/**\n * Represents a system working with fields on types.\n */\nexport class Fields {\n static addFieldToType(target: Constructor, field: string, fieldType: Constructor, enumerable: boolean, derivatives: Constructor[], genericArguments: Constructor[]) {\n let fields: Map<string, Field> = new Map<string, Field>();\n if (Reflect.hasOwnMetadata('fields', target)) {\n fields = Reflect.getOwnMetadata('fields', target);\n }\n fields.set(field, new Field(field, fieldType, enumerable, derivatives, genericArguments));\n Reflect.defineMetadata('fields', fields, target);\n }\n\n static getFieldsForType(target: Constructor): Field[] {\n const fields: Field[] = [];\n if (Reflect.hasOwnMetadata('fields', target)) {\n const fieldsMap = Reflect.getOwnMetadata('fields', target) as Map<string, Field>;\n for (const field of fieldsMap.entries()) {\n fields.push(field[1]);\n }\n }\n\n return fields;\n }\n}\n"],"names":["Field"],"mappings":";;;;;MAUa,MAAM,CAAA;AACf,IAAA,OAAO,cAAc,CAAC,MAAmB,EAAE,KAAa,EAAE,SAAsB,EAAE,UAAmB,EAAE,WAA0B,EAAE,gBAA+B,EAAA;AAC9J,QAAA,IAAI,MAAM,GAAuB,IAAI,GAAG,EAAiB;QACzD,IAAI,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE;YAC1C,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC;QACrD;AACA,QAAA,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,IAAIA,WAAK,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAC;QACzF,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;IACpD;IAEA,OAAO,gBAAgB,CAAC,MAAmB,EAAA;QACvC,MAAM,MAAM,GAAY,EAAE;QAC1B,IAAI,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE;YAC1C,MAAM,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAuB;YAChF,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,OAAO,EAAE,EAAE;gBACrC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACzB;QACJ;AAEA,QAAA,OAAO,MAAM;IACjB;AACH;;;;"}
|
|
@@ -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;AA8K5C,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"}
|