@fluidframework/tree 2.90.0 → 2.91.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/CHANGELOG.md +247 -0
- package/alpha.d.ts +2 -2
- package/api-extractor/api-extractor-lint-alpha.cjs.json +1 -1
- package/api-extractor/api-extractor-lint-alpha.esm.json +1 -1
- package/api-extractor/api-extractor-lint-beta.cjs.json +1 -1
- package/api-extractor/api-extractor-lint-beta.esm.json +1 -1
- package/api-extractor/api-extractor-lint-bundle.json +1 -1
- package/api-extractor/api-extractor-lint-legacy.cjs.json +1 -1
- package/api-extractor/api-extractor-lint-legacy.esm.json +1 -1
- package/api-extractor/api-extractor-lint-public.cjs.json +1 -1
- package/api-extractor/api-extractor-lint-public.esm.json +1 -1
- package/api-extractor/api-extractor.current.json +1 -1
- package/api-extractor/api-extractor.legacy.json +2 -1
- package/api-extractor.json +1 -0
- package/api-report/tree.alpha.api.md +81 -15
- package/beta.d.ts +2 -2
- package/dist/entrypoints/alpha.d.ts +6 -0
- package/dist/entrypoints/alpha.d.ts.map +1 -0
- package/dist/entrypoints/alpha.js +92 -0
- package/dist/entrypoints/alpha.js.map +1 -0
- package/dist/entrypoints/beta.d.ts +6 -0
- package/dist/entrypoints/beta.d.ts.map +1 -0
- package/dist/entrypoints/beta.js +43 -0
- package/dist/entrypoints/beta.js.map +1 -0
- package/dist/entrypoints/internal.d.ts +6 -0
- package/dist/entrypoints/internal.d.ts.map +1 -0
- package/dist/entrypoints/internal.js +28 -0
- package/dist/entrypoints/internal.js.map +1 -0
- package/dist/entrypoints/legacy.d.ts +6 -0
- package/dist/entrypoints/legacy.d.ts.map +1 -0
- package/dist/entrypoints/legacy.js +49 -0
- package/dist/entrypoints/legacy.js.map +1 -0
- package/dist/entrypoints/public.d.ts +6 -0
- package/dist/entrypoints/public.d.ts.map +1 -0
- package/dist/entrypoints/public.js +27 -0
- package/dist/entrypoints/public.js.map +1 -0
- package/dist/feature-libraries/modular-schema/crossFieldQueries.d.ts +3 -3
- package/dist/feature-libraries/modular-schema/crossFieldQueries.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/crossFieldQueries.js.map +1 -1
- package/dist/feature-libraries/modular-schema/defaultRevisionReplacer.d.ts +1 -0
- package/dist/feature-libraries/modular-schema/defaultRevisionReplacer.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/defaultRevisionReplacer.js +14 -6
- package/dist/feature-libraries/modular-schema/defaultRevisionReplacer.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFamily.js +7 -3
- package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
- package/dist/feature-libraries/sequence-field/moveEffectTable.d.ts +1 -1
- package/dist/feature-libraries/sequence-field/moveEffectTable.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/moveEffectTable.js.map +1 -1
- package/dist/index.d.ts +7 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
- package/dist/shared-tree/treeCheckout.js +2 -1
- package/dist/shared-tree/treeCheckout.js.map +1 -1
- package/dist/simple-tree/api/eraseSchemaDetails.d.ts +43 -0
- package/dist/simple-tree/api/eraseSchemaDetails.d.ts.map +1 -1
- package/dist/simple-tree/api/eraseSchemaDetails.js.map +1 -1
- package/dist/simple-tree/api/index.d.ts +3 -2
- package/dist/simple-tree/api/index.d.ts.map +1 -1
- package/dist/simple-tree/api/index.js.map +1 -1
- package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactory.js.map +1 -1
- package/dist/simple-tree/api/schemaFactoryAlpha.d.ts +125 -28
- package/dist/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactoryAlpha.js +72 -7
- package/dist/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
- package/dist/simple-tree/api/schemaFactoryBeta.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactoryBeta.js.map +1 -1
- package/dist/simple-tree/api/schemaStatics.d.ts +10 -11
- package/dist/simple-tree/api/schemaStatics.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaStatics.js +13 -7
- package/dist/simple-tree/api/schemaStatics.js.map +1 -1
- package/dist/simple-tree/api/typesUnsafe.d.ts +23 -2
- package/dist/simple-tree/api/typesUnsafe.d.ts.map +1 -1
- package/dist/simple-tree/api/typesUnsafe.js.map +1 -1
- package/dist/simple-tree/fieldSchema.d.ts +3 -2
- package/dist/simple-tree/fieldSchema.d.ts.map +1 -1
- package/dist/simple-tree/fieldSchema.js +3 -4
- package/dist/simple-tree/fieldSchema.js.map +1 -1
- package/dist/simple-tree/index.d.ts +2 -2
- package/dist/simple-tree/index.d.ts.map +1 -1
- package/dist/simple-tree/index.js.map +1 -1
- package/dist/simple-tree/node-kinds/index.d.ts +1 -1
- package/dist/simple-tree/node-kinds/index.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/index.js.map +1 -1
- package/dist/simple-tree/node-kinds/object/index.d.ts +2 -2
- package/dist/simple-tree/node-kinds/object/index.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/object/index.js.map +1 -1
- package/dist/simple-tree/node-kinds/object/objectNode.d.ts +43 -7
- package/dist/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/object/objectNode.js.map +1 -1
- package/dist/simple-tree/node-kinds/object/objectNodeTypes.d.ts +26 -2
- package/dist/simple-tree/node-kinds/object/objectNodeTypes.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/object/objectNodeTypes.js.map +1 -1
- package/dist/text/textDomainFormatted.d.ts +2 -4
- package/dist/text/textDomainFormatted.d.ts.map +1 -1
- package/dist/util/rangeMap.d.ts +25 -18
- package/dist/util/rangeMap.d.ts.map +1 -1
- package/dist/util/rangeMap.js +24 -30
- package/dist/util/rangeMap.js.map +1 -1
- package/dist/util/typeCheck.d.ts.map +1 -1
- package/dist/util/typeCheck.js.map +1 -1
- package/dist/util/typeUtils.d.ts.map +1 -1
- package/dist/util/typeUtils.js.map +1 -1
- package/eslint.config.mts +10 -2
- package/internal.d.ts +2 -2
- package/legacy.d.ts +4 -3
- package/lib/entrypoints/alpha.d.ts +6 -0
- package/lib/entrypoints/alpha.d.ts.map +1 -0
- package/lib/entrypoints/alpha.js +12 -0
- package/lib/entrypoints/alpha.js.map +1 -0
- package/lib/entrypoints/beta.d.ts +6 -0
- package/lib/entrypoints/beta.d.ts.map +1 -0
- package/lib/entrypoints/beta.js +12 -0
- package/lib/entrypoints/beta.js.map +1 -0
- package/lib/entrypoints/internal.d.ts +6 -0
- package/lib/entrypoints/internal.d.ts.map +1 -0
- package/lib/entrypoints/internal.js +12 -0
- package/lib/entrypoints/internal.js.map +1 -0
- package/lib/entrypoints/legacy.d.ts +6 -0
- package/lib/entrypoints/legacy.d.ts.map +1 -0
- package/lib/entrypoints/legacy.js +15 -0
- package/lib/entrypoints/legacy.js.map +1 -0
- package/lib/entrypoints/public.d.ts +6 -0
- package/lib/entrypoints/public.d.ts.map +1 -0
- package/lib/entrypoints/public.js +10 -0
- package/lib/entrypoints/public.js.map +1 -0
- package/lib/feature-libraries/modular-schema/crossFieldQueries.d.ts +3 -3
- package/lib/feature-libraries/modular-schema/crossFieldQueries.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/crossFieldQueries.js.map +1 -1
- package/lib/feature-libraries/modular-schema/defaultRevisionReplacer.d.ts +1 -0
- package/lib/feature-libraries/modular-schema/defaultRevisionReplacer.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/defaultRevisionReplacer.js +14 -6
- package/lib/feature-libraries/modular-schema/defaultRevisionReplacer.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFamily.js +7 -3
- package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
- package/lib/feature-libraries/sequence-field/moveEffectTable.d.ts +1 -1
- package/lib/feature-libraries/sequence-field/moveEffectTable.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/moveEffectTable.js.map +1 -1
- package/lib/index.d.ts +7 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +8 -0
- package/lib/index.js.map +1 -1
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
- package/lib/shared-tree/treeCheckout.js +2 -1
- package/lib/shared-tree/treeCheckout.js.map +1 -1
- package/lib/simple-tree/api/eraseSchemaDetails.d.ts +43 -0
- package/lib/simple-tree/api/eraseSchemaDetails.d.ts.map +1 -1
- package/lib/simple-tree/api/eraseSchemaDetails.js.map +1 -1
- package/lib/simple-tree/api/index.d.ts +3 -2
- package/lib/simple-tree/api/index.d.ts.map +1 -1
- package/lib/simple-tree/api/index.js +1 -1
- package/lib/simple-tree/api/index.js.map +1 -1
- package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactory.js.map +1 -1
- package/lib/simple-tree/api/schemaFactoryAlpha.d.ts +125 -28
- package/lib/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactoryAlpha.js +66 -1
- package/lib/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
- package/lib/simple-tree/api/schemaFactoryBeta.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactoryBeta.js.map +1 -1
- package/lib/simple-tree/api/schemaStatics.d.ts +10 -11
- package/lib/simple-tree/api/schemaStatics.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaStatics.js +14 -8
- package/lib/simple-tree/api/schemaStatics.js.map +1 -1
- package/lib/simple-tree/api/typesUnsafe.d.ts +23 -2
- package/lib/simple-tree/api/typesUnsafe.d.ts.map +1 -1
- package/lib/simple-tree/api/typesUnsafe.js.map +1 -1
- package/lib/simple-tree/fieldSchema.d.ts +3 -2
- package/lib/simple-tree/fieldSchema.d.ts.map +1 -1
- package/lib/simple-tree/fieldSchema.js +3 -4
- package/lib/simple-tree/fieldSchema.js.map +1 -1
- package/lib/simple-tree/index.d.ts +2 -2
- package/lib/simple-tree/index.d.ts.map +1 -1
- package/lib/simple-tree/index.js.map +1 -1
- package/lib/simple-tree/node-kinds/index.d.ts +1 -1
- package/lib/simple-tree/node-kinds/index.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/index.js.map +1 -1
- package/lib/simple-tree/node-kinds/object/index.d.ts +2 -2
- package/lib/simple-tree/node-kinds/object/index.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/object/index.js.map +1 -1
- package/lib/simple-tree/node-kinds/object/objectNode.d.ts +43 -7
- package/lib/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/object/objectNode.js.map +1 -1
- package/lib/simple-tree/node-kinds/object/objectNodeTypes.d.ts +26 -2
- package/lib/simple-tree/node-kinds/object/objectNodeTypes.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/object/objectNodeTypes.js.map +1 -1
- package/lib/text/textDomainFormatted.d.ts +2 -4
- package/lib/text/textDomainFormatted.d.ts.map +1 -1
- package/lib/util/rangeMap.d.ts +25 -18
- package/lib/util/rangeMap.d.ts.map +1 -1
- package/lib/util/rangeMap.js +25 -31
- package/lib/util/rangeMap.js.map +1 -1
- package/lib/util/typeCheck.d.ts.map +1 -1
- package/lib/util/typeCheck.js.map +1 -1
- package/lib/util/typeUtils.d.ts.map +1 -1
- package/lib/util/typeUtils.js.map +1 -1
- package/package.json +46 -46
- package/scripts/generate-entrypoint-sources.sh +29 -0
- package/{dist/alpha.d.ts → src/entrypoints/alpha.ts} +12 -5
- package/{lib/beta.d.ts → src/entrypoints/beta.ts} +2 -5
- package/src/entrypoints/internal.ts +13 -0
- package/{dist/legacy.d.ts → src/entrypoints/legacy.ts} +2 -5
- package/{lib/public.d.ts → src/entrypoints/public.ts} +2 -5
- package/src/feature-libraries/modular-schema/crossFieldQueries.ts +3 -8
- package/src/feature-libraries/modular-schema/defaultRevisionReplacer.ts +16 -8
- package/src/feature-libraries/modular-schema/modularChangeFamily.ts +9 -4
- package/src/feature-libraries/sequence-field/moveEffectTable.ts +1 -1
- package/src/index.ts +19 -0
- package/src/packageVersion.ts +1 -1
- package/src/shared-tree/treeCheckout.ts +2 -1
- package/src/simple-tree/api/eraseSchemaDetails.ts +60 -0
- package/src/simple-tree/api/index.ts +12 -1
- package/src/simple-tree/api/schemaFactory.ts +8 -1
- package/src/simple-tree/api/schemaFactoryAlpha.ts +262 -25
- package/src/simple-tree/api/schemaFactoryBeta.ts +10 -1
- package/src/simple-tree/api/schemaStatics.ts +79 -21
- package/src/simple-tree/api/typesUnsafe.ts +49 -1
- package/src/simple-tree/fieldSchema.ts +29 -5
- package/src/simple-tree/index.ts +10 -0
- package/src/simple-tree/node-kinds/index.ts +3 -0
- package/src/simple-tree/node-kinds/object/index.ts +3 -0
- package/src/simple-tree/node-kinds/object/objectNode.ts +69 -11
- package/src/simple-tree/node-kinds/object/objectNodeTypes.ts +33 -2
- package/src/util/rangeMap.ts +54 -50
- package/src/util/typeCheck.ts +1 -0
- package/src/util/typeUtils.ts +4 -7
- package/dist/beta.d.ts +0 -152
- package/dist/public.d.ts +0 -94
- package/lib/alpha.d.ts +0 -304
- package/lib/legacy.d.ts +0 -159
|
@@ -263,7 +263,16 @@ export class SchemaFactoryBeta<
|
|
|
263
263
|
return objectSchema(scoped<TScope, TName, Name>(this, name), fields, true, {
|
|
264
264
|
...defaultSchemaFactoryObjectOptions,
|
|
265
265
|
...options,
|
|
266
|
-
})
|
|
266
|
+
}) as TreeNodeSchemaClass<
|
|
267
|
+
ScopedSchemaName<TScope, Name>,
|
|
268
|
+
NodeKind.Object,
|
|
269
|
+
TreeObjectNode<T, ScopedSchemaName<TScope, Name>>,
|
|
270
|
+
object & InsertableObjectFromSchemaRecord<T>,
|
|
271
|
+
true,
|
|
272
|
+
T,
|
|
273
|
+
never,
|
|
274
|
+
TCustomMetadata
|
|
275
|
+
>;
|
|
267
276
|
}
|
|
268
277
|
|
|
269
278
|
public override objectRecursive<
|
|
@@ -6,13 +6,15 @@
|
|
|
6
6
|
import type { IFluidHandle } from "@fluidframework/core-interfaces";
|
|
7
7
|
|
|
8
8
|
import type { ImplicitAllowedTypes } from "../core/index.js";
|
|
9
|
-
import {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
9
|
+
import {
|
|
10
|
+
FieldKind,
|
|
11
|
+
getDefaultProvider,
|
|
12
|
+
createFieldSchema,
|
|
13
|
+
type FieldProps,
|
|
14
|
+
type DefaultProvider,
|
|
15
|
+
type FieldPropsAlpha,
|
|
16
|
+
type FieldSchema,
|
|
17
|
+
type FieldSchemaAlpha,
|
|
16
18
|
} from "../fieldSchema.js";
|
|
17
19
|
import type { LeafSchema } from "../leafNodeSchema.js";
|
|
18
20
|
import {
|
|
@@ -180,7 +182,12 @@ export const schemaStaticsStable = {
|
|
|
180
182
|
optional: <const T extends ImplicitAllowedTypes, const TCustomMetadata = unknown>(
|
|
181
183
|
t: T,
|
|
182
184
|
props?: Omit<FieldPropsAlpha<TCustomMetadata>, "defaultProvider">,
|
|
183
|
-
): FieldSchemaAlpha<
|
|
185
|
+
): FieldSchemaAlpha<
|
|
186
|
+
FieldKind.Optional,
|
|
187
|
+
T,
|
|
188
|
+
TCustomMetadata,
|
|
189
|
+
FieldPropsAlpha<TCustomMetadata>
|
|
190
|
+
> => {
|
|
184
191
|
return createFieldSchema(FieldKind.Optional, t, {
|
|
185
192
|
defaultProvider: defaultOptionalProvider,
|
|
186
193
|
...props,
|
|
@@ -190,8 +197,13 @@ export const schemaStaticsStable = {
|
|
|
190
197
|
required: <const T extends ImplicitAllowedTypes, const TCustomMetadata = unknown>(
|
|
191
198
|
t: T,
|
|
192
199
|
props?: Omit<FieldPropsAlpha<TCustomMetadata>, "defaultProvider">,
|
|
193
|
-
): FieldSchemaAlpha<
|
|
194
|
-
|
|
200
|
+
): FieldSchemaAlpha<
|
|
201
|
+
FieldKind.Required,
|
|
202
|
+
T,
|
|
203
|
+
TCustomMetadata,
|
|
204
|
+
FieldPropsAlpha<TCustomMetadata>
|
|
205
|
+
> => {
|
|
206
|
+
return createFieldSchema(FieldKind.Required, t, { defaultProvider: undefined, ...props });
|
|
195
207
|
},
|
|
196
208
|
|
|
197
209
|
optionalRecursive: <
|
|
@@ -200,7 +212,12 @@ export const schemaStaticsStable = {
|
|
|
200
212
|
>(
|
|
201
213
|
t: T,
|
|
202
214
|
props?: Omit<FieldPropsAlpha<TCustomMetadata>, "defaultProvider">,
|
|
203
|
-
): FieldSchemaAlphaUnsafe<
|
|
215
|
+
): FieldSchemaAlphaUnsafe<
|
|
216
|
+
FieldKind.Optional,
|
|
217
|
+
T,
|
|
218
|
+
TCustomMetadata,
|
|
219
|
+
FieldPropsAlpha<TCustomMetadata>
|
|
220
|
+
> => {
|
|
204
221
|
return createFieldSchemaUnsafe(FieldKind.Optional, t, {
|
|
205
222
|
defaultProvider: defaultOptionalProvider,
|
|
206
223
|
...props,
|
|
@@ -213,8 +230,16 @@ export const schemaStaticsStable = {
|
|
|
213
230
|
>(
|
|
214
231
|
t: T,
|
|
215
232
|
props?: Omit<FieldPropsAlpha<TCustomMetadata>, "defaultProvider">,
|
|
216
|
-
): FieldSchemaAlphaUnsafe<
|
|
217
|
-
|
|
233
|
+
): FieldSchemaAlphaUnsafe<
|
|
234
|
+
FieldKind.Required,
|
|
235
|
+
T,
|
|
236
|
+
TCustomMetadata,
|
|
237
|
+
FieldPropsAlpha<TCustomMetadata>
|
|
238
|
+
> => {
|
|
239
|
+
return createFieldSchemaUnsafe(FieldKind.Required, t, {
|
|
240
|
+
defaultProvider: undefined,
|
|
241
|
+
...props,
|
|
242
|
+
});
|
|
218
243
|
},
|
|
219
244
|
} as const satisfies SchemaStatics;
|
|
220
245
|
|
|
@@ -225,14 +250,37 @@ export const schemaStatics = {
|
|
|
225
250
|
...schemaStaticsStable,
|
|
226
251
|
identifier: <const TCustomMetadata = unknown>(
|
|
227
252
|
props?: Omit<FieldProps<TCustomMetadata>, "defaultProvider">,
|
|
228
|
-
): FieldSchemaAlpha<
|
|
229
|
-
|
|
253
|
+
): FieldSchemaAlpha<
|
|
254
|
+
FieldKind.Identifier,
|
|
255
|
+
typeof stringSchema,
|
|
256
|
+
TCustomMetadata,
|
|
257
|
+
FieldPropsAlpha<TCustomMetadata>
|
|
258
|
+
> => {
|
|
259
|
+
return createFieldSchema(FieldKind.Identifier, stringSchema, {
|
|
260
|
+
defaultProvider: undefined,
|
|
261
|
+
...props,
|
|
262
|
+
});
|
|
230
263
|
},
|
|
231
264
|
} as const;
|
|
232
265
|
|
|
233
266
|
/**
|
|
234
267
|
* {@link Unenforced} version of {@link createFieldSchema}.
|
|
235
268
|
*/
|
|
269
|
+
function createFieldSchemaUnsafe<
|
|
270
|
+
Kind extends FieldKind,
|
|
271
|
+
Types extends System_Unsafe.ImplicitAllowedTypesUnsafe,
|
|
272
|
+
TCustomMetadata = unknown,
|
|
273
|
+
>(kind: Kind, allowedTypes: Types): FieldSchemaAlphaUnsafe<Kind, Types, TCustomMetadata>;
|
|
274
|
+
function createFieldSchemaUnsafe<
|
|
275
|
+
Kind extends FieldKind,
|
|
276
|
+
Types extends System_Unsafe.ImplicitAllowedTypesUnsafe,
|
|
277
|
+
TCustomMetadata = unknown,
|
|
278
|
+
TProps extends FieldProps<TCustomMetadata> = FieldProps<TCustomMetadata>,
|
|
279
|
+
>(
|
|
280
|
+
kind: Kind,
|
|
281
|
+
allowedTypes: Types,
|
|
282
|
+
props: TProps,
|
|
283
|
+
): FieldSchemaAlphaUnsafe<Kind, Types, TCustomMetadata, TProps>;
|
|
236
284
|
function createFieldSchemaUnsafe<
|
|
237
285
|
Kind extends FieldKind,
|
|
238
286
|
Types extends System_Unsafe.ImplicitAllowedTypesUnsafe,
|
|
@@ -241,11 +289,21 @@ function createFieldSchemaUnsafe<
|
|
|
241
289
|
kind: Kind,
|
|
242
290
|
allowedTypes: Types,
|
|
243
291
|
props?: FieldProps<TCustomMetadata>,
|
|
244
|
-
): FieldSchemaAlphaUnsafe<
|
|
292
|
+
): FieldSchemaAlphaUnsafe<
|
|
293
|
+
Kind,
|
|
294
|
+
Types,
|
|
295
|
+
TCustomMetadata,
|
|
296
|
+
FieldProps<TCustomMetadata> | undefined
|
|
297
|
+
> {
|
|
245
298
|
// At runtime, we still want this to be a FieldSchema instance, but we can't satisfy its extends clause, so just return it as an FieldSchemaUnsafe
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
299
|
+
const schema =
|
|
300
|
+
props === undefined
|
|
301
|
+
? createFieldSchema(kind, allowedTypes as ImplicitAllowedTypes & Types)
|
|
302
|
+
: createFieldSchema(kind, allowedTypes as ImplicitAllowedTypes & Types, props);
|
|
303
|
+
return schema as FieldSchemaAlphaUnsafe<
|
|
304
|
+
Kind,
|
|
305
|
+
Types,
|
|
306
|
+
TCustomMetadata,
|
|
307
|
+
FieldProps<TCustomMetadata> | undefined
|
|
308
|
+
>;
|
|
251
309
|
}
|
|
@@ -27,9 +27,11 @@ import type {
|
|
|
27
27
|
import type {
|
|
28
28
|
ApplyKind,
|
|
29
29
|
ApplyKindInput,
|
|
30
|
+
DefaultProvider,
|
|
30
31
|
FieldKind,
|
|
31
32
|
FieldSchema,
|
|
32
33
|
FieldSchemaAlpha,
|
|
34
|
+
FieldPropsAlpha,
|
|
33
35
|
} from "../fieldSchema.js";
|
|
34
36
|
import type { TreeArrayNode } from "../node-kinds/index.js";
|
|
35
37
|
import type {
|
|
@@ -465,7 +467,8 @@ export interface FieldSchemaAlphaUnsafe<
|
|
|
465
467
|
out Kind extends FieldKind,
|
|
466
468
|
out Types extends System_Unsafe.ImplicitAllowedTypesUnsafe,
|
|
467
469
|
out TCustomMetadata = unknown,
|
|
468
|
-
|
|
470
|
+
out TProps extends FieldPropsAlpha<TCustomMetadata> | undefined = undefined,
|
|
471
|
+
> extends FieldSchemaAlpha<Kind, any, TCustomMetadata, TProps>,
|
|
469
472
|
System_Unsafe.FieldSchemaUnsafe<Kind, Types, TCustomMetadata> {
|
|
470
473
|
/**
|
|
471
474
|
* {@inheritDoc FieldSchema.allowedTypes}
|
|
@@ -475,6 +478,51 @@ export interface FieldSchemaAlphaUnsafe<
|
|
|
475
478
|
|
|
476
479
|
/* eslint-enable @typescript-eslint/no-explicit-any */
|
|
477
480
|
|
|
481
|
+
/**
|
|
482
|
+
* {@link Unenforced} version of {@link FieldHasDefaultAlpha}.
|
|
483
|
+
* @remarks
|
|
484
|
+
* Do not use this type directly: it's only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
|
|
485
|
+
* @system @sealed @alpha
|
|
486
|
+
*/
|
|
487
|
+
export type FieldHasDefaultAlphaUnsafe<T extends System_Unsafe.ImplicitFieldSchemaUnsafe> =
|
|
488
|
+
T extends FieldSchemaAlphaUnsafe<
|
|
489
|
+
infer Kind,
|
|
490
|
+
System_Unsafe.ImplicitAllowedTypesUnsafe,
|
|
491
|
+
unknown,
|
|
492
|
+
infer TProps
|
|
493
|
+
>
|
|
494
|
+
? Kind extends FieldKind.Optional | FieldKind.Identifier
|
|
495
|
+
? true
|
|
496
|
+
: TProps extends { defaultProvider: DefaultProvider }
|
|
497
|
+
? true
|
|
498
|
+
: false
|
|
499
|
+
: System_Unsafe.FieldHasDefaultUnsafe<T>;
|
|
500
|
+
|
|
501
|
+
/**
|
|
502
|
+
* {@link Unenforced} version of {@link InsertableObjectFromSchemaRecordAlpha}.
|
|
503
|
+
* @see {@link System_Unsafe.InsertableObjectFromSchemaRecordUnsafe}
|
|
504
|
+
* @remarks
|
|
505
|
+
* Do not use this type directly: it's only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
|
|
506
|
+
* @system @alpha
|
|
507
|
+
*/
|
|
508
|
+
export type InsertableObjectFromSchemaRecordAlphaUnsafe<
|
|
509
|
+
T extends RestrictiveStringRecord<System_Unsafe.ImplicitFieldSchemaUnsafe>,
|
|
510
|
+
> = {
|
|
511
|
+
// Field does not have a known default, make it required:
|
|
512
|
+
readonly [Property in keyof T as FieldHasDefaultAlphaUnsafe<
|
|
513
|
+
T[Property & string]
|
|
514
|
+
> extends false
|
|
515
|
+
? Property
|
|
516
|
+
: never]: System_Unsafe.InsertableTreeFieldFromImplicitFieldUnsafe<T[Property & string]>;
|
|
517
|
+
} & {
|
|
518
|
+
// Field has a known default, make it optional:
|
|
519
|
+
readonly [Property in keyof T as FieldHasDefaultAlphaUnsafe<
|
|
520
|
+
T[Property & string]
|
|
521
|
+
> extends true
|
|
522
|
+
? Property
|
|
523
|
+
: never]?: System_Unsafe.InsertableTreeFieldFromImplicitFieldUnsafe<T[Property & string]>;
|
|
524
|
+
};
|
|
525
|
+
|
|
478
526
|
/**
|
|
479
527
|
* {@link Unenforced} version of {@link ArrayNodeCustomizableSchema}s.
|
|
480
528
|
* @remarks
|
|
@@ -268,6 +268,21 @@ export interface FieldSchemaMetadataAlpha<TCustomMetadata = unknown>
|
|
|
268
268
|
/**
|
|
269
269
|
* Package internal construction API.
|
|
270
270
|
*/
|
|
271
|
+
export function createFieldSchema<
|
|
272
|
+
Kind extends FieldKind,
|
|
273
|
+
Types extends ImplicitAllowedTypes,
|
|
274
|
+
TCustomMetadata = unknown,
|
|
275
|
+
>(kind: Kind, annotatedTypes: Types): FieldSchemaAlpha<Kind, Types, TCustomMetadata>;
|
|
276
|
+
export function createFieldSchema<
|
|
277
|
+
Kind extends FieldKind,
|
|
278
|
+
Types extends ImplicitAllowedTypes,
|
|
279
|
+
TCustomMetadata = unknown,
|
|
280
|
+
TProps extends FieldProps<TCustomMetadata> = FieldProps<TCustomMetadata>,
|
|
281
|
+
>(
|
|
282
|
+
kind: Kind,
|
|
283
|
+
annotatedTypes: Types,
|
|
284
|
+
props: TProps,
|
|
285
|
+
): FieldSchemaAlpha<Kind, Types, TCustomMetadata, TProps>;
|
|
271
286
|
export function createFieldSchema<
|
|
272
287
|
Kind extends FieldKind,
|
|
273
288
|
Types extends ImplicitAllowedTypes,
|
|
@@ -276,7 +291,7 @@ export function createFieldSchema<
|
|
|
276
291
|
kind: Kind,
|
|
277
292
|
annotatedTypes: Types,
|
|
278
293
|
props?: FieldProps<TCustomMetadata>,
|
|
279
|
-
): FieldSchemaAlpha<Kind, Types, TCustomMetadata> {
|
|
294
|
+
): FieldSchemaAlpha<Kind, Types, TCustomMetadata, FieldProps<TCustomMetadata> | undefined> {
|
|
280
295
|
return createFieldSchemaPrivate(kind, annotatedTypes, props);
|
|
281
296
|
}
|
|
282
297
|
|
|
@@ -291,7 +306,7 @@ let createFieldSchemaPrivate: <
|
|
|
291
306
|
kind: Kind,
|
|
292
307
|
annotatedTypes: Types,
|
|
293
308
|
props?: FieldProps<TCustomMetadata>,
|
|
294
|
-
) => FieldSchemaAlpha<Kind, Types, TCustomMetadata>;
|
|
309
|
+
) => FieldSchemaAlpha<Kind, Types, TCustomMetadata, FieldProps<TCustomMetadata> | undefined>;
|
|
295
310
|
|
|
296
311
|
/**
|
|
297
312
|
* All policy for a specific field,
|
|
@@ -384,11 +399,14 @@ export class FieldSchemaAlpha<
|
|
|
384
399
|
Kind extends FieldKind = FieldKind,
|
|
385
400
|
Types extends ImplicitAllowedTypes = ImplicitAllowedTypes,
|
|
386
401
|
TCustomMetadata = unknown,
|
|
402
|
+
TProps extends FieldPropsAlpha<TCustomMetadata> | undefined =
|
|
403
|
+
| FieldPropsAlpha<TCustomMetadata>
|
|
404
|
+
| undefined,
|
|
387
405
|
>
|
|
388
406
|
extends FieldSchema<Kind, Types, TCustomMetadata>
|
|
389
407
|
implements SimpleFieldSchema<SchemaType.View>
|
|
390
408
|
{
|
|
391
|
-
private readonly propsAlpha:
|
|
409
|
+
private readonly propsAlpha: TProps;
|
|
392
410
|
|
|
393
411
|
public get persistedMetadata(): JsonCompatibleReadOnlyObject | undefined {
|
|
394
412
|
return this.propsAlpha?.persistedMetadata;
|
|
@@ -403,7 +421,13 @@ export class FieldSchemaAlpha<
|
|
|
403
421
|
kind: Kind2,
|
|
404
422
|
annotatedAllowedTypes: Types2,
|
|
405
423
|
props?: FieldPropsAlpha<TCustomMetadata2>,
|
|
406
|
-
) =>
|
|
424
|
+
) =>
|
|
425
|
+
// TCustomMetadata2 requires type assertion due to limitations with dependent type parameters
|
|
426
|
+
new FieldSchemaAlpha(kind, annotatedAllowedTypes, props) as unknown as FieldSchemaAlpha<
|
|
427
|
+
Kind2,
|
|
428
|
+
Types2,
|
|
429
|
+
TCustomMetadata2
|
|
430
|
+
>;
|
|
407
431
|
}
|
|
408
432
|
|
|
409
433
|
/**
|
|
@@ -432,7 +456,7 @@ export class FieldSchemaAlpha<
|
|
|
432
456
|
|
|
433
457
|
const normalizedTypes = normalizeAllowedTypes(types);
|
|
434
458
|
this.allowedTypesFull = normalizedTypes;
|
|
435
|
-
this.propsAlpha = props;
|
|
459
|
+
this.propsAlpha = props as TProps;
|
|
436
460
|
}
|
|
437
461
|
}
|
|
438
462
|
|
package/src/simple-tree/index.ts
CHANGED
|
@@ -79,6 +79,8 @@ export {
|
|
|
79
79
|
SchemaFactoryBeta,
|
|
80
80
|
type SchemaStaticsBeta,
|
|
81
81
|
SchemaFactoryAlpha,
|
|
82
|
+
type SchemaStaticsAlpha,
|
|
83
|
+
type NodeProvider,
|
|
82
84
|
type ObjectSchemaOptionsAlpha,
|
|
83
85
|
type ObjectSchemaOptions,
|
|
84
86
|
type ScopedSchemaName,
|
|
@@ -139,6 +141,8 @@ export {
|
|
|
139
141
|
type AllowedTypesFullFromMixedUnsafe,
|
|
140
142
|
type UnannotateAllowedTypesListUnsafe,
|
|
141
143
|
type AnnotateAllowedTypesListUnsafe,
|
|
144
|
+
type FieldHasDefaultAlphaUnsafe,
|
|
145
|
+
type InsertableObjectFromSchemaRecordAlphaUnsafe,
|
|
142
146
|
type TreeViewAlpha,
|
|
143
147
|
type TreeViewBeta,
|
|
144
148
|
type TreeBranch,
|
|
@@ -197,6 +201,9 @@ export {
|
|
|
197
201
|
checkCompatibility,
|
|
198
202
|
eraseSchemaDetails,
|
|
199
203
|
eraseSchemaDetailsSubclassable,
|
|
204
|
+
type ErasedSchema,
|
|
205
|
+
type ErasedNode,
|
|
206
|
+
type ErasedSchemaSubclassable,
|
|
200
207
|
snapshotSchemaCompatibility,
|
|
201
208
|
type SnapshotFileSystem,
|
|
202
209
|
type SnapshotSchemaCompatibilityOptions,
|
|
@@ -255,9 +262,12 @@ export {
|
|
|
255
262
|
type TreeMapNode,
|
|
256
263
|
type MapNodeInsertableData,
|
|
257
264
|
type FieldHasDefault,
|
|
265
|
+
type FieldHasDefaultAlpha,
|
|
258
266
|
type InsertableObjectFromSchemaRecord,
|
|
267
|
+
type InsertableObjectFromSchemaRecordAlpha,
|
|
259
268
|
type ObjectFromSchemaRecord,
|
|
260
269
|
ObjectNodeSchema,
|
|
270
|
+
type ObjectNodeSchemaWorkaround,
|
|
261
271
|
type ObjectNodeSchemaPrivate,
|
|
262
272
|
objectSchema,
|
|
263
273
|
isObjectNodeSchema,
|
|
@@ -29,10 +29,13 @@ export {
|
|
|
29
29
|
|
|
30
30
|
export {
|
|
31
31
|
type FieldHasDefault,
|
|
32
|
+
type FieldHasDefaultAlpha,
|
|
32
33
|
type InsertableObjectFromSchemaRecord,
|
|
34
|
+
type InsertableObjectFromSchemaRecordAlpha,
|
|
33
35
|
isObjectNodeSchema,
|
|
34
36
|
type ObjectFromSchemaRecord,
|
|
35
37
|
ObjectNodeSchema,
|
|
38
|
+
type ObjectNodeSchemaWorkaround,
|
|
36
39
|
type ObjectNodeSchemaPrivate,
|
|
37
40
|
objectSchema,
|
|
38
41
|
setField,
|
|
@@ -5,7 +5,9 @@
|
|
|
5
5
|
|
|
6
6
|
export {
|
|
7
7
|
type FieldHasDefault,
|
|
8
|
+
type FieldHasDefaultAlpha,
|
|
8
9
|
type InsertableObjectFromSchemaRecord,
|
|
10
|
+
type InsertableObjectFromSchemaRecordAlpha,
|
|
9
11
|
type ObjectFromSchemaRecord,
|
|
10
12
|
objectSchema,
|
|
11
13
|
setField,
|
|
@@ -15,5 +17,6 @@ export {
|
|
|
15
17
|
export {
|
|
16
18
|
isObjectNodeSchema,
|
|
17
19
|
ObjectNodeSchema,
|
|
20
|
+
type ObjectNodeSchemaWorkaround,
|
|
18
21
|
type ObjectNodeSchemaPrivate,
|
|
19
22
|
} from "./objectNodeTypes.js";
|
|
@@ -70,6 +70,7 @@ import {
|
|
|
70
70
|
type ContextualFieldProvider,
|
|
71
71
|
extractFieldProvider,
|
|
72
72
|
isConstant,
|
|
73
|
+
type DefaultProvider,
|
|
73
74
|
} from "../../fieldSchema.js";
|
|
74
75
|
import { tryGetTreeNodeForField } from "../../getTreeNodeForField.js";
|
|
75
76
|
import { prepareForInsertion } from "../../prepareForInsertion.js";
|
|
@@ -99,8 +100,7 @@ import type {
|
|
|
99
100
|
*/
|
|
100
101
|
export type ObjectFromSchemaRecord<T extends RestrictiveStringRecord<ImplicitFieldSchema>> =
|
|
101
102
|
RestrictiveStringRecord<ImplicitFieldSchema> extends T
|
|
102
|
-
?
|
|
103
|
-
{}
|
|
103
|
+
? {}
|
|
104
104
|
: {
|
|
105
105
|
-readonly [Property in keyof T]: Property extends string
|
|
106
106
|
? TreeFieldFromImplicitField<T[Property]>
|
|
@@ -149,8 +149,11 @@ export type TreeObjectNode<
|
|
|
149
149
|
* @remarks Yields `false` when unknown.
|
|
150
150
|
*
|
|
151
151
|
* @privateRemarks
|
|
152
|
-
*
|
|
153
|
-
*
|
|
152
|
+
* This checks for:
|
|
153
|
+
* 1. Optional fields (which have an implicit undefined default)
|
|
154
|
+
* 2. Identifier fields (which have auto-generated defaults)
|
|
155
|
+
*
|
|
156
|
+
* Note that this cannot tell if required fields have defaults. Use `FieldHasDefaultAlpha` for alpha schemas if you need to check for required field defaults.
|
|
154
157
|
*
|
|
155
158
|
* @system @public
|
|
156
159
|
*/
|
|
@@ -160,6 +163,33 @@ export type FieldHasDefault<T extends ImplicitFieldSchema> = [T] extends [
|
|
|
160
163
|
? true
|
|
161
164
|
: false;
|
|
162
165
|
|
|
166
|
+
/**
|
|
167
|
+
* Type utility for determining if an implicit field schema is known to have a default value.
|
|
168
|
+
* Supports alpha field schemas with explicit default providers.
|
|
169
|
+
*
|
|
170
|
+
* @remarks Yields `false` when unknown.
|
|
171
|
+
*
|
|
172
|
+
* @privateRemarks
|
|
173
|
+
* This checks for:
|
|
174
|
+
* 1. Fields with explicit default providers (computed from the props type)
|
|
175
|
+
* 2. Optional fields (which have an implicit undefined default)
|
|
176
|
+
* 3. Identifier fields (which have auto-generated defaults)
|
|
177
|
+
*
|
|
178
|
+
* @system @alpha
|
|
179
|
+
*/
|
|
180
|
+
export type FieldHasDefaultAlpha<T extends ImplicitFieldSchema> =
|
|
181
|
+
// Extract Kind and TProps from FieldSchemaAlpha and compute whether it has a default
|
|
182
|
+
[T] extends [FieldSchemaAlpha<infer Kind, infer _Types, infer _Meta, infer TProps>]
|
|
183
|
+
? // Optional and Identifier kinds always have defaults
|
|
184
|
+
Kind extends FieldKind.Optional | FieldKind.Identifier
|
|
185
|
+
? true
|
|
186
|
+
: // Check if props has defaultProvider
|
|
187
|
+
TProps extends { defaultProvider: DefaultProvider }
|
|
188
|
+
? true
|
|
189
|
+
: false
|
|
190
|
+
: // Fallback to base FieldHasDefault for non-Alpha schemas
|
|
191
|
+
FieldHasDefault<T>;
|
|
192
|
+
|
|
163
193
|
/**
|
|
164
194
|
* Helper used to produce types for:
|
|
165
195
|
*
|
|
@@ -209,6 +239,35 @@ export type InsertableObjectFromSchemaRecord<
|
|
|
209
239
|
}
|
|
210
240
|
>;
|
|
211
241
|
|
|
242
|
+
/**
|
|
243
|
+
* Alpha version of InsertableObjectFromSchemaRecord that supports field defaults.
|
|
244
|
+
*
|
|
245
|
+
* @system @alpha
|
|
246
|
+
*/
|
|
247
|
+
export type InsertableObjectFromSchemaRecordAlpha<
|
|
248
|
+
T extends RestrictiveStringRecord<ImplicitFieldSchema>,
|
|
249
|
+
> =
|
|
250
|
+
RestrictiveStringRecord<ImplicitFieldSchema> extends T
|
|
251
|
+
? { arbitraryKey: "arbitraryValue" } extends T
|
|
252
|
+
? // {} case
|
|
253
|
+
Record<string, never>
|
|
254
|
+
: // RestrictiveStringRecord<ImplicitFieldSchema> case
|
|
255
|
+
never
|
|
256
|
+
: FlattenKeys<
|
|
257
|
+
{
|
|
258
|
+
readonly [Property in keyof T]?: InsertableTreeFieldFromImplicitField<
|
|
259
|
+
T[Property & string]
|
|
260
|
+
>;
|
|
261
|
+
} & {
|
|
262
|
+
// Field does not have a known default, make it required:
|
|
263
|
+
readonly [Property in keyof T as FieldHasDefaultAlpha<
|
|
264
|
+
T[Property & string]
|
|
265
|
+
> extends false
|
|
266
|
+
? Property
|
|
267
|
+
: never]: InsertableTreeFieldFromImplicitField<T[Property & string]>;
|
|
268
|
+
}
|
|
269
|
+
>;
|
|
270
|
+
|
|
212
271
|
/**
|
|
213
272
|
* Maps from simple field keys ("property" keys) to information about the field.
|
|
214
273
|
*
|
|
@@ -387,17 +446,16 @@ export class ObjectFieldSchema<
|
|
|
387
446
|
Kind extends FieldKind,
|
|
388
447
|
Types extends ImplicitAllowedTypes,
|
|
389
448
|
TCustomMetadata = unknown,
|
|
449
|
+
TProps extends FieldProps<TCustomMetadata> & {
|
|
450
|
+
readonly key: string;
|
|
451
|
+
} = FieldProps<TCustomMetadata> & { readonly key: string },
|
|
390
452
|
>
|
|
391
|
-
extends FieldSchemaAlpha<Kind, Types, TCustomMetadata>
|
|
453
|
+
extends FieldSchemaAlpha<Kind, Types, TCustomMetadata, TProps>
|
|
392
454
|
implements SimpleObjectFieldSchema
|
|
393
455
|
{
|
|
394
456
|
public readonly storedKey: string;
|
|
395
457
|
|
|
396
|
-
public constructor(
|
|
397
|
-
kind: Kind,
|
|
398
|
-
allowedTypes: Types,
|
|
399
|
-
props: FieldProps<TCustomMetadata> & { readonly key: string },
|
|
400
|
-
) {
|
|
458
|
+
public constructor(kind: Kind, allowedTypes: Types, props: TProps) {
|
|
401
459
|
super(kind, allowedTypes, props);
|
|
402
460
|
this.storedKey = props.key;
|
|
403
461
|
}
|
|
@@ -592,7 +650,7 @@ export function objectSchema<
|
|
|
592
650
|
}
|
|
593
651
|
type Output = typeof CustomObjectNode &
|
|
594
652
|
(new (
|
|
595
|
-
input:
|
|
653
|
+
input: InsertableObjectFromSchemaRecordAlpha<T> | InternalTreeNode,
|
|
596
654
|
) => TreeObjectNode<T, TName>);
|
|
597
655
|
return CustomObjectNode as Output;
|
|
598
656
|
}
|
|
@@ -21,9 +21,40 @@ import type {
|
|
|
21
21
|
import type {
|
|
22
22
|
TreeObjectNode,
|
|
23
23
|
SimpleKeyMap,
|
|
24
|
-
|
|
24
|
+
InsertableObjectFromSchemaRecordAlpha,
|
|
25
25
|
} from "./objectNode.js";
|
|
26
26
|
|
|
27
|
+
/**
|
|
28
|
+
* {@link (ObjectNodeSchema:interface)} with a workaround to avoid a specific known TypeScript issue which causes it to not be assignable to itself in some cases.
|
|
29
|
+
* @remarks
|
|
30
|
+
* If dealing with a schema whose inferred type includes this workaround (because it was produced by a schema factory API which uses it),
|
|
31
|
+
* if you need to explicitly state that type (for example when using {@link https://www.typescriptlang.org/tsconfig/#isolatedDeclarations | isolatedDeclarations}), it is best to keep this workaround.
|
|
32
|
+
* No other case should need to refer to this workaround type directly.
|
|
33
|
+
* See {@link ObjectNodeSchemaWorkaround.createFromInsertable} for details.
|
|
34
|
+
* @sealed
|
|
35
|
+
* @alpha
|
|
36
|
+
*/
|
|
37
|
+
export type ObjectNodeSchemaWorkaround<
|
|
38
|
+
TName extends string = string,
|
|
39
|
+
T extends
|
|
40
|
+
RestrictiveStringRecord<ImplicitFieldSchema> = RestrictiveStringRecord<ImplicitFieldSchema>,
|
|
41
|
+
ImplicitlyConstructable extends boolean = boolean,
|
|
42
|
+
TCustomMetadata = unknown,
|
|
43
|
+
> = ObjectNodeSchema<TName, T, ImplicitlyConstructable, TCustomMetadata> & {
|
|
44
|
+
/**
|
|
45
|
+
* Typing checking workaround: not for for actual use.
|
|
46
|
+
* @remarks
|
|
47
|
+
* This API collides with {@link TreeNodeSchemaCore.createFromInsertable} to disable a type checking optimization which produces different and undesired results.
|
|
48
|
+
* See {@link https://github.com/microsoft/TypeScript/issues/59049#issuecomment-2773459693} for more details.
|
|
49
|
+
*
|
|
50
|
+
* The specific issue here is non-empty POJO mode object schema not being assignable to `ObjectNodeSchema`,
|
|
51
|
+
* @privateRemarks
|
|
52
|
+
* See the above link and the tests in objectNode.spec.ts which reference it.
|
|
53
|
+
* @system
|
|
54
|
+
*/
|
|
55
|
+
readonly createFromInsertable: unknown;
|
|
56
|
+
};
|
|
57
|
+
|
|
27
58
|
/**
|
|
28
59
|
* A schema for {@link TreeObjectNode}s.
|
|
29
60
|
* @sealed
|
|
@@ -39,7 +70,7 @@ export interface ObjectNodeSchema<
|
|
|
39
70
|
TName,
|
|
40
71
|
NodeKind.Object,
|
|
41
72
|
TreeObjectNode<T, TName>,
|
|
42
|
-
|
|
73
|
+
object & InsertableObjectFromSchemaRecordAlpha<T>,
|
|
43
74
|
ImplicitlyConstructable,
|
|
44
75
|
T,
|
|
45
76
|
never,
|