@fluidframework/tree 2.4.0 → 2.5.0-302463
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/.vscode/settings.json +11 -1
- package/api-report/tree.alpha.api.md +148 -51
- package/api-report/tree.beta.api.md +83 -38
- package/api-report/tree.legacy.alpha.api.md +83 -38
- package/api-report/tree.legacy.public.api.md +83 -38
- package/api-report/tree.public.api.md +83 -38
- package/dist/alpha.d.ts +17 -2
- package/dist/beta.d.ts +6 -0
- package/dist/events/interop.d.ts +1 -7
- package/dist/events/interop.d.ts.map +1 -1
- package/dist/events/interop.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/basicChunk.js +1 -1
- package/dist/feature-libraries/chunked-forest/basicChunk.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/uniformChunk.js +1 -1
- package/dist/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
- package/dist/feature-libraries/object-forest/objectForest.js +1 -1
- package/dist/feature-libraries/object-forest/objectForest.js.map +1 -1
- package/dist/feature-libraries/treeCursorUtils.js +2 -2
- package/dist/feature-libraries/treeCursorUtils.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -2
- package/dist/index.js.map +1 -1
- package/dist/internalTypes.d.ts +1 -1
- package/dist/internalTypes.d.ts.map +1 -1
- package/dist/internalTypes.js.map +1 -1
- package/dist/legacy.d.ts +6 -0
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.d.ts.map +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/public.d.ts +6 -0
- package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/dist/shared-tree/schematizingTreeView.js.map +1 -1
- package/dist/shared-tree/sharedTree.d.ts +1 -1
- package/dist/shared-tree/sharedTree.d.ts.map +1 -1
- package/dist/shared-tree/sharedTree.js.map +1 -1
- package/dist/shared-tree/treeApi.d.ts +6 -6
- package/dist/shared-tree/treeApi.d.ts.map +1 -1
- package/dist/shared-tree/treeApi.js.map +1 -1
- package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
- package/dist/shared-tree/treeCheckout.js +2 -0
- package/dist/shared-tree/treeCheckout.js.map +1 -1
- package/dist/shared-tree-core/editManager.d.ts.map +1 -1
- package/dist/shared-tree-core/editManager.js +12 -7
- package/dist/shared-tree-core/editManager.js.map +1 -1
- package/dist/simple-tree/api/create.d.ts +3 -3
- package/dist/simple-tree/api/create.d.ts.map +1 -1
- package/dist/simple-tree/api/create.js.map +1 -1
- package/dist/simple-tree/api/customTree.js +2 -2
- package/dist/simple-tree/api/customTree.js.map +1 -1
- package/dist/simple-tree/api/index.d.ts +3 -3
- package/dist/simple-tree/api/index.d.ts.map +1 -1
- package/dist/simple-tree/api/index.js +1 -2
- package/dist/simple-tree/api/index.js.map +1 -1
- package/dist/simple-tree/api/schemaCreationUtilities.d.ts +33 -25
- package/dist/simple-tree/api/schemaCreationUtilities.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaCreationUtilities.js +31 -21
- package/dist/simple-tree/api/schemaCreationUtilities.js.map +1 -1
- package/dist/simple-tree/api/schemaFactory.d.ts +5 -1
- package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactory.js +4 -0
- package/dist/simple-tree/api/schemaFactory.js.map +1 -1
- package/dist/simple-tree/api/simpleSchemaToJsonSchema.js +3 -3
- package/dist/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
- package/dist/simple-tree/api/tree.d.ts +13 -4
- package/dist/simple-tree/api/tree.d.ts.map +1 -1
- package/dist/simple-tree/api/tree.js.map +1 -1
- package/dist/simple-tree/api/treeApiBeta.d.ts.map +1 -1
- package/dist/simple-tree/api/treeApiBeta.js.map +1 -1
- package/dist/simple-tree/api/typesUnsafe.d.ts +69 -17
- 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/arrayNode.d.ts +14 -3
- package/dist/simple-tree/arrayNode.d.ts.map +1 -1
- package/dist/simple-tree/arrayNode.js.map +1 -1
- package/dist/simple-tree/core/treeNodeSchema.d.ts +10 -6
- package/dist/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
- package/dist/simple-tree/core/treeNodeSchema.js.map +1 -1
- package/dist/simple-tree/core/withType.d.ts +3 -1
- package/dist/simple-tree/core/withType.d.ts.map +1 -1
- package/dist/simple-tree/core/withType.js.map +1 -1
- package/dist/simple-tree/index.d.ts +4 -4
- package/dist/simple-tree/index.d.ts.map +1 -1
- package/dist/simple-tree/index.js +1 -2
- package/dist/simple-tree/index.js.map +1 -1
- package/dist/simple-tree/mapNode.d.ts.map +1 -1
- package/dist/simple-tree/mapNode.js +3 -0
- package/dist/simple-tree/mapNode.js.map +1 -1
- package/dist/simple-tree/objectNode.d.ts +4 -2
- package/dist/simple-tree/objectNode.d.ts.map +1 -1
- package/dist/simple-tree/objectNode.js.map +1 -1
- package/dist/simple-tree/schemaTypes.d.ts +168 -14
- package/dist/simple-tree/schemaTypes.d.ts.map +1 -1
- package/dist/simple-tree/schemaTypes.js +6 -1
- package/dist/simple-tree/schemaTypes.js.map +1 -1
- package/dist/simple-tree/toMapTree.d.ts +4 -2
- package/dist/simple-tree/toMapTree.d.ts.map +1 -1
- package/dist/simple-tree/toMapTree.js.map +1 -1
- package/dist/util/index.d.ts +2 -1
- package/dist/util/index.d.ts.map +1 -1
- package/dist/util/index.js +3 -1
- package/dist/util/index.js.map +1 -1
- package/dist/util/typeUtils.d.ts +61 -0
- package/dist/util/typeUtils.d.ts.map +1 -1
- package/dist/util/typeUtils.js +27 -0
- package/dist/util/typeUtils.js.map +1 -1
- package/lib/alpha.d.ts +17 -2
- package/lib/beta.d.ts +6 -0
- package/lib/events/interop.d.ts +1 -7
- package/lib/events/interop.d.ts.map +1 -1
- package/lib/events/interop.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/basicChunk.js +1 -1
- package/lib/feature-libraries/chunked-forest/basicChunk.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/uniformChunk.js +1 -1
- package/lib/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
- package/lib/feature-libraries/object-forest/objectForest.js +1 -1
- package/lib/feature-libraries/object-forest/objectForest.js.map +1 -1
- package/lib/feature-libraries/treeCursorUtils.js +2 -2
- package/lib/feature-libraries/treeCursorUtils.js.map +1 -1
- package/lib/index.d.ts +2 -2
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/internalTypes.d.ts +1 -1
- package/lib/internalTypes.d.ts.map +1 -1
- package/lib/internalTypes.js.map +1 -1
- package/lib/legacy.d.ts +6 -0
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.d.ts.map +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/public.d.ts +6 -0
- package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/lib/shared-tree/schematizingTreeView.js.map +1 -1
- package/lib/shared-tree/sharedTree.d.ts +1 -1
- package/lib/shared-tree/sharedTree.d.ts.map +1 -1
- package/lib/shared-tree/sharedTree.js.map +1 -1
- package/lib/shared-tree/treeApi.d.ts +6 -6
- package/lib/shared-tree/treeApi.d.ts.map +1 -1
- package/lib/shared-tree/treeApi.js.map +1 -1
- package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
- package/lib/shared-tree/treeCheckout.js +2 -0
- package/lib/shared-tree/treeCheckout.js.map +1 -1
- package/lib/shared-tree-core/editManager.d.ts.map +1 -1
- package/lib/shared-tree-core/editManager.js +12 -7
- package/lib/shared-tree-core/editManager.js.map +1 -1
- package/lib/simple-tree/api/create.d.ts +3 -3
- package/lib/simple-tree/api/create.d.ts.map +1 -1
- package/lib/simple-tree/api/create.js.map +1 -1
- package/lib/simple-tree/api/customTree.js +2 -2
- package/lib/simple-tree/api/customTree.js.map +1 -1
- package/lib/simple-tree/api/index.d.ts +3 -3
- 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/schemaCreationUtilities.d.ts +33 -25
- package/lib/simple-tree/api/schemaCreationUtilities.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaCreationUtilities.js +30 -19
- package/lib/simple-tree/api/schemaCreationUtilities.js.map +1 -1
- package/lib/simple-tree/api/schemaFactory.d.ts +5 -1
- package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactory.js +4 -0
- package/lib/simple-tree/api/schemaFactory.js.map +1 -1
- package/lib/simple-tree/api/simpleSchemaToJsonSchema.js +3 -3
- package/lib/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
- package/lib/simple-tree/api/tree.d.ts +13 -4
- package/lib/simple-tree/api/tree.d.ts.map +1 -1
- package/lib/simple-tree/api/tree.js.map +1 -1
- package/lib/simple-tree/api/treeApiBeta.d.ts.map +1 -1
- package/lib/simple-tree/api/treeApiBeta.js.map +1 -1
- package/lib/simple-tree/api/typesUnsafe.d.ts +69 -17
- 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/arrayNode.d.ts +14 -3
- package/lib/simple-tree/arrayNode.d.ts.map +1 -1
- package/lib/simple-tree/arrayNode.js.map +1 -1
- package/lib/simple-tree/core/treeNodeSchema.d.ts +10 -6
- package/lib/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
- package/lib/simple-tree/core/treeNodeSchema.js.map +1 -1
- package/lib/simple-tree/core/withType.d.ts +3 -1
- package/lib/simple-tree/core/withType.d.ts.map +1 -1
- package/lib/simple-tree/core/withType.js.map +1 -1
- package/lib/simple-tree/index.d.ts +4 -4
- package/lib/simple-tree/index.d.ts.map +1 -1
- package/lib/simple-tree/index.js +2 -2
- package/lib/simple-tree/index.js.map +1 -1
- package/lib/simple-tree/mapNode.d.ts.map +1 -1
- package/lib/simple-tree/mapNode.js +3 -0
- package/lib/simple-tree/mapNode.js.map +1 -1
- package/lib/simple-tree/objectNode.d.ts +4 -2
- package/lib/simple-tree/objectNode.d.ts.map +1 -1
- package/lib/simple-tree/objectNode.js.map +1 -1
- package/lib/simple-tree/schemaTypes.d.ts +168 -14
- package/lib/simple-tree/schemaTypes.d.ts.map +1 -1
- package/lib/simple-tree/schemaTypes.js +6 -1
- package/lib/simple-tree/schemaTypes.js.map +1 -1
- package/lib/simple-tree/toMapTree.d.ts +4 -2
- package/lib/simple-tree/toMapTree.d.ts.map +1 -1
- package/lib/simple-tree/toMapTree.js.map +1 -1
- package/lib/util/index.d.ts +2 -1
- package/lib/util/index.d.ts.map +1 -1
- package/lib/util/index.js +1 -0
- package/lib/util/index.js.map +1 -1
- package/lib/util/typeUtils.d.ts +61 -0
- package/lib/util/typeUtils.d.ts.map +1 -1
- package/lib/util/typeUtils.js +25 -1
- package/lib/util/typeUtils.js.map +1 -1
- package/package.json +48 -32
- package/src/events/interop.ts +1 -12
- package/src/feature-libraries/chunked-forest/basicChunk.ts +1 -1
- package/src/feature-libraries/chunked-forest/uniformChunk.ts +1 -1
- package/src/feature-libraries/object-forest/objectForest.ts +1 -1
- package/src/feature-libraries/treeCursorUtils.ts +2 -2
- package/src/index.ts +16 -1
- package/src/internalTypes.ts +4 -0
- package/src/packageVersion.ts +1 -1
- package/src/shared-tree/schematizingTreeView.ts +6 -2
- package/src/shared-tree/sharedTree.ts +4 -2
- package/src/shared-tree/treeApi.ts +19 -9
- package/src/shared-tree/treeCheckout.ts +2 -0
- package/src/shared-tree-core/editManager.ts +16 -7
- package/src/simple-tree/api/create.ts +12 -7
- package/src/simple-tree/api/customTree.ts +2 -2
- package/src/simple-tree/api/index.ts +6 -1
- package/src/simple-tree/api/schemaCreationUtilities.ts +58 -35
- package/src/simple-tree/api/schemaFactory.ts +4 -0
- package/src/simple-tree/api/simpleSchemaToJsonSchema.ts +3 -3
- package/src/simple-tree/api/tree.ts +27 -4
- package/src/simple-tree/api/treeApiBeta.ts +6 -2
- package/src/simple-tree/api/typesUnsafe.ts +126 -30
- package/src/simple-tree/arrayNode.ts +34 -14
- package/src/simple-tree/core/treeNodeSchema.ts +11 -6
- package/src/simple-tree/core/withType.ts +10 -1
- package/src/simple-tree/index.ts +19 -2
- package/src/simple-tree/mapNode.ts +6 -3
- package/src/simple-tree/objectNode.ts +5 -3
- package/src/simple-tree/schemaTypes.ts +215 -23
- package/src/simple-tree/toMapTree.ts +4 -1
- package/src/util/index.ts +6 -0
- package/src/util/typeUtils.ts +87 -0
|
@@ -13,8 +13,10 @@ import type {
|
|
|
13
13
|
InternalTreeNode,
|
|
14
14
|
NodeKind,
|
|
15
15
|
TreeNode,
|
|
16
|
+
TreeNodeSchema,
|
|
16
17
|
TreeNodeSchemaClass,
|
|
17
18
|
} from "../core/index.js";
|
|
19
|
+
import type { UnionToTuple } from "../../util/index.js";
|
|
18
20
|
|
|
19
21
|
/*
|
|
20
22
|
* This file does two things:
|
|
@@ -40,7 +42,7 @@ export function singletonSchema<TScope extends string, TName extends string | nu
|
|
|
40
42
|
name: TName,
|
|
41
43
|
) {
|
|
42
44
|
class SingletonSchema extends factory.object(name, {}) {
|
|
43
|
-
public constructor(data?: InternalTreeNode) {
|
|
45
|
+
public constructor(data?: InternalTreeNode | Record<string, never>) {
|
|
44
46
|
super(data ?? {});
|
|
45
47
|
}
|
|
46
48
|
public get value(): TName {
|
|
@@ -48,7 +50,7 @@ export function singletonSchema<TScope extends string, TName extends string | nu
|
|
|
48
50
|
}
|
|
49
51
|
}
|
|
50
52
|
|
|
51
|
-
type
|
|
53
|
+
type SingletonNodeType = TreeNode & { readonly value: TName };
|
|
52
54
|
|
|
53
55
|
// Returning SingletonSchema without a type conversion results in TypeScript generating something like `readonly "__#124291@#brand": unknown;`
|
|
54
56
|
// for the private brand field of TreeNode.
|
|
@@ -58,11 +60,13 @@ export function singletonSchema<TScope extends string, TName extends string | nu
|
|
|
58
60
|
const toReturn: TreeNodeSchemaClass<
|
|
59
61
|
ScopedSchemaName<TScope, TName>,
|
|
60
62
|
NodeKind.Object,
|
|
61
|
-
|
|
62
|
-
never
|
|
63
|
+
SingletonNodeType,
|
|
64
|
+
Record<string, never>,
|
|
63
65
|
true
|
|
64
66
|
> &
|
|
65
|
-
(new (
|
|
67
|
+
(new (
|
|
68
|
+
data?: InternalTreeNode | Record<string, never>,
|
|
69
|
+
) => SingletonNodeType) = SingletonSchema;
|
|
66
70
|
|
|
67
71
|
return toReturn;
|
|
68
72
|
}
|
|
@@ -84,15 +88,14 @@ export function singletonSchema<TScope extends string, TName extends string | nu
|
|
|
84
88
|
* // Define the schema for each member of the enum using a nested scope to group them together.
|
|
85
89
|
* const ModeNodes = adaptEnum(new SchemaFactory(`${schemaFactory.scope}.Mode`), Mode);
|
|
86
90
|
* // Defined the types of the nodes which correspond to this the schema.
|
|
87
|
-
* type ModeNodes = NodeFromSchema<(typeof ModeNodes)[
|
|
91
|
+
* type ModeNodes = NodeFromSchema<(typeof ModeNodes.schema)[number]>;
|
|
88
92
|
* // An example schema which has an enum as a child.
|
|
89
93
|
* class Parent extends schemaFactory.object("Parent", {
|
|
90
|
-
* //
|
|
91
|
-
*
|
|
92
|
-
* mode: typedObjectValues(ModeNodes),
|
|
94
|
+
* // adaptEnum's return value has a ".schema" property can be use as an `AllowedTypes` array allowing any of the members of the enum.
|
|
95
|
+
* mode: ModeNodes.schema,
|
|
93
96
|
* }) {}
|
|
94
97
|
*
|
|
95
|
-
* // Example usage of enum
|
|
98
|
+
* // Example usage of enum based nodes, showing what type to use and that `.value` can be used to read out the enum value.
|
|
96
99
|
* function getValue(node: ModeNodes): Mode {
|
|
97
100
|
* return node.value;
|
|
98
101
|
* }
|
|
@@ -131,35 +134,36 @@ export function adaptEnum<
|
|
|
131
134
|
typeof singletonSchema<TScope, TEnum[Property]>
|
|
132
135
|
>;
|
|
133
136
|
};
|
|
137
|
+
|
|
138
|
+
type SchemaArray = UnionToTuple<TOut[keyof TEnum]>;
|
|
139
|
+
const schemaArray: TreeNodeSchema[] = [];
|
|
140
|
+
|
|
134
141
|
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
|
135
142
|
const factoryOut = <TValue extends Values>(value: TValue) => {
|
|
136
143
|
return new out[inverse.get(value) ?? fail("missing enum value")]() as NodeFromSchema<
|
|
137
144
|
ReturnType<typeof singletonSchema<TScope, TValue>>
|
|
138
145
|
>;
|
|
139
146
|
};
|
|
140
|
-
const out = factoryOut as typeof factoryOut & TOut;
|
|
147
|
+
const out = factoryOut as typeof factoryOut & TOut & { readonly schema: SchemaArray };
|
|
141
148
|
for (const [key, value] of Object.entries(members)) {
|
|
149
|
+
const schema = singletonSchema(factory, value);
|
|
150
|
+
schemaArray.push(schema);
|
|
142
151
|
Object.defineProperty(out, key, {
|
|
143
152
|
enumerable: true,
|
|
144
153
|
configurable: false,
|
|
145
154
|
writable: false,
|
|
146
|
-
value:
|
|
155
|
+
value: schema,
|
|
147
156
|
});
|
|
148
157
|
}
|
|
149
158
|
|
|
150
|
-
|
|
151
|
-
|
|
159
|
+
Object.defineProperty(out, "schema", {
|
|
160
|
+
enumerable: true,
|
|
161
|
+
configurable: false,
|
|
162
|
+
writable: false,
|
|
163
|
+
value: schemaArray,
|
|
164
|
+
});
|
|
152
165
|
|
|
153
|
-
|
|
154
|
-
* `Object.values`, but with more specific types.
|
|
155
|
-
* @remarks
|
|
156
|
-
* Useful with collections of schema, like those returned by {@link adaptEnum} or {@link enumFromStrings}.
|
|
157
|
-
* @alpha
|
|
158
|
-
*/
|
|
159
|
-
export function typedObjectValues<TKey extends string, TValues>(
|
|
160
|
-
object: Record<TKey, TValues>,
|
|
161
|
-
): TValues[] {
|
|
162
|
-
return Object.values(object);
|
|
166
|
+
return out;
|
|
163
167
|
}
|
|
164
168
|
|
|
165
169
|
/**
|
|
@@ -171,44 +175,63 @@ export function typedObjectValues<TKey extends string, TValues>(
|
|
|
171
175
|
* The produced nodes use the provided strings as their `name`, and don't store any data beyond that.
|
|
172
176
|
* @example
|
|
173
177
|
* ```typescript
|
|
178
|
+
* const schemaFactory = new SchemaFactory("com.myApp");
|
|
174
179
|
* const Mode = enumFromStrings(schemaFactory, ["Fun", "Cool"]);
|
|
175
|
-
* type Mode = NodeFromSchema<(typeof Mode)[
|
|
180
|
+
* type Mode = NodeFromSchema<(typeof Mode.schema)[number]>;
|
|
176
181
|
* const nodeFromString: Mode = Mode("Fun");
|
|
177
182
|
* const nodeFromSchema: Mode = new Mode.Fun();
|
|
178
|
-
* const nameFromNode = nodeFromSchema.value;
|
|
179
183
|
*
|
|
180
|
-
*
|
|
184
|
+
* // Schema nodes have a strongly typed `.value` property.
|
|
185
|
+
* const nameFromNode: "Fun" | "Cool" = nodeFromSchema.value;
|
|
186
|
+
*
|
|
187
|
+
* class Parent extends schemaFactory.object("Parent", { mode: Mode.schema }) {}
|
|
181
188
|
* ```
|
|
182
189
|
* @see {@link adaptEnum} for a similar function that works on enums instead of arrays of strings.
|
|
183
190
|
* @alpha
|
|
184
191
|
*/
|
|
185
192
|
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
|
186
|
-
export function enumFromStrings<
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
) {
|
|
193
|
+
export function enumFromStrings<
|
|
194
|
+
TScope extends string,
|
|
195
|
+
const Members extends readonly string[],
|
|
196
|
+
>(factory: SchemaFactory<TScope>, members: Members) {
|
|
190
197
|
const names = new Set(members);
|
|
191
198
|
if (names.size !== members.length) {
|
|
192
199
|
throw new UsageError("All members of enums must have distinct names");
|
|
193
200
|
}
|
|
194
201
|
|
|
195
|
-
type TOut = Record<
|
|
202
|
+
type TOut = Record<
|
|
203
|
+
Members[number],
|
|
204
|
+
ReturnType<typeof singletonSchema<TScope, Members[number]>>
|
|
205
|
+
>;
|
|
196
206
|
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
|
197
|
-
const factoryOut = <TValue extends Members>(value: TValue) => {
|
|
207
|
+
const factoryOut = <TValue extends Members[number]>(value: TValue) => {
|
|
198
208
|
return new out[value]() as NodeFromSchema<
|
|
199
209
|
ReturnType<typeof singletonSchema<TScope, TValue>>
|
|
200
210
|
>;
|
|
201
211
|
};
|
|
202
|
-
|
|
212
|
+
|
|
213
|
+
type SchemaArray = UnionToTuple<TOut[Members[number]]>;
|
|
214
|
+
const schemaArray: TreeNodeSchema[] = [];
|
|
215
|
+
|
|
216
|
+
const out = factoryOut as typeof factoryOut & TOut & { readonly schema: SchemaArray };
|
|
203
217
|
for (const name of members) {
|
|
218
|
+
const schema = singletonSchema(factory, name);
|
|
219
|
+
schemaArray.push(schema);
|
|
204
220
|
Object.defineProperty(out, name, {
|
|
205
221
|
enumerable: true,
|
|
206
222
|
configurable: false,
|
|
207
223
|
writable: false,
|
|
208
|
-
value:
|
|
224
|
+
value: schema,
|
|
209
225
|
});
|
|
210
226
|
}
|
|
211
227
|
|
|
228
|
+
Object.defineProperty(out, "schema", {
|
|
229
|
+
enumerable: true,
|
|
230
|
+
configurable: false,
|
|
231
|
+
writable: false,
|
|
232
|
+
value: schemaArray,
|
|
233
|
+
});
|
|
234
|
+
|
|
212
235
|
return out;
|
|
213
236
|
}
|
|
214
237
|
|
|
@@ -120,6 +120,10 @@ export type ScopedSchemaName<
|
|
|
120
120
|
* Typically this is just `string` but it is also possible to use `string` or `number` based enums if you prefer to identify your types that way.
|
|
121
121
|
*
|
|
122
122
|
* @remarks
|
|
123
|
+
* For details related to inputting data constrained by schema (including via assignment), and how non-exact schema types are handled in general refer to {@link Input}.
|
|
124
|
+
* For information about recursive schema support, see methods postfixed with "recursive" and {@link ValidateRecursiveSchema}.
|
|
125
|
+
* To apply schema defined with this factory to a tree, see {@link ViewableTree.viewWith} and {@link TreeViewConfiguration}.
|
|
126
|
+
*
|
|
123
127
|
* All schema produced by this factory get a {@link TreeNodeSchemaCore.identifier|unique identifier} by combining the {@link SchemaFactory.scope} with the schema's `Name`.
|
|
124
128
|
* The `Name` part may be explicitly provided as a parameter, or inferred as a structural combination of the provided types.
|
|
125
129
|
* The APIs which use this second approach, structural naming, also deduplicate all equivalent calls.
|
|
@@ -97,7 +97,7 @@ function convertArrayNodeSchema(schema: SimpleArrayNodeSchema): JsonArrayNodeSch
|
|
|
97
97
|
});
|
|
98
98
|
|
|
99
99
|
const items: JsonFieldSchema =
|
|
100
|
-
allowedTypes.length === 1 ? allowedTypes[0] ?? oob() : { anyOf: allowedTypes };
|
|
100
|
+
allowedTypes.length === 1 ? (allowedTypes[0] ?? oob()) : { anyOf: allowedTypes };
|
|
101
101
|
|
|
102
102
|
return {
|
|
103
103
|
type: "array",
|
|
@@ -144,7 +144,7 @@ function convertObjectNodeSchema(schema: SimpleObjectNodeSchema): JsonObjectNode
|
|
|
144
144
|
|
|
145
145
|
const output: Mutable<JsonFieldSchema> =
|
|
146
146
|
allowedTypes.length === 1
|
|
147
|
-
? allowedTypes[0] ?? oob()
|
|
147
|
+
? (allowedTypes[0] ?? oob())
|
|
148
148
|
: {
|
|
149
149
|
anyOf: allowedTypes,
|
|
150
150
|
};
|
|
@@ -180,7 +180,7 @@ function convertMapNodeSchema(schema: SimpleMapNodeSchema): JsonMapNodeSchema {
|
|
|
180
180
|
patternProperties: {
|
|
181
181
|
"^.*$":
|
|
182
182
|
allowedTypes.length === 1
|
|
183
|
-
? allowedTypes[0] ?? oob()
|
|
183
|
+
? (allowedTypes[0] ?? oob())
|
|
184
184
|
: {
|
|
185
185
|
anyOf: allowedTypes,
|
|
186
186
|
},
|
|
@@ -11,11 +11,14 @@ import type { Listenable } from "../../events/index.js";
|
|
|
11
11
|
|
|
12
12
|
import {
|
|
13
13
|
type ImplicitFieldSchema,
|
|
14
|
+
type InsertableField,
|
|
14
15
|
type InsertableTreeFieldFromImplicitField,
|
|
15
16
|
type TreeFieldFromImplicitField,
|
|
17
|
+
type TreeLeafValue,
|
|
18
|
+
type UnsafeUnknownSchema,
|
|
16
19
|
FieldKind,
|
|
17
20
|
} from "../schemaTypes.js";
|
|
18
|
-
import { NodeKind, type TreeNodeSchema } from "../core/index.js";
|
|
21
|
+
import { NodeKind, type TreeNode, type TreeNodeSchema } from "../core/index.js";
|
|
19
22
|
import { toStoredSchema } from "../toFlexSchema.js";
|
|
20
23
|
import { LeafNodeSchema } from "../leafNodeSchema.js";
|
|
21
24
|
import { assert } from "@fluidframework/core-utils/internal";
|
|
@@ -190,8 +193,9 @@ export interface ITreeViewConfiguration<
|
|
|
190
193
|
* Configuration for {@link ViewableTree.viewWith}.
|
|
191
194
|
* @sealed @public
|
|
192
195
|
*/
|
|
193
|
-
export class TreeViewConfiguration<
|
|
194
|
-
|
|
196
|
+
export class TreeViewConfiguration<
|
|
197
|
+
const TSchema extends ImplicitFieldSchema = ImplicitFieldSchema,
|
|
198
|
+
> implements Required<ITreeViewConfiguration<TSchema>>
|
|
195
199
|
{
|
|
196
200
|
protected _typeCheck!: MakeNominal;
|
|
197
201
|
|
|
@@ -363,7 +367,7 @@ export function checkUnion(union: Iterable<TreeNodeSchema>, errors: string[]): v
|
|
|
363
367
|
* Thus this design was chosen at the risk of apps blindly accessing `root` then breaking unexpectedly when the document is incompatible.
|
|
364
368
|
* @sealed @public
|
|
365
369
|
*/
|
|
366
|
-
export interface TreeView<TSchema extends ImplicitFieldSchema> extends IDisposable {
|
|
370
|
+
export interface TreeView<in out TSchema extends ImplicitFieldSchema> extends IDisposable {
|
|
367
371
|
/**
|
|
368
372
|
* The current root of the tree.
|
|
369
373
|
*
|
|
@@ -424,6 +428,25 @@ export interface TreeView<TSchema extends ImplicitFieldSchema> extends IDisposab
|
|
|
424
428
|
readonly schema: TSchema;
|
|
425
429
|
}
|
|
426
430
|
|
|
431
|
+
/**
|
|
432
|
+
* {@link TreeView} with proposed changes to the schema aware typing to allow use with `UnsafeUnknownSchema`.
|
|
433
|
+
* @alpha
|
|
434
|
+
*/
|
|
435
|
+
export interface TreeViewAlpha<
|
|
436
|
+
in out TSchema extends ImplicitFieldSchema | UnsafeUnknownSchema,
|
|
437
|
+
> extends Omit<
|
|
438
|
+
TreeView<TSchema extends ImplicitFieldSchema ? TSchema : ImplicitFieldSchema>,
|
|
439
|
+
"root" | "initialize"
|
|
440
|
+
> {
|
|
441
|
+
get root(): TSchema extends ImplicitFieldSchema
|
|
442
|
+
? TreeFieldFromImplicitField<TSchema>
|
|
443
|
+
: TreeLeafValue | TreeNode;
|
|
444
|
+
|
|
445
|
+
set root(newRoot: InsertableField<TSchema>);
|
|
446
|
+
|
|
447
|
+
initialize(content: InsertableField<TSchema>): void;
|
|
448
|
+
}
|
|
449
|
+
|
|
427
450
|
/**
|
|
428
451
|
* Information about a view schema's compatibility with the document's stored schema.
|
|
429
452
|
*
|
|
@@ -12,7 +12,11 @@ import {
|
|
|
12
12
|
type Unhydrated,
|
|
13
13
|
type WithType,
|
|
14
14
|
} from "../core/index.js";
|
|
15
|
-
import type {
|
|
15
|
+
import type {
|
|
16
|
+
ImplicitFieldSchema,
|
|
17
|
+
TreeFieldFromImplicitField,
|
|
18
|
+
UnsafeUnknownSchema,
|
|
19
|
+
} from "../schemaTypes.js";
|
|
16
20
|
import { treeNodeApi } from "./treeNodeApi.js";
|
|
17
21
|
import { createFromCursor, cursorFromInsertable } from "./create.js";
|
|
18
22
|
import type { ITreeCursorSynchronous } from "../../core/index.js";
|
|
@@ -145,7 +149,7 @@ export const TreeBeta: {
|
|
|
145
149
|
if (!kernel.isHydrated()) {
|
|
146
150
|
return createFromCursor(
|
|
147
151
|
kernel.schema,
|
|
148
|
-
cursorFromInsertable(kernel.schema, node),
|
|
152
|
+
cursorFromInsertable<UnsafeUnknownSchema>(kernel.schema, node),
|
|
149
153
|
) as Unhydrated<TreeFieldFromImplicitField<TSchema>>;
|
|
150
154
|
}
|
|
151
155
|
|
|
@@ -3,27 +3,28 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import type { RestrictiveStringRecord,
|
|
6
|
+
import type { RestrictiveStringRecord, UnionToIntersection } from "../../util/index.js";
|
|
7
7
|
|
|
8
8
|
import type {
|
|
9
|
-
AllowedTypes,
|
|
10
9
|
ApplyKind,
|
|
10
|
+
ApplyKindInput,
|
|
11
11
|
FieldKind,
|
|
12
12
|
FieldSchema,
|
|
13
13
|
ImplicitAllowedTypes,
|
|
14
14
|
ImplicitFieldSchema,
|
|
15
|
-
|
|
16
|
-
TreeNodeFromImplicitAllowedTypes,
|
|
15
|
+
TreeLeafValue,
|
|
17
16
|
} from "../schemaTypes.js";
|
|
18
17
|
import type {
|
|
19
18
|
NodeKind,
|
|
20
|
-
TreeNodeSchema,
|
|
21
19
|
WithType,
|
|
22
20
|
TreeNode,
|
|
23
21
|
Unhydrated,
|
|
22
|
+
InternalTreeNode,
|
|
23
|
+
TreeNodeSchema,
|
|
24
|
+
TreeNodeSchemaCore,
|
|
24
25
|
} from "../core/index.js";
|
|
25
|
-
import type { TreeArrayNodeBase
|
|
26
|
-
import type { FlexListToUnion } from "../flexList.js";
|
|
26
|
+
import type { TreeArrayNodeBase } from "../arrayNode.js";
|
|
27
|
+
import type { FlexListToUnion, LazyItem } from "../flexList.js";
|
|
27
28
|
|
|
28
29
|
/*
|
|
29
30
|
* TODO:
|
|
@@ -59,6 +60,65 @@ export type ObjectFromSchemaRecordUnsafe<
|
|
|
59
60
|
-readonly [Property in keyof T]: TreeFieldFromImplicitFieldUnsafe<T[Property]>;
|
|
60
61
|
};
|
|
61
62
|
|
|
63
|
+
/**
|
|
64
|
+
* {@link Unenforced} version of {@link TreeNodeSchema}.
|
|
65
|
+
* @remarks
|
|
66
|
+
* Do not use this type directly: it is only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
|
|
67
|
+
* @system @public
|
|
68
|
+
*/
|
|
69
|
+
export type TreeNodeSchemaUnsafe<
|
|
70
|
+
Name extends string = string,
|
|
71
|
+
Kind extends NodeKind = NodeKind,
|
|
72
|
+
TNode extends Unenforced<TreeNode | TreeLeafValue> = unknown,
|
|
73
|
+
TBuild = never,
|
|
74
|
+
ImplicitlyConstructable extends boolean = boolean,
|
|
75
|
+
Info = unknown,
|
|
76
|
+
> =
|
|
77
|
+
| TreeNodeSchemaClassUnsafe<Name, Kind, TNode, TBuild, ImplicitlyConstructable, Info>
|
|
78
|
+
| TreeNodeSchemaNonClassUnsafe<Name, Kind, TNode, TBuild, ImplicitlyConstructable, Info>;
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* {@link Unenforced} version of {@link TreeNodeSchemaClass}.
|
|
82
|
+
* @remarks
|
|
83
|
+
* Do not use this type directly: it is only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
|
|
84
|
+
* @system @public
|
|
85
|
+
*/
|
|
86
|
+
export interface TreeNodeSchemaClassUnsafe<
|
|
87
|
+
out Name extends string,
|
|
88
|
+
out Kind extends NodeKind,
|
|
89
|
+
// TODO: maybe this can be more specific (exclude leaves)
|
|
90
|
+
out TNode extends Unenforced<TreeNode | TreeLeafValue>,
|
|
91
|
+
in TInsertable,
|
|
92
|
+
out ImplicitlyConstructable extends boolean,
|
|
93
|
+
out Info,
|
|
94
|
+
> extends TreeNodeSchemaCore<Name, Kind, ImplicitlyConstructable, Info> {
|
|
95
|
+
/**
|
|
96
|
+
* Constructs an {@link Unhydrated} node with this schema.
|
|
97
|
+
* @remarks
|
|
98
|
+
* This constructor is also used internally to construct hydrated nodes with a different parameter type.
|
|
99
|
+
* Therefore, overriding this constructor with different argument types is not type-safe and is not supported.
|
|
100
|
+
* @sealed
|
|
101
|
+
*/
|
|
102
|
+
new (data: TInsertable | InternalTreeNode): Unhydrated<TNode>;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* {@link Unenforced} version of {@link TreeNodeSchemaNonClass}.
|
|
107
|
+
* @remarks
|
|
108
|
+
* Do not use this type directly: it is only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
|
|
109
|
+
* @system @public
|
|
110
|
+
*/
|
|
111
|
+
export interface TreeNodeSchemaNonClassUnsafe<
|
|
112
|
+
out Name extends string,
|
|
113
|
+
out Kind extends NodeKind,
|
|
114
|
+
out TNode extends Unenforced<TreeNode | TreeLeafValue>,
|
|
115
|
+
in TInsertable,
|
|
116
|
+
out ImplicitlyConstructable extends boolean,
|
|
117
|
+
out Info = unknown,
|
|
118
|
+
> extends TreeNodeSchemaCore<Name, Kind, ImplicitlyConstructable, Info> {
|
|
119
|
+
create(data: TInsertable): TNode;
|
|
120
|
+
}
|
|
121
|
+
|
|
62
122
|
/**
|
|
63
123
|
* {@link Unenforced} version of {@link TreeObjectNode}.
|
|
64
124
|
* @remarks
|
|
@@ -78,11 +138,19 @@ export type TreeObjectNodeUnsafe<
|
|
|
78
138
|
*/
|
|
79
139
|
export type TreeFieldFromImplicitFieldUnsafe<TSchema extends Unenforced<ImplicitFieldSchema>> =
|
|
80
140
|
TSchema extends FieldSchemaUnsafe<infer Kind, infer Types>
|
|
81
|
-
? ApplyKind<TreeNodeFromImplicitAllowedTypesUnsafe<Types>, Kind
|
|
141
|
+
? ApplyKind<TreeNodeFromImplicitAllowedTypesUnsafe<Types>, Kind>
|
|
82
142
|
: TSchema extends ImplicitAllowedTypes
|
|
83
143
|
? TreeNodeFromImplicitAllowedTypesUnsafe<TSchema>
|
|
84
144
|
: unknown;
|
|
85
145
|
|
|
146
|
+
/**
|
|
147
|
+
* {@link Unenforced} version of {@link AllowedTypes}.
|
|
148
|
+
* @remarks
|
|
149
|
+
* Do not use this type directly: it is only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
|
|
150
|
+
* @system @public
|
|
151
|
+
*/
|
|
152
|
+
export type AllowedTypesUnsafe = readonly LazyItem<TreeNodeSchemaUnsafe>[];
|
|
153
|
+
|
|
86
154
|
/**
|
|
87
155
|
* {@link Unenforced} version of {@link TreeNodeFromImplicitAllowedTypes}.
|
|
88
156
|
* @remarks
|
|
@@ -91,36 +159,60 @@ export type TreeFieldFromImplicitFieldUnsafe<TSchema extends Unenforced<Implicit
|
|
|
91
159
|
*/
|
|
92
160
|
export type TreeNodeFromImplicitAllowedTypesUnsafe<
|
|
93
161
|
TSchema extends Unenforced<ImplicitAllowedTypes>,
|
|
94
|
-
> = TSchema extends
|
|
95
|
-
?
|
|
96
|
-
: TSchema extends
|
|
97
|
-
?
|
|
98
|
-
:
|
|
99
|
-
? NodeFromSchema<FlexListToUnion<TSchema>>
|
|
100
|
-
: unknown;
|
|
162
|
+
> = TSchema extends TreeNodeSchemaUnsafe
|
|
163
|
+
? NodeFromSchemaUnsafe<TSchema>
|
|
164
|
+
: TSchema extends AllowedTypesUnsafe
|
|
165
|
+
? NodeFromSchemaUnsafe<FlexListToUnion<TSchema>>
|
|
166
|
+
: unknown;
|
|
101
167
|
|
|
102
168
|
/**
|
|
103
169
|
* {@link Unenforced} version of {@link InsertableTreeNodeFromImplicitAllowedTypes}.
|
|
170
|
+
* @see {@link Input}
|
|
104
171
|
* @remarks
|
|
105
172
|
* Do note use this type directly: its only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
|
|
106
173
|
* @system @public
|
|
107
174
|
*/
|
|
108
175
|
export type InsertableTreeNodeFromImplicitAllowedTypesUnsafe<
|
|
109
176
|
TSchema extends Unenforced<ImplicitAllowedTypes>,
|
|
110
|
-
> = TSchema extends
|
|
111
|
-
? InsertableTypedNodeUnsafe<
|
|
112
|
-
:
|
|
177
|
+
> = [TSchema] extends [TreeNodeSchemaUnsafe]
|
|
178
|
+
? InsertableTypedNodeUnsafe<TSchema>
|
|
179
|
+
: [TSchema] extends [AllowedTypesUnsafe]
|
|
180
|
+
? InsertableTreeNodeFromAllowedTypesUnsafe<TSchema>
|
|
181
|
+
: never;
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* {@link Unenforced} version of {@link InsertableTreeNodeFromAllowedTypes}.
|
|
185
|
+
* @see {@link Input}
|
|
186
|
+
* @system @public
|
|
187
|
+
*/
|
|
188
|
+
export type InsertableTreeNodeFromAllowedTypesUnsafe<
|
|
189
|
+
TList extends Unenforced<AllowedTypesUnsafe>,
|
|
190
|
+
> = TList extends readonly [
|
|
191
|
+
LazyItem<infer TSchema extends TreeNodeSchemaUnsafe>,
|
|
192
|
+
...infer Rest extends AllowedTypesUnsafe,
|
|
193
|
+
]
|
|
194
|
+
? InsertableTypedNodeUnsafe<TSchema> | InsertableTreeNodeFromAllowedTypesUnsafe<Rest>
|
|
195
|
+
: never;
|
|
113
196
|
|
|
114
197
|
/**
|
|
115
198
|
* {@link Unenforced} version of {@link InsertableTypedNode}.
|
|
199
|
+
* @see {@link Input}
|
|
116
200
|
* @remarks
|
|
117
201
|
* Do note use this type directly: its only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
|
|
202
|
+
* @privateRemarks
|
|
203
|
+
* TODO:
|
|
204
|
+
* This is less strict than InsertableTypedNode when given non-exact schema to avoid compilation issues.
|
|
205
|
+
* This should probably be fixed or documented somehow.
|
|
118
206
|
* @system @public
|
|
119
207
|
*/
|
|
120
|
-
export type InsertableTypedNodeUnsafe<
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
208
|
+
export type InsertableTypedNodeUnsafe<
|
|
209
|
+
TSchema extends Unenforced<TreeNodeSchemaUnsafe>,
|
|
210
|
+
T = UnionToIntersection<TSchema>,
|
|
211
|
+
> =
|
|
212
|
+
| (T extends TreeNodeSchemaUnsafe<string, NodeKind, TreeNode | TreeLeafValue, never, true>
|
|
213
|
+
? NodeBuilderDataUnsafe<T>
|
|
214
|
+
: never)
|
|
215
|
+
| (T extends TreeNodeSchemaUnsafe ? NodeFromSchemaUnsafe<T> : never);
|
|
124
216
|
|
|
125
217
|
/**
|
|
126
218
|
* {@link Unenforced} version of {@link NodeFromSchema}.
|
|
@@ -129,7 +221,7 @@ export type InsertableTypedNodeUnsafe<T extends Unenforced<TreeNodeSchema>> = [
|
|
|
129
221
|
* @system @public
|
|
130
222
|
*/
|
|
131
223
|
export type NodeFromSchemaUnsafe<T extends Unenforced<TreeNodeSchema>> =
|
|
132
|
-
T extends
|
|
224
|
+
T extends TreeNodeSchemaUnsafe<string, NodeKind, infer TNode> ? TNode : never;
|
|
133
225
|
|
|
134
226
|
/**
|
|
135
227
|
* {@link Unenforced} version of {@link InsertableTreeNodeFromImplicitAllowedTypes}.
|
|
@@ -138,7 +230,7 @@ export type NodeFromSchemaUnsafe<T extends Unenforced<TreeNodeSchema>> =
|
|
|
138
230
|
* @system @public
|
|
139
231
|
*/
|
|
140
232
|
export type NodeBuilderDataUnsafe<T extends Unenforced<TreeNodeSchema>> =
|
|
141
|
-
T extends
|
|
233
|
+
T extends TreeNodeSchemaUnsafe<string, NodeKind, unknown, infer TBuild> ? TBuild : never;
|
|
142
234
|
|
|
143
235
|
/**
|
|
144
236
|
* {@link Unenforced} version of {@link (TreeArrayNode:interface)}.
|
|
@@ -149,8 +241,7 @@ export type NodeBuilderDataUnsafe<T extends Unenforced<TreeNodeSchema>> =
|
|
|
149
241
|
export interface TreeArrayNodeUnsafe<TAllowedTypes extends Unenforced<ImplicitAllowedTypes>>
|
|
150
242
|
extends TreeArrayNodeBase<
|
|
151
243
|
TreeNodeFromImplicitAllowedTypesUnsafe<TAllowedTypes>,
|
|
152
|
-
InsertableTreeNodeFromImplicitAllowedTypesUnsafe<TAllowedTypes
|
|
153
|
-
TreeArrayNode
|
|
244
|
+
InsertableTreeNodeFromImplicitAllowedTypesUnsafe<TAllowedTypes>
|
|
154
245
|
> {}
|
|
155
246
|
|
|
156
247
|
/**
|
|
@@ -235,6 +326,7 @@ export type FieldHasDefaultUnsafe<T extends Unenforced<ImplicitFieldSchema>> =
|
|
|
235
326
|
|
|
236
327
|
/**
|
|
237
328
|
* {@link Unenforced} version of `InsertableObjectFromSchemaRecord`.
|
|
329
|
+
* @see {@link Input}
|
|
238
330
|
* @remarks
|
|
239
331
|
* Do note use this type directly: its only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
|
|
240
332
|
* @system @public
|
|
@@ -256,15 +348,19 @@ export type InsertableObjectFromSchemaRecordUnsafe<
|
|
|
256
348
|
|
|
257
349
|
/**
|
|
258
350
|
* {@link Unenforced} version of {@link InsertableTreeFieldFromImplicitField}.
|
|
351
|
+
* @see {@link Input}
|
|
259
352
|
* @remarks
|
|
260
353
|
* Do note use this type directly: its only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
|
|
261
354
|
* @system @public
|
|
262
355
|
*/
|
|
263
356
|
export type InsertableTreeFieldFromImplicitFieldUnsafe<
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
357
|
+
TSchemaInput extends Unenforced<ImplicitFieldSchema>,
|
|
358
|
+
TSchema = UnionToIntersection<TSchemaInput>,
|
|
359
|
+
> = [TSchema] extends [FieldSchemaUnsafe<infer Kind, infer Types>]
|
|
360
|
+
? ApplyKindInput<InsertableTreeNodeFromImplicitAllowedTypesUnsafe<Types>, Kind, true>
|
|
361
|
+
: [TSchema] extends [ImplicitAllowedTypes]
|
|
362
|
+
? InsertableTreeNodeFromImplicitAllowedTypesUnsafe<TSchema>
|
|
363
|
+
: never;
|
|
268
364
|
|
|
269
365
|
/**
|
|
270
366
|
* {@link Unenforced} version of {@link FieldSchema}.
|