@cratis/fundamentals 6.0.1 → 6.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Constructor.ts +2 -1
- package/Guid.ts +17 -2
- package/IEquatable.ts +1 -1
- package/JsonSerializer.ts +8 -6
- package/PropertyAccessor.ts +3 -1
- package/PropertyPathResolverProxyHandler.ts +3 -0
- package/README.md +1 -0
- package/derivedTypeDecorator.ts +3 -0
- package/dist/Constructor.d.ts +2 -0
- package/dist/Constructor.d.ts.map +1 -0
- package/dist/Constructor.js +2 -0
- package/dist/Constructor.js.map +1 -0
- package/dist/DerivedType.d.ts +6 -0
- package/dist/DerivedType.d.ts.map +1 -0
- package/dist/DerivedType.js +9 -0
- package/dist/DerivedType.js.map +1 -0
- package/dist/Field.d.ts +9 -0
- package/dist/Field.d.ts.map +1 -0
- package/dist/Field.js +13 -0
- package/dist/Field.js.map +1 -0
- package/dist/Fields.d.ts +8 -0
- package/dist/Fields.d.ts.map +1 -0
- package/dist/Fields.js +23 -0
- package/dist/Fields.js.map +1 -0
- package/dist/Guid.d.ts +14 -0
- package/dist/Guid.d.ts.map +1 -0
- package/dist/Guid.js +81 -0
- package/dist/Guid.js.map +1 -0
- package/dist/IEquatable.d.ts +4 -0
- package/dist/IEquatable.d.ts.map +1 -0
- package/dist/IEquatable.js +2 -0
- package/dist/IEquatable.js.map +1 -0
- package/dist/JsonSerializer.d.ts +10 -0
- package/dist/JsonSerializer.d.ts.map +1 -0
- package/dist/JsonSerializer.js +118 -0
- package/dist/JsonSerializer.js.map +1 -0
- package/dist/PropertyAccessor.d.ts +2 -0
- package/dist/PropertyAccessor.d.ts.map +1 -0
- package/dist/PropertyAccessor.js +2 -0
- package/dist/PropertyAccessor.js.map +1 -0
- package/dist/PropertyAccessorDescriptor.d.ts +10 -0
- package/dist/PropertyAccessorDescriptor.d.ts.map +1 -0
- package/dist/PropertyAccessorDescriptor.js +18 -0
- package/dist/PropertyAccessorDescriptor.js.map +1 -0
- package/dist/PropertyPathResolverProxyHandler.d.ts +12 -0
- package/dist/PropertyPathResolverProxyHandler.d.ts.map +1 -0
- package/dist/PropertyPathResolverProxyHandler.js +28 -0
- package/dist/PropertyPathResolverProxyHandler.js.map +1 -0
- package/dist/cjs/Constructor.d.ts +1 -1
- package/dist/cjs/Constructor.d.ts.map +1 -1
- package/dist/cjs/Field.js +4 -0
- package/dist/cjs/Field.js.map +1 -1
- package/dist/cjs/Guid.d.ts +2 -1
- package/dist/cjs/Guid.d.ts.map +1 -1
- package/dist/cjs/Guid.js +14 -6
- package/dist/cjs/Guid.js.map +1 -1
- package/dist/cjs/IEquatable.d.ts +1 -1
- package/dist/cjs/IEquatable.d.ts.map +1 -1
- package/dist/cjs/JsonSerializer.d.ts +4 -4
- package/dist/cjs/JsonSerializer.d.ts.map +1 -1
- package/dist/cjs/JsonSerializer.js +3 -4
- package/dist/cjs/JsonSerializer.js.map +1 -1
- package/dist/cjs/PropertyAccessor.d.ts +1 -1
- package/dist/cjs/PropertyAccessor.d.ts.map +1 -1
- package/dist/cjs/PropertyAccessorDescriptor.js +2 -0
- package/dist/cjs/PropertyAccessorDescriptor.js.map +1 -1
- package/dist/cjs/PropertyPathResolverProxyHandler.d.ts.map +1 -1
- package/dist/cjs/PropertyPathResolverProxyHandler.js +3 -2
- package/dist/cjs/PropertyPathResolverProxyHandler.js.map +1 -1
- package/dist/cjs/derivedTypeDecorator.d.ts.map +1 -1
- package/dist/cjs/derivedTypeDecorator.js.map +1 -1
- package/dist/cjs/fieldDecorator.d.ts.map +1 -1
- package/dist/cjs/fieldDecorator.js.map +1 -1
- package/dist/derivedTypeDecorator.d.ts +3 -0
- package/dist/derivedTypeDecorator.d.ts.map +1 -0
- package/dist/derivedTypeDecorator.js +8 -0
- package/dist/derivedTypeDecorator.js.map +1 -0
- package/dist/esm/Constructor.d.ts +1 -1
- package/dist/esm/Constructor.d.ts.map +1 -1
- package/dist/esm/Field.js +4 -0
- package/dist/esm/Field.js.map +1 -1
- package/dist/esm/Guid.d.ts +2 -1
- package/dist/esm/Guid.d.ts.map +1 -1
- package/dist/esm/Guid.js +14 -6
- package/dist/esm/Guid.js.map +1 -1
- package/dist/esm/IEquatable.d.ts +1 -1
- package/dist/esm/IEquatable.d.ts.map +1 -1
- package/dist/esm/JsonSerializer.d.ts +4 -4
- package/dist/esm/JsonSerializer.d.ts.map +1 -1
- package/dist/esm/JsonSerializer.js +3 -4
- package/dist/esm/JsonSerializer.js.map +1 -1
- package/dist/esm/PropertyAccessor.d.ts +1 -1
- package/dist/esm/PropertyAccessor.d.ts.map +1 -1
- package/dist/esm/PropertyAccessorDescriptor.js +2 -0
- package/dist/esm/PropertyAccessorDescriptor.js.map +1 -1
- package/dist/esm/PropertyPathResolverProxyHandler.d.ts.map +1 -1
- package/dist/esm/PropertyPathResolverProxyHandler.js +3 -2
- package/dist/esm/PropertyPathResolverProxyHandler.js.map +1 -1
- package/dist/esm/derivedTypeDecorator.d.ts.map +1 -1
- package/dist/esm/derivedTypeDecorator.js.map +1 -1
- package/dist/esm/fieldDecorator.d.ts.map +1 -1
- package/dist/esm/fieldDecorator.js.map +1 -1
- package/dist/fieldDecorator.d.ts +3 -0
- package/dist/fieldDecorator.d.ts.map +1 -0
- package/dist/fieldDecorator.js +7 -0
- package/dist/fieldDecorator.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/vite.config.d.mts +3 -0
- package/dist/vite.config.d.mts.map +1 -0
- package/dist/vite.config.mjs +5 -0
- package/dist/vite.config.mjs.map +1 -0
- package/fieldDecorator.ts +2 -0
- package/for_Guid/when_checking_equality/of_a_guid_and_a_number.ts +1 -1
- package/for_Guid/when_checking_string_is_valid_guid/and_it_has_invalid_bytes.ts +11 -0
- package/for_Guid/when_checking_string_is_valid_guid/and_it_has_same_length_but_is_not_a_guid.ts +11 -0
- package/for_Guid/when_checking_string_is_valid_guid/and_it_is.ts +11 -0
- package/for_Guid/when_getting_as/{and_input_is_string.ts → and_input_is_a_valid_string.ts} +1 -1
- package/for_Guid/when_getting_empty.ts +1 -1
- package/for_JsonSerializer/Types.ts +1 -0
- package/for_JsonSerializer/when_deserializing_object_with_any_object_on_it.ts +1 -0
- package/package.json +4 -3
package/Constructor.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
// Copyright (c) Cratis. All rights reserved.
|
|
2
2
|
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
5
|
+
export type Constructor<T = any> = new (...args: any[]) => T;
|
package/Guid.ts
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
import { IEquatable } from './IEquatable';
|
|
5
5
|
|
|
6
|
+
const guidRegex = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/;
|
|
6
7
|
const lookUpTable: string[] = [];
|
|
7
8
|
(() => {
|
|
8
9
|
for (let i = 0; i < 256; i += 1) {
|
|
@@ -93,6 +94,15 @@ export class Guid implements IEquatable {
|
|
|
93
94
|
return new Guid(bytes);
|
|
94
95
|
}
|
|
95
96
|
|
|
97
|
+
/**
|
|
98
|
+
* Check if a string is a valid {Guid}
|
|
99
|
+
* @param {string} value Value to check.
|
|
100
|
+
* @returns True if it is, false if not.
|
|
101
|
+
*/
|
|
102
|
+
static isGuid(value: string): boolean {
|
|
103
|
+
return guidRegex.test(value);
|
|
104
|
+
}
|
|
105
|
+
|
|
96
106
|
/**
|
|
97
107
|
* Parses if the type is a string parse, otherwise pass through the input as desired output type.
|
|
98
108
|
* @template T Type to handle for
|
|
@@ -109,8 +119,13 @@ export class Guid implements IEquatable {
|
|
|
109
119
|
/**
|
|
110
120
|
* @inheritdoc
|
|
111
121
|
*/
|
|
112
|
-
equals(other:
|
|
113
|
-
|
|
122
|
+
equals(other: object): boolean {
|
|
123
|
+
const actualOther = other instanceof Guid ? other : other.toString();
|
|
124
|
+
if (typeof actualOther === 'string' && !Guid.isGuid(actualOther)) {
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
return Guid.as(actualOther).toString() === this.toString();
|
|
114
129
|
}
|
|
115
130
|
|
|
116
131
|
/**
|
package/IEquatable.ts
CHANGED
package/JsonSerializer.ts
CHANGED
|
@@ -7,6 +7,8 @@ import { Field } from './Field';
|
|
|
7
7
|
import { Fields } from './Fields';
|
|
8
8
|
import { Guid } from './Guid';
|
|
9
9
|
|
|
10
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
11
|
+
|
|
10
12
|
type typeSerializer = (value: any) => any;
|
|
11
13
|
|
|
12
14
|
const typeConverters: Map<Constructor, typeSerializer> = new Map<Constructor, typeSerializer>([
|
|
@@ -22,7 +24,7 @@ const typeSerializers: Map<Constructor, typeSerializer> = new Map<Constructor, t
|
|
|
22
24
|
[String, (value: any) => value],
|
|
23
25
|
[Boolean, (value: any) => value],
|
|
24
26
|
[Date, (value: any) => new Date(value)],
|
|
25
|
-
[Guid, (value: any) => Guid.parse(value.toString())],
|
|
27
|
+
// [Guid, (value: any) => Guid.parse(value.toString())],
|
|
26
28
|
]);
|
|
27
29
|
|
|
28
30
|
const serializeValueForType = (type: Constructor, value: any) => {
|
|
@@ -102,7 +104,7 @@ export class JsonSerializer {
|
|
|
102
104
|
* @param {string} json Actual JSON to deserialize.
|
|
103
105
|
* @returns An instance of the target type.
|
|
104
106
|
*/
|
|
105
|
-
static deserialize<TResult extends
|
|
107
|
+
static deserialize<TResult extends object>(targetType: Constructor<TResult>, json: string): TResult {
|
|
106
108
|
const parsed = JSON.parse(json);
|
|
107
109
|
return this.deserializeFromInstance<TResult>(targetType, parsed);
|
|
108
110
|
}
|
|
@@ -113,7 +115,7 @@ export class JsonSerializer {
|
|
|
113
115
|
* @param {string} json Actual JSON to deserialize.
|
|
114
116
|
* @returns An array of instances of the target type.
|
|
115
117
|
*/
|
|
116
|
-
static deserializeArray<TResult extends
|
|
118
|
+
static deserializeArray<TResult extends object>(targetType: Constructor<TResult>, json: string): TResult[] {
|
|
117
119
|
const parsed = JSON.parse(json);
|
|
118
120
|
return this.deserializeArrayFromInstance(targetType, parsed);
|
|
119
121
|
}
|
|
@@ -124,7 +126,7 @@ export class JsonSerializer {
|
|
|
124
126
|
* @param {*} instance Actual instance to deserialize.
|
|
125
127
|
* @returns An instance of the target type.
|
|
126
128
|
*/
|
|
127
|
-
static deserializeFromInstance<TResult extends
|
|
129
|
+
static deserializeFromInstance<TResult extends object>(targetType: Constructor<TResult>, instance: any): TResult {
|
|
128
130
|
const fields = Fields.getFieldsForType(targetType as Constructor);
|
|
129
131
|
|
|
130
132
|
if (typeSerializers.has(targetType)) {
|
|
@@ -146,7 +148,7 @@ export class JsonSerializer {
|
|
|
146
148
|
}
|
|
147
149
|
|
|
148
150
|
if ((targetType as Constructor) == Object) {
|
|
149
|
-
const objectFields = Object.keys(instance).filter((value
|
|
151
|
+
const objectFields = Object.keys(instance).filter((value) => {
|
|
150
152
|
return !fields.some(_ => _.name == value);
|
|
151
153
|
});
|
|
152
154
|
|
|
@@ -164,7 +166,7 @@ export class JsonSerializer {
|
|
|
164
166
|
* @param {instances} instances Actual instances to deserialize.
|
|
165
167
|
* @returns An array of instances of the target type.
|
|
166
168
|
*/
|
|
167
|
-
static deserializeArrayFromInstance<TResult extends
|
|
169
|
+
static deserializeArrayFromInstance<TResult extends object>(targetType: Constructor<TResult>, instances: any): TResult[] {
|
|
168
170
|
const deserialized: TResult[] = [];
|
|
169
171
|
|
|
170
172
|
for (const instance of instances) {
|
package/PropertyAccessor.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
// Copyright (c) Cratis. All rights reserved.
|
|
2
2
|
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
3
|
|
|
4
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
5
|
+
|
|
4
6
|
/**
|
|
5
7
|
* The delegate for representing accessing a property
|
|
6
8
|
*/
|
|
7
|
-
export type PropertyAccessor<T =
|
|
9
|
+
export type PropertyAccessor<T = object> = (instance: T) => any;
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
// Copyright (c) Cratis. All rights reserved.
|
|
2
2
|
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
3
|
|
|
4
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
5
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
6
|
+
|
|
4
7
|
/**
|
|
5
8
|
* Object proxy handler
|
|
6
9
|
* @template TObject
|
package/README.md
CHANGED
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
[](https://github.com/cratis/Fundamentals/actions/workflows/dotnet-build.yml)
|
|
11
11
|
[](https://github.com/cratis/Fundamentals/actions/workflows/javascript-build.yml)
|
|
12
|
+
[](https://github.com/Cratis/Documentation/actions/workflows/pages.yml)
|
|
12
13
|
|
|
13
14
|
## Description
|
|
14
15
|
|
package/derivedTypeDecorator.ts
CHANGED
|
@@ -4,6 +4,9 @@
|
|
|
4
4
|
import 'reflect-metadata';
|
|
5
5
|
import { DerivedType } from './DerivedType';
|
|
6
6
|
|
|
7
|
+
|
|
8
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
9
|
+
|
|
7
10
|
export function derivedType(identifier: string) {
|
|
8
11
|
return function (target: any) {
|
|
9
12
|
DerivedType.set(target, identifier);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Constructor.d.ts","sourceRoot":"","sources":["../Constructor.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,WAAW,CAAC,CAAC,GAAG,GAAG,IAAI,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Constructor.js","sourceRoot":"","sources":["../Constructor.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DerivedType.d.ts","sourceRoot":"","sources":["../DerivedType.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,qBAAa,WAAW;IACpB,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM;IAIlD,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM;CAG1C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DerivedType.js","sourceRoot":"","sources":["../DerivedType.ts"],"names":[],"mappings":"AAKA,MAAM,OAAO,WAAW;IACpB,MAAM,CAAC,GAAG,CAAC,MAAmB,EAAE,UAAkB;QAC9C,OAAO,CAAC,cAAc,CAAC,aAAa,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,MAAmB;QAC1B,OAAO,OAAO,CAAC,cAAc,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IACzD,CAAC;CACJ"}
|
package/dist/Field.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Constructor } from './Constructor';
|
|
2
|
+
export declare class Field {
|
|
3
|
+
readonly name: string;
|
|
4
|
+
readonly type: Constructor;
|
|
5
|
+
readonly enumerable: boolean;
|
|
6
|
+
readonly derivatives: Constructor[];
|
|
7
|
+
constructor(name: string, type: Constructor, enumerable: boolean, derivatives: Constructor[]);
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=Field.d.ts.map
|
|
@@ -0,0 +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"}
|
package/dist/Field.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export class Field {
|
|
2
|
+
name;
|
|
3
|
+
type;
|
|
4
|
+
enumerable;
|
|
5
|
+
derivatives;
|
|
6
|
+
constructor(name, type, enumerable, derivatives) {
|
|
7
|
+
this.name = name;
|
|
8
|
+
this.type = type;
|
|
9
|
+
this.enumerable = enumerable;
|
|
10
|
+
this.derivatives = derivatives;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=Field.js.map
|
|
@@ -0,0 +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"}
|
package/dist/Fields.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import { Constructor } from './Constructor';
|
|
3
|
+
import { Field } from './Field';
|
|
4
|
+
export declare class Fields {
|
|
5
|
+
static addFieldToType(target: Constructor, field: string, fieldType: Constructor, enumerable: boolean, derivatives: Constructor[]): void;
|
|
6
|
+
static getFieldsForType(target: Constructor): Field[];
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=Fields.d.ts.map
|
|
@@ -0,0 +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"}
|
package/dist/Fields.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import { Field } from './Field';
|
|
3
|
+
export class Fields {
|
|
4
|
+
static addFieldToType(target, field, fieldType, enumerable, derivatives) {
|
|
5
|
+
let fields = new Map();
|
|
6
|
+
if (Reflect.hasOwnMetadata('fields', target)) {
|
|
7
|
+
fields = Reflect.getOwnMetadata('fields', target);
|
|
8
|
+
}
|
|
9
|
+
fields.set(field, new Field(field, fieldType, enumerable, derivatives));
|
|
10
|
+
Reflect.defineMetadata('fields', fields, target);
|
|
11
|
+
}
|
|
12
|
+
static getFieldsForType(target) {
|
|
13
|
+
const fields = [];
|
|
14
|
+
if (Reflect.hasOwnMetadata('fields', target)) {
|
|
15
|
+
const fieldsMap = Reflect.getOwnMetadata('fields', target);
|
|
16
|
+
for (const field of fieldsMap.entries()) {
|
|
17
|
+
fields.push(field[1]);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return fields;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=Fields.js.map
|
|
@@ -0,0 +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"}
|
package/dist/Guid.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { IEquatable } from './IEquatable';
|
|
2
|
+
export declare class Guid implements IEquatable {
|
|
3
|
+
readonly bytes: number[] | Uint8Array;
|
|
4
|
+
static readonly empty: Guid;
|
|
5
|
+
private _stringVersion;
|
|
6
|
+
constructor(bytes: number[] | Uint8Array);
|
|
7
|
+
static create(): Guid;
|
|
8
|
+
static parse(guid: string): Guid;
|
|
9
|
+
static isGuid(value: string): boolean;
|
|
10
|
+
static as<T extends Guid = Guid>(input: string | T): T;
|
|
11
|
+
equals(other: object): boolean;
|
|
12
|
+
toString(): string;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=Guid.d.ts.map
|
|
@@ -0,0 +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;IATjD,MAAM,CAAC,QAAQ,CAAC,KAAK,OAA8D;IAEnF,OAAO,CAAC,cAAc,CAAM;gBAOP,KAAK,EAAE,MAAM,EAAE,GAAG,UAAU;IAiBjD,MAAM,CAAC,MAAM,IAAI,IAAI;IAgCrB,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAehC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAUrC,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,IAAI,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC;IAUtD,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAa9B,QAAQ,IAAI,MAAM;CAGrB"}
|
package/dist/Guid.js
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
const guidRegex = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/;
|
|
2
|
+
const lookUpTable = [];
|
|
3
|
+
(() => {
|
|
4
|
+
for (let i = 0; i < 256; i += 1) {
|
|
5
|
+
lookUpTable[i] = (i < 16 ? '0' : '') + (i).toString(16);
|
|
6
|
+
}
|
|
7
|
+
})();
|
|
8
|
+
const getString = (num) => {
|
|
9
|
+
return num.toString(16).padStart(2, '0');
|
|
10
|
+
};
|
|
11
|
+
export class Guid {
|
|
12
|
+
bytes;
|
|
13
|
+
static empty = new Guid([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
|
|
14
|
+
_stringVersion = '';
|
|
15
|
+
constructor(bytes) {
|
|
16
|
+
this.bytes = bytes;
|
|
17
|
+
this._stringVersion = '' +
|
|
18
|
+
getString(bytes[3]) + getString(bytes[2]) + getString(bytes[1]) + getString(bytes[0]) +
|
|
19
|
+
'-' +
|
|
20
|
+
getString(bytes[5]) + getString(bytes[4]) +
|
|
21
|
+
'-' +
|
|
22
|
+
getString(bytes[7]) + getString(bytes[6]) +
|
|
23
|
+
'-' +
|
|
24
|
+
getString(bytes[8]) + getString(bytes[9]) +
|
|
25
|
+
'-' +
|
|
26
|
+
getString(bytes[10]) + getString(bytes[11]) + getString(bytes[12]) + getString(bytes[13]) + getString(bytes[14]) + getString(bytes[15]);
|
|
27
|
+
}
|
|
28
|
+
static create() {
|
|
29
|
+
const d0 = Math.random() * 0xFFFFFFFF | 0;
|
|
30
|
+
const d1 = Math.random() * 0xFFFFFFFF | 0;
|
|
31
|
+
const d2 = Math.random() * 0xFFFFFFFF | 0;
|
|
32
|
+
const d3 = Math.random() * 0xFFFFFFFF | 0;
|
|
33
|
+
const bytes = [
|
|
34
|
+
lookUpTable[d0 & 0xFF],
|
|
35
|
+
lookUpTable[d0 >> 8 & 0xFF],
|
|
36
|
+
lookUpTable[d0 >> 16 & 0xFF],
|
|
37
|
+
lookUpTable[d0 >> 24 & 0xFF],
|
|
38
|
+
lookUpTable[d1 & 0xFF],
|
|
39
|
+
lookUpTable[d1 >> 8 & 0xFF],
|
|
40
|
+
lookUpTable[d1 >> 16 & 0x0F | 0x40],
|
|
41
|
+
lookUpTable[d1 >> 24 & 0xFF],
|
|
42
|
+
lookUpTable[d2 & 0x3F | 0x80],
|
|
43
|
+
lookUpTable[d2 >> 8 & 0xFF],
|
|
44
|
+
lookUpTable[d2 >> 16 & 0xFF],
|
|
45
|
+
lookUpTable[d2 >> 24 & 0xFF],
|
|
46
|
+
lookUpTable[d3 & 0xFF],
|
|
47
|
+
lookUpTable[d3 >> 8 & 0xFF],
|
|
48
|
+
lookUpTable[d3 >> 16 & 0xFF],
|
|
49
|
+
lookUpTable[d3 >> 24 & 0xFF]
|
|
50
|
+
];
|
|
51
|
+
return new Guid(bytes.map(_ => parseInt(`0x${_}`, 16)));
|
|
52
|
+
}
|
|
53
|
+
static parse(guid) {
|
|
54
|
+
const bytes = [];
|
|
55
|
+
guid.split('-').map((number, index) => {
|
|
56
|
+
const bytesInChar = index < 3 ? number.match(/.{1,2}/g)?.reverse() : number.match(/.{1,2}/g);
|
|
57
|
+
bytesInChar?.map((byte) => { bytes.push(parseInt(byte, 16)); });
|
|
58
|
+
});
|
|
59
|
+
return new Guid(bytes);
|
|
60
|
+
}
|
|
61
|
+
static isGuid(value) {
|
|
62
|
+
return guidRegex.test(value);
|
|
63
|
+
}
|
|
64
|
+
static as(input) {
|
|
65
|
+
if (typeof input === 'string') {
|
|
66
|
+
return Guid.parse(input);
|
|
67
|
+
}
|
|
68
|
+
return input;
|
|
69
|
+
}
|
|
70
|
+
equals(other) {
|
|
71
|
+
const actualOther = other instanceof Guid ? other : other.toString();
|
|
72
|
+
if (typeof actualOther === 'string' && !Guid.isGuid(actualOther)) {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
return Guid.as(actualOther).toString() === this.toString();
|
|
76
|
+
}
|
|
77
|
+
toString() {
|
|
78
|
+
return this._stringVersion;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=Guid.js.map
|
package/dist/Guid.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Guid.js","sourceRoot":"","sources":["../Guid.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IEquatable.d.ts","sourceRoot":"","sources":["../IEquatable.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,UAAU;IAOvB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;CACjC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IEquatable.js","sourceRoot":"","sources":["../IEquatable.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Constructor } from './Constructor';
|
|
2
|
+
export declare class JsonSerializer {
|
|
3
|
+
static readonly DerivedTypeIdProperty: string;
|
|
4
|
+
static serialize(value: any): string;
|
|
5
|
+
static deserialize<TResult extends object>(targetType: Constructor<TResult>, json: string): TResult;
|
|
6
|
+
static deserializeArray<TResult extends object>(targetType: Constructor<TResult>, json: string): TResult[];
|
|
7
|
+
static deserializeFromInstance<TResult extends object>(targetType: Constructor<TResult>, instance: any): TResult;
|
|
8
|
+
static deserializeArrayFromInstance<TResult extends object>(targetType: Constructor<TResult>, instances: any): TResult[];
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=JsonSerializer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JsonSerializer.d.ts","sourceRoot":"","sources":["../JsonSerializer.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAoF5C,qBAAa,cAAc;IACvB,MAAM,CAAC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAoB;IAOjE,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM;IAWpC,MAAM,CAAC,WAAW,CAAC,OAAO,SAAS,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAWnG,MAAM,CAAC,gBAAgB,CAAC,OAAO,SAAS,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,EAAE;IAW1G,MAAM,CAAC,uBAAuB,CAAC,OAAO,SAAS,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,GAAG,GAAG,OAAO;IAwChH,MAAM,CAAC,4BAA4B,CAAC,OAAO,SAAS,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,GAAG,GAAG,OAAO,EAAE;CAS3H"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { DerivedType } from './DerivedType';
|
|
2
|
+
import { Fields } from './Fields';
|
|
3
|
+
import { Guid } from './Guid';
|
|
4
|
+
const typeConverters = new Map([
|
|
5
|
+
[Number, (value) => value],
|
|
6
|
+
[String, (value) => value],
|
|
7
|
+
[Boolean, (value) => value],
|
|
8
|
+
[Date, (value) => value.toISOString()],
|
|
9
|
+
[Guid, (value) => value?.toString() ?? '']
|
|
10
|
+
]);
|
|
11
|
+
const typeSerializers = new Map([
|
|
12
|
+
[Number, (value) => value],
|
|
13
|
+
[String, (value) => value],
|
|
14
|
+
[Boolean, (value) => value],
|
|
15
|
+
[Date, (value) => new Date(value)],
|
|
16
|
+
]);
|
|
17
|
+
const serializeValueForType = (type, value) => {
|
|
18
|
+
if (!value)
|
|
19
|
+
return value;
|
|
20
|
+
if (typeConverters.has(type)) {
|
|
21
|
+
return typeConverters.get(type)(value);
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
return convertTypesOnInstance(value);
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
const deserializeValueFromType = (type, value) => {
|
|
28
|
+
if (typeSerializers.has(type)) {
|
|
29
|
+
return typeSerializers.get(type)(value);
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
return JsonSerializer.deserialize(type, JSON.stringify(value));
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
const deserializeValueFromField = (field, value) => {
|
|
36
|
+
if (typeSerializers.has(field.type)) {
|
|
37
|
+
return typeSerializers.get(field.type)(value);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
let type = field.type;
|
|
41
|
+
if (field.derivatives.length > 0 && value[JsonSerializer.DerivedTypeIdProperty]) {
|
|
42
|
+
const derivedTypeId = value[JsonSerializer.DerivedTypeIdProperty];
|
|
43
|
+
type = field.derivatives.find(_ => DerivedType.get(_) == derivedTypeId) || type;
|
|
44
|
+
}
|
|
45
|
+
return JsonSerializer.deserialize(type, JSON.stringify(value));
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
const convertTypesOnInstance = (instance) => {
|
|
49
|
+
if (typeConverters.has(instance.constructor)) {
|
|
50
|
+
return serializeValueForType(instance.constructor, instance);
|
|
51
|
+
}
|
|
52
|
+
const properties = Object.getOwnPropertyNames(instance);
|
|
53
|
+
const converted = {};
|
|
54
|
+
properties.forEach(property => {
|
|
55
|
+
let value = instance[property];
|
|
56
|
+
if (value !== undefined) {
|
|
57
|
+
if (Array.isArray(value)) {
|
|
58
|
+
value = value.map(_ => convertTypesOnInstance(_));
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
value = serializeValueForType(value.__proto__.constructor, value);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
converted[property] = value;
|
|
65
|
+
});
|
|
66
|
+
return converted;
|
|
67
|
+
};
|
|
68
|
+
export class JsonSerializer {
|
|
69
|
+
static DerivedTypeIdProperty = "_derivedTypeId";
|
|
70
|
+
static serialize(value) {
|
|
71
|
+
const converted = convertTypesOnInstance(value);
|
|
72
|
+
return JSON.stringify(converted);
|
|
73
|
+
}
|
|
74
|
+
static deserialize(targetType, json) {
|
|
75
|
+
const parsed = JSON.parse(json);
|
|
76
|
+
return this.deserializeFromInstance(targetType, parsed);
|
|
77
|
+
}
|
|
78
|
+
static deserializeArray(targetType, json) {
|
|
79
|
+
const parsed = JSON.parse(json);
|
|
80
|
+
return this.deserializeArrayFromInstance(targetType, parsed);
|
|
81
|
+
}
|
|
82
|
+
static deserializeFromInstance(targetType, instance) {
|
|
83
|
+
const fields = Fields.getFieldsForType(targetType);
|
|
84
|
+
if (typeSerializers.has(targetType)) {
|
|
85
|
+
return deserializeValueFromType(targetType, instance);
|
|
86
|
+
}
|
|
87
|
+
const deserialized = new targetType();
|
|
88
|
+
for (const field of fields) {
|
|
89
|
+
let value = instance[field.name];
|
|
90
|
+
if (value) {
|
|
91
|
+
if (field.enumerable) {
|
|
92
|
+
value = value.map(_ => deserializeValueFromField(field, _));
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
value = deserializeValueFromField(field, value);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
deserialized[field.name] = value;
|
|
99
|
+
}
|
|
100
|
+
if (targetType == Object) {
|
|
101
|
+
const objectFields = Object.keys(instance).filter((value) => {
|
|
102
|
+
return !fields.some(_ => _.name == value);
|
|
103
|
+
});
|
|
104
|
+
for (const field of objectFields) {
|
|
105
|
+
deserialized[field] = instance[field];
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return deserialized;
|
|
109
|
+
}
|
|
110
|
+
static deserializeArrayFromInstance(targetType, instances) {
|
|
111
|
+
const deserialized = [];
|
|
112
|
+
for (const instance of instances) {
|
|
113
|
+
deserialized.push(this.deserializeFromInstance(targetType, instance));
|
|
114
|
+
}
|
|
115
|
+
return deserialized;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=JsonSerializer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JsonSerializer.js","sourceRoot":"","sources":["../JsonSerializer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PropertyAccessor.d.ts","sourceRoot":"","sources":["../PropertyAccessor.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,gBAAgB,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,GAAG,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PropertyAccessor.js","sourceRoot":"","sources":["../PropertyAccessor.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { PropertyAccessor } from './PropertyAccessor';
|
|
2
|
+
export declare class PropertyAccessorDescriptor {
|
|
3
|
+
private readonly _accessor;
|
|
4
|
+
private readonly _segments;
|
|
5
|
+
constructor(_accessor: PropertyAccessor, _segments: string[]);
|
|
6
|
+
get accessor(): PropertyAccessor;
|
|
7
|
+
get segments(): readonly string[];
|
|
8
|
+
get path(): string;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=PropertyAccessorDescriptor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PropertyAccessorDescriptor.d.ts","sourceRoot":"","sources":["../PropertyAccessorDescriptor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAKtD,qBAAa,0BAA0B;IAOvB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAAoB,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAAvD,SAAS,EAAE,gBAAgB,EAAmB,SAAS,EAAE,MAAM,EAAE;IAO9F,IAAI,QAAQ,IAAI,gBAAgB,CAE/B;IAMD,IAAI,QAAQ,IAAI,SAAS,MAAM,EAAE,CAEhC;IAMD,IAAI,IAAI,IAAI,MAAM,CAEjB;CACJ"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export class PropertyAccessorDescriptor {
|
|
2
|
+
_accessor;
|
|
3
|
+
_segments;
|
|
4
|
+
constructor(_accessor, _segments) {
|
|
5
|
+
this._accessor = _accessor;
|
|
6
|
+
this._segments = _segments;
|
|
7
|
+
}
|
|
8
|
+
get accessor() {
|
|
9
|
+
return this._accessor;
|
|
10
|
+
}
|
|
11
|
+
get segments() {
|
|
12
|
+
return this._segments;
|
|
13
|
+
}
|
|
14
|
+
get path() {
|
|
15
|
+
return this._segments.join('.');
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=PropertyAccessorDescriptor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PropertyAccessorDescriptor.js","sourceRoot":"","sources":["../PropertyAccessorDescriptor.ts"],"names":[],"mappings":"AAQA,MAAM,OAAO,0BAA0B;IAON;IAA8C;IAA3E,YAA6B,SAA2B,EAAmB,SAAmB;QAAjE,cAAS,GAAT,SAAS,CAAkB;QAAmB,cAAS,GAAT,SAAS,CAAU;IAC9F,CAAC;IAMD,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAMD,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAMD,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;CACJ"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare class PropertyPathResolverProxyHandler implements ProxyHandler<any> {
|
|
2
|
+
private readonly _root?;
|
|
3
|
+
_property: string;
|
|
4
|
+
_segments: string[];
|
|
5
|
+
constructor(_root?: PropertyPathResolverProxyHandler | undefined);
|
|
6
|
+
get property(): string;
|
|
7
|
+
get segments(): readonly string[];
|
|
8
|
+
get path(): string;
|
|
9
|
+
private addSegment;
|
|
10
|
+
get(target: any, p: PropertyKey, receiver: any): any;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=PropertyPathResolverProxyHandler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PropertyPathResolverProxyHandler.d.ts","sourceRoot":"","sources":["../PropertyPathResolverProxyHandler.ts"],"names":[],"mappings":"AAUA,qBAAa,gCAAiC,YAAW,YAAY,CAAC,GAAG,CAAC;IAI1D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;IAHnC,SAAS,SAAM;IACf,SAAS,EAAE,MAAM,EAAE,CAAM;gBAEI,KAAK,CAAC,EAAE,gCAAgC,YAAA;IAGrE,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,IAAI,QAAQ,IAAI,SAAS,MAAM,EAAE,CAEhC;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,OAAO,CAAC,UAAU;IAKlB,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,GAAG,GAAG;CASvD"}
|