@fluidframework/presence 2.23.0 → 2.30.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/dist/container-definitions/containerExtensions.d.ts +1 -1
- package/dist/container-definitions/containerExtensions.d.ts.map +1 -1
- package/dist/container-definitions/containerExtensions.js.map +1 -1
- package/dist/exposedInternalTypes.d.ts +1 -1
- package/dist/exposedInternalTypes.d.ts.map +1 -1
- package/dist/exposedInternalTypes.js.map +1 -1
- package/dist/exposedUtilityTypes.d.ts +1 -1
- package/dist/exposedUtilityTypes.d.ts.map +1 -1
- package/dist/exposedUtilityTypes.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/latestMapValueManager.d.ts +1 -1
- package/dist/latestMapValueManager.d.ts.map +1 -1
- package/dist/latestMapValueManager.js.map +1 -1
- package/dist/latestValueManager.d.ts +1 -1
- package/dist/latestValueManager.d.ts.map +1 -1
- package/dist/latestValueManager.js.map +1 -1
- package/dist/latestValueTypes.d.ts +1 -1
- package/dist/latestValueTypes.d.ts.map +1 -1
- package/dist/latestValueTypes.js.map +1 -1
- package/dist/notificationsManager.d.ts.map +1 -1
- package/dist/notificationsManager.js.map +1 -1
- package/dist/package.json +0 -1
- package/lib/container-definitions/containerExtensions.d.ts +1 -1
- package/lib/container-definitions/containerExtensions.d.ts.map +1 -1
- package/lib/container-definitions/containerExtensions.js.map +1 -1
- package/lib/exposedInternalTypes.d.ts +1 -1
- package/lib/exposedInternalTypes.d.ts.map +1 -1
- package/lib/exposedInternalTypes.js.map +1 -1
- package/lib/exposedUtilityTypes.d.ts +1 -1
- package/lib/exposedUtilityTypes.d.ts.map +1 -1
- package/lib/exposedUtilityTypes.js.map +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js.map +1 -1
- package/lib/latestMapValueManager.d.ts +1 -1
- package/lib/latestMapValueManager.d.ts.map +1 -1
- package/lib/latestMapValueManager.js.map +1 -1
- package/lib/latestValueManager.d.ts +1 -1
- package/lib/latestValueManager.d.ts.map +1 -1
- package/lib/latestValueManager.js.map +1 -1
- package/lib/latestValueTypes.d.ts +1 -1
- package/lib/latestValueTypes.d.ts.map +1 -1
- package/lib/latestValueTypes.js.map +1 -1
- package/lib/notificationsManager.d.ts.map +1 -1
- package/lib/notificationsManager.js.map +1 -1
- package/package.json +20 -28
- package/dist/core-interfaces/exposedUtilityTypes.d.ts +0 -446
- package/dist/core-interfaces/exposedUtilityTypes.d.ts.map +0 -1
- package/dist/core-interfaces/exposedUtilityTypes.js +0 -11
- package/dist/core-interfaces/exposedUtilityTypes.js.map +0 -1
- package/dist/core-interfaces/index.d.ts +0 -10
- package/dist/core-interfaces/index.d.ts.map +0 -1
- package/dist/core-interfaces/index.js +0 -7
- package/dist/core-interfaces/index.js.map +0 -1
- package/dist/core-interfaces/jsonDeserialized.d.ts +0 -109
- package/dist/core-interfaces/jsonDeserialized.d.ts.map +0 -1
- package/dist/core-interfaces/jsonDeserialized.js +0 -7
- package/dist/core-interfaces/jsonDeserialized.js.map +0 -1
- package/dist/core-interfaces/jsonSerializable.d.ts +0 -120
- package/dist/core-interfaces/jsonSerializable.d.ts.map +0 -1
- package/dist/core-interfaces/jsonSerializable.js +0 -7
- package/dist/core-interfaces/jsonSerializable.js.map +0 -1
- package/dist/core-interfaces/jsonSerializationErrors.d.ts +0 -31
- package/dist/core-interfaces/jsonSerializationErrors.d.ts.map +0 -1
- package/dist/core-interfaces/jsonSerializationErrors.js +0 -7
- package/dist/core-interfaces/jsonSerializationErrors.js.map +0 -1
- package/dist/core-interfaces/jsonType.d.ts +0 -29
- package/dist/core-interfaces/jsonType.d.ts.map +0 -1
- package/dist/core-interfaces/jsonType.js +0 -7
- package/dist/core-interfaces/jsonType.js.map +0 -1
- package/lib/core-interfaces/exposedUtilityTypes.d.ts +0 -446
- package/lib/core-interfaces/exposedUtilityTypes.d.ts.map +0 -1
- package/lib/core-interfaces/exposedUtilityTypes.js +0 -10
- package/lib/core-interfaces/exposedUtilityTypes.js.map +0 -1
- package/lib/core-interfaces/index.d.ts +0 -10
- package/lib/core-interfaces/index.d.ts.map +0 -1
- package/lib/core-interfaces/index.js +0 -6
- package/lib/core-interfaces/index.js.map +0 -1
- package/lib/core-interfaces/jsonDeserialized.d.ts +0 -109
- package/lib/core-interfaces/jsonDeserialized.d.ts.map +0 -1
- package/lib/core-interfaces/jsonDeserialized.js +0 -6
- package/lib/core-interfaces/jsonDeserialized.js.map +0 -1
- package/lib/core-interfaces/jsonSerializable.d.ts +0 -120
- package/lib/core-interfaces/jsonSerializable.d.ts.map +0 -1
- package/lib/core-interfaces/jsonSerializable.js +0 -6
- package/lib/core-interfaces/jsonSerializable.js.map +0 -1
- package/lib/core-interfaces/jsonSerializationErrors.d.ts +0 -31
- package/lib/core-interfaces/jsonSerializationErrors.d.ts.map +0 -1
- package/lib/core-interfaces/jsonSerializationErrors.js +0 -6
- package/lib/core-interfaces/jsonSerializationErrors.js.map +0 -1
- package/lib/core-interfaces/jsonType.d.ts +0 -29
- package/lib/core-interfaces/jsonType.d.ts.map +0 -1
- package/lib/core-interfaces/jsonType.js +0 -6
- package/lib/core-interfaces/jsonType.js.map +0 -1
|
@@ -1,446 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
-
* Licensed under the MIT License.
|
|
4
|
-
*/
|
|
5
|
-
import type { SerializationErrorPerNonPublicProperties, SerializationErrorPerUndefinedArrayElement } from "./jsonSerializationErrors.js";
|
|
6
|
-
import type { JsonTypeWith, NonNullJsonObjectWith } from "./jsonType.js";
|
|
7
|
-
/**
|
|
8
|
-
* Unique symbol for recursion meta-typing.
|
|
9
|
-
*/
|
|
10
|
-
declare const RecursionMarkerSymbol: unique symbol;
|
|
11
|
-
/**
|
|
12
|
-
* Collection of utility types that are not intended to be used/imported
|
|
13
|
-
* directly outside of this package.
|
|
14
|
-
*
|
|
15
|
-
* @privateRemarks
|
|
16
|
-
* There are ony three intentional exports from this module:
|
|
17
|
-
* - {@link InternalUtilityTypes.IfSameType | IfSameType}
|
|
18
|
-
* - {@link InternalUtilityTypes.JsonDeserializedImpl | JsonDeserializedImpl }
|
|
19
|
-
* - {@link InternalUtilityTypes.JsonSerializableImpl | JsonSerializableImpl }
|
|
20
|
-
*
|
|
21
|
-
* api-extractor will allow `export` to be removed from others but generates
|
|
22
|
-
* api-report a little oddly with a rogue `{};` floating at end of namespace
|
|
23
|
-
* in api.md file. It will promote all of the support types to appear as
|
|
24
|
-
* exported anyway. All in namespace are left exported to avoid api-extractor
|
|
25
|
-
* potentially failing to validate other modules correctly.
|
|
26
|
-
*
|
|
27
|
-
* @alpha
|
|
28
|
-
* @system
|
|
29
|
-
*/
|
|
30
|
-
export declare namespace InternalUtilityTypes {
|
|
31
|
-
/**
|
|
32
|
-
* Meta-type for controlling filtering utilities.
|
|
33
|
-
*
|
|
34
|
-
* @system
|
|
35
|
-
*/
|
|
36
|
-
interface FilterControls {
|
|
37
|
-
/**
|
|
38
|
-
* Exact types that are managed by custom serialization/deserialization
|
|
39
|
-
* logic (beyond JSON.stringify and JSON.parse without replacers/revivers).
|
|
40
|
-
* Only exact types matching specification will be preserved unaltered.
|
|
41
|
-
*
|
|
42
|
-
* @privateRemarks
|
|
43
|
-
* This could be a tuple of types that would support replacing exactly
|
|
44
|
-
* specified unions. However that would not be useful in the context of
|
|
45
|
-
* serializers/deserializers as those must work only with the specific
|
|
46
|
-
* data given at runtime and have no knowledge of the alternate data
|
|
47
|
-
* that could be encountered in that space.
|
|
48
|
-
*
|
|
49
|
-
* Such union matching is only known to be useful for matching recursion
|
|
50
|
-
* cases.
|
|
51
|
-
*/
|
|
52
|
-
AllowExactly: unknown;
|
|
53
|
-
/**
|
|
54
|
-
* General types that are managed by custom serialization/deserialization
|
|
55
|
-
* logic (beyond JSON.stringify and JSON.parse without replacers/revivers).
|
|
56
|
-
* Any type satisfying specification will be preserved unaltered.
|
|
57
|
-
*/
|
|
58
|
-
AllowExtensionOf: unknown;
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Returns non-symbol keys for optional properties of an object type.
|
|
62
|
-
*
|
|
63
|
-
* For homomorphic mapping use with `as` to filter. Example:
|
|
64
|
-
* `[K in keyof T as OptionalNonSymbolKeysOf<T, K>]: ...`
|
|
65
|
-
*
|
|
66
|
-
* @system
|
|
67
|
-
*/
|
|
68
|
-
type OptionalNonSymbolKeysOf<T extends object, Keys extends keyof T = keyof T> = Exclude<{
|
|
69
|
-
[K in Keys]: T extends Record<K, T[K]> ? never : K;
|
|
70
|
-
}[Keys], undefined | symbol>;
|
|
71
|
-
/**
|
|
72
|
-
* Returns non-symbol keys for required properties of an object type.
|
|
73
|
-
*
|
|
74
|
-
* For homomorphic mapping use with `as` to filter. Example:
|
|
75
|
-
* `[K in keyof T as RequiredNonSymbolKeysOf<T, K>]: ...`
|
|
76
|
-
*
|
|
77
|
-
* @system
|
|
78
|
-
*/
|
|
79
|
-
type RequiredNonSymbolKeysOf<T extends object, Keys extends keyof T = keyof T> = Exclude<{
|
|
80
|
-
[K in Keys]: T extends Record<K, T[K]> ? K : never;
|
|
81
|
-
}[Keys], undefined | symbol>;
|
|
82
|
-
/**
|
|
83
|
-
* Returns Result.WhenSomethingDeserializable if T is sometimes at least a
|
|
84
|
-
* partially deserializable type, otherwise Result.WhenNeverDeserializable.
|
|
85
|
-
* Fully not deserializable (bigints, symbols, undefined and functions without
|
|
86
|
-
* other properties less overlap with T*Exception) produce Result.WhenNeverDeserializable.
|
|
87
|
-
* An object would have a defined result even if parts of its content are
|
|
88
|
-
* not deserializable.
|
|
89
|
-
*
|
|
90
|
-
* @param Result - Result type with two properties. One property must always
|
|
91
|
-
* be `never` as `T` maybe a union of never deserializable and at least
|
|
92
|
-
* partially deserializable types and the result is a union of Result.*.
|
|
93
|
-
*
|
|
94
|
-
* @privateRemarks
|
|
95
|
-
* If `Result.WhenSomethingDeserializable` was `true` and
|
|
96
|
-
* `Result.WhenNeverDeserializable` was `false`, then the return type
|
|
97
|
-
* for type `T` would be `boolean` for a sometimes deserializable type.
|
|
98
|
-
*
|
|
99
|
-
* @system
|
|
100
|
-
*/
|
|
101
|
-
type TestDeserializabilityOf<T, TExactException, TExtendsException, Result extends {
|
|
102
|
-
WhenSomethingDeserializable: unknown;
|
|
103
|
-
WhenNeverDeserializable: never;
|
|
104
|
-
} | {
|
|
105
|
-
WhenSomethingDeserializable: never;
|
|
106
|
-
WhenNeverDeserializable: unknown;
|
|
107
|
-
}> = T extends never ? Result["WhenNeverDeserializable"] : T extends TExtendsException ? Result["WhenSomethingDeserializable"] : IfExactTypeInUnion<T, TExactException, Result["WhenSomethingDeserializable"], T extends bigint | symbol | undefined ? Result["WhenNeverDeserializable"] : T extends Function ? ExtractFunctionFromIntersection<T> extends {
|
|
108
|
-
classification: "exactly Function";
|
|
109
|
-
} ? Result["WhenNeverDeserializable"] : Result["WhenSomethingDeserializable"] : Result["WhenSomethingDeserializable"]>;
|
|
110
|
-
/**
|
|
111
|
-
* Similar to `Exclude` but only excludes exact `U`s from `T`
|
|
112
|
-
* rather than any type that extends `U`.
|
|
113
|
-
*
|
|
114
|
-
* @system
|
|
115
|
-
*/
|
|
116
|
-
type ExcludeExactly<T, U> = IfSameType<T, U, never, T>;
|
|
117
|
-
/**
|
|
118
|
-
* Returns non-symbol keys for defined, (likely) serializable properties of an
|
|
119
|
-
* object type. Keys with fully unsupported properties (undefined, symbol, and
|
|
120
|
-
* bigint) and sometimes unsupported (functions) are excluded. An exception to
|
|
121
|
-
* that is when there are supported types in union with just bigint.
|
|
122
|
-
*
|
|
123
|
-
* For homomorphic mapping use with `as` to filter. Example:
|
|
124
|
-
* `[K in keyof T as NonSymbolWithDeserializablePropertyOf<T, never, never, K>]: ...`
|
|
125
|
-
*
|
|
126
|
-
* @system
|
|
127
|
-
*/
|
|
128
|
-
type NonSymbolWithDeserializablePropertyOf<T extends object, TExactException, TExtendsException, Keys extends keyof T = keyof T> = Exclude<{
|
|
129
|
-
[K in Keys]: ExcludeExactly<Exclude<T[K], TExtendsException>, TExactException> extends infer PossibleTypeLessAllowed ? Extract<PossibleTypeLessAllowed, undefined | symbol | Function> extends never ? IfSameType<PossibleTypeLessAllowed, bigint, never, T[K] extends never ? never : K> : never : never;
|
|
130
|
-
}[Keys], undefined | symbol>;
|
|
131
|
-
/**
|
|
132
|
-
* Returns non-symbol keys for partially supported properties of an object type.
|
|
133
|
-
* Keys with only unsupported properties (undefined, symbol, bigint, and
|
|
134
|
-
* functions without other properties) are excluded.
|
|
135
|
-
*
|
|
136
|
-
* For homomorphic mapping use with `as` to filter. Example:
|
|
137
|
-
* `[K in keyof T as NonSymbolWithPossiblyDeserializablePropertyOf<T, never, never, K>]: ...`
|
|
138
|
-
*
|
|
139
|
-
* @system
|
|
140
|
-
*/
|
|
141
|
-
type NonSymbolWithPossiblyDeserializablePropertyOf<T extends object, TExactException, TExtendsException, Keys extends keyof T = keyof T> = Exclude<{
|
|
142
|
-
[K in Keys]: Extract<ExcludeExactly<Exclude<T[K], TExtendsException>, TExactException>, undefined | symbol | Function> extends never ? never : TestDeserializabilityOf<T[K], TExactException, TExtendsException, {
|
|
143
|
-
WhenSomethingDeserializable: K;
|
|
144
|
-
WhenNeverDeserializable: never;
|
|
145
|
-
}>;
|
|
146
|
-
}[Keys], undefined | symbol>;
|
|
147
|
-
/**
|
|
148
|
-
* Filters a type `T` for `undefined` that is not viable in an array (or tuple) that
|
|
149
|
-
* must go through JSON serialization.
|
|
150
|
-
* If `T` is `undefined`, then error type {@link SerializationErrorPerUndefinedArrayElement}
|
|
151
|
-
* is returned with hopes of being informative.
|
|
152
|
-
*
|
|
153
|
-
* @system
|
|
154
|
-
*/
|
|
155
|
-
type JsonForSerializableArrayItem<T, Controls extends FilterControls, TAncestorTypes extends unknown[], TBlessed> = boolean extends (T extends never ? true : false) ? TBlessed : unknown extends T ? TBlessed : IfExactTypeInTuple<T, TAncestorTypes, T, T extends null | boolean | number | string | Controls["AllowExtensionOf"] ? T : IfExactTypeInUnion<T, Controls["AllowExactly"], T, undefined extends T ? SerializationErrorPerUndefinedArrayElement : TBlessed>>;
|
|
156
|
-
/**
|
|
157
|
-
* Filters a type `T` for types that become null through JSON serialization.
|
|
158
|
-
*
|
|
159
|
-
* @system
|
|
160
|
-
*/
|
|
161
|
-
type JsonForDeserializedArrayItem<T, Controls extends FilterControls, TBlessed> = boolean extends (T extends never ? true : false) ? TBlessed : unknown extends T ? TBlessed : T extends null | boolean | number | string | Controls["AllowExtensionOf"] ? T : IfExactTypeInUnion<T, Controls["AllowExactly"], T, T extends undefined | symbol ? null : T extends Function ? ExtractFunctionFromIntersection<T> extends {
|
|
162
|
-
classification: "exactly Function";
|
|
163
|
-
} ? null : null | TBlessed : TBlessed>;
|
|
164
|
-
/**
|
|
165
|
-
* Checks for a type that is simple class of number and string indexed types to numbers and strings.
|
|
166
|
-
*
|
|
167
|
-
* @system
|
|
168
|
-
*/
|
|
169
|
-
type IfEnumLike<T extends object, EnumLike = never, NotEnumLike = unknown> = T extends readonly (infer _)[] ? NotEnumLike : T extends Function ? NotEnumLike : T extends {
|
|
170
|
-
readonly [i: number]: string;
|
|
171
|
-
readonly [p: string]: number | string;
|
|
172
|
-
readonly [s: symbol]: never;
|
|
173
|
-
} ? true extends {
|
|
174
|
-
[K in keyof T]: T[K] extends never ? true : never;
|
|
175
|
-
}[keyof T] ? NotEnumLike : EnumLike : NotEnumLike;
|
|
176
|
-
/**
|
|
177
|
-
* Test for type equality
|
|
178
|
-
*
|
|
179
|
-
* @returns IfSame if identical and IfDifferent otherwise.
|
|
180
|
-
*
|
|
181
|
-
* Implementation derived from https://github.com/Microsoft/TypeScript/issues/27024#issuecomment-421529650
|
|
182
|
-
*
|
|
183
|
-
* @system
|
|
184
|
-
*/
|
|
185
|
-
type IfSameType<X, Y, IfSame = unknown, IfDifferent = never> = (<T>() => T extends X ? 1 : 2) extends <T>() => T extends Y ? 1 : 2 ? IfSame : IfDifferent;
|
|
186
|
-
/**
|
|
187
|
-
* Test for type equality with tuple of other types.
|
|
188
|
-
*
|
|
189
|
-
* @typeParam T - Type to find in Tuple.
|
|
190
|
-
* @typeParam Tuple - Tuple of types to test against.
|
|
191
|
-
* @typeParam IfMatch - Type to return if match is found.
|
|
192
|
-
* @typeParam IfNoMatch - Type to return if no match is found.
|
|
193
|
-
*
|
|
194
|
-
* @privateRemarks
|
|
195
|
-
* Tests for an extact match of `T` in `Tuple[0]`. If not found,
|
|
196
|
-
* recurses with the remainder of the tuple.
|
|
197
|
-
*/
|
|
198
|
-
type IfExactTypeInTuple<T, Tuple extends unknown[], IfMatch = unknown, IfNoMatch = never> = Tuple extends [infer First, ...infer Rest] ? IfSameType<T, First, IfMatch, IfExactTypeInTuple<T, Rest, IfMatch, IfNoMatch>> : IfNoMatch;
|
|
199
|
-
/**
|
|
200
|
-
* Test for type equality with union of other types.
|
|
201
|
-
*
|
|
202
|
-
* @typeParam T - Type to find in Union. If this is itself a union, then all types must be found in Union.
|
|
203
|
-
* @typeParam Union - Union of types to test against.
|
|
204
|
-
* @typeParam IfMatch - Type to return if match is found.
|
|
205
|
-
* @typeParam IfNoMatch - Type to return if no match is found.
|
|
206
|
-
*
|
|
207
|
-
* @remarks
|
|
208
|
-
* In a recursive context, use {@link InternalUtilityTypes.IfExactTypeInTuple} to manage ancestry.
|
|
209
|
-
*
|
|
210
|
-
* @privateRemarks
|
|
211
|
-
* Perhaps it is a Typescript defect but a simple check that `T` is `never`
|
|
212
|
-
* via `T extends never` does not work as expected in this context.
|
|
213
|
-
* Workaround using `IfSameType<..., never,...>`.
|
|
214
|
-
* @system
|
|
215
|
-
*/
|
|
216
|
-
type IfExactTypeInUnion<T, Union, IfMatch = unknown, IfNoMatch = never> = IfSameType<T, never, IfSameType<Union, never, IfMatch, IfNoMatch>, IfSameType<T, Extract<Union, T>, IfMatch, IfNoMatch>>;
|
|
217
|
-
/**
|
|
218
|
-
* Test for type equality
|
|
219
|
-
*
|
|
220
|
-
* @returns `true` if identical and `false` otherwise.
|
|
221
|
-
*
|
|
222
|
-
* @system
|
|
223
|
-
*/
|
|
224
|
-
type IsSameType<X, Y> = IfSameType<X, Y, true, false>;
|
|
225
|
-
/**
|
|
226
|
-
* Checks that type is exactly `object`.
|
|
227
|
-
*
|
|
228
|
-
* @system
|
|
229
|
-
*/
|
|
230
|
-
type IsExactlyObject<T extends object> = IsSameType<T, object>;
|
|
231
|
-
/**
|
|
232
|
-
* Creates a simple object type from an intersection of multiple.
|
|
233
|
-
* @privateRemarks
|
|
234
|
-
* `T extends Record` within the implementation encourages tsc to process
|
|
235
|
-
* intersections within unions.
|
|
236
|
-
*
|
|
237
|
-
* @system
|
|
238
|
-
*/
|
|
239
|
-
type FlattenIntersection<T extends Record<string | number | symbol, unknown>> = T extends Record<string | number | symbol, unknown> ? {
|
|
240
|
-
[K in keyof T]: T[K];
|
|
241
|
-
} : T;
|
|
242
|
-
/**
|
|
243
|
-
* Extracts Function portion from an intersection (&) type returning
|
|
244
|
-
* the extracted portion in the `function` property or `unknown` if
|
|
245
|
-
* no function is found.
|
|
246
|
-
* The returned `classification` property has one of three values:
|
|
247
|
-
* - "no Function" if the type is not a function.
|
|
248
|
-
* - "exactly Function" if the type is exactly a function.
|
|
249
|
-
* - "Function and more" if the type is a function and has other properties.
|
|
250
|
-
*
|
|
251
|
-
* @system
|
|
252
|
-
*/
|
|
253
|
-
type ExtractFunctionFromIntersection<T extends object> = (T extends new (...args: infer A) => infer R ? new (...args: A) => R : unknown) & (T extends (...args: infer A) => infer R ? (...args: A) => R : unknown) extends infer Functional ? {
|
|
254
|
-
classification: unknown extends Functional ? "no Function" : Functional extends Required<T> ? "exactly Function" : "Function and more";
|
|
255
|
-
function: Functional;
|
|
256
|
-
} : never;
|
|
257
|
-
/**
|
|
258
|
-
* Returns `Filtered` & any Function intersection from `Original`.
|
|
259
|
-
* If `Original` is exactly a Function, then `Filtered` is left out
|
|
260
|
-
* under the assumption that it is not useful/applicable.
|
|
261
|
-
*
|
|
262
|
-
* @system
|
|
263
|
-
*/
|
|
264
|
-
type FilterPreservingFunction<Original extends object, Filtered> = ExtractFunctionFromIntersection<Original> extends {
|
|
265
|
-
classification: infer TClassification;
|
|
266
|
-
function: infer TFunction;
|
|
267
|
-
} ? TClassification extends "exactly Function" ? TFunction : TFunction & Filtered : never;
|
|
268
|
-
/**
|
|
269
|
-
* Replaces any instance where a type T recurses into itself or a portion of
|
|
270
|
-
* itself with TReplacement.
|
|
271
|
-
*
|
|
272
|
-
* @typeParam T - Type to process.
|
|
273
|
-
* @typeParam TRecursionMarker - Replacement marker type.
|
|
274
|
-
* @typeParam Controls - Allowances are preserved as-is.
|
|
275
|
-
* @typeParam TAncestorTypes - Types that are ancestors of T.
|
|
276
|
-
* @typeParam TNextAncestor - Set exactly to T. This is passed separately
|
|
277
|
-
* such that T union types remain intact as exact ancestors.
|
|
278
|
-
*
|
|
279
|
-
* @remarks
|
|
280
|
-
* Filtering applied to class instances with non-public properties will not
|
|
281
|
-
* preserve the class instance unless those classes are known and listed as
|
|
282
|
-
* allowances via `Controls`.
|
|
283
|
-
*
|
|
284
|
-
* @privateRemarks
|
|
285
|
-
* This implementation handles functions including function with properties.
|
|
286
|
-
* There are no known cases where replacing recursion under such types make
|
|
287
|
-
* a difference. Either the function (whole type) is allowed by the Json
|
|
288
|
-
* filters or function is not allowed at all.
|
|
289
|
-
* If the function portion is found to be problematic later, then could use
|
|
290
|
-
* `T extends Function ? T : ...` to ignore function objects.
|
|
291
|
-
*
|
|
292
|
-
* @system
|
|
293
|
-
*/
|
|
294
|
-
type ReplaceRecursionWithMarkerAndPreserveAllowances<T, TRecursionMarker, Controls extends FilterControls, TAncestorTypes extends unknown[] = [], TNextAncestor = T> = IfExactTypeInTuple<T, TAncestorTypes, true, "no match"> extends true ? TRecursionMarker : T extends infer _ ? IfExactTypeInTuple<T, TAncestorTypes, true, "no match"> extends true ? TRecursionMarker : T extends Controls["AllowExtensionOf"] ? T : IfExactTypeInUnion<T, Controls["AllowExactly"], true, "no match"> extends true ? T : T extends object ? FilterPreservingFunction<T, {
|
|
295
|
-
[K in keyof T]: ReplaceRecursionWithMarkerAndPreserveAllowances<T[K], TRecursionMarker, Controls, [
|
|
296
|
-
TNextAncestor,
|
|
297
|
-
...TAncestorTypes
|
|
298
|
-
]>;
|
|
299
|
-
}> : T : never;
|
|
300
|
-
/**
|
|
301
|
-
* Replaces any instances of "allowed" types and recursion within with `never`.
|
|
302
|
-
*
|
|
303
|
-
* @typeParam T - Type to process.
|
|
304
|
-
* @typeParam Controls - Allowances to replace.
|
|
305
|
-
* @typeParam TAncestorTypes - Types that are ancestors of T.
|
|
306
|
-
* @typeParam TNextAncestor - Set exactly to T. This is passed separately
|
|
307
|
-
* such that T union types remain intact as exact ancestors.
|
|
308
|
-
*
|
|
309
|
-
* @system
|
|
310
|
-
*/
|
|
311
|
-
type ReplaceAllowancesAndRecursionWithNever<T, Controls extends FilterControls, TAncestorTypes extends unknown[] = [], TNextAncestor = T> = IfExactTypeInTuple<T, TAncestorTypes, true, "no match"> extends true ? never : T extends Controls["AllowExtensionOf"] ? never : IfExactTypeInUnion<T, Controls["AllowExactly"], true, "no match"> extends true ? never : IfExactTypeInTuple<T, TAncestorTypes, true, "no match"> extends true ? never : T extends object ? FilterPreservingFunction<T, {
|
|
312
|
-
[K in keyof T]: ReplaceAllowancesAndRecursionWithNever<T[K], Controls, [
|
|
313
|
-
TNextAncestor,
|
|
314
|
-
...TAncestorTypes
|
|
315
|
-
]>;
|
|
316
|
-
}> : T;
|
|
317
|
-
/**
|
|
318
|
-
* Test for non-public properties (which can only exist on class instance types).
|
|
319
|
-
*
|
|
320
|
-
* Returns `HasNonPublic` if `T` deeply may contain a private or protected field
|
|
321
|
-
* and `OnlyPublics` otherwise.
|
|
322
|
-
*
|
|
323
|
-
* @remarks
|
|
324
|
-
* Compare original (unprocessed) to filtered case that has `never` where
|
|
325
|
-
* recursing or where allowed exception types are used.
|
|
326
|
-
*
|
|
327
|
-
* Note that this a test of the type and not the actual data. So, if an
|
|
328
|
-
* interface is given as `T` where implemented by a class, any private or
|
|
329
|
-
* protected fields within the class will not be detected.
|
|
330
|
-
*
|
|
331
|
-
* @system
|
|
332
|
-
*/
|
|
333
|
-
type IfNonPublicProperties<T, Controls extends FilterControls, HasNonPublic = never, OnlyPublics = unknown> = ReplaceAllowancesAndRecursionWithNever<T, Controls> extends T ? OnlyPublics : HasNonPublic;
|
|
334
|
-
/**
|
|
335
|
-
* Outer implementation of {@link JsonSerializable} handling meta cases
|
|
336
|
-
* like classes (with non-public properties).
|
|
337
|
-
*
|
|
338
|
-
* @system
|
|
339
|
-
*/
|
|
340
|
-
type JsonSerializableImpl<T, Options extends Partial<FilterControls> & {
|
|
341
|
-
IgnoreInaccessibleMembers?: "ignore-inaccessible-members";
|
|
342
|
-
}, TAncestorTypes extends unknown[] = [], TNextAncestor = T> = {
|
|
343
|
-
AllowExactly: Options extends {
|
|
344
|
-
AllowExactly: unknown;
|
|
345
|
-
} ? Options["AllowExactly"] : never;
|
|
346
|
-
AllowExtensionOf: Options extends {
|
|
347
|
-
AllowExtensionOf: unknown;
|
|
348
|
-
} ? Options["AllowExtensionOf"] : never;
|
|
349
|
-
} extends infer Controls ? Controls extends FilterControls ? boolean extends (T extends never ? true : false) ? JsonTypeWith<Controls["AllowExactly"] | Controls["AllowExtensionOf"]> : Options["IgnoreInaccessibleMembers"] extends "ignore-inaccessible-members" ? JsonSerializableFilter<T, Controls, TAncestorTypes, TNextAncestor> : IfNonPublicProperties<T, Controls, "found non-publics", "only publics"> extends "found non-publics" ? T extends readonly (infer _)[] ? {
|
|
350
|
-
[K in keyof T]: JsonSerializableImpl<T[K], Controls, [
|
|
351
|
-
TNextAncestor,
|
|
352
|
-
...TAncestorTypes
|
|
353
|
-
]>;
|
|
354
|
-
} : SerializationErrorPerNonPublicProperties : JsonSerializableFilter<T, Controls, TAncestorTypes, TNextAncestor> : never : never;
|
|
355
|
-
/**
|
|
356
|
-
* Core implementation of {@link JsonSerializable}.
|
|
357
|
-
*
|
|
358
|
-
* @privateRemarks
|
|
359
|
-
* Note that `T` becomes an Controls.AllowExtensionOf type during recursion.
|
|
360
|
-
* Filtering through a single layer of recursion is all that is required
|
|
361
|
-
* when using in prescribed filter scenario. Controls.AllowExtensionOf must
|
|
362
|
-
* be used instead of Controls.AllowExactly to avoid possibly deep and
|
|
363
|
-
* infinite recursion from tsc. Checking extension of is sufficient as all
|
|
364
|
-
* extended types from the recursion type are more specific and and would
|
|
365
|
-
* be considered before reaching the more general T currently being processed.
|
|
366
|
-
*
|
|
367
|
-
* @system
|
|
368
|
-
*/
|
|
369
|
-
type JsonSerializableFilter<T, Controls extends FilterControls, TAncestorTypes extends unknown[], TNextAncestor = T> = boolean extends (T extends never ? true : false) ? JsonTypeWith<Controls["AllowExactly"] | Controls["AllowExtensionOf"]> : unknown extends T ? JsonTypeWith<Controls["AllowExactly"] | Controls["AllowExtensionOf"]> : IfExactTypeInTuple<T, TAncestorTypes, true, "no match"> extends true ? T : T extends null | boolean | number | string | Controls["AllowExtensionOf"] ? T : IfExactTypeInUnion<T, Controls["AllowExactly"], true, "no match"> extends true ? T : Extract<T, Function> extends never ? T extends object ? T extends readonly (infer _)[] ? {
|
|
370
|
-
[K in keyof T]: JsonForSerializableArrayItem<T[K], Controls, TAncestorTypes, JsonSerializableFilter<T[K], Controls, [
|
|
371
|
-
TNextAncestor,
|
|
372
|
-
...TAncestorTypes
|
|
373
|
-
]>>;
|
|
374
|
-
} : IsExactlyObject<T> extends true ? NonNullJsonObjectWith<Controls["AllowExactly"] | Controls["AllowExtensionOf"]> : IfEnumLike<T> extends never ? T : FlattenIntersection<{
|
|
375
|
-
[K in keyof T as RequiredNonSymbolKeysOf<T, K>]-?: undefined extends T[K] ? {
|
|
376
|
-
["error required property may not allow undefined value"]: never;
|
|
377
|
-
} : JsonSerializableFilter<T[K], Controls, [
|
|
378
|
-
TNextAncestor,
|
|
379
|
-
...TAncestorTypes
|
|
380
|
-
]>;
|
|
381
|
-
} & {
|
|
382
|
-
[K in keyof T as OptionalNonSymbolKeysOf<T, K>]?: JsonSerializableFilter<T[K], Controls, [
|
|
383
|
-
TNextAncestor,
|
|
384
|
-
...TAncestorTypes
|
|
385
|
-
]>;
|
|
386
|
-
} & {
|
|
387
|
-
[K in keyof T & symbol]: never;
|
|
388
|
-
}> : never : never;
|
|
389
|
-
/**
|
|
390
|
-
* Sentinel type for use when marking points of recursion (in a recursive type).
|
|
391
|
-
* Type is expected to be unique, though no lengths is taken to ensure that.
|
|
392
|
-
*
|
|
393
|
-
* @system
|
|
394
|
-
*/
|
|
395
|
-
interface RecursionMarker {
|
|
396
|
-
[RecursionMarkerSymbol]: typeof RecursionMarkerSymbol;
|
|
397
|
-
}
|
|
398
|
-
/**
|
|
399
|
-
* Recursion limit is the count of `+` that prefix it when string.
|
|
400
|
-
*
|
|
401
|
-
* @system
|
|
402
|
-
*/
|
|
403
|
-
type RecursionLimit = `+${string}` | 0;
|
|
404
|
-
/**
|
|
405
|
-
* Outer implementation of {@link JsonDeserialized} handling meta cases
|
|
406
|
-
* like recursive types.
|
|
407
|
-
*
|
|
408
|
-
* @privateRemarks
|
|
409
|
-
* This utility is reentrant and will process a type `T` up to RecurseLimit.
|
|
410
|
-
*
|
|
411
|
-
* @system
|
|
412
|
-
*/
|
|
413
|
-
type JsonDeserializedImpl<T, Options extends Partial<FilterControls>, RecurseLimit extends RecursionLimit = "++++"> = {
|
|
414
|
-
AllowExactly: Options extends {
|
|
415
|
-
AllowExactly: unknown;
|
|
416
|
-
} ? Options["AllowExactly"] : never;
|
|
417
|
-
AllowExtensionOf: Options extends {
|
|
418
|
-
AllowExtensionOf: unknown;
|
|
419
|
-
} ? Options["AllowExtensionOf"] : never;
|
|
420
|
-
} extends infer Controls ? Controls extends FilterControls ? boolean extends (T extends never ? true : false) ? JsonTypeWith<Controls["AllowExactly"] | Controls["AllowExtensionOf"]> : ReplaceRecursionWithMarkerAndPreserveAllowances<T, RecursionMarker, Controls> extends infer TNoRecursionAndOnlyPublics ? IsSameType<TNoRecursionAndOnlyPublics, JsonDeserializedFilter<TNoRecursionAndOnlyPublics, {
|
|
421
|
-
AllowExactly: Controls["AllowExactly"] | RecursionMarker;
|
|
422
|
-
AllowExtensionOf: Controls["AllowExtensionOf"];
|
|
423
|
-
}, 0>> extends true ? IfNonPublicProperties<T, Controls, "found non-publics", "only publics"> extends "found non-publics" ? JsonDeserializedFilter<T, Controls, RecurseLimit> : T : JsonDeserializedFilter<T, Controls, RecurseLimit> : never : never : never;
|
|
424
|
-
/**
|
|
425
|
-
* Recurses T applying {@link InternalUtilityTypes.JsonDeserializedFilter} up to RecurseLimit times.
|
|
426
|
-
*
|
|
427
|
-
* @system
|
|
428
|
-
*/
|
|
429
|
-
type JsonDeserializedRecursion<T, Controls extends FilterControls, RecurseLimit extends RecursionLimit, TAncestorTypes> = T extends TAncestorTypes ? RecurseLimit extends `+${infer RecursionRemainder}` ? JsonDeserializedImpl<T, Controls, RecursionRemainder extends RecursionLimit ? RecursionRemainder : 0> : JsonTypeWith<Controls["AllowExactly"] | Controls["AllowExtensionOf"]> : JsonDeserializedFilter<T, Controls, RecurseLimit, TAncestorTypes | T>;
|
|
430
|
-
/**
|
|
431
|
-
* Core implementation of {@link JsonDeserialized}.
|
|
432
|
-
*
|
|
433
|
-
* @system
|
|
434
|
-
*/
|
|
435
|
-
type JsonDeserializedFilter<T, Controls extends FilterControls, RecurseLimit extends RecursionLimit, TAncestorTypes = T> = boolean extends (T extends never ? true : false) ? JsonTypeWith<Controls["AllowExactly"] | Controls["AllowExtensionOf"]> : unknown extends T ? JsonTypeWith<Controls["AllowExactly"] | Controls["AllowExtensionOf"]> : T extends null | boolean | number | string | Controls["AllowExtensionOf"] ? T : IfExactTypeInUnion<T, Controls["AllowExactly"], true, "not found"> extends true ? T : T extends object ? ExtractFunctionFromIntersection<T> extends {
|
|
436
|
-
classification: "exactly Function";
|
|
437
|
-
} ? never : T extends readonly (infer _)[] ? {
|
|
438
|
-
[K in keyof T]: JsonForDeserializedArrayItem<T[K], Controls, JsonDeserializedRecursion<T[K], Controls, RecurseLimit, TAncestorTypes>>;
|
|
439
|
-
} : IsExactlyObject<T> extends true ? NonNullJsonObjectWith<Controls["AllowExactly"] | Controls["AllowExtensionOf"]> : IfEnumLike<T> extends never ? T : FlattenIntersection<{
|
|
440
|
-
[K in keyof T as NonSymbolWithDeserializablePropertyOf<T, Controls["AllowExactly"], Controls["AllowExtensionOf"], K>]: JsonDeserializedRecursion<T[K], Controls, RecurseLimit, TAncestorTypes>;
|
|
441
|
-
} & {
|
|
442
|
-
[K in keyof T as NonSymbolWithPossiblyDeserializablePropertyOf<T, Controls["AllowExactly"], Controls["AllowExtensionOf"], K>]?: JsonDeserializedRecursion<T[K], Controls, RecurseLimit, TAncestorTypes>;
|
|
443
|
-
}> : never;
|
|
444
|
-
}
|
|
445
|
-
export {};
|
|
446
|
-
//# sourceMappingURL=exposedUtilityTypes.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"exposedUtilityTypes.d.ts","sourceRoot":"","sources":["../../src/core-interfaces/exposedUtilityTypes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
-
* Licensed under the MIT License.
|
|
4
|
-
*/
|
|
5
|
-
/**
|
|
6
|
-
* Unique symbol for recursion meta-typing.
|
|
7
|
-
*/
|
|
8
|
-
const RecursionMarkerSymbol = Symbol("recursion here");
|
|
9
|
-
export {};
|
|
10
|
-
//# sourceMappingURL=exposedUtilityTypes.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"exposedUtilityTypes.js","sourceRoot":"","sources":["../../src/core-interfaces/exposedUtilityTypes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH;;GAEG;AACH,MAAM,qBAAqB,GAAkB,MAAM,CAAC,gBAAgB,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/* eslint-disable @rushstack/no-new-null */\n\nimport type {\n\tSerializationErrorPerNonPublicProperties,\n\tSerializationErrorPerUndefinedArrayElement,\n} from \"./jsonSerializationErrors.js\";\nimport type { JsonTypeWith, NonNullJsonObjectWith } from \"./jsonType.js\";\n\n/**\n * Unique symbol for recursion meta-typing.\n */\nconst RecursionMarkerSymbol: unique symbol = Symbol(\"recursion here\");\n\n/**\n * Collection of utility types that are not intended to be used/imported\n * directly outside of this package.\n *\n * @privateRemarks\n * There are ony three intentional exports from this module:\n * - {@link InternalUtilityTypes.IfSameType | IfSameType}\n * - {@link InternalUtilityTypes.JsonDeserializedImpl | JsonDeserializedImpl }\n * - {@link InternalUtilityTypes.JsonSerializableImpl | JsonSerializableImpl }\n *\n * api-extractor will allow `export` to be removed from others but generates\n * api-report a little oddly with a rogue `{};` floating at end of namespace\n * in api.md file. It will promote all of the support types to appear as\n * exported anyway. All in namespace are left exported to avoid api-extractor\n * potentially failing to validate other modules correctly.\n *\n * @alpha\n * @system\n */\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport namespace InternalUtilityTypes {\n\t/**\n\t * Meta-type for controlling filtering utilities.\n\t *\n\t * @system\n\t */\n\texport interface FilterControls {\n\t\t/**\n\t\t * Exact types that are managed by custom serialization/deserialization\n\t\t * logic (beyond JSON.stringify and JSON.parse without replacers/revivers).\n\t\t * Only exact types matching specification will be preserved unaltered.\n\t\t *\n\t\t * @privateRemarks\n\t\t * This could be a tuple of types that would support replacing exactly\n\t\t * specified unions. However that would not be useful in the context of\n\t\t * serializers/deserializers as those must work only with the specific\n\t\t * data given at runtime and have no knowledge of the alternate data\n\t\t * that could be encountered in that space.\n\t\t *\n\t\t * Such union matching is only known to be useful for matching recursion\n\t\t * cases.\n\t\t */\n\t\tAllowExactly: unknown;\n\n\t\t/**\n\t\t * General types that are managed by custom serialization/deserialization\n\t\t * logic (beyond JSON.stringify and JSON.parse without replacers/revivers).\n\t\t * Any type satisfying specification will be preserved unaltered.\n\t\t */\n\t\tAllowExtensionOf: unknown;\n\t}\n\n\t/**\n\t * Returns non-symbol keys for optional properties of an object type.\n\t *\n\t * For homomorphic mapping use with `as` to filter. Example:\n\t * `[K in keyof T as OptionalNonSymbolKeysOf<T, K>]: ...`\n\t *\n\t * @system\n\t */\n\texport type OptionalNonSymbolKeysOf<\n\t\tT extends object,\n\t\tKeys extends keyof T = keyof T,\n\t> = Exclude<\n\t\t{\n\t\t\t[K in Keys]: T extends Record<K, T[K]> ? never : K;\n\t\t}[Keys],\n\t\tundefined | symbol\n\t>;\n\n\t/**\n\t * Returns non-symbol keys for required properties of an object type.\n\t *\n\t * For homomorphic mapping use with `as` to filter. Example:\n\t * `[K in keyof T as RequiredNonSymbolKeysOf<T, K>]: ...`\n\t *\n\t * @system\n\t */\n\texport type RequiredNonSymbolKeysOf<\n\t\tT extends object,\n\t\tKeys extends keyof T = keyof T,\n\t> = Exclude<\n\t\t{\n\t\t\t[K in Keys]: T extends Record<K, T[K]> ? K : never;\n\t\t}[Keys],\n\t\tundefined | symbol\n\t>;\n\n\t/**\n\t * Returns Result.WhenSomethingDeserializable if T is sometimes at least a\n\t * partially deserializable type, otherwise Result.WhenNeverDeserializable.\n\t * Fully not deserializable (bigints, symbols, undefined and functions without\n\t * other properties less overlap with T*Exception) produce Result.WhenNeverDeserializable.\n\t * An object would have a defined result even if parts of its content are\n\t * not deserializable.\n\t *\n\t * @param Result - Result type with two properties. One property must always\n\t * be `never` as `T` maybe a union of never deserializable and at least\n\t * partially deserializable types and the result is a union of Result.*.\n\t *\n\t * @privateRemarks\n\t * If `Result.WhenSomethingDeserializable` was `true` and\n\t * `Result.WhenNeverDeserializable` was `false`, then the return type\n\t * for type `T` would be `boolean` for a sometimes deserializable type.\n\t *\n\t * @system\n\t */\n\texport type TestDeserializabilityOf<\n\t\tT,\n\t\tTExactException,\n\t\tTExtendsException,\n\t\tResult extends\n\t\t\t| { WhenSomethingDeserializable: unknown; WhenNeverDeserializable: never }\n\t\t\t| { WhenSomethingDeserializable: never; WhenNeverDeserializable: unknown },\n\t> = /* ensure working with more than never */ T extends never\n\t\t? /* never => */ Result[\"WhenNeverDeserializable\"]\n\t\t: /* check for extends exception */ T extends TExtendsException\n\t\t\t? /* extends exception => */ Result[\"WhenSomethingDeserializable\"]\n\t\t\t: /* no extends exception => check for exact exception */ IfExactTypeInUnion<\n\t\t\t\t\tT,\n\t\t\t\t\tTExactException,\n\t\t\t\t\t/* exact exception => */ Result[\"WhenSomethingDeserializable\"],\n\t\t\t\t\t/* no exception => check for only non-serializable value types */ T extends\n\t\t\t\t\t\t| bigint\n\t\t\t\t\t\t| symbol\n\t\t\t\t\t\t| undefined\n\t\t\t\t\t\t? /* not serializable => */ Result[\"WhenNeverDeserializable\"]\n\t\t\t\t\t\t: // eslint-disable-next-line @typescript-eslint/ban-types\n\t\t\t\t\t\t\tT extends Function\n\t\t\t\t\t\t\t? ExtractFunctionFromIntersection<T> extends {\n\t\t\t\t\t\t\t\t\tclassification: \"exactly Function\";\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t? /* not serializable => */ Result[\"WhenNeverDeserializable\"]\n\t\t\t\t\t\t\t\t: /* at least partially serializable */ Result[\"WhenSomethingDeserializable\"]\n\t\t\t\t\t\t\t: /* at least partially serializable */ Result[\"WhenSomethingDeserializable\"]\n\t\t\t\t>;\n\n\t/**\n\t * Similar to `Exclude` but only excludes exact `U`s from `T`\n\t * rather than any type that extends `U`.\n\t *\n\t * @system\n\t */\n\texport type ExcludeExactly<T, U> = IfSameType<T, U, never, T>;\n\n\t/**\n\t * Returns non-symbol keys for defined, (likely) serializable properties of an\n\t * object type. Keys with fully unsupported properties (undefined, symbol, and\n\t * bigint) and sometimes unsupported (functions) are excluded. An exception to\n\t * that is when there are supported types in union with just bigint.\n\t *\n\t * For homomorphic mapping use with `as` to filter. Example:\n\t * `[K in keyof T as NonSymbolWithDeserializablePropertyOf<T, never, never, K>]: ...`\n\t *\n\t * @system\n\t */\n\texport type NonSymbolWithDeserializablePropertyOf<\n\t\tT extends object,\n\t\tTExactException,\n\t\tTExtendsException,\n\t\tKeys extends keyof T = keyof T,\n\t> = Exclude<\n\t\t{\n\t\t\t[K in Keys]: /* all possible types that aren't already allowed */\n\t\t\tExcludeExactly<\n\t\t\t\tExclude<T[K], TExtendsException>,\n\t\t\t\tTExactException\n\t\t\t> extends infer PossibleTypeLessAllowed\n\t\t\t\t? /* extract types that might lead to missing property */\n\t\t\t\t\tExtract<\n\t\t\t\t\t\tPossibleTypeLessAllowed,\n\t\t\t\t\t\t/* types that might lead to missing property, except `bigint` */\n\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/ban-types\n\t\t\t\t\t\tundefined | symbol | Function\n\t\t\t\t\t> extends never\n\t\t\t\t\t? /* all types are supported plus possibly `bigint` => */\n\t\t\t\t\t\t/* check for only `bigint` remaining */ IfSameType<\n\t\t\t\t\t\t\tPossibleTypeLessAllowed,\n\t\t\t\t\t\t\tbigint,\n\t\t\t\t\t\t\t/* only `bigint` => nothing supported */ never,\n\t\t\t\t\t\t\t/* exclusively supported types (and maybe `bigint`) or exactly `never` */\n\t\t\t\t\t\t\t/* => check for `never` */ T[K] extends never ? never : K\n\t\t\t\t\t\t>\n\t\t\t\t\t: /* value might not be supported => exclude K */ never\n\t\t\t\t: never;\n\t\t}[Keys],\n\t\tundefined | symbol\n\t>;\n\n\t/**\n\t * Returns non-symbol keys for partially supported properties of an object type.\n\t * Keys with only unsupported properties (undefined, symbol, bigint, and\n\t * functions without other properties) are excluded.\n\t *\n\t * For homomorphic mapping use with `as` to filter. Example:\n\t * `[K in keyof T as NonSymbolWithPossiblyDeserializablePropertyOf<T, never, never, K>]: ...`\n\t *\n\t * @system\n\t */\n\texport type NonSymbolWithPossiblyDeserializablePropertyOf<\n\t\tT extends object,\n\t\tTExactException,\n\t\tTExtendsException,\n\t\tKeys extends keyof T = keyof T,\n\t> = Exclude<\n\t\t{\n\t\t\t[K in Keys]: Extract<\n\t\t\t\t/* all possible types that aren't already allowed */\n\t\t\t\tExcludeExactly<Exclude<T[K], TExtendsException>, TExactException>,\n\t\t\t\t/* types that might lead to missing property */\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/ban-types\n\t\t\t\tundefined | symbol | Function\n\t\t\t> extends never\n\t\t\t\t? /* exclusively supported types or exactly `never` */ never\n\t\t\t\t: /* at least some unsupported type => check for any supported */ TestDeserializabilityOf<\n\t\t\t\t\t\tT[K],\n\t\t\t\t\t\tTExactException,\n\t\t\t\t\t\tTExtendsException,\n\t\t\t\t\t\t{ WhenSomethingDeserializable: K; WhenNeverDeserializable: never }\n\t\t\t\t\t>;\n\t\t}[Keys],\n\t\tundefined | symbol\n\t>;\n\n\t/**\n\t * Filters a type `T` for `undefined` that is not viable in an array (or tuple) that\n\t * must go through JSON serialization.\n\t * If `T` is `undefined`, then error type {@link SerializationErrorPerUndefinedArrayElement}\n\t * is returned with hopes of being informative.\n\t *\n\t * @system\n\t */\n\texport type JsonForSerializableArrayItem<\n\t\tT,\n\t\tControls extends FilterControls,\n\t\tTAncestorTypes extends unknown[],\n\t\tTBlessed,\n\t> = /* Some initial filtering must be provided before a test for undefined. */\n\t/* These tests are expected to match those in JsonSerializableImpl. */\n\t/* test for 'any' */ boolean extends (T extends never ? true : false)\n\t\t? /* 'any' => */ TBlessed\n\t\t: /* test for 'unknown' */ unknown extends T\n\t\t\t? /* 'unknown' => */ TBlessed\n\t\t\t: /* test for exact recursion */ IfExactTypeInTuple<\n\t\t\t\t\tT,\n\t\t\t\t\tTAncestorTypes,\n\t\t\t\t\t/* recursion; stop here => */ T,\n\t\t\t\t\t/* test for JSON primitive types or given alternative */ T extends\n\t\t\t\t\t\t| null\n\t\t\t\t\t\t| boolean\n\t\t\t\t\t\t| number\n\t\t\t\t\t\t| string\n\t\t\t\t\t\t| Controls[\"AllowExtensionOf\"]\n\t\t\t\t\t\t? /* primitive types or alternative => */ T\n\t\t\t\t\t\t: /* test for exact alternative */ IfExactTypeInUnion<\n\t\t\t\t\t\t\t\tT,\n\t\t\t\t\t\t\t\tControls[\"AllowExactly\"],\n\t\t\t\t\t\t\t\tT,\n\t\t\t\t\t\t\t\t/* test for undefined possibility */ undefined extends T\n\t\t\t\t\t\t\t\t\t? /* undefined | ... => */ SerializationErrorPerUndefinedArrayElement\n\t\t\t\t\t\t\t\t\t: TBlessed\n\t\t\t\t\t\t\t>\n\t\t\t\t>;\n\n\t/**\n\t * Filters a type `T` for types that become null through JSON serialization.\n\t *\n\t * @system\n\t */\n\texport type JsonForDeserializedArrayItem<\n\t\tT,\n\t\tControls extends FilterControls,\n\t\tTBlessed,\n\t> = /* Some initial filtering must be provided before a test for undefined, symbol, or function. */\n\t/* These tests are expected to match those in JsonDeserializedImpl. */\n\t/* test for 'any' */ boolean extends (T extends never ? true : false)\n\t\t? /* 'any' => */ TBlessed\n\t\t: /* test for 'unknown' */ unknown extends T\n\t\t\t? /* 'unknown' => */ TBlessed\n\t\t\t: /* test for JSON primitive types or general alternative */ T extends\n\t\t\t\t\t\t| null\n\t\t\t\t\t\t| boolean\n\t\t\t\t\t\t| number\n\t\t\t\t\t\t| string\n\t\t\t\t\t\t| Controls[\"AllowExtensionOf\"]\n\t\t\t\t? /* primitive or replaced types => */ T\n\t\t\t\t: /* test for exact alternative */ IfExactTypeInUnion<\n\t\t\t\t\t\tT,\n\t\t\t\t\t\tControls[\"AllowExactly\"],\n\t\t\t\t\t\t/* exactly replaced => */ T,\n\t\t\t\t\t\t/* test for known types that become null */ T extends undefined | symbol\n\t\t\t\t\t\t\t? /* => */ null\n\t\t\t\t\t\t\t: // eslint-disable-next-line @typescript-eslint/ban-types\n\t\t\t\t\t\t\t\tT extends Function\n\t\t\t\t\t\t\t\t? ExtractFunctionFromIntersection<T> extends {\n\t\t\t\t\t\t\t\t\t\tclassification: \"exactly Function\";\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t\t\t: null | TBlessed\n\t\t\t\t\t\t\t\t: TBlessed\n\t\t\t\t\t>;\n\n\t/**\n\t * Checks for a type that is simple class of number and string indexed types to numbers and strings.\n\t *\n\t * @system\n\t */\n\texport type IfEnumLike<\n\t\tT extends object,\n\t\tEnumLike = never,\n\t\tNotEnumLike = unknown,\n\t> = T extends readonly (infer _)[]\n\t\t? /* array => */ NotEnumLike\n\t\t: // eslint-disable-next-line @typescript-eslint/ban-types\n\t\t\tT extends Function\n\t\t\t? /* function => */ NotEnumLike\n\t\t\t: T extends {\n\t\t\t\t\t\t// all numerical indices should refer to a string\n\t\t\t\t\t\treadonly [i: number]: string;\n\t\t\t\t\t\t// string indices may be string or number\n\t\t\t\t\t\treadonly [p: string]: number | string;\n\t\t\t\t\t\t// no symbol indices are allowed\n\t\t\t\t\t\treadonly [s: symbol]: never;\n\t\t\t\t\t}\n\t\t\t\t? /* test for a never or any property */ true extends {\n\t\t\t\t\t\t[K in keyof T]: T[K] extends never ? true : never;\n\t\t\t\t\t}[keyof T]\n\t\t\t\t\t? NotEnumLike\n\t\t\t\t\t: EnumLike\n\t\t\t\t: NotEnumLike;\n\n\t/**\n\t * Test for type equality\n\t *\n\t * @returns IfSame if identical and IfDifferent otherwise.\n\t *\n\t * Implementation derived from https://github.com/Microsoft/TypeScript/issues/27024#issuecomment-421529650\n\t *\n\t * @system\n\t */\n\texport type IfSameType<X, Y, IfSame = unknown, IfDifferent = never> = (<T>() => T extends X\n\t\t? 1\n\t\t: 2) extends <T>() => T extends Y ? 1 : 2\n\t\t? IfSame\n\t\t: IfDifferent;\n\n\t/**\n\t * Test for type equality with tuple of other types.\n\t *\n\t * @typeParam T - Type to find in Tuple.\n\t * @typeParam Tuple - Tuple of types to test against.\n\t * @typeParam IfMatch - Type to return if match is found.\n\t * @typeParam IfNoMatch - Type to return if no match is found.\n\t *\n\t * @privateRemarks\n\t * Tests for an extact match of `T` in `Tuple[0]`. If not found,\n\t * recurses with the remainder of the tuple.\n\t */\n\texport type IfExactTypeInTuple<\n\t\tT,\n\t\tTuple extends unknown[],\n\t\tIfMatch = unknown,\n\t\tIfNoMatch = never,\n\t> = Tuple extends [infer First, ...infer Rest]\n\t\t? IfSameType<T, First, IfMatch, IfExactTypeInTuple<T, Rest, IfMatch, IfNoMatch>>\n\t\t: IfNoMatch;\n\n\t/**\n\t * Test for type equality with union of other types.\n\t *\n\t * @typeParam T - Type to find in Union. If this is itself a union, then all types must be found in Union.\n\t * @typeParam Union - Union of types to test against.\n\t * @typeParam IfMatch - Type to return if match is found.\n\t * @typeParam IfNoMatch - Type to return if no match is found.\n\t *\n\t * @remarks\n\t * In a recursive context, use {@link InternalUtilityTypes.IfExactTypeInTuple} to manage ancestry.\n\t *\n\t * @privateRemarks\n\t * Perhaps it is a Typescript defect but a simple check that `T` is `never`\n\t * via `T extends never` does not work as expected in this context.\n\t * Workaround using `IfSameType<..., never,...>`.\n\t * @system\n\t */\n\texport type IfExactTypeInUnion<T, Union, IfMatch = unknown, IfNoMatch = never> = IfSameType<\n\t\tT,\n\t\tnever,\n\t\t/* T is never => */ IfSameType<Union, never, IfMatch, IfNoMatch>,\n\t\t/* T is NOT never => */ IfSameType<T, Extract<Union, T>, IfMatch, IfNoMatch>\n\t>;\n\n\t/**\n\t * Test for type equality\n\t *\n\t * @returns `true` if identical and `false` otherwise.\n\t *\n\t * @system\n\t */\n\texport type IsSameType<X, Y> = IfSameType<X, Y, true, false>;\n\n\t/**\n\t * Checks that type is exactly `object`.\n\t *\n\t * @system\n\t */\n\texport type IsExactlyObject<T extends object> = IsSameType<T, object>;\n\n\t/**\n\t * Creates a simple object type from an intersection of multiple.\n\t * @privateRemarks\n\t * `T extends Record` within the implementation encourages tsc to process\n\t * intersections within unions.\n\t *\n\t * @system\n\t */\n\texport type FlattenIntersection<T extends Record<string | number | symbol, unknown>> =\n\t\tT extends Record<string | number | symbol, unknown>\n\t\t\t? {\n\t\t\t\t\t[K in keyof T]: T[K];\n\t\t\t\t}\n\t\t\t: T;\n\n\t/**\n\t * Extracts Function portion from an intersection (&) type returning\n\t * the extracted portion in the `function` property or `unknown` if\n\t * no function is found.\n\t * The returned `classification` property has one of three values:\n\t * - \"no Function\" if the type is not a function.\n\t * - \"exactly Function\" if the type is exactly a function.\n\t * - \"Function and more\" if the type is a function and has other properties.\n\t *\n\t * @system\n\t */\n\texport type ExtractFunctionFromIntersection<T extends object> = (T extends new (\n\t\t...args: infer A\n\t) => infer R\n\t\t? new (\n\t\t\t\t...args: A\n\t\t\t) => R\n\t\t: unknown) &\n\t\t(T extends (...args: infer A) => infer R\n\t\t\t? (...args: A) => R\n\t\t\t: unknown) extends infer Functional\n\t\t? {\n\t\t\t\tclassification: unknown extends Functional\n\t\t\t\t\t? \"no Function\"\n\t\t\t\t\t: Functional extends Required<T>\n\t\t\t\t\t\t? \"exactly Function\"\n\t\t\t\t\t\t: \"Function and more\";\n\t\t\t\tfunction: Functional;\n\t\t\t}\n\t\t: never;\n\n\t/**\n\t * Returns `Filtered` & any Function intersection from `Original`.\n\t * If `Original` is exactly a Function, then `Filtered` is left out\n\t * under the assumption that it is not useful/applicable.\n\t *\n\t * @system\n\t */\n\texport type FilterPreservingFunction<\n\t\tOriginal extends object,\n\t\tFiltered,\n\t> = ExtractFunctionFromIntersection<Original> extends {\n\t\tclassification: infer TClassification;\n\t\tfunction: infer TFunction;\n\t}\n\t\t? TClassification extends \"exactly Function\"\n\t\t\t? TFunction\n\t\t\t: TFunction & Filtered\n\t\t: never;\n\n\t/**\n\t * Replaces any instance where a type T recurses into itself or a portion of\n\t * itself with TReplacement.\n\t *\n\t * @typeParam T - Type to process.\n\t * @typeParam TRecursionMarker - Replacement marker type.\n\t * @typeParam Controls - Allowances are preserved as-is.\n\t * @typeParam TAncestorTypes - Types that are ancestors of T.\n\t * @typeParam TNextAncestor - Set exactly to T. This is passed separately\n\t * such that T union types remain intact as exact ancestors.\n\t *\n\t * @remarks\n\t * Filtering applied to class instances with non-public properties will not\n\t * preserve the class instance unless those classes are known and listed as\n\t * allowances via `Controls`.\n\t *\n\t * @privateRemarks\n\t * This implementation handles functions including function with properties.\n\t * There are no known cases where replacing recursion under such types make\n\t * a difference. Either the function (whole type) is allowed by the Json\n\t * filters or function is not allowed at all.\n\t * If the function portion is found to be problematic later, then could use\n\t * `T extends Function ? T : ...` to ignore function objects.\n\t *\n\t * @system\n\t */\n\texport type ReplaceRecursionWithMarkerAndPreserveAllowances<\n\t\tT,\n\t\tTRecursionMarker,\n\t\tControls extends FilterControls,\n\t\tTAncestorTypes extends unknown[] = [],\n\t\tTNextAncestor = T,\n\t> = /* test for recursion */\n\tIfExactTypeInTuple<T, TAncestorTypes, true, \"no match\"> extends true\n\t\t? /* recursion => use replacement */ TRecursionMarker\n\t\t: /* force union separation hereafter */ T extends infer _\n\t\t\t? /* test for recursion among union elements */\n\t\t\t\tIfExactTypeInTuple<T, TAncestorTypes, true, \"no match\"> extends true\n\t\t\t\t? TRecursionMarker\n\t\t\t\t: /* test for general allowance */ T extends Controls[\"AllowExtensionOf\"]\n\t\t\t\t\t? /* allowed extension type => */ T\n\t\t\t\t\t: /* test for exact allowance */ IfExactTypeInUnion<\n\t\t\t\t\t\t\t\tT,\n\t\t\t\t\t\t\t\tControls[\"AllowExactly\"],\n\t\t\t\t\t\t\t\ttrue,\n\t\t\t\t\t\t\t\t\"no match\"\n\t\t\t\t\t\t\t> extends true\n\t\t\t\t\t\t? /* exact allowed type => */ T\n\t\t\t\t\t\t: T extends object\n\t\t\t\t\t\t\t? FilterPreservingFunction<\n\t\t\t\t\t\t\t\t\tT,\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t[K in keyof T]: ReplaceRecursionWithMarkerAndPreserveAllowances<\n\t\t\t\t\t\t\t\t\t\t\tT[K],\n\t\t\t\t\t\t\t\t\t\t\tTRecursionMarker,\n\t\t\t\t\t\t\t\t\t\t\tControls,\n\t\t\t\t\t\t\t\t\t\t\t[TNextAncestor, ...TAncestorTypes]\n\t\t\t\t\t\t\t\t\t\t>;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t: /* non-object => T as is */ T\n\t\t\t: never;\n\n\t/**\n\t * Replaces any instances of \"allowed\" types and recursion within with `never`.\n\t *\n\t * @typeParam T - Type to process.\n\t * @typeParam Controls - Allowances to replace.\n\t * @typeParam TAncestorTypes - Types that are ancestors of T.\n\t * @typeParam TNextAncestor - Set exactly to T. This is passed separately\n\t * such that T union types remain intact as exact ancestors.\n\t *\n\t * @system\n\t */\n\texport type ReplaceAllowancesAndRecursionWithNever<\n\t\tT,\n\t\tControls extends FilterControls,\n\t\tTAncestorTypes extends unknown[] = [],\n\t\tTNextAncestor = T,\n\t> = /* test for exact recursion first */ IfExactTypeInTuple<\n\t\tT,\n\t\tTAncestorTypes,\n\t\ttrue,\n\t\t\"no match\"\n\t> extends true\n\t\t? /* recursion => */ never\n\t\t: /* test for general allowance (also forces union separation) */ T extends Controls[\"AllowExtensionOf\"]\n\t\t\t? /* allowed extension type => */ never\n\t\t\t: /* test for exact allowance */ IfExactTypeInUnion<\n\t\t\t\t\t\tT,\n\t\t\t\t\t\tControls[\"AllowExactly\"],\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\t\"no match\"\n\t\t\t\t\t> extends true\n\t\t\t\t? /* exact allowed type => */ never\n\t\t\t\t: /* test for recursion among union elements */ IfExactTypeInTuple<\n\t\t\t\t\t\t\tT,\n\t\t\t\t\t\t\tTAncestorTypes,\n\t\t\t\t\t\t\ttrue,\n\t\t\t\t\t\t\t\"no match\"\n\t\t\t\t\t\t> extends true\n\t\t\t\t\t? /* recursion => */ never\n\t\t\t\t\t: T extends object\n\t\t\t\t\t\t? FilterPreservingFunction<\n\t\t\t\t\t\t\t\tT,\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t[K in keyof T]: ReplaceAllowancesAndRecursionWithNever<\n\t\t\t\t\t\t\t\t\t\tT[K],\n\t\t\t\t\t\t\t\t\t\tControls,\n\t\t\t\t\t\t\t\t\t\t[TNextAncestor, ...TAncestorTypes]\n\t\t\t\t\t\t\t\t\t>;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t: /* non-object => T as is */ T;\n\n\t/**\n\t * Test for non-public properties (which can only exist on class instance types).\n\t *\n\t * Returns `HasNonPublic` if `T` deeply may contain a private or protected field\n\t * and `OnlyPublics` otherwise.\n\t *\n\t * @remarks\n\t * Compare original (unprocessed) to filtered case that has `never` where\n\t * recursing or where allowed exception types are used.\n\t *\n\t * Note that this a test of the type and not the actual data. So, if an\n\t * interface is given as `T` where implemented by a class, any private or\n\t * protected fields within the class will not be detected.\n\t *\n\t * @system\n\t */\n\texport type IfNonPublicProperties<\n\t\tT,\n\t\tControls extends FilterControls,\n\t\tHasNonPublic = never,\n\t\tOnlyPublics = unknown,\n\t> = ReplaceAllowancesAndRecursionWithNever<T, Controls> extends T\n\t\t? OnlyPublics\n\t\t: HasNonPublic;\n\n\t// #region JsonSerializable implementation\n\n\t/**\n\t * Outer implementation of {@link JsonSerializable} handling meta cases\n\t * like classes (with non-public properties).\n\t *\n\t * @system\n\t */\n\texport type JsonSerializableImpl<\n\t\tT,\n\t\tOptions extends Partial<FilterControls> & {\n\t\t\tIgnoreInaccessibleMembers?: \"ignore-inaccessible-members\";\n\t\t},\n\t\tTAncestorTypes extends unknown[] = [],\n\t\tTNextAncestor = T,\n\t> = /* Build Controls from Options filling in defaults for any missing properties */\n\t{\n\t\tAllowExactly: Options extends { AllowExactly: unknown } ? Options[\"AllowExactly\"] : never;\n\t\tAllowExtensionOf: Options extends { AllowExtensionOf: unknown }\n\t\t\t? Options[\"AllowExtensionOf\"]\n\t\t\t: never;\n\t} extends infer Controls\n\t\t? /* Controls should always satisfy FilterControls, but Typescript wants a check */\n\t\t\tControls extends FilterControls\n\t\t\t? /* test for 'any' */ boolean extends (T extends never ? true : false)\n\t\t\t\t? /* 'any' => */ JsonTypeWith<Controls[\"AllowExactly\"] | Controls[\"AllowExtensionOf\"]>\n\t\t\t\t: Options[\"IgnoreInaccessibleMembers\"] extends \"ignore-inaccessible-members\"\n\t\t\t\t\t? JsonSerializableFilter<T, Controls, TAncestorTypes, TNextAncestor>\n\t\t\t\t\t: /* test for non-public properties (class instance type) */\n\t\t\t\t\t\tIfNonPublicProperties<\n\t\t\t\t\t\t\t\tT,\n\t\t\t\t\t\t\t\tControls,\n\t\t\t\t\t\t\t\t\"found non-publics\",\n\t\t\t\t\t\t\t\t\"only publics\"\n\t\t\t\t\t\t\t> extends \"found non-publics\"\n\t\t\t\t\t\t? /* hidden props => test if it is array properties that are the problem */ T extends readonly (infer _)[]\n\t\t\t\t\t\t\t? /* array => */ {\n\t\t\t\t\t\t\t\t\t/* use homomorphic mapped type to preserve tuple type */\n\t\t\t\t\t\t\t\t\t[K in keyof T]: JsonSerializableImpl<\n\t\t\t\t\t\t\t\t\t\tT[K],\n\t\t\t\t\t\t\t\t\t\tControls,\n\t\t\t\t\t\t\t\t\t\t[TNextAncestor, ...TAncestorTypes]\n\t\t\t\t\t\t\t\t\t>;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: /* not array => error */ SerializationErrorPerNonPublicProperties\n\t\t\t\t\t\t: /* no hidden properties => apply filtering => */ JsonSerializableFilter<\n\t\t\t\t\t\t\t\tT,\n\t\t\t\t\t\t\t\tControls,\n\t\t\t\t\t\t\t\tTAncestorTypes,\n\t\t\t\t\t\t\t\tTNextAncestor\n\t\t\t\t\t\t\t>\n\t\t\t: never /* FilterControls assert else; should never be reached */\n\t\t: never /* unreachable else for infer */;\n\n\t/**\n\t * Core implementation of {@link JsonSerializable}.\n\t *\n\t * @privateRemarks\n\t * Note that `T` becomes an Controls.AllowExtensionOf type during recursion.\n\t * Filtering through a single layer of recursion is all that is required\n\t * when using in prescribed filter scenario. Controls.AllowExtensionOf must\n\t * be used instead of Controls.AllowExactly to avoid possibly deep and\n\t * infinite recursion from tsc. Checking extension of is sufficient as all\n\t * extended types from the recursion type are more specific and and would\n\t * be considered before reaching the more general T currently being processed.\n\t *\n\t * @system\n\t */\n\texport type JsonSerializableFilter<\n\t\tT,\n\t\tControls extends FilterControls,\n\t\tTAncestorTypes extends unknown[],\n\t\tTNextAncestor = T,\n\t> = /* test for 'any' */ boolean extends (T extends never ? true : false)\n\t\t? /* 'any' => */ JsonTypeWith<Controls[\"AllowExactly\"] | Controls[\"AllowExtensionOf\"]>\n\t\t: /* test for 'unknown' */ unknown extends T\n\t\t\t? /* 'unknown' => */ JsonTypeWith<\n\t\t\t\t\tControls[\"AllowExactly\"] | Controls[\"AllowExtensionOf\"]\n\t\t\t\t>\n\t\t\t: /* test for recursion */ IfExactTypeInTuple<\n\t\t\t\t\t\tT,\n\t\t\t\t\t\tTAncestorTypes,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\t\"no match\"\n\t\t\t\t\t> extends true\n\t\t\t\t? /* exact recursion; stop here => */ T\n\t\t\t\t: /* test for JSON Encodable primitive types or given alternate base */ T extends\n\t\t\t\t\t\t\t| null\n\t\t\t\t\t\t\t| boolean\n\t\t\t\t\t\t\t| number\n\t\t\t\t\t\t\t| string\n\t\t\t\t\t\t\t| Controls[\"AllowExtensionOf\"]\n\t\t\t\t\t? /* primitive types or alternate => */ T\n\t\t\t\t\t: /* test for exact alternate */ IfExactTypeInUnion<\n\t\t\t\t\t\t\t\tT,\n\t\t\t\t\t\t\t\tControls[\"AllowExactly\"],\n\t\t\t\t\t\t\t\ttrue,\n\t\t\t\t\t\t\t\t\"no match\"\n\t\t\t\t\t\t\t> extends true\n\t\t\t\t\t\t? /* exact alternate type => */ T\n\t\t\t\t\t\t: // eslint-disable-next-line @typescript-eslint/ban-types\n\t\t\t\t\t\t\t/* test for not a function */ Extract<T, Function> extends never\n\t\t\t\t\t\t\t? /* not a function => test for object */ T extends object\n\t\t\t\t\t\t\t\t? /* object => test for array */ T extends readonly (infer _)[]\n\t\t\t\t\t\t\t\t\t? /* array => */ {\n\t\t\t\t\t\t\t\t\t\t\t/* array items may not not allow undefined */\n\t\t\t\t\t\t\t\t\t\t\t/* use homomorphic mapped type to preserve tuple type */\n\t\t\t\t\t\t\t\t\t\t\t[K in keyof T]: JsonForSerializableArrayItem<\n\t\t\t\t\t\t\t\t\t\t\t\tT[K],\n\t\t\t\t\t\t\t\t\t\t\t\tControls,\n\t\t\t\t\t\t\t\t\t\t\t\tTAncestorTypes,\n\t\t\t\t\t\t\t\t\t\t\t\tJsonSerializableFilter<\n\t\t\t\t\t\t\t\t\t\t\t\t\tT[K],\n\t\t\t\t\t\t\t\t\t\t\t\t\tControls,\n\t\t\t\t\t\t\t\t\t\t\t\t\t[TNextAncestor, ...TAncestorTypes]\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t>;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t: /* not an array => test for exactly `object` */ IsExactlyObject<T> extends true\n\t\t\t\t\t\t\t\t\t\t? /* `object` => */ NonNullJsonObjectWith<\n\t\t\t\t\t\t\t\t\t\t\t\tControls[\"AllowExactly\"] | Controls[\"AllowExtensionOf\"]\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t: /* test for enum like types */ IfEnumLike<T> extends never\n\t\t\t\t\t\t\t\t\t\t\t? /* enum or similar simple type (return as-is) => */ T\n\t\t\t\t\t\t\t\t\t\t\t: /* property bag => */ FlattenIntersection<\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/* required properties are recursed and may not have undefined values. */\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[K in keyof T as RequiredNonSymbolKeysOf<\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tT,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tK\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>]-?: undefined extends T[K]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[\"error required property may not allow undefined value\"]: never;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: JsonSerializableFilter<\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tT[K],\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tControls,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[TNextAncestor, ...TAncestorTypes]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>;\n\t\t\t\t\t\t\t\t\t\t\t\t\t} & {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/* optional properties are recursed and, when exactOptionalPropertyTypes is\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t false, are allowed to preserve undefined value type. */\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[K in keyof T as OptionalNonSymbolKeysOf<\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tT,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tK\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>]?: JsonSerializableFilter<\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tT[K],\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tControls,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[TNextAncestor, ...TAncestorTypes]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>;\n\t\t\t\t\t\t\t\t\t\t\t\t\t} & {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/* symbol properties are rejected */\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[K in keyof T & symbol]: never;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t: /* not an object => */ never\n\t\t\t\t\t\t\t: /* function => */ never;\n\n\t// #endregion\n\n\t// #region JsonDeserialized implementation\n\n\t/**\n\t * Sentinel type for use when marking points of recursion (in a recursive type).\n\t * Type is expected to be unique, though no lengths is taken to ensure that.\n\t *\n\t * @system\n\t */\n\texport interface RecursionMarker {\n\t\t[RecursionMarkerSymbol]: typeof RecursionMarkerSymbol;\n\t}\n\n\t/**\n\t * Recursion limit is the count of `+` that prefix it when string.\n\t *\n\t * @system\n\t */\n\texport type RecursionLimit = `+${string}` | 0;\n\n\t/**\n\t * Outer implementation of {@link JsonDeserialized} handling meta cases\n\t * like recursive types.\n\t *\n\t * @privateRemarks\n\t * This utility is reentrant and will process a type `T` up to RecurseLimit.\n\t *\n\t * @system\n\t */\n\texport type JsonDeserializedImpl<\n\t\tT,\n\t\tOptions extends Partial<FilterControls>,\n\t\tRecurseLimit extends RecursionLimit = \"++++\" /* 4 */,\n\t> = /* Build Controls from Options filling in defaults for any missing properties */\n\t{\n\t\tAllowExactly: Options extends { AllowExactly: unknown } ? Options[\"AllowExactly\"] : never;\n\t\tAllowExtensionOf: Options extends { AllowExtensionOf: unknown }\n\t\t\t? Options[\"AllowExtensionOf\"]\n\t\t\t: never;\n\t} extends infer Controls\n\t\t? /* Controls should always satisfy FilterControls, but Typescript wants a check */\n\t\t\tControls extends FilterControls\n\t\t\t? /* test for 'any' */ boolean extends (T extends never ? true : false)\n\t\t\t\t? /* 'any' => */ JsonTypeWith<Controls[\"AllowExactly\"] | Controls[\"AllowExtensionOf\"]>\n\t\t\t\t: /* infer non-recursive version of T */ ReplaceRecursionWithMarkerAndPreserveAllowances<\n\t\t\t\t\t\t\tT,\n\t\t\t\t\t\t\tRecursionMarker,\n\t\t\t\t\t\t\tControls\n\t\t\t\t\t\t> extends infer TNoRecursionAndOnlyPublics\n\t\t\t\t\t? /* test for no change from filtered type */ IsSameType<\n\t\t\t\t\t\t\tTNoRecursionAndOnlyPublics,\n\t\t\t\t\t\t\tJsonDeserializedFilter<\n\t\t\t\t\t\t\t\tTNoRecursionAndOnlyPublics,\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tAllowExactly: Controls[\"AllowExactly\"] | RecursionMarker;\n\t\t\t\t\t\t\t\t\tAllowExtensionOf: Controls[\"AllowExtensionOf\"];\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t0\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t> extends true\n\t\t\t\t\t\t? /* same (no filtering needed) => test for non-public\n\t\t\t\t\t\t properties (class instance type) */\n\t\t\t\t\t\t\tIfNonPublicProperties<\n\t\t\t\t\t\t\t\tT,\n\t\t\t\t\t\t\t\tControls,\n\t\t\t\t\t\t\t\t\"found non-publics\",\n\t\t\t\t\t\t\t\t\"only publics\"\n\t\t\t\t\t\t\t> extends \"found non-publics\"\n\t\t\t\t\t\t\t? /* hidden props => apply filtering to avoid retaining\n\t\t\t\t\t\t\t exact class except for any classes in allowances => */\n\t\t\t\t\t\t\t\tJsonDeserializedFilter<\n\t\t\t\t\t\t\t\t\tT,\n\t\t\t\t\t\t\t\t\tControls,\n\t\t\t\t\t\t\t\t\t// Note that use of RecurseLimit may not be needed here\n\t\t\t\t\t\t\t\t\t// could have an adverse effect on correctness if there\n\t\t\t\t\t\t\t\t\t// several ancestor types that require modification and\n\t\t\t\t\t\t\t\t\t// are peeling away the limit. In such a case, the limit\n\t\t\t\t\t\t\t\t\t// will be used for the problems and result is already\n\t\t\t\t\t\t\t\t\t// messy; so deferring full understanding of the problems\n\t\t\t\t\t\t\t\t\t// that could arise from a reset and being conservative.\n\t\t\t\t\t\t\t\t\tRecurseLimit\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t: /* no hidden properties => deserialized T is just T */\n\t\t\t\t\t\t\t\tT\n\t\t\t\t\t\t: /* filtering is needed => */ JsonDeserializedFilter<T, Controls, RecurseLimit>\n\t\t\t\t\t: /* unreachable else for infer */ never\n\t\t\t: never /* FilterControls assert else; should never be reached */\n\t\t: never /* unreachable else for infer */;\n\n\t/**\n\t * Recurses T applying {@link InternalUtilityTypes.JsonDeserializedFilter} up to RecurseLimit times.\n\t *\n\t * @system\n\t */\n\texport type JsonDeserializedRecursion<\n\t\tT,\n\t\tControls extends FilterControls,\n\t\tRecurseLimit extends RecursionLimit,\n\t\tTAncestorTypes,\n\t> = T extends TAncestorTypes\n\t\t? RecurseLimit extends `+${infer RecursionRemainder}`\n\t\t\t? /* Now that specific recursion is found, process that recursive type\n\t\t\t directly to avoid any collateral damage from ancestor type that\n\t\t\t required modification. */\n\t\t\t\tJsonDeserializedImpl<\n\t\t\t\t\tT,\n\t\t\t\t\tControls,\n\t\t\t\t\tRecursionRemainder extends RecursionLimit ? RecursionRemainder : 0\n\t\t\t\t>\n\t\t\t: JsonTypeWith<Controls[\"AllowExactly\"] | Controls[\"AllowExtensionOf\"]>\n\t\t: JsonDeserializedFilter<T, Controls, RecurseLimit, TAncestorTypes | T>;\n\n\t/**\n\t * Core implementation of {@link JsonDeserialized}.\n\t *\n\t * @system\n\t */\n\texport type JsonDeserializedFilter<\n\t\tT,\n\t\tControls extends FilterControls,\n\t\tRecurseLimit extends RecursionLimit,\n\t\tTAncestorTypes = T /* Always start with self as ancestor; otherwise recursion limit appears one greater */,\n\t> = /* test for 'any' */ boolean extends (T extends never ? true : false)\n\t\t? /* 'any' => */ JsonTypeWith<Controls[\"AllowExactly\"] | Controls[\"AllowExtensionOf\"]>\n\t\t: /* test for 'unknown' */ unknown extends T\n\t\t\t? /* 'unknown' => */ JsonTypeWith<\n\t\t\t\t\tControls[\"AllowExactly\"] | Controls[\"AllowExtensionOf\"]\n\t\t\t\t>\n\t\t\t: /* test for deserializable primitive types or given alternate base */ T extends\n\t\t\t\t\t\t| null\n\t\t\t\t\t\t| boolean\n\t\t\t\t\t\t| number\n\t\t\t\t\t\t| string\n\t\t\t\t\t\t| Controls[\"AllowExtensionOf\"]\n\t\t\t\t? /* primitive types or alternate => */ T\n\t\t\t\t: /* test for given exact alternate */ IfExactTypeInUnion<\n\t\t\t\t\t\t\tT,\n\t\t\t\t\t\t\tControls[\"AllowExactly\"],\n\t\t\t\t\t\t\ttrue,\n\t\t\t\t\t\t\t\"not found\"\n\t\t\t\t\t\t> extends true\n\t\t\t\t\t? /* exact alternate type => */ T\n\t\t\t\t\t: /* test for object */ T extends object\n\t\t\t\t\t\t? /* object => */ ExtractFunctionFromIntersection<T> extends {\n\t\t\t\t\t\t\t\tclassification: \"exactly Function\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t? /* exactly function => */ never\n\t\t\t\t\t\t\t: /* not exactly a function (Function portion, if any, is omitted) */\n\t\t\t\t\t\t\t\t/* => test for array */ T extends readonly (infer _)[]\n\t\t\t\t\t\t\t\t? /* array => */ {\n\t\t\t\t\t\t\t\t\t\t/* array items may not not allow undefined */\n\t\t\t\t\t\t\t\t\t\t/* use homomorphic mapped type to preserve tuple type */\n\t\t\t\t\t\t\t\t\t\t[K in keyof T]: JsonForDeserializedArrayItem<\n\t\t\t\t\t\t\t\t\t\t\tT[K],\n\t\t\t\t\t\t\t\t\t\t\tControls,\n\t\t\t\t\t\t\t\t\t\t\tJsonDeserializedRecursion<T[K], Controls, RecurseLimit, TAncestorTypes>\n\t\t\t\t\t\t\t\t\t\t>;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t: /* not an array => test for exactly `object` */ IsExactlyObject<T> extends true\n\t\t\t\t\t\t\t\t\t? /* `object` => */ NonNullJsonObjectWith<\n\t\t\t\t\t\t\t\t\t\t\tControls[\"AllowExactly\"] | Controls[\"AllowExtensionOf\"]\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t: /* test for enum like types */ IfEnumLike<T> extends never\n\t\t\t\t\t\t\t\t\t\t? /* enum or similar simple type (return as-is) => */ T\n\t\t\t\t\t\t\t\t\t\t: /* property bag => */ FlattenIntersection<\n\t\t\t\t\t\t\t\t\t\t\t\t/* properties with symbol keys or wholly unsupported values are removed */\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t/* properties with defined values are recursed */\n\t\t\t\t\t\t\t\t\t\t\t\t\t[K in keyof T as NonSymbolWithDeserializablePropertyOf<\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tT,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tControls[\"AllowExactly\"],\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tControls[\"AllowExtensionOf\"],\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tK\n\t\t\t\t\t\t\t\t\t\t\t\t\t>]: JsonDeserializedRecursion<\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tT[K],\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tControls,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tRecurseLimit,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tTAncestorTypes\n\t\t\t\t\t\t\t\t\t\t\t\t\t>;\n\t\t\t\t\t\t\t\t\t\t\t\t} & {\n\t\t\t\t\t\t\t\t\t\t\t\t\t/* properties that may have undefined values are optional */\n\t\t\t\t\t\t\t\t\t\t\t\t\t[K in keyof T as NonSymbolWithPossiblyDeserializablePropertyOf<\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tT,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tControls[\"AllowExactly\"],\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tControls[\"AllowExtensionOf\"],\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tK\n\t\t\t\t\t\t\t\t\t\t\t\t\t>]?: JsonDeserializedRecursion<\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tT[K],\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tControls,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tRecurseLimit,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tTAncestorTypes\n\t\t\t\t\t\t\t\t\t\t\t\t\t>;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t: /* not an object => */ never;\n\n\t// #endregion\n}\n"]}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
-
* Licensed under the MIT License.
|
|
4
|
-
*/
|
|
5
|
-
export type { JsonDeserialized, JsonDeserializedOptions } from "./jsonDeserialized.js";
|
|
6
|
-
export type { JsonSerializable, JsonSerializableOptions } from "./jsonSerializable.js";
|
|
7
|
-
export type { SerializationErrorPerNonPublicProperties, SerializationErrorPerUndefinedArrayElement, } from "./jsonSerializationErrors.js";
|
|
8
|
-
export type { JsonTypeWith, NonNullJsonObjectWith } from "./jsonType.js";
|
|
9
|
-
export type * from "./exposedUtilityTypes.js";
|
|
10
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core-interfaces/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,YAAY,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AACvF,YAAY,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AACvF,YAAY,EACX,wCAAwC,EACxC,0CAA0C,GAC1C,MAAM,8BAA8B,CAAC;AACtC,YAAY,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAGzE,mBAAmB,0BAA0B,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core-interfaces/index.ts"],"names":[],"mappings":"AAAA;;;GAGG","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport type { JsonDeserialized, JsonDeserializedOptions } from \"./jsonDeserialized.js\";\nexport type { JsonSerializable, JsonSerializableOptions } from \"./jsonSerializable.js\";\nexport type {\n\tSerializationErrorPerNonPublicProperties,\n\tSerializationErrorPerUndefinedArrayElement,\n} from \"./jsonSerializationErrors.js\";\nexport type { JsonTypeWith, NonNullJsonObjectWith } from \"./jsonType.js\";\n\n// eslint-disable-next-line no-restricted-syntax\nexport type * from \"./exposedUtilityTypes.js\";\n"]}
|