@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.
Files changed (81) hide show
  1. package/Field.ts +6 -1
  2. package/Fields.ts +2 -2
  3. package/JsonSerializer.ts +88 -1
  4. package/ValueMap.ts +62 -0
  5. package/dist/Field.d.ts +2 -1
  6. package/dist/Field.d.ts.map +1 -1
  7. package/dist/Field.js +3 -1
  8. package/dist/Field.js.map +1 -1
  9. package/dist/Fields.d.ts +1 -1
  10. package/dist/Fields.d.ts.map +1 -1
  11. package/dist/Fields.js +2 -2
  12. package/dist/Fields.js.map +1 -1
  13. package/dist/JsonSerializer.d.ts.map +1 -1
  14. package/dist/JsonSerializer.js +68 -1
  15. package/dist/JsonSerializer.js.map +1 -1
  16. package/dist/ValueMap.d.ts +8 -0
  17. package/dist/ValueMap.d.ts.map +1 -0
  18. package/dist/ValueMap.js +32 -0
  19. package/dist/ValueMap.js.map +1 -0
  20. package/dist/cjs/Field.d.ts +2 -1
  21. package/dist/cjs/Field.d.ts.map +1 -1
  22. package/dist/cjs/Field.js +3 -1
  23. package/dist/cjs/Field.js.map +1 -1
  24. package/dist/cjs/Fields.d.ts +1 -1
  25. package/dist/cjs/Fields.d.ts.map +1 -1
  26. package/dist/cjs/Fields.js +2 -2
  27. package/dist/cjs/Fields.js.map +1 -1
  28. package/dist/cjs/JsonSerializer.d.ts.map +1 -1
  29. package/dist/cjs/JsonSerializer.js +68 -1
  30. package/dist/cjs/JsonSerializer.js.map +1 -1
  31. package/dist/cjs/ValueMap.d.ts +8 -0
  32. package/dist/cjs/ValueMap.d.ts.map +1 -0
  33. package/dist/cjs/ValueMap.js +36 -0
  34. package/dist/cjs/ValueMap.js.map +1 -0
  35. package/dist/cjs/fieldDecorator.d.ts +7 -1
  36. package/dist/cjs/fieldDecorator.d.ts.map +1 -1
  37. package/dist/cjs/fieldDecorator.js +8 -2
  38. package/dist/cjs/fieldDecorator.js.map +1 -1
  39. package/dist/cjs/index.d.ts +1 -0
  40. package/dist/cjs/index.d.ts.map +1 -1
  41. package/dist/cjs/index.js +2 -0
  42. package/dist/cjs/index.js.map +1 -1
  43. package/dist/esm/Field.d.ts +2 -1
  44. package/dist/esm/Field.d.ts.map +1 -1
  45. package/dist/esm/Field.js +3 -1
  46. package/dist/esm/Field.js.map +1 -1
  47. package/dist/esm/Fields.d.ts +1 -1
  48. package/dist/esm/Fields.d.ts.map +1 -1
  49. package/dist/esm/Fields.js +2 -2
  50. package/dist/esm/Fields.js.map +1 -1
  51. package/dist/esm/JsonSerializer.d.ts.map +1 -1
  52. package/dist/esm/JsonSerializer.js +68 -1
  53. package/dist/esm/JsonSerializer.js.map +1 -1
  54. package/dist/esm/ValueMap.d.ts +8 -0
  55. package/dist/esm/ValueMap.d.ts.map +1 -0
  56. package/dist/esm/ValueMap.js +34 -0
  57. package/dist/esm/ValueMap.js.map +1 -0
  58. package/dist/esm/fieldDecorator.d.ts +7 -1
  59. package/dist/esm/fieldDecorator.d.ts.map +1 -1
  60. package/dist/esm/fieldDecorator.js +8 -2
  61. package/dist/esm/fieldDecorator.js.map +1 -1
  62. package/dist/esm/index.d.ts +1 -0
  63. package/dist/esm/index.d.ts.map +1 -1
  64. package/dist/esm/index.js +1 -0
  65. package/dist/esm/index.js.map +1 -1
  66. package/dist/fieldDecorator.d.ts +7 -1
  67. package/dist/fieldDecorator.d.ts.map +1 -1
  68. package/dist/fieldDecorator.js +8 -2
  69. package/dist/fieldDecorator.js.map +1 -1
  70. package/dist/index.d.ts +1 -0
  71. package/dist/index.d.ts.map +1 -1
  72. package/dist/index.js +1 -0
  73. package/dist/index.js.map +1 -1
  74. package/dist/tsconfig.tsbuildinfo +1 -1
  75. package/fieldDecorator.ts +16 -2
  76. package/for_Fields/when_adding_fiields_to_type.ts +4 -3
  77. package/for_JsonSerializer/Types.ts +12 -0
  78. package/for_JsonSerializer/when_deserializing_object_with_value_map.ts +63 -0
  79. package/for_JsonSerializer/when_serializing_object_with_value_map.ts +34 -0
  80. package/index.ts +1 -0
  81. 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(readonly name: string, readonly type: Constructor, readonly enumerable: boolean, readonly derivatives: 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
- constructor(name: string, type: Constructor, enumerable: boolean, derivatives: Constructor[]);
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
@@ -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;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW;IAAE,QAAQ,CAAC,UAAU,EAAE,OAAO;IAAE,QAAQ,CAAC,WAAW,EAAE,WAAW,EAAE;gBAA3G,IAAI,EAAE,MAAM,EAAW,IAAI,EAAE,WAAW,EAAW,UAAU,EAAE,OAAO,EAAW,WAAW,EAAE,WAAW,EAAE;CAEnI"}
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
- constructor(name, type, enumerable, derivatives) {
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;IACM;IAAuB;IAA4B;IAA8B;IAAtG,YAAqB,IAAY,EAAW,IAAiB,EAAW,UAAmB,EAAW,WAA0B;QAA3G,SAAI,GAAJ,IAAI,CAAQ;QAAW,SAAI,GAAJ,IAAI,CAAa;QAAW,eAAU,GAAV,UAAU,CAAS;QAAW,gBAAW,GAAX,WAAW,CAAe;IAChI,CAAC;CACJ"}
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
@@ -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;IASjI,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,KAAK,EAAE;CAWxD"}
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) {
@@ -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;QAC7H,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,CAAC,CAAC,CAAC;QACxE,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
+ {"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;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"}
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"}
@@ -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":"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"}
1
+ {"version":3,"file":"JsonSerializer.js","sourceRoot":"","sources":["../JsonSerializer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export declare class ValueMap<TKey, TValue> {
2
+ private readonly _entries;
3
+ set(key: TKey, value: TValue): this;
4
+ get(key: TKey): TValue | undefined;
5
+ entries(): IterableIterator<[TKey, TValue]>;
6
+ private equals;
7
+ }
8
+ //# sourceMappingURL=ValueMap.d.ts.map
@@ -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"}
@@ -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"}
@@ -4,6 +4,7 @@ export declare class Field {
4
4
  readonly type: Constructor;
5
5
  readonly enumerable: boolean;
6
6
  readonly derivatives: Constructor[];
7
- constructor(name: string, type: Constructor, enumerable: boolean, derivatives: Constructor[]);
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
@@ -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;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW;IAAE,QAAQ,CAAC,UAAU,EAAE,OAAO;IAAE,QAAQ,CAAC,WAAW,EAAE,WAAW,EAAE;gBAA3G,IAAI,EAAE,MAAM,EAAW,IAAI,EAAE,WAAW,EAAW,UAAU,EAAE,OAAO,EAAW,WAAW,EAAE,WAAW,EAAE;CAEnI"}
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
- constructor(name, type, enumerable, derivatives) {
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
 
@@ -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;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,IAAA,CAAA,IAAI,GAAJ,IAAI;QAAmB,IAAA,CAAA,IAAI,GAAJ,IAAI;QAAwB,IAAA,CAAA,UAAU,GAAV,UAAU;QAAoB,IAAA,CAAA,WAAW,GAAX,WAAW;IACjH;AACH;;;;"}
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;;;;"}
@@ -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
@@ -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;IASjI,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,KAAK,EAAE;CAWxD"}
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"}
@@ -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) {
@@ -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;IACf,OAAO,cAAc,CAAC,MAAmB,EAAE,KAAa,EAAE,SAAsB,EAAE,UAAmB,EAAE,WAA0B,EAAA;AAC7H,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,CAAC,CAAC;QACvE,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
+ {"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;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"}
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"}