@fluidframework/devtools-core 2.70.0-361788 → 2.71.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 CHANGED
@@ -1,5 +1,42 @@
1
1
  # @fluidframework/devtools-core
2
2
 
3
+ ## 2.71.0
4
+
5
+ Dependency updates only.
6
+
7
+ ## 2.70.0
8
+
9
+ ### Minor Changes
10
+
11
+ - Promote core devtools APIs from alpha to beta ([#25695](https://github.com/microsoft/FluidFramework/pull/25695)) [7c8e203249](https://github.com/microsoft/FluidFramework/commit/7c8e20324935717d8f7b599c3ec2a1b570b96ba1)
12
+
13
+ The primary devtools APIs may now be imported from `/beta`. This includes:
14
+
15
+ - **`initializeDevtools`** - Initialize the devtools singleton
16
+ - **`tryGetFluidDevtools`** - Get the existing devtools instance if initialized
17
+ - **`IFluidDevtools`** - Main devtools interface for registering containers
18
+ - **`ContainerDevtoolsProps`** - Properties for registering containers with devtools
19
+
20
+ For example:
21
+
22
+ ```typescript
23
+ import {
24
+ initializeDevtools,
25
+ tryGetFluidDevtools,
26
+ type IFluidDevtools,
27
+ type ContainerDevtoolsProps,
28
+ } from "@fluidframework/devtools-core/beta";
29
+
30
+ // Initialize devtools
31
+ const devtools = initializeDevtools();
32
+
33
+ // Register a container
34
+ devtools.registerContainerDevtools({
35
+ containerKey: "my-container",
36
+ container: myContainer,
37
+ });
38
+ ```
39
+
3
40
  ## 2.63.0
4
41
 
5
42
  Dependency updates only.
@@ -242,7 +242,7 @@ const visualizeSharedTree = async (sharedObject, visualizeChildData) => {
242
242
  * Since the {@link SimpleTreeSchema.allowedTypes} of each children node is only accessible at the parent field level,
243
243
  * each node's allowed types are computed at the parent field level.
244
244
  */
245
- const allowedTypes = treeSimpleSchema.root.allowedTypesIdentifiers;
245
+ const allowedTypes = new Set(treeSimpleSchema.root.simpleAllowedTypes.keys());
246
246
  const isRequired = treeSimpleSchema.root.kind === internal_6.FieldKind.Required;
247
247
  if (treeView === undefined) {
248
248
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultVisualizers.js","sourceRoot":"","sources":["../../src/data-visualization/DefaultVisualizers.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/**\n * This module contains default {@link VisualizeSharedObject | visualization}\n * implementations for our DDSs.\n */\n\nimport { SharedCell, type ISharedCell } from \"@fluidframework/cell/internal\";\nimport { SharedCounter } from \"@fluidframework/counter/internal\";\nimport {\n\ttype IDirectory,\n\ttype ISharedMap,\n\tSharedMap,\n\ttype ISharedDirectory,\n\tSharedDirectory,\n} from \"@fluidframework/map/internal\";\nimport { SharedMatrix } from \"@fluidframework/matrix/internal\";\nimport { SharedString } from \"@fluidframework/sequence/internal\";\nimport type { ISharedObject, IChannelView } from \"@fluidframework/shared-object-base/internal\";\nimport type { ITreeInternal } from \"@fluidframework/tree/internal\";\nimport { FieldKind, SharedTree } from \"@fluidframework/tree/internal\";\n\nimport { EditType } from \"../CommonInterfaces.js\";\nimport { getKeyForFluidObject } from \"../FluidObjectKey.js\";\n\nimport type { VisualizeChildData, VisualizeSharedObject } from \"./DataVisualization.js\";\nimport {\n\tconcatenateTypes,\n\tdetermineNodeKind,\n\ttoVisualTree,\n\tvisualizeSharedTreeBySchema,\n} from \"./SharedTreeVisualizer.js\";\nimport type { VisualSharedTreeNode } from \"./VisualSharedTreeTypes.js\";\nimport {\n\ttype FluidObjectNode,\n\ttype FluidObjectTreeNode,\n\ttype FluidObjectValueNode,\n\ttype FluidUnknownObjectNode,\n\ttype VisualChildNode,\n\tVisualNodeKind,\n\ttype VisualTreeNode,\n} from \"./VisualTree.js\";\n\n/**\n * Default {@link VisualizeSharedObject} for {@link SharedCell}.\n */\nexport const visualizeSharedCell: VisualizeSharedObject = async (\n\tsharedObject: ISharedObject,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<FluidObjectNode> => {\n\tconst sharedCell = sharedObject as ISharedCell<unknown>;\n\tconst data = sharedCell.get();\n\tconst fluidObjectId = getKeyForFluidObject(sharedCell);\n\n\tconst renderedData = await visualizeChildData(data);\n\n\tconst editProps = {\n\t\teditTypes: undefined,\n\t};\n\n\t// By separating cases it lets us avoid unnecessary hierarchy by flattening the tree\n\tswitch (renderedData.nodeKind) {\n\t\tcase VisualNodeKind.FluidHandleNode: {\n\t\t\treturn {\n\t\t\t\tchildren: {\n\t\t\t\t\tdata: renderedData,\n\t\t\t\t},\n\t\t\t\tfluidObjectId,\n\t\t\t\ttypeMetadata: \"SharedCell\",\n\t\t\t\tnodeKind: VisualNodeKind.FluidTreeNode,\n\t\t\t\teditProps,\n\t\t\t};\n\t\t}\n\t\tcase VisualNodeKind.ValueNode: {\n\t\t\treturn {\n\t\t\t\t...renderedData,\n\t\t\t\tfluidObjectId,\n\t\t\t\ttypeMetadata: \"SharedCell\",\n\t\t\t\tnodeKind: VisualNodeKind.FluidValueNode,\n\t\t\t\teditProps,\n\t\t\t};\n\t\t}\n\t\tcase VisualNodeKind.TreeNode: {\n\t\t\treturn {\n\t\t\t\t...renderedData,\n\t\t\t\tfluidObjectId,\n\t\t\t\ttypeMetadata: \"SharedCell\",\n\t\t\t\tnodeKind: VisualNodeKind.FluidTreeNode,\n\t\t\t\teditProps,\n\t\t\t};\n\t\t}\n\t\tcase VisualNodeKind.UnknownObjectNode: {\n\t\t\treturn {\n\t\t\t\tfluidObjectId,\n\t\t\t\ttypeMetadata: \"SharedCell\",\n\t\t\t\tnodeKind: VisualNodeKind.FluidUnknownObjectNode,\n\t\t\t};\n\t\t}\n\t\tdefault: {\n\t\t\tthrow new Error(\"Unrecognized node kind.\");\n\t\t}\n\t}\n};\n\n/**\n * Default {@link VisualizeSharedObject} for {@link DataObject}.\n */\nexport const visualizeDataObject: VisualizeSharedObject = async (\n\tdataObjectRoot: ISharedObject,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<FluidObjectTreeNode> => {\n\tconst renderedChildData = (await visualizeSharedDirectory(\n\t\tdataObjectRoot,\n\t\tvisualizeChildData,\n\t)) as FluidObjectTreeNode;\n\n\treturn {\n\t\tfluidObjectId: getKeyForFluidObject(dataObjectRoot),\n\t\tchildren: renderedChildData.children,\n\t\tmetadata: renderedChildData.metadata,\n\t\ttypeMetadata: \"DataObject\",\n\t\tnodeKind: VisualNodeKind.FluidTreeNode,\n\t};\n};\n\n/**\n * Default {@link VisualizeSharedObject} for {@link TreeDataObject}.\n */\nexport const visualizeTreeDataObject: VisualizeSharedObject = async (\n\trootTree: ISharedObject,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<FluidObjectTreeNode> => {\n\tconst renderedChildData = (await visualizeSharedTree(\n\t\trootTree,\n\t\tvisualizeChildData,\n\t)) as FluidObjectTreeNode;\n\n\treturn {\n\t\tfluidObjectId: getKeyForFluidObject(rootTree),\n\t\tchildren: renderedChildData.children,\n\t\tmetadata: renderedChildData.metadata,\n\t\ttypeMetadata: \"TreeDataObject\",\n\t\tnodeKind: VisualNodeKind.FluidTreeNode,\n\t};\n};\n\n/**\n * Default {@link VisualizeSharedObject} for {@link SharedCounter}.\n */\nexport const visualizeSharedCounter: VisualizeSharedObject = async (\n\tsharedObject: ISharedObject,\n): Promise<FluidObjectValueNode> => {\n\tconst sharedCounter = sharedObject as SharedCounter;\n\treturn {\n\t\tfluidObjectId: getKeyForFluidObject(sharedCounter),\n\t\tvalue: sharedCounter.value,\n\t\ttypeMetadata: \"SharedCounter\",\n\t\tnodeKind: VisualNodeKind.FluidValueNode,\n\t\teditProps: { editTypes: [EditType.Number] },\n\t};\n};\n\n/**\n * Default {@link VisualizeSharedObject} for {@link SharedDirectory}.\n */\nexport const visualizeSharedDirectory: VisualizeSharedObject = async (\n\tsharedObject: ISharedObject,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<FluidObjectTreeNode> => {\n\tconst sharedDirectory = sharedObject as ISharedDirectory;\n\tconst renderedChildData = await visualizeDirectory(sharedDirectory, visualizeChildData);\n\treturn {\n\t\tfluidObjectId: getKeyForFluidObject(sharedDirectory),\n\t\tchildren: renderedChildData.children,\n\t\tmetadata: renderedChildData.metadata,\n\t\ttypeMetadata: \"SharedDirectory\",\n\t\tnodeKind: VisualNodeKind.FluidTreeNode,\n\t};\n};\n\n/**\n * Generates a visual summary for an {@link @fluidframework/map#IDirectory}.\n *\n * @remarks Used by {@link visualizeSharedDirectory} to recurse down non-Shared-Object subdirectories.\n */\nasync function visualizeDirectory(\n\tdirectory: IDirectory,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<VisualTreeNode> {\n\tconst children: Record<string, VisualChildNode> = {};\n\n\t// Generate child entries for directory value content\n\tfor (const [key, value] of directory) {\n\t\tconst renderedChild = await visualizeChildData(value);\n\t\tchildren[key] = renderedChild;\n\t}\n\n\t// Generate child entries for sub-directory\n\tconst subDirectories = directory.subdirectories();\n\tfor (const [path, subDirectory] of subDirectories) {\n\t\tconst renderedChild = await visualizeDirectory(subDirectory, visualizeChildData);\n\t\tchildren[path] = renderedChild;\n\t}\n\n\treturn {\n\t\tchildren,\n\t\tmetadata: {\n\t\t\t\"absolute-path\": directory.absolutePath,\n\t\t\t\"values\": directory.size,\n\t\t\t\"sub-directories\": directory.countSubDirectory?.(),\n\t\t},\n\t\ttypeMetadata: \"IDirectory\",\n\t\tnodeKind: VisualNodeKind.TreeNode,\n\t};\n}\n\n/**\n * Default {@link VisualizeSharedObject} for {@link SharedMap}.\n */\nexport const visualizeSharedMap: VisualizeSharedObject = async (\n\tsharedObject: ISharedObject,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<FluidObjectTreeNode> => {\n\tconst sharedMap = sharedObject as ISharedMap;\n\n\tconst children: Record<string, VisualChildNode> = {};\n\tfor (const [key, value] of sharedMap) {\n\t\tconst renderedChild = await visualizeChildData(value);\n\t\tchildren[key] = renderedChild;\n\t}\n\n\treturn {\n\t\tfluidObjectId: getKeyForFluidObject(sharedMap),\n\t\tchildren,\n\t\tmetadata: {\n\t\t\tsize: sharedMap.size,\n\t\t},\n\t\ttypeMetadata: \"SharedMap\",\n\t\tnodeKind: VisualNodeKind.FluidTreeNode,\n\t};\n};\n\n/**\n * Default {@link VisualizeSharedObject} for {@link SharedMap}.\n */\nexport const visualizeSharedMatrix: VisualizeSharedObject = async (\n\tsharedObject: ISharedObject,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<FluidObjectTreeNode> => {\n\tconst sharedMatrix = sharedObject as unknown as SharedMatrix;\n\n\tconst { rowCount, colCount: columnCount } = sharedMatrix;\n\tconst objectId = getKeyForFluidObject(sharedMatrix);\n\n\t// Output will list cells as a flat list, keyed by their row,column indices (e.g. `[0,1]`)\n\tconst cells: Record<string, VisualChildNode> = {};\n\tfor (let rowIndex = 0; rowIndex < rowCount; rowIndex++) {\n\t\tfor (let columnIndex = 0; columnIndex < columnCount; columnIndex++) {\n\t\t\tconst cell = sharedMatrix.getCell(rowIndex, columnIndex) as unknown;\n\t\t\tconst renderedCell = await visualizeChildData(cell);\n\t\t\tcells[`[${rowIndex},${columnIndex}]`] = renderedCell;\n\t\t}\n\t}\n\n\treturn {\n\t\tfluidObjectId: objectId,\n\t\tchildren: cells,\n\t\tmetadata: {\n\t\t\trows: rowCount,\n\t\t\tcolumns: columnCount,\n\t\t},\n\t\ttypeMetadata: \"SharedMatrix\",\n\t\tnodeKind: VisualNodeKind.FluidTreeNode,\n\t};\n};\n\n/**\n * Default {@link VisualizeSharedObject} for {@link SharedString}.\n */\nexport const visualizeSharedString: VisualizeSharedObject = async (\n\tsharedObject: ISharedObject,\n): Promise<FluidObjectValueNode> => {\n\tconst sharedString = sharedObject as SharedString;\n\tconst text = sharedString.getText();\n\n\treturn {\n\t\tfluidObjectId: getKeyForFluidObject(sharedString),\n\t\tvalue: text,\n\t\ttypeMetadata: \"SharedString\",\n\t\tnodeKind: VisualNodeKind.FluidValueNode,\n\t\teditProps: { editTypes: [EditType.String] },\n\t};\n};\n\n/**\n * {@link VisualizeSharedObject} for {@link ITree}.\n *\n * TODO: [ADO 31468] Refactor the SharedTreeVisualizer to conform to SharedTree API\n */\nexport const visualizeSharedTree: VisualizeSharedObject = async (\n\tsharedObject: ISharedObject,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<FluidObjectNode> => {\n\tconst sharedTree = sharedObject as IChannelView as ITreeInternal;\n\tconst objectId = getKeyForFluidObject(sharedTree);\n\n\t// Root node of the SharedTree's content.\n\tconst treeView = sharedTree.exportVerbose();\n\t// All schema definitions for the SharedTree.\n\tconst treeSimpleSchema = sharedTree.exportSimpleSchema();\n\tconst treeDefinitions = treeSimpleSchema.definitions;\n\n\t/**\n\t * {@link visualizeSharedTreeBySchema} passes `allowedTypes` into co-recursive functions while constructing the visual representation.\n\t * Since the {@link SimpleTreeSchema.allowedTypes} of each children node is only accessible at the parent field level,\n\t * each node's allowed types are computed at the parent field level.\n\t */\n\tconst allowedTypes = treeSimpleSchema.root.allowedTypesIdentifiers;\n\tconst isRequired = treeSimpleSchema.root.kind === FieldKind.Required;\n\n\tif (treeView === undefined) {\n\t\treturn {\n\t\t\tfluidObjectId: objectId,\n\t\t\ttypeMetadata: \"SharedTree\",\n\t\t\tnodeKind: VisualNodeKind.FluidTreeNode,\n\t\t\ttooltipContents: {\n\t\t\t\tschema: {\n\t\t\t\t\tnodeKind: VisualNodeKind.TreeNode,\n\t\t\t\t\tchildren: {\n\t\t\t\t\t\tallowedTypes: {\n\t\t\t\t\t\t\tnodeKind: VisualNodeKind.ValueNode,\n\t\t\t\t\t\t\tvalue: concatenateTypes(allowedTypes),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tisRequired: {\n\t\t\t\t\t\t\tnodeKind: VisualNodeKind.ValueNode,\n\t\t\t\t\t\t\tvalue: isRequired.toString(),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tchildren: {},\n\t\t};\n\t}\n\n\t// Create a root field visualization that shows the allowed types at the root\n\tconst visualTreeRepresentation: VisualSharedTreeNode = await visualizeSharedTreeBySchema(\n\t\ttreeView,\n\t\ttreeDefinitions,\n\t\t{ allowedTypes, isRequired },\n\t\tvisualizeChildData,\n\t);\n\n\t// Maps the `visualTreeRepresentation` in the format compatible to {@link visualizeChildData} function.\n\tconst visualTree = toVisualTree(visualTreeRepresentation);\n\n\t// TODO: Validate the type casting.\n\tconst visualTreeResult: FluidObjectNode = {\n\t\t...visualTree,\n\t\tfluidObjectId: objectId,\n\t\ttypeMetadata: \"SharedTree\",\n\t\tnodeKind: determineNodeKind(visualTree.nodeKind),\n\t} as unknown as FluidObjectNode;\n\n\treturn visualTreeResult;\n};\n\n/**\n * {@link VisualizeSharedObject} for unrecognized {@link ISharedObject}s.\n */\nexport const visualizeUnknownSharedObject: VisualizeSharedObject = async (\n\tsharedObject: ISharedObject,\n): Promise<FluidUnknownObjectNode> => {\n\treturn {\n\t\tfluidObjectId: getKeyForFluidObject(sharedObject),\n\t\ttypeMetadata: sharedObject.attributes.type,\n\t\tnodeKind: VisualNodeKind.FluidUnknownObjectNode,\n\t};\n};\n\n/**\n * List of default visualizers included in the library.\n * @remarks {@link @fluidframework/aqueduct#DataObject} & {@link @fluidframework/aqueduct#TreeDataObject} do not have type information and thus are not included in the list.\n */\nexport const defaultVisualizers: Record<string, VisualizeSharedObject> = {\n\t[SharedCell.getFactory().type]: visualizeSharedCell,\n\t[SharedCounter.getFactory().type]: visualizeSharedCounter,\n\t[SharedDirectory.getFactory().type]: visualizeSharedDirectory,\n\t[SharedMap.getFactory().type]: visualizeSharedMap,\n\t[SharedMatrix.getFactory().type]: visualizeSharedMatrix,\n\t[SharedString.getFactory().type]: visualizeSharedString,\n\t[SharedTree.getFactory().type]: visualizeSharedTree,\n\t// TODO: the others\n};\n"]}
1
+ {"version":3,"file":"DefaultVisualizers.js","sourceRoot":"","sources":["../../src/data-visualization/DefaultVisualizers.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/**\n * This module contains default {@link VisualizeSharedObject | visualization}\n * implementations for our DDSs.\n */\n\nimport { SharedCell, type ISharedCell } from \"@fluidframework/cell/internal\";\nimport { SharedCounter } from \"@fluidframework/counter/internal\";\nimport {\n\ttype IDirectory,\n\ttype ISharedMap,\n\tSharedMap,\n\ttype ISharedDirectory,\n\tSharedDirectory,\n} from \"@fluidframework/map/internal\";\nimport { SharedMatrix } from \"@fluidframework/matrix/internal\";\nimport { SharedString } from \"@fluidframework/sequence/internal\";\nimport type { ISharedObject, IChannelView } from \"@fluidframework/shared-object-base/internal\";\nimport type { ITreeInternal } from \"@fluidframework/tree/internal\";\nimport { FieldKind, SharedTree } from \"@fluidframework/tree/internal\";\n\nimport { EditType } from \"../CommonInterfaces.js\";\nimport { getKeyForFluidObject } from \"../FluidObjectKey.js\";\n\nimport type { VisualizeChildData, VisualizeSharedObject } from \"./DataVisualization.js\";\nimport {\n\tconcatenateTypes,\n\tdetermineNodeKind,\n\ttoVisualTree,\n\tvisualizeSharedTreeBySchema,\n} from \"./SharedTreeVisualizer.js\";\nimport type { VisualSharedTreeNode } from \"./VisualSharedTreeTypes.js\";\nimport {\n\ttype FluidObjectNode,\n\ttype FluidObjectTreeNode,\n\ttype FluidObjectValueNode,\n\ttype FluidUnknownObjectNode,\n\ttype VisualChildNode,\n\tVisualNodeKind,\n\ttype VisualTreeNode,\n} from \"./VisualTree.js\";\n\n/**\n * Default {@link VisualizeSharedObject} for {@link SharedCell}.\n */\nexport const visualizeSharedCell: VisualizeSharedObject = async (\n\tsharedObject: ISharedObject,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<FluidObjectNode> => {\n\tconst sharedCell = sharedObject as ISharedCell<unknown>;\n\tconst data = sharedCell.get();\n\tconst fluidObjectId = getKeyForFluidObject(sharedCell);\n\n\tconst renderedData = await visualizeChildData(data);\n\n\tconst editProps = {\n\t\teditTypes: undefined,\n\t};\n\n\t// By separating cases it lets us avoid unnecessary hierarchy by flattening the tree\n\tswitch (renderedData.nodeKind) {\n\t\tcase VisualNodeKind.FluidHandleNode: {\n\t\t\treturn {\n\t\t\t\tchildren: {\n\t\t\t\t\tdata: renderedData,\n\t\t\t\t},\n\t\t\t\tfluidObjectId,\n\t\t\t\ttypeMetadata: \"SharedCell\",\n\t\t\t\tnodeKind: VisualNodeKind.FluidTreeNode,\n\t\t\t\teditProps,\n\t\t\t};\n\t\t}\n\t\tcase VisualNodeKind.ValueNode: {\n\t\t\treturn {\n\t\t\t\t...renderedData,\n\t\t\t\tfluidObjectId,\n\t\t\t\ttypeMetadata: \"SharedCell\",\n\t\t\t\tnodeKind: VisualNodeKind.FluidValueNode,\n\t\t\t\teditProps,\n\t\t\t};\n\t\t}\n\t\tcase VisualNodeKind.TreeNode: {\n\t\t\treturn {\n\t\t\t\t...renderedData,\n\t\t\t\tfluidObjectId,\n\t\t\t\ttypeMetadata: \"SharedCell\",\n\t\t\t\tnodeKind: VisualNodeKind.FluidTreeNode,\n\t\t\t\teditProps,\n\t\t\t};\n\t\t}\n\t\tcase VisualNodeKind.UnknownObjectNode: {\n\t\t\treturn {\n\t\t\t\tfluidObjectId,\n\t\t\t\ttypeMetadata: \"SharedCell\",\n\t\t\t\tnodeKind: VisualNodeKind.FluidUnknownObjectNode,\n\t\t\t};\n\t\t}\n\t\tdefault: {\n\t\t\tthrow new Error(\"Unrecognized node kind.\");\n\t\t}\n\t}\n};\n\n/**\n * Default {@link VisualizeSharedObject} for {@link DataObject}.\n */\nexport const visualizeDataObject: VisualizeSharedObject = async (\n\tdataObjectRoot: ISharedObject,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<FluidObjectTreeNode> => {\n\tconst renderedChildData = (await visualizeSharedDirectory(\n\t\tdataObjectRoot,\n\t\tvisualizeChildData,\n\t)) as FluidObjectTreeNode;\n\n\treturn {\n\t\tfluidObjectId: getKeyForFluidObject(dataObjectRoot),\n\t\tchildren: renderedChildData.children,\n\t\tmetadata: renderedChildData.metadata,\n\t\ttypeMetadata: \"DataObject\",\n\t\tnodeKind: VisualNodeKind.FluidTreeNode,\n\t};\n};\n\n/**\n * Default {@link VisualizeSharedObject} for {@link TreeDataObject}.\n */\nexport const visualizeTreeDataObject: VisualizeSharedObject = async (\n\trootTree: ISharedObject,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<FluidObjectTreeNode> => {\n\tconst renderedChildData = (await visualizeSharedTree(\n\t\trootTree,\n\t\tvisualizeChildData,\n\t)) as FluidObjectTreeNode;\n\n\treturn {\n\t\tfluidObjectId: getKeyForFluidObject(rootTree),\n\t\tchildren: renderedChildData.children,\n\t\tmetadata: renderedChildData.metadata,\n\t\ttypeMetadata: \"TreeDataObject\",\n\t\tnodeKind: VisualNodeKind.FluidTreeNode,\n\t};\n};\n\n/**\n * Default {@link VisualizeSharedObject} for {@link SharedCounter}.\n */\nexport const visualizeSharedCounter: VisualizeSharedObject = async (\n\tsharedObject: ISharedObject,\n): Promise<FluidObjectValueNode> => {\n\tconst sharedCounter = sharedObject as SharedCounter;\n\treturn {\n\t\tfluidObjectId: getKeyForFluidObject(sharedCounter),\n\t\tvalue: sharedCounter.value,\n\t\ttypeMetadata: \"SharedCounter\",\n\t\tnodeKind: VisualNodeKind.FluidValueNode,\n\t\teditProps: { editTypes: [EditType.Number] },\n\t};\n};\n\n/**\n * Default {@link VisualizeSharedObject} for {@link SharedDirectory}.\n */\nexport const visualizeSharedDirectory: VisualizeSharedObject = async (\n\tsharedObject: ISharedObject,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<FluidObjectTreeNode> => {\n\tconst sharedDirectory = sharedObject as ISharedDirectory;\n\tconst renderedChildData = await visualizeDirectory(sharedDirectory, visualizeChildData);\n\treturn {\n\t\tfluidObjectId: getKeyForFluidObject(sharedDirectory),\n\t\tchildren: renderedChildData.children,\n\t\tmetadata: renderedChildData.metadata,\n\t\ttypeMetadata: \"SharedDirectory\",\n\t\tnodeKind: VisualNodeKind.FluidTreeNode,\n\t};\n};\n\n/**\n * Generates a visual summary for an {@link @fluidframework/map#IDirectory}.\n *\n * @remarks Used by {@link visualizeSharedDirectory} to recurse down non-Shared-Object subdirectories.\n */\nasync function visualizeDirectory(\n\tdirectory: IDirectory,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<VisualTreeNode> {\n\tconst children: Record<string, VisualChildNode> = {};\n\n\t// Generate child entries for directory value content\n\tfor (const [key, value] of directory) {\n\t\tconst renderedChild = await visualizeChildData(value);\n\t\tchildren[key] = renderedChild;\n\t}\n\n\t// Generate child entries for sub-directory\n\tconst subDirectories = directory.subdirectories();\n\tfor (const [path, subDirectory] of subDirectories) {\n\t\tconst renderedChild = await visualizeDirectory(subDirectory, visualizeChildData);\n\t\tchildren[path] = renderedChild;\n\t}\n\n\treturn {\n\t\tchildren,\n\t\tmetadata: {\n\t\t\t\"absolute-path\": directory.absolutePath,\n\t\t\t\"values\": directory.size,\n\t\t\t\"sub-directories\": directory.countSubDirectory?.(),\n\t\t},\n\t\ttypeMetadata: \"IDirectory\",\n\t\tnodeKind: VisualNodeKind.TreeNode,\n\t};\n}\n\n/**\n * Default {@link VisualizeSharedObject} for {@link SharedMap}.\n */\nexport const visualizeSharedMap: VisualizeSharedObject = async (\n\tsharedObject: ISharedObject,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<FluidObjectTreeNode> => {\n\tconst sharedMap = sharedObject as ISharedMap;\n\n\tconst children: Record<string, VisualChildNode> = {};\n\tfor (const [key, value] of sharedMap) {\n\t\tconst renderedChild = await visualizeChildData(value);\n\t\tchildren[key] = renderedChild;\n\t}\n\n\treturn {\n\t\tfluidObjectId: getKeyForFluidObject(sharedMap),\n\t\tchildren,\n\t\tmetadata: {\n\t\t\tsize: sharedMap.size,\n\t\t},\n\t\ttypeMetadata: \"SharedMap\",\n\t\tnodeKind: VisualNodeKind.FluidTreeNode,\n\t};\n};\n\n/**\n * Default {@link VisualizeSharedObject} for {@link SharedMap}.\n */\nexport const visualizeSharedMatrix: VisualizeSharedObject = async (\n\tsharedObject: ISharedObject,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<FluidObjectTreeNode> => {\n\tconst sharedMatrix = sharedObject as unknown as SharedMatrix;\n\n\tconst { rowCount, colCount: columnCount } = sharedMatrix;\n\tconst objectId = getKeyForFluidObject(sharedMatrix);\n\n\t// Output will list cells as a flat list, keyed by their row,column indices (e.g. `[0,1]`)\n\tconst cells: Record<string, VisualChildNode> = {};\n\tfor (let rowIndex = 0; rowIndex < rowCount; rowIndex++) {\n\t\tfor (let columnIndex = 0; columnIndex < columnCount; columnIndex++) {\n\t\t\tconst cell = sharedMatrix.getCell(rowIndex, columnIndex) as unknown;\n\t\t\tconst renderedCell = await visualizeChildData(cell);\n\t\t\tcells[`[${rowIndex},${columnIndex}]`] = renderedCell;\n\t\t}\n\t}\n\n\treturn {\n\t\tfluidObjectId: objectId,\n\t\tchildren: cells,\n\t\tmetadata: {\n\t\t\trows: rowCount,\n\t\t\tcolumns: columnCount,\n\t\t},\n\t\ttypeMetadata: \"SharedMatrix\",\n\t\tnodeKind: VisualNodeKind.FluidTreeNode,\n\t};\n};\n\n/**\n * Default {@link VisualizeSharedObject} for {@link SharedString}.\n */\nexport const visualizeSharedString: VisualizeSharedObject = async (\n\tsharedObject: ISharedObject,\n): Promise<FluidObjectValueNode> => {\n\tconst sharedString = sharedObject as SharedString;\n\tconst text = sharedString.getText();\n\n\treturn {\n\t\tfluidObjectId: getKeyForFluidObject(sharedString),\n\t\tvalue: text,\n\t\ttypeMetadata: \"SharedString\",\n\t\tnodeKind: VisualNodeKind.FluidValueNode,\n\t\teditProps: { editTypes: [EditType.String] },\n\t};\n};\n\n/**\n * {@link VisualizeSharedObject} for {@link ITree}.\n *\n * TODO: [ADO 31468] Refactor the SharedTreeVisualizer to conform to SharedTree API\n */\nexport const visualizeSharedTree: VisualizeSharedObject = async (\n\tsharedObject: ISharedObject,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<FluidObjectNode> => {\n\tconst sharedTree = sharedObject as IChannelView as ITreeInternal;\n\tconst objectId = getKeyForFluidObject(sharedTree);\n\n\t// Root node of the SharedTree's content.\n\tconst treeView = sharedTree.exportVerbose();\n\t// All schema definitions for the SharedTree.\n\tconst treeSimpleSchema = sharedTree.exportSimpleSchema();\n\tconst treeDefinitions = treeSimpleSchema.definitions;\n\n\t/**\n\t * {@link visualizeSharedTreeBySchema} passes `allowedTypes` into co-recursive functions while constructing the visual representation.\n\t * Since the {@link SimpleTreeSchema.allowedTypes} of each children node is only accessible at the parent field level,\n\t * each node's allowed types are computed at the parent field level.\n\t */\n\tconst allowedTypes = new Set(treeSimpleSchema.root.simpleAllowedTypes.keys());\n\tconst isRequired = treeSimpleSchema.root.kind === FieldKind.Required;\n\n\tif (treeView === undefined) {\n\t\treturn {\n\t\t\tfluidObjectId: objectId,\n\t\t\ttypeMetadata: \"SharedTree\",\n\t\t\tnodeKind: VisualNodeKind.FluidTreeNode,\n\t\t\ttooltipContents: {\n\t\t\t\tschema: {\n\t\t\t\t\tnodeKind: VisualNodeKind.TreeNode,\n\t\t\t\t\tchildren: {\n\t\t\t\t\t\tallowedTypes: {\n\t\t\t\t\t\t\tnodeKind: VisualNodeKind.ValueNode,\n\t\t\t\t\t\t\tvalue: concatenateTypes(allowedTypes),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tisRequired: {\n\t\t\t\t\t\t\tnodeKind: VisualNodeKind.ValueNode,\n\t\t\t\t\t\t\tvalue: isRequired.toString(),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tchildren: {},\n\t\t};\n\t}\n\n\t// Create a root field visualization that shows the allowed types at the root\n\tconst visualTreeRepresentation: VisualSharedTreeNode = await visualizeSharedTreeBySchema(\n\t\ttreeView,\n\t\ttreeDefinitions,\n\t\t{ allowedTypes, isRequired },\n\t\tvisualizeChildData,\n\t);\n\n\t// Maps the `visualTreeRepresentation` in the format compatible to {@link visualizeChildData} function.\n\tconst visualTree = toVisualTree(visualTreeRepresentation);\n\n\t// TODO: Validate the type casting.\n\tconst visualTreeResult: FluidObjectNode = {\n\t\t...visualTree,\n\t\tfluidObjectId: objectId,\n\t\ttypeMetadata: \"SharedTree\",\n\t\tnodeKind: determineNodeKind(visualTree.nodeKind),\n\t} as unknown as FluidObjectNode;\n\n\treturn visualTreeResult;\n};\n\n/**\n * {@link VisualizeSharedObject} for unrecognized {@link ISharedObject}s.\n */\nexport const visualizeUnknownSharedObject: VisualizeSharedObject = async (\n\tsharedObject: ISharedObject,\n): Promise<FluidUnknownObjectNode> => {\n\treturn {\n\t\tfluidObjectId: getKeyForFluidObject(sharedObject),\n\t\ttypeMetadata: sharedObject.attributes.type,\n\t\tnodeKind: VisualNodeKind.FluidUnknownObjectNode,\n\t};\n};\n\n/**\n * List of default visualizers included in the library.\n * @remarks {@link @fluidframework/aqueduct#DataObject} & {@link @fluidframework/aqueduct#TreeDataObject} do not have type information and thus are not included in the list.\n */\nexport const defaultVisualizers: Record<string, VisualizeSharedObject> = {\n\t[SharedCell.getFactory().type]: visualizeSharedCell,\n\t[SharedCounter.getFactory().type]: visualizeSharedCounter,\n\t[SharedDirectory.getFactory().type]: visualizeSharedDirectory,\n\t[SharedMap.getFactory().type]: visualizeSharedMap,\n\t[SharedMatrix.getFactory().type]: visualizeSharedMatrix,\n\t[SharedString.getFactory().type]: visualizeSharedString,\n\t[SharedTree.getFactory().type]: visualizeSharedTree,\n\t// TODO: the others\n};\n"]}
@@ -165,7 +165,7 @@ async function visualizeObjectNode(tree, schema, treeDefinitions, { allowedTypes
165
165
  const objectNodeSchemaProperties = {};
166
166
  for (const [fieldKey, treeFieldSimpleSchema] of schema.fields) {
167
167
  objectNodeSchemaProperties[fieldKey] = {
168
- allowedTypes: treeFieldSimpleSchema.allowedTypesIdentifiers,
168
+ allowedTypes: new Set(treeFieldSimpleSchema.simpleAllowedTypes.keys()),
169
169
  isRequired: treeFieldSimpleSchema.kind === tree_1.FieldKind.Required ? true : false,
170
170
  };
171
171
  }
@@ -186,7 +186,7 @@ async function visualizeMapNode(tree, schema, treeDefinitions, { allowedTypes, i
186
186
  const mapNodeSchemaProperties = {};
187
187
  for (const key of Object.keys(tree.fields)) {
188
188
  mapNodeSchemaProperties[key] = {
189
- allowedTypes: schema.allowedTypesIdentifiers,
189
+ allowedTypes: new Set(schema.simpleAllowedTypes.keys()),
190
190
  // Map values are always required. Don't display field requirement information, since that information is redundant.
191
191
  isRequired: undefined,
192
192
  };
@@ -212,7 +212,7 @@ async function visualizeArrayNode(tree, schema, treeDefinitions, { allowedTypes,
212
212
  const arrayNodeSchemaProperties = {};
213
213
  for (const [i] of children.entries()) {
214
214
  arrayNodeSchemaProperties[i] = {
215
- allowedTypes: schema.allowedTypesIdentifiers,
215
+ allowedTypes: new Set(schema.simpleAllowedTypes.keys()),
216
216
  // Array values are always required. Don't display field requirement information, since that information is redundant.
217
217
  isRequired: undefined,
218
218
  };
@@ -1 +1 @@
1
- {"version":3,"file":"SharedTreeVisualizer.js","sourceRoot":"","sources":["../../src/data-visualization/SharedTreeVisualizer.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,+CAAiD;AASjD,4DAA8E;AAI9E,yEAAsE;AACtE,mDAOyB;AAEzB;;GAEG;AACH,SAAgB,iBAAiB,CAAC,QAAwB;IACzD,QAAQ,QAAQ,EAAE,CAAC;QAClB,KAAK,8BAAc,CAAC,QAAQ,CAAC;QAC7B,KAAK,8BAAc,CAAC,eAAe,CAAC,CAAC,CAAC;YACrC,OAAO,8BAAc,CAAC,aAAa,CAAC;QACrC,CAAC;QACD,KAAK,8BAAc,CAAC,SAAS,CAAC,CAAC,CAAC;YAC/B,OAAO,8BAAc,CAAC,cAAc,CAAC;QACtC,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;YACT,OAAO,8BAAc,CAAC,sBAAsB,CAAC;QAC9C,CAAC;IACF,CAAC;AACF,CAAC;AAbD,8CAaC;AAED;;;;GAIG;AACH,SAAS,4BAA4B,CACpC,YAA6C;IAE7C,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;QACtC,OAAO;YACN,KAAK,EAAE,YAAY;YACnB,QAAQ,EAAE,8BAAc,CAAC,SAAS;SAClC,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAoC,EAAE,CAAC;IACnD,KAAK,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QAC1E,MAAM,CAAC,cAAc,CAAC,GAAG;YACxB,QAAQ,EAAE,8BAAc,CAAC,SAAS;YAClC,KAAK,EAAE,WAAW;SAClB,CAAC;IACH,CAAC;IAED,OAAO;QACN,QAAQ,EAAE,MAAM;QAChB,QAAQ,EAAE,8BAAc,CAAC,QAAQ;KACjC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAAC,MAA4B;IAC1D,MAAM,QAAQ,GAAoC;QACjD,IAAI,EAAE;YACL,QAAQ,EAAE,8BAAc,CAAC,SAAS;YAClC,KAAK,EAAE,MAAM,CAAC,UAAU;SACxB;KACD,CAAC;IACF,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACvC,QAAQ,CAAC,YAAY,GAAG,4BAA4B,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAC3E,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACrC,QAAQ,CAAC,UAAU,GAAG;YACrB,QAAQ,EAAE,8BAAc,CAAC,SAAS;YAClC,KAAK,EAAE,MAAM,CAAC,UAAU;SACxB,CAAC;IACH,CAAC;IACD,OAAO;QACN,QAAQ,EAAE,8BAAc,CAAC,QAAQ;QACjC,QAAQ;KACR,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAgB,YAAY,CAAC,IAA0B;IACtD,IAAI,IAAI,CAAC,IAAI,KAAK,mDAAwB,CAAC,QAAQ,EAAE,CAAC;QACrD,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC7B,KAAK,8BAAc,CAAC,SAAS,CAAC,CAAC,CAAC;gBAC/B,MAAM,MAAM,GAAoB;oBAC/B,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK;oBACvB,QAAQ,EAAE,8BAAc,CAAC,SAAS;oBAClC,eAAe,EAAE;wBAChB,MAAM,EAAE,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC;qBAC1C;iBACD,CAAC;gBACF,OAAO,MAAM,CAAC;YACf,CAAC;YACD,KAAK,8BAAc,CAAC,eAAe,CAAC,CAAC,CAAC;gBACrC,MAAM,MAAM,GAAoB;oBAC/B,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa;oBACvC,QAAQ,EAAE,8BAAc,CAAC,eAAe;oBACxC,eAAe,EAAE;wBAChB,MAAM,EAAE,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC;qBAC1C;iBACD,CAAC;gBACF,OAAO,MAAM,CAAC;YACf,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACT,OAAO,CAAC,KAAK,CAAC,sBAAsB,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAC3D,MAAM,MAAM,GAAsB;oBACjC,QAAQ,EAAE,8BAAc,CAAC,iBAAiB;oBAC1C,eAAe,EAAE;wBAChB,MAAM,EAAE,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC;qBAC1C;iBACD,CAAC;gBACF,OAAO,MAAM,CAAC;YACf,CAAC;QACF,CAAC;IACF,CAAC;SAAM,CAAC;QACP,MAAM,QAAQ,GAAoC,EAAE,CAAC;QAErD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACxD,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YAClC,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACvB,CAAC;QAED,OAAO;YACN,QAAQ;YACR,QAAQ,EAAE,8BAAc,CAAC,QAAQ;YACjC,eAAe,EAAE;gBAChB,MAAM,EAAE,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC;aAC1C;SACD,CAAC;IACH,CAAC;AACF,CAAC;AAlDD,oCAkDC;AAED;;GAEG;AACH,SAAgB,gBAAgB,CAAC,UAA+B;IAC/D,OAAO,CAAC,GAAG,UAAU,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACpC,CAAC;AAFD,4CAEC;AAiBD;;;;;;;;;GASG;AACH,KAAK,UAAU,0BAA0B,CACxC,UAAgE,EAChE,eAAsD,EACtD,qBAA4D,EAC5D,kBAAsC;IAEtC,MAAM,MAAM,GAAkD,EAAE,CAAC;IAEjE,KAAK,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QACjE,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,2BAA2B,CACnD,UAAU,EACV,eAAe,EACf;YACC,YAAY,EAAE,qBAAqB,CAAC,QAAQ,CAAC,EAAE,YAAY;YAC3D,UAAU,EAAE,qBAAqB,CAAC,QAAQ,CAAC,EAAE,UAAU;SACvD,EACD,kBAAkB,CAClB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,mBAAmB,CACjC,IAAqB,EACrB,MAA8B,EAC9B,eAAsD,EACtD,EAAE,YAAY,EAAE,UAAU,EAAyB,EACnD,kBAAsC;IAEtC,MAAM,0BAA0B,GAA0C,EAAE,CAAC;IAC7E,KAAK,MAAM,CAAC,QAAQ,EAAE,qBAAqB,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAC/D,0BAA0B,CAAC,QAAQ,CAAC,GAAG;YACtC,YAAY,EAAE,qBAAqB,CAAC,uBAAuB;YAC3D,UAAU,EAAE,qBAAqB,CAAC,IAAI,KAAK,gBAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK;SAC5E,CAAC;IACH,CAAC;IAED,OAAO;QACN,MAAM,EAAE;YACP,UAAU,EAAE,IAAI,CAAC,IAAI;YACrB,YAAY,EAAE,gBAAgB,CAAC,YAAY,IAAI,IAAI,GAAG,EAAE,CAAC;YACzD,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE;SAClC;QACD,MAAM,EAAE,MAAM,0BAA0B,CACvC,IAAI,CAAC,MAAM,EACX,eAAe,EACf,0BAA0B,EAC1B,kBAAkB,CAClB;QACD,IAAI,EAAE,mDAAwB,CAAC,YAAY;KAC3C,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,gBAAgB,CAC9B,IAAqB,EACrB,MAA2B,EAC3B,eAAsD,EACtD,EAAE,YAAY,EAAE,UAAU,EAAyB,EACnD,kBAAsC;IAEtC,MAAM,uBAAuB,GAA0C,EAAE,CAAC;IAC1E,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5C,uBAAuB,CAAC,GAAG,CAAC,GAAG;YAC9B,YAAY,EAAE,MAAM,CAAC,uBAAuB;YAC5C,oHAAoH;YACpH,UAAU,EAAE,SAAS;SACrB,CAAC;IACH,CAAC;IAED,OAAO;QACN,MAAM,EAAE;YACP,UAAU,EAAE,IAAI,CAAC,IAAI;YACrB,YAAY,EAAE,gBAAgB,CAAC,YAAY,IAAI,IAAI,GAAG,EAAE,CAAC;YACzD,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE;SAClC;QACD,MAAM,EAAE,MAAM,0BAA0B,CACvC,IAAI,CAAC,MAAM,EACX,eAAe,EACf,uBAAuB,EACvB,kBAAkB,CAClB;QACD,IAAI,EAAE,mDAAwB,CAAC,YAAY;KAC3C,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,kBAAkB,CAChC,IAAqB,EACrB,MAA6B,EAC7B,eAAsD,EACtD,EAAE,YAAY,EAAE,UAAU,EAAyB,EACnD,kBAAsC;IAEtC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC;IAC7B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,SAAS,CAAC,eAAe,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,yBAAyB,GAA0C,EAAE,CAAC;IAC5E,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;QACtC,yBAAyB,CAAC,CAAC,CAAC,GAAG;YAC9B,YAAY,EAAE,MAAM,CAAC,uBAAuB;YAC5C,sHAAsH;YACtH,UAAU,EAAE,SAAS;SACrB,CAAC;IACH,CAAC;IAED,OAAO;QACN,MAAM,EAAE;YACP,UAAU,EAAE,IAAI,CAAC,IAAI;YACrB,YAAY,EAAE,gBAAgB,CAAC,YAAY,IAAI,IAAI,GAAG,EAAE,CAAC;YACzD,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE;SAClC;QACD,MAAM,EAAE,MAAM,0BAA0B,CACvC,IAAI,CAAC,MAAM,EACX,eAAe,EACf,yBAAyB,EACzB,kBAAkB,CAClB;QACD,IAAI,EAAE,mDAAwB,CAAC,YAAY;KAC3C,CAAC;AACH,CAAC;AAED;;;;;;;;;;GAUG;AACH,KAAK,UAAU,qBAAqB,CACnC,IAAqB,EACrB,eAAsD,EACtD,EAAE,YAAY,EAAE,UAAU,EAAyB,EACnD,kBAAsC;IAEtC,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE9C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,SAAS,CAAC,2BAA2B,CAAC,CAAC;IAClD,CAAC;IAED,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACrB,KAAK,mBAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;YACtB,MAAM,gBAAgB,GAAG,mBAAmB,CAC3C,IAAI,EACJ,MAAM,EACN,eAAe,EACf,EAAE,YAAY,EAAE,UAAU,EAAE,EAC5B,kBAAkB,CAClB,CAAC;YACF,OAAO,gBAAgB,CAAC;QACzB,CAAC;QACD,KAAK,mBAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;YACnB,MAAM,aAAa,GAAG,gBAAgB,CACrC,IAAI,EACJ,MAAM,EACN,eAAe,EACf,EAAE,YAAY,EAAE,UAAU,EAAE,EAC5B,kBAAkB,CAClB,CAAC;YACF,OAAO,aAAa,CAAC;QACtB,CAAC;QACD,KAAK,mBAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;YACrB,OAAO,kBAAkB,CACxB,IAAI,EACJ,MAAM,EACN,eAAe,EACf,EAAE,YAAY,EAAE,UAAU,EAAE,EAC5B,kBAAkB,CAClB,CAAC;QACH,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;YACT,MAAM,IAAI,SAAS,CAAC,2BAA2B,CAAC,CAAC;QAClD,CAAC;IACF,CAAC;AACF,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACI,KAAK,UAAU,2BAA2B,CAChD,IAAiB,EACjB,eAAsD,EACtD,EAAE,YAAY,EAAE,UAAU,EAAyB,EACnD,kBAAsC;IAEtC,OAAO,eAAI,CAAC,EAAE,CAAC,IAAI,EAAE,wBAAa,CAAC,MAAM,CAAC;QACzC,CAAC,CAAC;YACA,MAAM,EAAE;gBACP,UAAU,EAAE,eAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU;gBACxC,YAAY,EAAE,gBAAgB,CAAC,YAAY,IAAI,IAAI,GAAG,EAAE,CAAC;gBACzD,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE;aAClC;YACD,KAAK,EAAE,MAAM,kBAAkB,CAAC,IAAI,CAAC;YACrC,IAAI,EAAE,mDAAwB,CAAC,QAAQ;SACvC;QACF,CAAC,CAAC,qBAAqB,CACrB,IAAI,EACJ,eAAe,EACf,EAAE,YAAY,EAAE,UAAU,EAAE,EAC5B,kBAAkB,CAClB,CAAC;AACL,CAAC;AAtBD,kEAsBC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { FieldKind } from \"@fluidframework/tree\";\nimport type {\n\tSimpleArrayNodeSchema,\n\tSimpleMapNodeSchema,\n\tSimpleNodeSchema,\n\tSimpleObjectNodeSchema,\n\tVerboseTree,\n\tVerboseTreeNode,\n} from \"@fluidframework/tree/internal\";\nimport { NodeKind, SchemaFactory, Tree } from \"@fluidframework/tree/internal\";\n\nimport type { VisualizeChildData } from \"./DataVisualization.js\";\nimport type { VisualSharedTreeNode, SharedTreeSchemaNode } from \"./VisualSharedTreeTypes.js\";\nimport { VisualSharedTreeNodeKind } from \"./VisualSharedTreeTypes.js\";\nimport {\n\ttype VisualChildNode,\n\tVisualNodeKind,\n\ttype VisualValueNode,\n\ttype VisualTreeNode,\n\ttype FluidHandleNode,\n\ttype UnknownObjectNode,\n} from \"./VisualTree.js\";\n\n/**\n * Returns VisualNodeKind that is compatible to {@link FluidObjectNode} based on the `visualTree`'s node kind.\n */\nexport function determineNodeKind(nodeKind: VisualNodeKind): VisualNodeKind {\n\tswitch (nodeKind) {\n\t\tcase VisualNodeKind.TreeNode:\n\t\tcase VisualNodeKind.FluidHandleNode: {\n\t\t\treturn VisualNodeKind.FluidTreeNode;\n\t\t}\n\t\tcase VisualNodeKind.ValueNode: {\n\t\t\treturn VisualNodeKind.FluidValueNode;\n\t\t}\n\t\tdefault: {\n\t\t\treturn VisualNodeKind.FluidUnknownObjectNode;\n\t\t}\n\t}\n}\n\n/**\n * Returns allowed types of the non-leaf nodes in the tree.\n * @param allowedTypes - a string if array node, `Record<string, string>` for non-array nodes.\n * @returns a VisualChildNode with the allowed type.\n */\nfunction createAllowedTypesVisualTree(\n\tallowedTypes: string | Record<string, string>,\n): VisualChildNode {\n\tif (typeof allowedTypes === \"string\") {\n\t\treturn {\n\t\t\tvalue: allowedTypes,\n\t\t\tnodeKind: VisualNodeKind.ValueNode,\n\t\t};\n\t}\n\n\tconst result: Record<string, VisualValueNode> = {};\n\tfor (const [allowedTypeKey, allowedType] of Object.entries(allowedTypes)) {\n\t\tresult[allowedTypeKey] = {\n\t\t\tnodeKind: VisualNodeKind.ValueNode,\n\t\t\tvalue: allowedType,\n\t\t};\n\t}\n\n\treturn {\n\t\tchildren: result,\n\t\tnodeKind: VisualNodeKind.TreeNode,\n\t};\n}\n\n/**\n * Creates a visual representation of the schema of the tree in {@link VisualTreeNode} format.\n */\nfunction createToolTipContents(schema: SharedTreeSchemaNode): VisualTreeNode {\n\tconst children: Record<string, VisualChildNode> = {\n\t\tname: {\n\t\t\tnodeKind: VisualNodeKind.ValueNode,\n\t\t\tvalue: schema.schemaName,\n\t\t},\n\t};\n\tif (schema.allowedTypes !== undefined) {\n\t\tchildren.allowedTypes = createAllowedTypesVisualTree(schema.allowedTypes);\n\t}\n\tif (schema.isRequired !== undefined) {\n\t\tchildren.isRequired = {\n\t\t\tnodeKind: VisualNodeKind.ValueNode,\n\t\t\tvalue: schema.isRequired,\n\t\t};\n\t}\n\treturn {\n\t\tnodeKind: VisualNodeKind.TreeNode,\n\t\tchildren,\n\t};\n}\n\n/**\n * Converts the visual representation from {@link visualizeNodeBySchema} to a visual tree compatible with the devtools-view.\n * @param tree - the visual representation of the SharedTree.\n * @returns the visual representation of type {@link VisualChildNode}\n */\nexport function toVisualTree(tree: VisualSharedTreeNode): VisualChildNode {\n\tif (tree.kind === VisualSharedTreeNodeKind.LeafNode) {\n\t\tswitch (tree.value.nodeKind) {\n\t\t\tcase VisualNodeKind.ValueNode: {\n\t\t\t\tconst result: VisualValueNode = {\n\t\t\t\t\tvalue: tree.value.value,\n\t\t\t\t\tnodeKind: VisualNodeKind.ValueNode,\n\t\t\t\t\ttooltipContents: {\n\t\t\t\t\t\tschema: createToolTipContents(tree.schema),\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tcase VisualNodeKind.FluidHandleNode: {\n\t\t\t\tconst result: FluidHandleNode = {\n\t\t\t\t\tfluidObjectId: tree.value.fluidObjectId,\n\t\t\t\t\tnodeKind: VisualNodeKind.FluidHandleNode,\n\t\t\t\t\ttooltipContents: {\n\t\t\t\t\t\tschema: createToolTipContents(tree.schema),\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tconsole.error(`Unknown node kind: ${tree.value.nodeKind}`);\n\t\t\t\tconst result: UnknownObjectNode = {\n\t\t\t\t\tnodeKind: VisualNodeKind.UnknownObjectNode,\n\t\t\t\t\ttooltipContents: {\n\t\t\t\t\t\tschema: createToolTipContents(tree.schema),\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t} else {\n\t\tconst children: Record<string, VisualChildNode> = {};\n\n\t\tfor (const [key, value] of Object.entries(tree.fields)) {\n\t\t\tconst child = toVisualTree(value);\n\t\t\tchildren[key] = child;\n\t\t}\n\n\t\treturn {\n\t\t\tchildren,\n\t\t\tnodeKind: VisualNodeKind.TreeNode,\n\t\t\ttooltipContents: {\n\t\t\t\tschema: createToolTipContents(tree.schema),\n\t\t\t},\n\t\t};\n\t}\n}\n\n/**\n * Concatenate allowed types for `ObjectNodeStoredSchema` and `MapNodeStoredSchema`.\n */\nexport function concatenateTypes(fieldTypes: ReadonlySet<string>): string {\n\treturn [...fieldTypes].join(\" | \");\n}\n\n/**\n * Properties that describe schema constraints for a field in the tree\n */\ninterface FieldSchemaProperties {\n\tallowedTypes: ReadonlySet<string> | undefined;\n\n\t/**\n\t * Whether the field is required (true) or optional (false).\n\t *\n\t * `undefined` indicates that the field is implicitly required.\n\t * In this case, no requirement information will be displayed by the devtools.\n\t */\n\tisRequired: boolean | undefined;\n}\n\n/**\n * Processes and visualizes the fields of a verbose tree node.\n *\n * @param treeFields - The fields of the tree node to visualize. Can be either an array of VerboseTree (for array nodes) or a Record of field names to VerboseTree (for object/map nodes).\n * @param treeDefinitions - Map containing all schema definitions for the entire tree structure. Each definition describes the shape and constraints of a particular node type.\n * @param fieldSchemaProperties - Record mapping field names to their schema properties, including allowed types and whether they are required.\n * @param visualizeChildData - Callback function to visualize child node data.\n *\n * @returns A record mapping field names/indices to their visual tree representations.\n */\nasync function visualizeVerboseNodeFields(\n\ttreeFields: readonly VerboseTree[] | Record<string, VerboseTree>,\n\ttreeDefinitions: ReadonlyMap<string, SimpleNodeSchema>,\n\tfieldSchemaProperties: Record<string, FieldSchemaProperties>,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<Record<string, VisualSharedTreeNode>> {\n\tconst fields: Record<string | number, VisualSharedTreeNode> = {};\n\n\tfor (const [fieldKey, childField] of Object.entries(treeFields)) {\n\t\tfields[fieldKey] = await visualizeSharedTreeBySchema(\n\t\t\tchildField,\n\t\t\ttreeDefinitions,\n\t\t\t{\n\t\t\t\tallowedTypes: fieldSchemaProperties[fieldKey]?.allowedTypes,\n\t\t\t\tisRequired: fieldSchemaProperties[fieldKey]?.isRequired,\n\t\t\t},\n\t\t\tvisualizeChildData,\n\t\t);\n\t}\n\n\treturn fields;\n}\n\n/**\n * Returns the schema & fields of the node with type {@link ObjectNodeStoredSchema}.\n */\nasync function visualizeObjectNode(\n\ttree: VerboseTreeNode,\n\tschema: SimpleObjectNodeSchema,\n\ttreeDefinitions: ReadonlyMap<string, SimpleNodeSchema>,\n\t{ allowedTypes, isRequired }: FieldSchemaProperties,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<VisualSharedTreeNode> {\n\tconst objectNodeSchemaProperties: Record<string, FieldSchemaProperties> = {};\n\tfor (const [fieldKey, treeFieldSimpleSchema] of schema.fields) {\n\t\tobjectNodeSchemaProperties[fieldKey] = {\n\t\t\tallowedTypes: treeFieldSimpleSchema.allowedTypesIdentifiers,\n\t\t\tisRequired: treeFieldSimpleSchema.kind === FieldKind.Required ? true : false,\n\t\t};\n\t}\n\n\treturn {\n\t\tschema: {\n\t\t\tschemaName: tree.type,\n\t\t\tallowedTypes: concatenateTypes(allowedTypes ?? new Set()),\n\t\t\tisRequired: isRequired?.toString(),\n\t\t},\n\t\tfields: await visualizeVerboseNodeFields(\n\t\t\ttree.fields,\n\t\t\ttreeDefinitions,\n\t\t\tobjectNodeSchemaProperties,\n\t\t\tvisualizeChildData,\n\t\t),\n\t\tkind: VisualSharedTreeNodeKind.InternalNode,\n\t};\n}\n\n/**\n * Returns the schema & fields of the node with type {@link MapNodeStoredSchema}.\n */\nasync function visualizeMapNode(\n\ttree: VerboseTreeNode,\n\tschema: SimpleMapNodeSchema,\n\ttreeDefinitions: ReadonlyMap<string, SimpleNodeSchema>,\n\t{ allowedTypes, isRequired }: FieldSchemaProperties,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<VisualSharedTreeNode> {\n\tconst mapNodeSchemaProperties: Record<string, FieldSchemaProperties> = {};\n\tfor (const key of Object.keys(tree.fields)) {\n\t\tmapNodeSchemaProperties[key] = {\n\t\t\tallowedTypes: schema.allowedTypesIdentifiers,\n\t\t\t// Map values are always required. Don't display field requirement information, since that information is redundant.\n\t\t\tisRequired: undefined,\n\t\t};\n\t}\n\n\treturn {\n\t\tschema: {\n\t\t\tschemaName: tree.type,\n\t\t\tallowedTypes: concatenateTypes(allowedTypes ?? new Set()),\n\t\t\tisRequired: isRequired?.toString(),\n\t\t},\n\t\tfields: await visualizeVerboseNodeFields(\n\t\t\ttree.fields,\n\t\t\ttreeDefinitions,\n\t\t\tmapNodeSchemaProperties,\n\t\t\tvisualizeChildData,\n\t\t),\n\t\tkind: VisualSharedTreeNodeKind.InternalNode,\n\t};\n}\n\n/**\n * Returns the schema & fields of the node with type {@link ArrayNodeStoredSchema}.\n */\nasync function visualizeArrayNode(\n\ttree: VerboseTreeNode,\n\tschema: SimpleArrayNodeSchema,\n\ttreeDefinitions: ReadonlyMap<string, SimpleNodeSchema>,\n\t{ allowedTypes, isRequired }: FieldSchemaProperties,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<VisualSharedTreeNode> {\n\tconst children = tree.fields;\n\tif (!Array.isArray(children)) {\n\t\tthrow new TypeError(\"Invalid array\");\n\t}\n\n\tconst arrayNodeSchemaProperties: Record<string, FieldSchemaProperties> = {};\n\tfor (const [i] of children.entries()) {\n\t\tarrayNodeSchemaProperties[i] = {\n\t\t\tallowedTypes: schema.allowedTypesIdentifiers,\n\t\t\t// Array values are always required. Don't display field requirement information, since that information is redundant.\n\t\t\tisRequired: undefined,\n\t\t};\n\t}\n\n\treturn {\n\t\tschema: {\n\t\t\tschemaName: tree.type,\n\t\t\tallowedTypes: concatenateTypes(allowedTypes ?? new Set()),\n\t\t\tisRequired: isRequired?.toString(),\n\t\t},\n\t\tfields: await visualizeVerboseNodeFields(\n\t\t\ttree.fields,\n\t\t\ttreeDefinitions,\n\t\t\tarrayNodeSchemaProperties,\n\t\t\tvisualizeChildData,\n\t\t),\n\t\tkind: VisualSharedTreeNodeKind.InternalNode,\n\t};\n}\n\n/**\n * Creates the visual representation of non-leaf SharedTree nodes.\n *\n * @remarks\n * Processes internal tree nodes based on their schema type (e.g., ObjectNodeStoredSchema, MapNodeStoredSchema, ArrayNodeStoredSchema),\n * producing the visual representation for each type.\n *\n * @see {@link https://fluidframework.com/docs/data-structures/tree/} for more information on the SharedTree schema.\n *\n * @remarks\n */\nasync function visualizeNodeBySchema(\n\ttree: VerboseTreeNode,\n\ttreeDefinitions: ReadonlyMap<string, SimpleNodeSchema>,\n\t{ allowedTypes, isRequired }: FieldSchemaProperties,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<VisualSharedTreeNode> {\n\tconst schema = treeDefinitions.get(tree.type);\n\n\tif (schema === undefined) {\n\t\tthrow new TypeError(\"Unrecognized schema type.\");\n\t}\n\n\tswitch (schema.kind) {\n\t\tcase NodeKind.Object: {\n\t\t\tconst objectVisualized = visualizeObjectNode(\n\t\t\t\ttree,\n\t\t\t\tschema,\n\t\t\t\ttreeDefinitions,\n\t\t\t\t{ allowedTypes, isRequired },\n\t\t\t\tvisualizeChildData,\n\t\t\t);\n\t\t\treturn objectVisualized;\n\t\t}\n\t\tcase NodeKind.Map: {\n\t\t\tconst mapVisualized = visualizeMapNode(\n\t\t\t\ttree,\n\t\t\t\tschema,\n\t\t\t\ttreeDefinitions,\n\t\t\t\t{ allowedTypes, isRequired },\n\t\t\t\tvisualizeChildData,\n\t\t\t);\n\t\t\treturn mapVisualized;\n\t\t}\n\t\tcase NodeKind.Array: {\n\t\t\treturn visualizeArrayNode(\n\t\t\t\ttree,\n\t\t\t\tschema,\n\t\t\t\ttreeDefinitions,\n\t\t\t\t{ allowedTypes, isRequired },\n\t\t\t\tvisualizeChildData,\n\t\t\t);\n\t\t}\n\t\tdefault: {\n\t\t\tthrow new TypeError(\"Unrecognized schema type.\");\n\t\t}\n\t}\n}\n\n/**\n * Creates a visual representation of a SharedTree based on its schema.\n * @param tree - The {@link VerboseTree} to visualize\n * @param treeDefinitions - Map containing all schema definitions for the entire tree structure. Each definition\n * describes the shape and constraints of a particular node type.\n * @param fieldSchemaProperties - Properties describing schema constraints for this field:\n * - `allowedTypes`: Set of type names that are valid for this specific node position in the tree.\n * This is a subset of the types defined in treeDefinitions.\n * - `isRequired`: Whether this field is required in its parent object schema.\n * Only meaningful for direct children of object nodes.\n * Undefined for array/map elements since they are always required within their parent.\n * @param visualizeChildData - Callback function to visualize child node data\n * @returns A visual representation of the tree that includes schema information and node values\n *\n * @remarks\n * This function handles both leaf nodes (primitive values, handles) and internal nodes (objects, maps, arrays).\n * For leaf nodes, it creates a visual representation with the node's schema and value.\n * For internal nodes, it recursively processes the node's fields using {@link visualizeNodeBySchema}.\n */\nexport async function visualizeSharedTreeBySchema(\n\ttree: VerboseTree,\n\ttreeDefinitions: ReadonlyMap<string, SimpleNodeSchema>,\n\t{ allowedTypes, isRequired }: FieldSchemaProperties,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<VisualSharedTreeNode> {\n\treturn Tree.is(tree, SchemaFactory.leaves)\n\t\t? {\n\t\t\t\tschema: {\n\t\t\t\t\tschemaName: Tree.schema(tree).identifier,\n\t\t\t\t\tallowedTypes: concatenateTypes(allowedTypes ?? new Set()),\n\t\t\t\t\tisRequired: isRequired?.toString(),\n\t\t\t\t},\n\t\t\t\tvalue: await visualizeChildData(tree),\n\t\t\t\tkind: VisualSharedTreeNodeKind.LeafNode,\n\t\t\t}\n\t\t: visualizeNodeBySchema(\n\t\t\t\ttree,\n\t\t\t\ttreeDefinitions,\n\t\t\t\t{ allowedTypes, isRequired },\n\t\t\t\tvisualizeChildData,\n\t\t\t);\n}\n"]}
1
+ {"version":3,"file":"SharedTreeVisualizer.js","sourceRoot":"","sources":["../../src/data-visualization/SharedTreeVisualizer.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { FieldKind } from \"@fluidframework/tree\";\nimport type {\n\tSimpleArrayNodeSchema,\n\tSimpleMapNodeSchema,\n\tSimpleNodeSchema,\n\tSimpleObjectNodeSchema,\n\tVerboseTree,\n\tVerboseTreeNode,\n} from \"@fluidframework/tree/internal\";\nimport { NodeKind, SchemaFactory, Tree } from \"@fluidframework/tree/internal\";\n\nimport type { VisualizeChildData } from \"./DataVisualization.js\";\nimport type { VisualSharedTreeNode, SharedTreeSchemaNode } from \"./VisualSharedTreeTypes.js\";\nimport { VisualSharedTreeNodeKind } from \"./VisualSharedTreeTypes.js\";\nimport {\n\ttype VisualChildNode,\n\tVisualNodeKind,\n\ttype VisualValueNode,\n\ttype VisualTreeNode,\n\ttype FluidHandleNode,\n\ttype UnknownObjectNode,\n} from \"./VisualTree.js\";\n\n/**\n * Returns VisualNodeKind that is compatible to {@link FluidObjectNode} based on the `visualTree`'s node kind.\n */\nexport function determineNodeKind(nodeKind: VisualNodeKind): VisualNodeKind {\n\tswitch (nodeKind) {\n\t\tcase VisualNodeKind.TreeNode:\n\t\tcase VisualNodeKind.FluidHandleNode: {\n\t\t\treturn VisualNodeKind.FluidTreeNode;\n\t\t}\n\t\tcase VisualNodeKind.ValueNode: {\n\t\t\treturn VisualNodeKind.FluidValueNode;\n\t\t}\n\t\tdefault: {\n\t\t\treturn VisualNodeKind.FluidUnknownObjectNode;\n\t\t}\n\t}\n}\n\n/**\n * Returns allowed types of the non-leaf nodes in the tree.\n * @param allowedTypes - a string if array node, `Record<string, string>` for non-array nodes.\n * @returns a VisualChildNode with the allowed type.\n */\nfunction createAllowedTypesVisualTree(\n\tallowedTypes: string | Record<string, string>,\n): VisualChildNode {\n\tif (typeof allowedTypes === \"string\") {\n\t\treturn {\n\t\t\tvalue: allowedTypes,\n\t\t\tnodeKind: VisualNodeKind.ValueNode,\n\t\t};\n\t}\n\n\tconst result: Record<string, VisualValueNode> = {};\n\tfor (const [allowedTypeKey, allowedType] of Object.entries(allowedTypes)) {\n\t\tresult[allowedTypeKey] = {\n\t\t\tnodeKind: VisualNodeKind.ValueNode,\n\t\t\tvalue: allowedType,\n\t\t};\n\t}\n\n\treturn {\n\t\tchildren: result,\n\t\tnodeKind: VisualNodeKind.TreeNode,\n\t};\n}\n\n/**\n * Creates a visual representation of the schema of the tree in {@link VisualTreeNode} format.\n */\nfunction createToolTipContents(schema: SharedTreeSchemaNode): VisualTreeNode {\n\tconst children: Record<string, VisualChildNode> = {\n\t\tname: {\n\t\t\tnodeKind: VisualNodeKind.ValueNode,\n\t\t\tvalue: schema.schemaName,\n\t\t},\n\t};\n\tif (schema.allowedTypes !== undefined) {\n\t\tchildren.allowedTypes = createAllowedTypesVisualTree(schema.allowedTypes);\n\t}\n\tif (schema.isRequired !== undefined) {\n\t\tchildren.isRequired = {\n\t\t\tnodeKind: VisualNodeKind.ValueNode,\n\t\t\tvalue: schema.isRequired,\n\t\t};\n\t}\n\treturn {\n\t\tnodeKind: VisualNodeKind.TreeNode,\n\t\tchildren,\n\t};\n}\n\n/**\n * Converts the visual representation from {@link visualizeNodeBySchema} to a visual tree compatible with the devtools-view.\n * @param tree - the visual representation of the SharedTree.\n * @returns the visual representation of type {@link VisualChildNode}\n */\nexport function toVisualTree(tree: VisualSharedTreeNode): VisualChildNode {\n\tif (tree.kind === VisualSharedTreeNodeKind.LeafNode) {\n\t\tswitch (tree.value.nodeKind) {\n\t\t\tcase VisualNodeKind.ValueNode: {\n\t\t\t\tconst result: VisualValueNode = {\n\t\t\t\t\tvalue: tree.value.value,\n\t\t\t\t\tnodeKind: VisualNodeKind.ValueNode,\n\t\t\t\t\ttooltipContents: {\n\t\t\t\t\t\tschema: createToolTipContents(tree.schema),\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tcase VisualNodeKind.FluidHandleNode: {\n\t\t\t\tconst result: FluidHandleNode = {\n\t\t\t\t\tfluidObjectId: tree.value.fluidObjectId,\n\t\t\t\t\tnodeKind: VisualNodeKind.FluidHandleNode,\n\t\t\t\t\ttooltipContents: {\n\t\t\t\t\t\tschema: createToolTipContents(tree.schema),\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tconsole.error(`Unknown node kind: ${tree.value.nodeKind}`);\n\t\t\t\tconst result: UnknownObjectNode = {\n\t\t\t\t\tnodeKind: VisualNodeKind.UnknownObjectNode,\n\t\t\t\t\ttooltipContents: {\n\t\t\t\t\t\tschema: createToolTipContents(tree.schema),\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t} else {\n\t\tconst children: Record<string, VisualChildNode> = {};\n\n\t\tfor (const [key, value] of Object.entries(tree.fields)) {\n\t\t\tconst child = toVisualTree(value);\n\t\t\tchildren[key] = child;\n\t\t}\n\n\t\treturn {\n\t\t\tchildren,\n\t\t\tnodeKind: VisualNodeKind.TreeNode,\n\t\t\ttooltipContents: {\n\t\t\t\tschema: createToolTipContents(tree.schema),\n\t\t\t},\n\t\t};\n\t}\n}\n\n/**\n * Concatenate allowed types for `ObjectNodeStoredSchema` and `MapNodeStoredSchema`.\n */\nexport function concatenateTypes(fieldTypes: ReadonlySet<string>): string {\n\treturn [...fieldTypes].join(\" | \");\n}\n\n/**\n * Properties that describe schema constraints for a field in the tree\n */\ninterface FieldSchemaProperties {\n\tallowedTypes: ReadonlySet<string> | undefined;\n\n\t/**\n\t * Whether the field is required (true) or optional (false).\n\t *\n\t * `undefined` indicates that the field is implicitly required.\n\t * In this case, no requirement information will be displayed by the devtools.\n\t */\n\tisRequired: boolean | undefined;\n}\n\n/**\n * Processes and visualizes the fields of a verbose tree node.\n *\n * @param treeFields - The fields of the tree node to visualize. Can be either an array of VerboseTree (for array nodes) or a Record of field names to VerboseTree (for object/map nodes).\n * @param treeDefinitions - Map containing all schema definitions for the entire tree structure. Each definition describes the shape and constraints of a particular node type.\n * @param fieldSchemaProperties - Record mapping field names to their schema properties, including allowed types and whether they are required.\n * @param visualizeChildData - Callback function to visualize child node data.\n *\n * @returns A record mapping field names/indices to their visual tree representations.\n */\nasync function visualizeVerboseNodeFields(\n\ttreeFields: readonly VerboseTree[] | Record<string, VerboseTree>,\n\ttreeDefinitions: ReadonlyMap<string, SimpleNodeSchema>,\n\tfieldSchemaProperties: Record<string, FieldSchemaProperties>,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<Record<string, VisualSharedTreeNode>> {\n\tconst fields: Record<string | number, VisualSharedTreeNode> = {};\n\n\tfor (const [fieldKey, childField] of Object.entries(treeFields)) {\n\t\tfields[fieldKey] = await visualizeSharedTreeBySchema(\n\t\t\tchildField,\n\t\t\ttreeDefinitions,\n\t\t\t{\n\t\t\t\tallowedTypes: fieldSchemaProperties[fieldKey]?.allowedTypes,\n\t\t\t\tisRequired: fieldSchemaProperties[fieldKey]?.isRequired,\n\t\t\t},\n\t\t\tvisualizeChildData,\n\t\t);\n\t}\n\n\treturn fields;\n}\n\n/**\n * Returns the schema & fields of the node with type {@link ObjectNodeStoredSchema}.\n */\nasync function visualizeObjectNode(\n\ttree: VerboseTreeNode,\n\tschema: SimpleObjectNodeSchema,\n\ttreeDefinitions: ReadonlyMap<string, SimpleNodeSchema>,\n\t{ allowedTypes, isRequired }: FieldSchemaProperties,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<VisualSharedTreeNode> {\n\tconst objectNodeSchemaProperties: Record<string, FieldSchemaProperties> = {};\n\tfor (const [fieldKey, treeFieldSimpleSchema] of schema.fields) {\n\t\tobjectNodeSchemaProperties[fieldKey] = {\n\t\t\tallowedTypes: new Set(treeFieldSimpleSchema.simpleAllowedTypes.keys()),\n\t\t\tisRequired: treeFieldSimpleSchema.kind === FieldKind.Required ? true : false,\n\t\t};\n\t}\n\n\treturn {\n\t\tschema: {\n\t\t\tschemaName: tree.type,\n\t\t\tallowedTypes: concatenateTypes(allowedTypes ?? new Set()),\n\t\t\tisRequired: isRequired?.toString(),\n\t\t},\n\t\tfields: await visualizeVerboseNodeFields(\n\t\t\ttree.fields,\n\t\t\ttreeDefinitions,\n\t\t\tobjectNodeSchemaProperties,\n\t\t\tvisualizeChildData,\n\t\t),\n\t\tkind: VisualSharedTreeNodeKind.InternalNode,\n\t};\n}\n\n/**\n * Returns the schema & fields of the node with type {@link MapNodeStoredSchema}.\n */\nasync function visualizeMapNode(\n\ttree: VerboseTreeNode,\n\tschema: SimpleMapNodeSchema,\n\ttreeDefinitions: ReadonlyMap<string, SimpleNodeSchema>,\n\t{ allowedTypes, isRequired }: FieldSchemaProperties,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<VisualSharedTreeNode> {\n\tconst mapNodeSchemaProperties: Record<string, FieldSchemaProperties> = {};\n\tfor (const key of Object.keys(tree.fields)) {\n\t\tmapNodeSchemaProperties[key] = {\n\t\t\tallowedTypes: new Set(schema.simpleAllowedTypes.keys()),\n\t\t\t// Map values are always required. Don't display field requirement information, since that information is redundant.\n\t\t\tisRequired: undefined,\n\t\t};\n\t}\n\n\treturn {\n\t\tschema: {\n\t\t\tschemaName: tree.type,\n\t\t\tallowedTypes: concatenateTypes(allowedTypes ?? new Set()),\n\t\t\tisRequired: isRequired?.toString(),\n\t\t},\n\t\tfields: await visualizeVerboseNodeFields(\n\t\t\ttree.fields,\n\t\t\ttreeDefinitions,\n\t\t\tmapNodeSchemaProperties,\n\t\t\tvisualizeChildData,\n\t\t),\n\t\tkind: VisualSharedTreeNodeKind.InternalNode,\n\t};\n}\n\n/**\n * Returns the schema & fields of the node with type {@link ArrayNodeStoredSchema}.\n */\nasync function visualizeArrayNode(\n\ttree: VerboseTreeNode,\n\tschema: SimpleArrayNodeSchema,\n\ttreeDefinitions: ReadonlyMap<string, SimpleNodeSchema>,\n\t{ allowedTypes, isRequired }: FieldSchemaProperties,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<VisualSharedTreeNode> {\n\tconst children = tree.fields;\n\tif (!Array.isArray(children)) {\n\t\tthrow new TypeError(\"Invalid array\");\n\t}\n\n\tconst arrayNodeSchemaProperties: Record<string, FieldSchemaProperties> = {};\n\tfor (const [i] of children.entries()) {\n\t\tarrayNodeSchemaProperties[i] = {\n\t\t\tallowedTypes: new Set(schema.simpleAllowedTypes.keys()),\n\t\t\t// Array values are always required. Don't display field requirement information, since that information is redundant.\n\t\t\tisRequired: undefined,\n\t\t};\n\t}\n\n\treturn {\n\t\tschema: {\n\t\t\tschemaName: tree.type,\n\t\t\tallowedTypes: concatenateTypes(allowedTypes ?? new Set()),\n\t\t\tisRequired: isRequired?.toString(),\n\t\t},\n\t\tfields: await visualizeVerboseNodeFields(\n\t\t\ttree.fields,\n\t\t\ttreeDefinitions,\n\t\t\tarrayNodeSchemaProperties,\n\t\t\tvisualizeChildData,\n\t\t),\n\t\tkind: VisualSharedTreeNodeKind.InternalNode,\n\t};\n}\n\n/**\n * Creates the visual representation of non-leaf SharedTree nodes.\n *\n * @remarks\n * Processes internal tree nodes based on their schema type (e.g., ObjectNodeStoredSchema, MapNodeStoredSchema, ArrayNodeStoredSchema),\n * producing the visual representation for each type.\n *\n * @see {@link https://fluidframework.com/docs/data-structures/tree/} for more information on the SharedTree schema.\n *\n * @remarks\n */\nasync function visualizeNodeBySchema(\n\ttree: VerboseTreeNode,\n\ttreeDefinitions: ReadonlyMap<string, SimpleNodeSchema>,\n\t{ allowedTypes, isRequired }: FieldSchemaProperties,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<VisualSharedTreeNode> {\n\tconst schema = treeDefinitions.get(tree.type);\n\n\tif (schema === undefined) {\n\t\tthrow new TypeError(\"Unrecognized schema type.\");\n\t}\n\n\tswitch (schema.kind) {\n\t\tcase NodeKind.Object: {\n\t\t\tconst objectVisualized = visualizeObjectNode(\n\t\t\t\ttree,\n\t\t\t\tschema,\n\t\t\t\ttreeDefinitions,\n\t\t\t\t{ allowedTypes, isRequired },\n\t\t\t\tvisualizeChildData,\n\t\t\t);\n\t\t\treturn objectVisualized;\n\t\t}\n\t\tcase NodeKind.Map: {\n\t\t\tconst mapVisualized = visualizeMapNode(\n\t\t\t\ttree,\n\t\t\t\tschema,\n\t\t\t\ttreeDefinitions,\n\t\t\t\t{ allowedTypes, isRequired },\n\t\t\t\tvisualizeChildData,\n\t\t\t);\n\t\t\treturn mapVisualized;\n\t\t}\n\t\tcase NodeKind.Array: {\n\t\t\treturn visualizeArrayNode(\n\t\t\t\ttree,\n\t\t\t\tschema,\n\t\t\t\ttreeDefinitions,\n\t\t\t\t{ allowedTypes, isRequired },\n\t\t\t\tvisualizeChildData,\n\t\t\t);\n\t\t}\n\t\tdefault: {\n\t\t\tthrow new TypeError(\"Unrecognized schema type.\");\n\t\t}\n\t}\n}\n\n/**\n * Creates a visual representation of a SharedTree based on its schema.\n * @param tree - The {@link VerboseTree} to visualize\n * @param treeDefinitions - Map containing all schema definitions for the entire tree structure. Each definition\n * describes the shape and constraints of a particular node type.\n * @param fieldSchemaProperties - Properties describing schema constraints for this field:\n * - `allowedTypes`: Set of type names that are valid for this specific node position in the tree.\n * This is a subset of the types defined in treeDefinitions.\n * - `isRequired`: Whether this field is required in its parent object schema.\n * Only meaningful for direct children of object nodes.\n * Undefined for array/map elements since they are always required within their parent.\n * @param visualizeChildData - Callback function to visualize child node data\n * @returns A visual representation of the tree that includes schema information and node values\n *\n * @remarks\n * This function handles both leaf nodes (primitive values, handles) and internal nodes (objects, maps, arrays).\n * For leaf nodes, it creates a visual representation with the node's schema and value.\n * For internal nodes, it recursively processes the node's fields using {@link visualizeNodeBySchema}.\n */\nexport async function visualizeSharedTreeBySchema(\n\ttree: VerboseTree,\n\ttreeDefinitions: ReadonlyMap<string, SimpleNodeSchema>,\n\t{ allowedTypes, isRequired }: FieldSchemaProperties,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<VisualSharedTreeNode> {\n\treturn Tree.is(tree, SchemaFactory.leaves)\n\t\t? {\n\t\t\t\tschema: {\n\t\t\t\t\tschemaName: Tree.schema(tree).identifier,\n\t\t\t\t\tallowedTypes: concatenateTypes(allowedTypes ?? new Set()),\n\t\t\t\t\tisRequired: isRequired?.toString(),\n\t\t\t\t},\n\t\t\t\tvalue: await visualizeChildData(tree),\n\t\t\t\tkind: VisualSharedTreeNodeKind.LeafNode,\n\t\t\t}\n\t\t: visualizeNodeBySchema(\n\t\t\t\ttree,\n\t\t\t\ttreeDefinitions,\n\t\t\t\t{ allowedTypes, isRequired },\n\t\t\t\tvisualizeChildData,\n\t\t\t);\n}\n"]}
@@ -5,5 +5,5 @@
5
5
  * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY
6
6
  */
7
7
  export declare const pkgName = "@fluidframework/devtools-core";
8
- export declare const pkgVersion = "2.70.0-361788";
8
+ export declare const pkgVersion = "2.71.0";
9
9
  //# sourceMappingURL=packageVersion.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"packageVersion.d.ts","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,OAAO,kCAAkC,CAAC;AACvD,eAAO,MAAM,UAAU,kBAAkB,CAAC"}
1
+ {"version":3,"file":"packageVersion.d.ts","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,OAAO,kCAAkC,CAAC;AACvD,eAAO,MAAM,UAAU,WAAW,CAAC"}
@@ -8,5 +8,5 @@
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.pkgVersion = exports.pkgName = void 0;
10
10
  exports.pkgName = "@fluidframework/devtools-core";
11
- exports.pkgVersion = "2.70.0-361788";
11
+ exports.pkgVersion = "2.71.0";
12
12
  //# sourceMappingURL=packageVersion.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"packageVersion.js","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEU,QAAA,OAAO,GAAG,+BAA+B,CAAC;AAC1C,QAAA,UAAU,GAAG,eAAe,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n *\n * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY\n */\n\nexport const pkgName = \"@fluidframework/devtools-core\";\nexport const pkgVersion = \"2.70.0-361788\";\n"]}
1
+ {"version":3,"file":"packageVersion.js","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEU,QAAA,OAAO,GAAG,+BAA+B,CAAC;AAC1C,QAAA,UAAU,GAAG,QAAQ,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n *\n * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY\n */\n\nexport const pkgName = \"@fluidframework/devtools-core\";\nexport const pkgVersion = \"2.71.0\";\n"]}
@@ -231,7 +231,7 @@ export const visualizeSharedTree = async (sharedObject, visualizeChildData) => {
231
231
  * Since the {@link SimpleTreeSchema.allowedTypes} of each children node is only accessible at the parent field level,
232
232
  * each node's allowed types are computed at the parent field level.
233
233
  */
234
- const allowedTypes = treeSimpleSchema.root.allowedTypesIdentifiers;
234
+ const allowedTypes = new Set(treeSimpleSchema.root.simpleAllowedTypes.keys());
235
235
  const isRequired = treeSimpleSchema.root.kind === FieldKind.Required;
236
236
  if (treeView === undefined) {
237
237
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultVisualizers.js","sourceRoot":"","sources":["../../src/data-visualization/DefaultVisualizers.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/**\n * This module contains default {@link VisualizeSharedObject | visualization}\n * implementations for our DDSs.\n */\n\nimport { SharedCell, type ISharedCell } from \"@fluidframework/cell/internal\";\nimport { SharedCounter } from \"@fluidframework/counter/internal\";\nimport {\n\ttype IDirectory,\n\ttype ISharedMap,\n\tSharedMap,\n\ttype ISharedDirectory,\n\tSharedDirectory,\n} from \"@fluidframework/map/internal\";\nimport { SharedMatrix } from \"@fluidframework/matrix/internal\";\nimport { SharedString } from \"@fluidframework/sequence/internal\";\nimport type { ISharedObject, IChannelView } from \"@fluidframework/shared-object-base/internal\";\nimport type { ITreeInternal } from \"@fluidframework/tree/internal\";\nimport { FieldKind, SharedTree } from \"@fluidframework/tree/internal\";\n\nimport { EditType } from \"../CommonInterfaces.js\";\nimport { getKeyForFluidObject } from \"../FluidObjectKey.js\";\n\nimport type { VisualizeChildData, VisualizeSharedObject } from \"./DataVisualization.js\";\nimport {\n\tconcatenateTypes,\n\tdetermineNodeKind,\n\ttoVisualTree,\n\tvisualizeSharedTreeBySchema,\n} from \"./SharedTreeVisualizer.js\";\nimport type { VisualSharedTreeNode } from \"./VisualSharedTreeTypes.js\";\nimport {\n\ttype FluidObjectNode,\n\ttype FluidObjectTreeNode,\n\ttype FluidObjectValueNode,\n\ttype FluidUnknownObjectNode,\n\ttype VisualChildNode,\n\tVisualNodeKind,\n\ttype VisualTreeNode,\n} from \"./VisualTree.js\";\n\n/**\n * Default {@link VisualizeSharedObject} for {@link SharedCell}.\n */\nexport const visualizeSharedCell: VisualizeSharedObject = async (\n\tsharedObject: ISharedObject,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<FluidObjectNode> => {\n\tconst sharedCell = sharedObject as ISharedCell<unknown>;\n\tconst data = sharedCell.get();\n\tconst fluidObjectId = getKeyForFluidObject(sharedCell);\n\n\tconst renderedData = await visualizeChildData(data);\n\n\tconst editProps = {\n\t\teditTypes: undefined,\n\t};\n\n\t// By separating cases it lets us avoid unnecessary hierarchy by flattening the tree\n\tswitch (renderedData.nodeKind) {\n\t\tcase VisualNodeKind.FluidHandleNode: {\n\t\t\treturn {\n\t\t\t\tchildren: {\n\t\t\t\t\tdata: renderedData,\n\t\t\t\t},\n\t\t\t\tfluidObjectId,\n\t\t\t\ttypeMetadata: \"SharedCell\",\n\t\t\t\tnodeKind: VisualNodeKind.FluidTreeNode,\n\t\t\t\teditProps,\n\t\t\t};\n\t\t}\n\t\tcase VisualNodeKind.ValueNode: {\n\t\t\treturn {\n\t\t\t\t...renderedData,\n\t\t\t\tfluidObjectId,\n\t\t\t\ttypeMetadata: \"SharedCell\",\n\t\t\t\tnodeKind: VisualNodeKind.FluidValueNode,\n\t\t\t\teditProps,\n\t\t\t};\n\t\t}\n\t\tcase VisualNodeKind.TreeNode: {\n\t\t\treturn {\n\t\t\t\t...renderedData,\n\t\t\t\tfluidObjectId,\n\t\t\t\ttypeMetadata: \"SharedCell\",\n\t\t\t\tnodeKind: VisualNodeKind.FluidTreeNode,\n\t\t\t\teditProps,\n\t\t\t};\n\t\t}\n\t\tcase VisualNodeKind.UnknownObjectNode: {\n\t\t\treturn {\n\t\t\t\tfluidObjectId,\n\t\t\t\ttypeMetadata: \"SharedCell\",\n\t\t\t\tnodeKind: VisualNodeKind.FluidUnknownObjectNode,\n\t\t\t};\n\t\t}\n\t\tdefault: {\n\t\t\tthrow new Error(\"Unrecognized node kind.\");\n\t\t}\n\t}\n};\n\n/**\n * Default {@link VisualizeSharedObject} for {@link DataObject}.\n */\nexport const visualizeDataObject: VisualizeSharedObject = async (\n\tdataObjectRoot: ISharedObject,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<FluidObjectTreeNode> => {\n\tconst renderedChildData = (await visualizeSharedDirectory(\n\t\tdataObjectRoot,\n\t\tvisualizeChildData,\n\t)) as FluidObjectTreeNode;\n\n\treturn {\n\t\tfluidObjectId: getKeyForFluidObject(dataObjectRoot),\n\t\tchildren: renderedChildData.children,\n\t\tmetadata: renderedChildData.metadata,\n\t\ttypeMetadata: \"DataObject\",\n\t\tnodeKind: VisualNodeKind.FluidTreeNode,\n\t};\n};\n\n/**\n * Default {@link VisualizeSharedObject} for {@link TreeDataObject}.\n */\nexport const visualizeTreeDataObject: VisualizeSharedObject = async (\n\trootTree: ISharedObject,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<FluidObjectTreeNode> => {\n\tconst renderedChildData = (await visualizeSharedTree(\n\t\trootTree,\n\t\tvisualizeChildData,\n\t)) as FluidObjectTreeNode;\n\n\treturn {\n\t\tfluidObjectId: getKeyForFluidObject(rootTree),\n\t\tchildren: renderedChildData.children,\n\t\tmetadata: renderedChildData.metadata,\n\t\ttypeMetadata: \"TreeDataObject\",\n\t\tnodeKind: VisualNodeKind.FluidTreeNode,\n\t};\n};\n\n/**\n * Default {@link VisualizeSharedObject} for {@link SharedCounter}.\n */\nexport const visualizeSharedCounter: VisualizeSharedObject = async (\n\tsharedObject: ISharedObject,\n): Promise<FluidObjectValueNode> => {\n\tconst sharedCounter = sharedObject as SharedCounter;\n\treturn {\n\t\tfluidObjectId: getKeyForFluidObject(sharedCounter),\n\t\tvalue: sharedCounter.value,\n\t\ttypeMetadata: \"SharedCounter\",\n\t\tnodeKind: VisualNodeKind.FluidValueNode,\n\t\teditProps: { editTypes: [EditType.Number] },\n\t};\n};\n\n/**\n * Default {@link VisualizeSharedObject} for {@link SharedDirectory}.\n */\nexport const visualizeSharedDirectory: VisualizeSharedObject = async (\n\tsharedObject: ISharedObject,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<FluidObjectTreeNode> => {\n\tconst sharedDirectory = sharedObject as ISharedDirectory;\n\tconst renderedChildData = await visualizeDirectory(sharedDirectory, visualizeChildData);\n\treturn {\n\t\tfluidObjectId: getKeyForFluidObject(sharedDirectory),\n\t\tchildren: renderedChildData.children,\n\t\tmetadata: renderedChildData.metadata,\n\t\ttypeMetadata: \"SharedDirectory\",\n\t\tnodeKind: VisualNodeKind.FluidTreeNode,\n\t};\n};\n\n/**\n * Generates a visual summary for an {@link @fluidframework/map#IDirectory}.\n *\n * @remarks Used by {@link visualizeSharedDirectory} to recurse down non-Shared-Object subdirectories.\n */\nasync function visualizeDirectory(\n\tdirectory: IDirectory,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<VisualTreeNode> {\n\tconst children: Record<string, VisualChildNode> = {};\n\n\t// Generate child entries for directory value content\n\tfor (const [key, value] of directory) {\n\t\tconst renderedChild = await visualizeChildData(value);\n\t\tchildren[key] = renderedChild;\n\t}\n\n\t// Generate child entries for sub-directory\n\tconst subDirectories = directory.subdirectories();\n\tfor (const [path, subDirectory] of subDirectories) {\n\t\tconst renderedChild = await visualizeDirectory(subDirectory, visualizeChildData);\n\t\tchildren[path] = renderedChild;\n\t}\n\n\treturn {\n\t\tchildren,\n\t\tmetadata: {\n\t\t\t\"absolute-path\": directory.absolutePath,\n\t\t\t\"values\": directory.size,\n\t\t\t\"sub-directories\": directory.countSubDirectory?.(),\n\t\t},\n\t\ttypeMetadata: \"IDirectory\",\n\t\tnodeKind: VisualNodeKind.TreeNode,\n\t};\n}\n\n/**\n * Default {@link VisualizeSharedObject} for {@link SharedMap}.\n */\nexport const visualizeSharedMap: VisualizeSharedObject = async (\n\tsharedObject: ISharedObject,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<FluidObjectTreeNode> => {\n\tconst sharedMap = sharedObject as ISharedMap;\n\n\tconst children: Record<string, VisualChildNode> = {};\n\tfor (const [key, value] of sharedMap) {\n\t\tconst renderedChild = await visualizeChildData(value);\n\t\tchildren[key] = renderedChild;\n\t}\n\n\treturn {\n\t\tfluidObjectId: getKeyForFluidObject(sharedMap),\n\t\tchildren,\n\t\tmetadata: {\n\t\t\tsize: sharedMap.size,\n\t\t},\n\t\ttypeMetadata: \"SharedMap\",\n\t\tnodeKind: VisualNodeKind.FluidTreeNode,\n\t};\n};\n\n/**\n * Default {@link VisualizeSharedObject} for {@link SharedMap}.\n */\nexport const visualizeSharedMatrix: VisualizeSharedObject = async (\n\tsharedObject: ISharedObject,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<FluidObjectTreeNode> => {\n\tconst sharedMatrix = sharedObject as unknown as SharedMatrix;\n\n\tconst { rowCount, colCount: columnCount } = sharedMatrix;\n\tconst objectId = getKeyForFluidObject(sharedMatrix);\n\n\t// Output will list cells as a flat list, keyed by their row,column indices (e.g. `[0,1]`)\n\tconst cells: Record<string, VisualChildNode> = {};\n\tfor (let rowIndex = 0; rowIndex < rowCount; rowIndex++) {\n\t\tfor (let columnIndex = 0; columnIndex < columnCount; columnIndex++) {\n\t\t\tconst cell = sharedMatrix.getCell(rowIndex, columnIndex) as unknown;\n\t\t\tconst renderedCell = await visualizeChildData(cell);\n\t\t\tcells[`[${rowIndex},${columnIndex}]`] = renderedCell;\n\t\t}\n\t}\n\n\treturn {\n\t\tfluidObjectId: objectId,\n\t\tchildren: cells,\n\t\tmetadata: {\n\t\t\trows: rowCount,\n\t\t\tcolumns: columnCount,\n\t\t},\n\t\ttypeMetadata: \"SharedMatrix\",\n\t\tnodeKind: VisualNodeKind.FluidTreeNode,\n\t};\n};\n\n/**\n * Default {@link VisualizeSharedObject} for {@link SharedString}.\n */\nexport const visualizeSharedString: VisualizeSharedObject = async (\n\tsharedObject: ISharedObject,\n): Promise<FluidObjectValueNode> => {\n\tconst sharedString = sharedObject as SharedString;\n\tconst text = sharedString.getText();\n\n\treturn {\n\t\tfluidObjectId: getKeyForFluidObject(sharedString),\n\t\tvalue: text,\n\t\ttypeMetadata: \"SharedString\",\n\t\tnodeKind: VisualNodeKind.FluidValueNode,\n\t\teditProps: { editTypes: [EditType.String] },\n\t};\n};\n\n/**\n * {@link VisualizeSharedObject} for {@link ITree}.\n *\n * TODO: [ADO 31468] Refactor the SharedTreeVisualizer to conform to SharedTree API\n */\nexport const visualizeSharedTree: VisualizeSharedObject = async (\n\tsharedObject: ISharedObject,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<FluidObjectNode> => {\n\tconst sharedTree = sharedObject as IChannelView as ITreeInternal;\n\tconst objectId = getKeyForFluidObject(sharedTree);\n\n\t// Root node of the SharedTree's content.\n\tconst treeView = sharedTree.exportVerbose();\n\t// All schema definitions for the SharedTree.\n\tconst treeSimpleSchema = sharedTree.exportSimpleSchema();\n\tconst treeDefinitions = treeSimpleSchema.definitions;\n\n\t/**\n\t * {@link visualizeSharedTreeBySchema} passes `allowedTypes` into co-recursive functions while constructing the visual representation.\n\t * Since the {@link SimpleTreeSchema.allowedTypes} of each children node is only accessible at the parent field level,\n\t * each node's allowed types are computed at the parent field level.\n\t */\n\tconst allowedTypes = treeSimpleSchema.root.allowedTypesIdentifiers;\n\tconst isRequired = treeSimpleSchema.root.kind === FieldKind.Required;\n\n\tif (treeView === undefined) {\n\t\treturn {\n\t\t\tfluidObjectId: objectId,\n\t\t\ttypeMetadata: \"SharedTree\",\n\t\t\tnodeKind: VisualNodeKind.FluidTreeNode,\n\t\t\ttooltipContents: {\n\t\t\t\tschema: {\n\t\t\t\t\tnodeKind: VisualNodeKind.TreeNode,\n\t\t\t\t\tchildren: {\n\t\t\t\t\t\tallowedTypes: {\n\t\t\t\t\t\t\tnodeKind: VisualNodeKind.ValueNode,\n\t\t\t\t\t\t\tvalue: concatenateTypes(allowedTypes),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tisRequired: {\n\t\t\t\t\t\t\tnodeKind: VisualNodeKind.ValueNode,\n\t\t\t\t\t\t\tvalue: isRequired.toString(),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tchildren: {},\n\t\t};\n\t}\n\n\t// Create a root field visualization that shows the allowed types at the root\n\tconst visualTreeRepresentation: VisualSharedTreeNode = await visualizeSharedTreeBySchema(\n\t\ttreeView,\n\t\ttreeDefinitions,\n\t\t{ allowedTypes, isRequired },\n\t\tvisualizeChildData,\n\t);\n\n\t// Maps the `visualTreeRepresentation` in the format compatible to {@link visualizeChildData} function.\n\tconst visualTree = toVisualTree(visualTreeRepresentation);\n\n\t// TODO: Validate the type casting.\n\tconst visualTreeResult: FluidObjectNode = {\n\t\t...visualTree,\n\t\tfluidObjectId: objectId,\n\t\ttypeMetadata: \"SharedTree\",\n\t\tnodeKind: determineNodeKind(visualTree.nodeKind),\n\t} as unknown as FluidObjectNode;\n\n\treturn visualTreeResult;\n};\n\n/**\n * {@link VisualizeSharedObject} for unrecognized {@link ISharedObject}s.\n */\nexport const visualizeUnknownSharedObject: VisualizeSharedObject = async (\n\tsharedObject: ISharedObject,\n): Promise<FluidUnknownObjectNode> => {\n\treturn {\n\t\tfluidObjectId: getKeyForFluidObject(sharedObject),\n\t\ttypeMetadata: sharedObject.attributes.type,\n\t\tnodeKind: VisualNodeKind.FluidUnknownObjectNode,\n\t};\n};\n\n/**\n * List of default visualizers included in the library.\n * @remarks {@link @fluidframework/aqueduct#DataObject} & {@link @fluidframework/aqueduct#TreeDataObject} do not have type information and thus are not included in the list.\n */\nexport const defaultVisualizers: Record<string, VisualizeSharedObject> = {\n\t[SharedCell.getFactory().type]: visualizeSharedCell,\n\t[SharedCounter.getFactory().type]: visualizeSharedCounter,\n\t[SharedDirectory.getFactory().type]: visualizeSharedDirectory,\n\t[SharedMap.getFactory().type]: visualizeSharedMap,\n\t[SharedMatrix.getFactory().type]: visualizeSharedMatrix,\n\t[SharedString.getFactory().type]: visualizeSharedString,\n\t[SharedTree.getFactory().type]: visualizeSharedTree,\n\t// TODO: the others\n};\n"]}
1
+ {"version":3,"file":"DefaultVisualizers.js","sourceRoot":"","sources":["../../src/data-visualization/DefaultVisualizers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAoB,MAAM,+BAA+B,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAGN,SAAS,EAET,eAAe,GACf,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAGjE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAEtE,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAG5D,OAAO,EACN,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,2BAA2B,GAC3B,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAMN,cAAc,GAEd,MAAM,iBAAiB,CAAC;AAEzB;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAA0B,KAAK,EAC9D,YAA2B,EAC3B,kBAAsC,EACX,EAAE;IAC7B,MAAM,UAAU,GAAG,YAAoC,CAAC;IACxD,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC;IAC9B,MAAM,aAAa,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;IAEvD,MAAM,YAAY,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAEpD,MAAM,SAAS,GAAG;QACjB,SAAS,EAAE,SAAS;KACpB,CAAC;IAEF,oFAAoF;IACpF,QAAQ,YAAY,CAAC,QAAQ,EAAE,CAAC;QAC/B,KAAK,cAAc,CAAC,eAAe,CAAC,CAAC,CAAC;YACrC,OAAO;gBACN,QAAQ,EAAE;oBACT,IAAI,EAAE,YAAY;iBAClB;gBACD,aAAa;gBACb,YAAY,EAAE,YAAY;gBAC1B,QAAQ,EAAE,cAAc,CAAC,aAAa;gBACtC,SAAS;aACT,CAAC;QACH,CAAC;QACD,KAAK,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC;YAC/B,OAAO;gBACN,GAAG,YAAY;gBACf,aAAa;gBACb,YAAY,EAAE,YAAY;gBAC1B,QAAQ,EAAE,cAAc,CAAC,cAAc;gBACvC,SAAS;aACT,CAAC;QACH,CAAC;QACD,KAAK,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC9B,OAAO;gBACN,GAAG,YAAY;gBACf,aAAa;gBACb,YAAY,EAAE,YAAY;gBAC1B,QAAQ,EAAE,cAAc,CAAC,aAAa;gBACtC,SAAS;aACT,CAAC;QACH,CAAC;QACD,KAAK,cAAc,CAAC,iBAAiB,CAAC,CAAC,CAAC;YACvC,OAAO;gBACN,aAAa;gBACb,YAAY,EAAE,YAAY;gBAC1B,QAAQ,EAAE,cAAc,CAAC,sBAAsB;aAC/C,CAAC;QACH,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC5C,CAAC;IACF,CAAC;AACF,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAA0B,KAAK,EAC9D,cAA6B,EAC7B,kBAAsC,EACP,EAAE;IACjC,MAAM,iBAAiB,GAAG,CAAC,MAAM,wBAAwB,CACxD,cAAc,EACd,kBAAkB,CAClB,CAAwB,CAAC;IAE1B,OAAO;QACN,aAAa,EAAE,oBAAoB,CAAC,cAAc,CAAC;QACnD,QAAQ,EAAE,iBAAiB,CAAC,QAAQ;QACpC,QAAQ,EAAE,iBAAiB,CAAC,QAAQ;QACpC,YAAY,EAAE,YAAY;QAC1B,QAAQ,EAAE,cAAc,CAAC,aAAa;KACtC,CAAC;AACH,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAA0B,KAAK,EAClE,QAAuB,EACvB,kBAAsC,EACP,EAAE;IACjC,MAAM,iBAAiB,GAAG,CAAC,MAAM,mBAAmB,CACnD,QAAQ,EACR,kBAAkB,CAClB,CAAwB,CAAC;IAE1B,OAAO;QACN,aAAa,EAAE,oBAAoB,CAAC,QAAQ,CAAC;QAC7C,QAAQ,EAAE,iBAAiB,CAAC,QAAQ;QACpC,QAAQ,EAAE,iBAAiB,CAAC,QAAQ;QACpC,YAAY,EAAE,gBAAgB;QAC9B,QAAQ,EAAE,cAAc,CAAC,aAAa;KACtC,CAAC;AACH,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAA0B,KAAK,EACjE,YAA2B,EACK,EAAE;IAClC,MAAM,aAAa,GAAG,YAA6B,CAAC;IACpD,OAAO;QACN,aAAa,EAAE,oBAAoB,CAAC,aAAa,CAAC;QAClD,KAAK,EAAE,aAAa,CAAC,KAAK;QAC1B,YAAY,EAAE,eAAe;QAC7B,QAAQ,EAAE,cAAc,CAAC,cAAc;QACvC,SAAS,EAAE,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;KAC3C,CAAC;AACH,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAA0B,KAAK,EACnE,YAA2B,EAC3B,kBAAsC,EACP,EAAE;IACjC,MAAM,eAAe,GAAG,YAAgC,CAAC;IACzD,MAAM,iBAAiB,GAAG,MAAM,kBAAkB,CAAC,eAAe,EAAE,kBAAkB,CAAC,CAAC;IACxF,OAAO;QACN,aAAa,EAAE,oBAAoB,CAAC,eAAe,CAAC;QACpD,QAAQ,EAAE,iBAAiB,CAAC,QAAQ;QACpC,QAAQ,EAAE,iBAAiB,CAAC,QAAQ;QACpC,YAAY,EAAE,iBAAiB;QAC/B,QAAQ,EAAE,cAAc,CAAC,aAAa;KACtC,CAAC;AACH,CAAC,CAAC;AAEF;;;;GAIG;AACH,KAAK,UAAU,kBAAkB,CAChC,SAAqB,EACrB,kBAAsC;IAEtC,MAAM,QAAQ,GAAoC,EAAE,CAAC;IAErD,qDAAqD;IACrD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,SAAS,EAAE,CAAC;QACtC,MAAM,aAAa,GAAG,MAAM,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACtD,QAAQ,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC;IAC/B,CAAC;IAED,2CAA2C;IAC3C,MAAM,cAAc,GAAG,SAAS,CAAC,cAAc,EAAE,CAAC;IAClD,KAAK,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,cAAc,EAAE,CAAC;QACnD,MAAM,aAAa,GAAG,MAAM,kBAAkB,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC;QACjF,QAAQ,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC;IAChC,CAAC;IAED,OAAO;QACN,QAAQ;QACR,QAAQ,EAAE;YACT,eAAe,EAAE,SAAS,CAAC,YAAY;YACvC,QAAQ,EAAE,SAAS,CAAC,IAAI;YACxB,iBAAiB,EAAE,SAAS,CAAC,iBAAiB,EAAE,EAAE;SAClD;QACD,YAAY,EAAE,YAAY;QAC1B,QAAQ,EAAE,cAAc,CAAC,QAAQ;KACjC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAA0B,KAAK,EAC7D,YAA2B,EAC3B,kBAAsC,EACP,EAAE;IACjC,MAAM,SAAS,GAAG,YAA0B,CAAC;IAE7C,MAAM,QAAQ,GAAoC,EAAE,CAAC;IACrD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,SAAS,EAAE,CAAC;QACtC,MAAM,aAAa,GAAG,MAAM,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACtD,QAAQ,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC;IAC/B,CAAC;IAED,OAAO;QACN,aAAa,EAAE,oBAAoB,CAAC,SAAS,CAAC;QAC9C,QAAQ;QACR,QAAQ,EAAE;YACT,IAAI,EAAE,SAAS,CAAC,IAAI;SACpB;QACD,YAAY,EAAE,WAAW;QACzB,QAAQ,EAAE,cAAc,CAAC,aAAa;KACtC,CAAC;AACH,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAA0B,KAAK,EAChE,YAA2B,EAC3B,kBAAsC,EACP,EAAE;IACjC,MAAM,YAAY,GAAG,YAAuC,CAAC;IAE7D,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,YAAY,CAAC;IACzD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,YAAY,CAAC,CAAC;IAEpD,0FAA0F;IAC1F,MAAM,KAAK,GAAoC,EAAE,CAAC;IAClD,KAAK,IAAI,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC;QACxD,KAAK,IAAI,WAAW,GAAG,CAAC,EAAE,WAAW,GAAG,WAAW,EAAE,WAAW,EAAE,EAAE,CAAC;YACpE,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,WAAW,CAAY,CAAC;YACpE,MAAM,YAAY,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;YACpD,KAAK,CAAC,IAAI,QAAQ,IAAI,WAAW,GAAG,CAAC,GAAG,YAAY,CAAC;QACtD,CAAC;IACF,CAAC;IAED,OAAO;QACN,aAAa,EAAE,QAAQ;QACvB,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE;YACT,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,WAAW;SACpB;QACD,YAAY,EAAE,cAAc;QAC5B,QAAQ,EAAE,cAAc,CAAC,aAAa;KACtC,CAAC;AACH,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAA0B,KAAK,EAChE,YAA2B,EACK,EAAE;IAClC,MAAM,YAAY,GAAG,YAA4B,CAAC;IAClD,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,EAAE,CAAC;IAEpC,OAAO;QACN,aAAa,EAAE,oBAAoB,CAAC,YAAY,CAAC;QACjD,KAAK,EAAE,IAAI;QACX,YAAY,EAAE,cAAc;QAC5B,QAAQ,EAAE,cAAc,CAAC,cAAc;QACvC,SAAS,EAAE,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;KAC3C,CAAC;AACH,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAA0B,KAAK,EAC9D,YAA2B,EAC3B,kBAAsC,EACX,EAAE;IAC7B,MAAM,UAAU,GAAG,YAA6C,CAAC;IACjE,MAAM,QAAQ,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;IAElD,yCAAyC;IACzC,MAAM,QAAQ,GAAG,UAAU,CAAC,aAAa,EAAE,CAAC;IAC5C,6CAA6C;IAC7C,MAAM,gBAAgB,GAAG,UAAU,CAAC,kBAAkB,EAAE,CAAC;IACzD,MAAM,eAAe,GAAG,gBAAgB,CAAC,WAAW,CAAC;IAErD;;;;OAIG;IACH,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9E,MAAM,UAAU,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,QAAQ,CAAC;IAErE,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO;YACN,aAAa,EAAE,QAAQ;YACvB,YAAY,EAAE,YAAY;YAC1B,QAAQ,EAAE,cAAc,CAAC,aAAa;YACtC,eAAe,EAAE;gBAChB,MAAM,EAAE;oBACP,QAAQ,EAAE,cAAc,CAAC,QAAQ;oBACjC,QAAQ,EAAE;wBACT,YAAY,EAAE;4BACb,QAAQ,EAAE,cAAc,CAAC,SAAS;4BAClC,KAAK,EAAE,gBAAgB,CAAC,YAAY,CAAC;yBACrC;wBACD,UAAU,EAAE;4BACX,QAAQ,EAAE,cAAc,CAAC,SAAS;4BAClC,KAAK,EAAE,UAAU,CAAC,QAAQ,EAAE;yBAC5B;qBACD;iBACD;aACD;YACD,QAAQ,EAAE,EAAE;SACZ,CAAC;IACH,CAAC;IAED,6EAA6E;IAC7E,MAAM,wBAAwB,GAAyB,MAAM,2BAA2B,CACvF,QAAQ,EACR,eAAe,EACf,EAAE,YAAY,EAAE,UAAU,EAAE,EAC5B,kBAAkB,CAClB,CAAC;IAEF,uGAAuG;IACvG,MAAM,UAAU,GAAG,YAAY,CAAC,wBAAwB,CAAC,CAAC;IAE1D,mCAAmC;IACnC,MAAM,gBAAgB,GAAoB;QACzC,GAAG,UAAU;QACb,aAAa,EAAE,QAAQ;QACvB,YAAY,EAAE,YAAY;QAC1B,QAAQ,EAAE,iBAAiB,CAAC,UAAU,CAAC,QAAQ,CAAC;KAClB,CAAC;IAEhC,OAAO,gBAAgB,CAAC;AACzB,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAA0B,KAAK,EACvE,YAA2B,EACO,EAAE;IACpC,OAAO;QACN,aAAa,EAAE,oBAAoB,CAAC,YAAY,CAAC;QACjD,YAAY,EAAE,YAAY,CAAC,UAAU,CAAC,IAAI;QAC1C,QAAQ,EAAE,cAAc,CAAC,sBAAsB;KAC/C,CAAC;AACH,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAA0C;IACxE,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE,mBAAmB;IACnD,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE,sBAAsB;IACzD,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE,wBAAwB;IAC7D,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE,kBAAkB;IACjD,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE,qBAAqB;IACvD,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE,qBAAqB;IACvD,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE,mBAAmB;IACnD,mBAAmB;CACnB,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/**\n * This module contains default {@link VisualizeSharedObject | visualization}\n * implementations for our DDSs.\n */\n\nimport { SharedCell, type ISharedCell } from \"@fluidframework/cell/internal\";\nimport { SharedCounter } from \"@fluidframework/counter/internal\";\nimport {\n\ttype IDirectory,\n\ttype ISharedMap,\n\tSharedMap,\n\ttype ISharedDirectory,\n\tSharedDirectory,\n} from \"@fluidframework/map/internal\";\nimport { SharedMatrix } from \"@fluidframework/matrix/internal\";\nimport { SharedString } from \"@fluidframework/sequence/internal\";\nimport type { ISharedObject, IChannelView } from \"@fluidframework/shared-object-base/internal\";\nimport type { ITreeInternal } from \"@fluidframework/tree/internal\";\nimport { FieldKind, SharedTree } from \"@fluidframework/tree/internal\";\n\nimport { EditType } from \"../CommonInterfaces.js\";\nimport { getKeyForFluidObject } from \"../FluidObjectKey.js\";\n\nimport type { VisualizeChildData, VisualizeSharedObject } from \"./DataVisualization.js\";\nimport {\n\tconcatenateTypes,\n\tdetermineNodeKind,\n\ttoVisualTree,\n\tvisualizeSharedTreeBySchema,\n} from \"./SharedTreeVisualizer.js\";\nimport type { VisualSharedTreeNode } from \"./VisualSharedTreeTypes.js\";\nimport {\n\ttype FluidObjectNode,\n\ttype FluidObjectTreeNode,\n\ttype FluidObjectValueNode,\n\ttype FluidUnknownObjectNode,\n\ttype VisualChildNode,\n\tVisualNodeKind,\n\ttype VisualTreeNode,\n} from \"./VisualTree.js\";\n\n/**\n * Default {@link VisualizeSharedObject} for {@link SharedCell}.\n */\nexport const visualizeSharedCell: VisualizeSharedObject = async (\n\tsharedObject: ISharedObject,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<FluidObjectNode> => {\n\tconst sharedCell = sharedObject as ISharedCell<unknown>;\n\tconst data = sharedCell.get();\n\tconst fluidObjectId = getKeyForFluidObject(sharedCell);\n\n\tconst renderedData = await visualizeChildData(data);\n\n\tconst editProps = {\n\t\teditTypes: undefined,\n\t};\n\n\t// By separating cases it lets us avoid unnecessary hierarchy by flattening the tree\n\tswitch (renderedData.nodeKind) {\n\t\tcase VisualNodeKind.FluidHandleNode: {\n\t\t\treturn {\n\t\t\t\tchildren: {\n\t\t\t\t\tdata: renderedData,\n\t\t\t\t},\n\t\t\t\tfluidObjectId,\n\t\t\t\ttypeMetadata: \"SharedCell\",\n\t\t\t\tnodeKind: VisualNodeKind.FluidTreeNode,\n\t\t\t\teditProps,\n\t\t\t};\n\t\t}\n\t\tcase VisualNodeKind.ValueNode: {\n\t\t\treturn {\n\t\t\t\t...renderedData,\n\t\t\t\tfluidObjectId,\n\t\t\t\ttypeMetadata: \"SharedCell\",\n\t\t\t\tnodeKind: VisualNodeKind.FluidValueNode,\n\t\t\t\teditProps,\n\t\t\t};\n\t\t}\n\t\tcase VisualNodeKind.TreeNode: {\n\t\t\treturn {\n\t\t\t\t...renderedData,\n\t\t\t\tfluidObjectId,\n\t\t\t\ttypeMetadata: \"SharedCell\",\n\t\t\t\tnodeKind: VisualNodeKind.FluidTreeNode,\n\t\t\t\teditProps,\n\t\t\t};\n\t\t}\n\t\tcase VisualNodeKind.UnknownObjectNode: {\n\t\t\treturn {\n\t\t\t\tfluidObjectId,\n\t\t\t\ttypeMetadata: \"SharedCell\",\n\t\t\t\tnodeKind: VisualNodeKind.FluidUnknownObjectNode,\n\t\t\t};\n\t\t}\n\t\tdefault: {\n\t\t\tthrow new Error(\"Unrecognized node kind.\");\n\t\t}\n\t}\n};\n\n/**\n * Default {@link VisualizeSharedObject} for {@link DataObject}.\n */\nexport const visualizeDataObject: VisualizeSharedObject = async (\n\tdataObjectRoot: ISharedObject,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<FluidObjectTreeNode> => {\n\tconst renderedChildData = (await visualizeSharedDirectory(\n\t\tdataObjectRoot,\n\t\tvisualizeChildData,\n\t)) as FluidObjectTreeNode;\n\n\treturn {\n\t\tfluidObjectId: getKeyForFluidObject(dataObjectRoot),\n\t\tchildren: renderedChildData.children,\n\t\tmetadata: renderedChildData.metadata,\n\t\ttypeMetadata: \"DataObject\",\n\t\tnodeKind: VisualNodeKind.FluidTreeNode,\n\t};\n};\n\n/**\n * Default {@link VisualizeSharedObject} for {@link TreeDataObject}.\n */\nexport const visualizeTreeDataObject: VisualizeSharedObject = async (\n\trootTree: ISharedObject,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<FluidObjectTreeNode> => {\n\tconst renderedChildData = (await visualizeSharedTree(\n\t\trootTree,\n\t\tvisualizeChildData,\n\t)) as FluidObjectTreeNode;\n\n\treturn {\n\t\tfluidObjectId: getKeyForFluidObject(rootTree),\n\t\tchildren: renderedChildData.children,\n\t\tmetadata: renderedChildData.metadata,\n\t\ttypeMetadata: \"TreeDataObject\",\n\t\tnodeKind: VisualNodeKind.FluidTreeNode,\n\t};\n};\n\n/**\n * Default {@link VisualizeSharedObject} for {@link SharedCounter}.\n */\nexport const visualizeSharedCounter: VisualizeSharedObject = async (\n\tsharedObject: ISharedObject,\n): Promise<FluidObjectValueNode> => {\n\tconst sharedCounter = sharedObject as SharedCounter;\n\treturn {\n\t\tfluidObjectId: getKeyForFluidObject(sharedCounter),\n\t\tvalue: sharedCounter.value,\n\t\ttypeMetadata: \"SharedCounter\",\n\t\tnodeKind: VisualNodeKind.FluidValueNode,\n\t\teditProps: { editTypes: [EditType.Number] },\n\t};\n};\n\n/**\n * Default {@link VisualizeSharedObject} for {@link SharedDirectory}.\n */\nexport const visualizeSharedDirectory: VisualizeSharedObject = async (\n\tsharedObject: ISharedObject,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<FluidObjectTreeNode> => {\n\tconst sharedDirectory = sharedObject as ISharedDirectory;\n\tconst renderedChildData = await visualizeDirectory(sharedDirectory, visualizeChildData);\n\treturn {\n\t\tfluidObjectId: getKeyForFluidObject(sharedDirectory),\n\t\tchildren: renderedChildData.children,\n\t\tmetadata: renderedChildData.metadata,\n\t\ttypeMetadata: \"SharedDirectory\",\n\t\tnodeKind: VisualNodeKind.FluidTreeNode,\n\t};\n};\n\n/**\n * Generates a visual summary for an {@link @fluidframework/map#IDirectory}.\n *\n * @remarks Used by {@link visualizeSharedDirectory} to recurse down non-Shared-Object subdirectories.\n */\nasync function visualizeDirectory(\n\tdirectory: IDirectory,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<VisualTreeNode> {\n\tconst children: Record<string, VisualChildNode> = {};\n\n\t// Generate child entries for directory value content\n\tfor (const [key, value] of directory) {\n\t\tconst renderedChild = await visualizeChildData(value);\n\t\tchildren[key] = renderedChild;\n\t}\n\n\t// Generate child entries for sub-directory\n\tconst subDirectories = directory.subdirectories();\n\tfor (const [path, subDirectory] of subDirectories) {\n\t\tconst renderedChild = await visualizeDirectory(subDirectory, visualizeChildData);\n\t\tchildren[path] = renderedChild;\n\t}\n\n\treturn {\n\t\tchildren,\n\t\tmetadata: {\n\t\t\t\"absolute-path\": directory.absolutePath,\n\t\t\t\"values\": directory.size,\n\t\t\t\"sub-directories\": directory.countSubDirectory?.(),\n\t\t},\n\t\ttypeMetadata: \"IDirectory\",\n\t\tnodeKind: VisualNodeKind.TreeNode,\n\t};\n}\n\n/**\n * Default {@link VisualizeSharedObject} for {@link SharedMap}.\n */\nexport const visualizeSharedMap: VisualizeSharedObject = async (\n\tsharedObject: ISharedObject,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<FluidObjectTreeNode> => {\n\tconst sharedMap = sharedObject as ISharedMap;\n\n\tconst children: Record<string, VisualChildNode> = {};\n\tfor (const [key, value] of sharedMap) {\n\t\tconst renderedChild = await visualizeChildData(value);\n\t\tchildren[key] = renderedChild;\n\t}\n\n\treturn {\n\t\tfluidObjectId: getKeyForFluidObject(sharedMap),\n\t\tchildren,\n\t\tmetadata: {\n\t\t\tsize: sharedMap.size,\n\t\t},\n\t\ttypeMetadata: \"SharedMap\",\n\t\tnodeKind: VisualNodeKind.FluidTreeNode,\n\t};\n};\n\n/**\n * Default {@link VisualizeSharedObject} for {@link SharedMap}.\n */\nexport const visualizeSharedMatrix: VisualizeSharedObject = async (\n\tsharedObject: ISharedObject,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<FluidObjectTreeNode> => {\n\tconst sharedMatrix = sharedObject as unknown as SharedMatrix;\n\n\tconst { rowCount, colCount: columnCount } = sharedMatrix;\n\tconst objectId = getKeyForFluidObject(sharedMatrix);\n\n\t// Output will list cells as a flat list, keyed by their row,column indices (e.g. `[0,1]`)\n\tconst cells: Record<string, VisualChildNode> = {};\n\tfor (let rowIndex = 0; rowIndex < rowCount; rowIndex++) {\n\t\tfor (let columnIndex = 0; columnIndex < columnCount; columnIndex++) {\n\t\t\tconst cell = sharedMatrix.getCell(rowIndex, columnIndex) as unknown;\n\t\t\tconst renderedCell = await visualizeChildData(cell);\n\t\t\tcells[`[${rowIndex},${columnIndex}]`] = renderedCell;\n\t\t}\n\t}\n\n\treturn {\n\t\tfluidObjectId: objectId,\n\t\tchildren: cells,\n\t\tmetadata: {\n\t\t\trows: rowCount,\n\t\t\tcolumns: columnCount,\n\t\t},\n\t\ttypeMetadata: \"SharedMatrix\",\n\t\tnodeKind: VisualNodeKind.FluidTreeNode,\n\t};\n};\n\n/**\n * Default {@link VisualizeSharedObject} for {@link SharedString}.\n */\nexport const visualizeSharedString: VisualizeSharedObject = async (\n\tsharedObject: ISharedObject,\n): Promise<FluidObjectValueNode> => {\n\tconst sharedString = sharedObject as SharedString;\n\tconst text = sharedString.getText();\n\n\treturn {\n\t\tfluidObjectId: getKeyForFluidObject(sharedString),\n\t\tvalue: text,\n\t\ttypeMetadata: \"SharedString\",\n\t\tnodeKind: VisualNodeKind.FluidValueNode,\n\t\teditProps: { editTypes: [EditType.String] },\n\t};\n};\n\n/**\n * {@link VisualizeSharedObject} for {@link ITree}.\n *\n * TODO: [ADO 31468] Refactor the SharedTreeVisualizer to conform to SharedTree API\n */\nexport const visualizeSharedTree: VisualizeSharedObject = async (\n\tsharedObject: ISharedObject,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<FluidObjectNode> => {\n\tconst sharedTree = sharedObject as IChannelView as ITreeInternal;\n\tconst objectId = getKeyForFluidObject(sharedTree);\n\n\t// Root node of the SharedTree's content.\n\tconst treeView = sharedTree.exportVerbose();\n\t// All schema definitions for the SharedTree.\n\tconst treeSimpleSchema = sharedTree.exportSimpleSchema();\n\tconst treeDefinitions = treeSimpleSchema.definitions;\n\n\t/**\n\t * {@link visualizeSharedTreeBySchema} passes `allowedTypes` into co-recursive functions while constructing the visual representation.\n\t * Since the {@link SimpleTreeSchema.allowedTypes} of each children node is only accessible at the parent field level,\n\t * each node's allowed types are computed at the parent field level.\n\t */\n\tconst allowedTypes = new Set(treeSimpleSchema.root.simpleAllowedTypes.keys());\n\tconst isRequired = treeSimpleSchema.root.kind === FieldKind.Required;\n\n\tif (treeView === undefined) {\n\t\treturn {\n\t\t\tfluidObjectId: objectId,\n\t\t\ttypeMetadata: \"SharedTree\",\n\t\t\tnodeKind: VisualNodeKind.FluidTreeNode,\n\t\t\ttooltipContents: {\n\t\t\t\tschema: {\n\t\t\t\t\tnodeKind: VisualNodeKind.TreeNode,\n\t\t\t\t\tchildren: {\n\t\t\t\t\t\tallowedTypes: {\n\t\t\t\t\t\t\tnodeKind: VisualNodeKind.ValueNode,\n\t\t\t\t\t\t\tvalue: concatenateTypes(allowedTypes),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tisRequired: {\n\t\t\t\t\t\t\tnodeKind: VisualNodeKind.ValueNode,\n\t\t\t\t\t\t\tvalue: isRequired.toString(),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tchildren: {},\n\t\t};\n\t}\n\n\t// Create a root field visualization that shows the allowed types at the root\n\tconst visualTreeRepresentation: VisualSharedTreeNode = await visualizeSharedTreeBySchema(\n\t\ttreeView,\n\t\ttreeDefinitions,\n\t\t{ allowedTypes, isRequired },\n\t\tvisualizeChildData,\n\t);\n\n\t// Maps the `visualTreeRepresentation` in the format compatible to {@link visualizeChildData} function.\n\tconst visualTree = toVisualTree(visualTreeRepresentation);\n\n\t// TODO: Validate the type casting.\n\tconst visualTreeResult: FluidObjectNode = {\n\t\t...visualTree,\n\t\tfluidObjectId: objectId,\n\t\ttypeMetadata: \"SharedTree\",\n\t\tnodeKind: determineNodeKind(visualTree.nodeKind),\n\t} as unknown as FluidObjectNode;\n\n\treturn visualTreeResult;\n};\n\n/**\n * {@link VisualizeSharedObject} for unrecognized {@link ISharedObject}s.\n */\nexport const visualizeUnknownSharedObject: VisualizeSharedObject = async (\n\tsharedObject: ISharedObject,\n): Promise<FluidUnknownObjectNode> => {\n\treturn {\n\t\tfluidObjectId: getKeyForFluidObject(sharedObject),\n\t\ttypeMetadata: sharedObject.attributes.type,\n\t\tnodeKind: VisualNodeKind.FluidUnknownObjectNode,\n\t};\n};\n\n/**\n * List of default visualizers included in the library.\n * @remarks {@link @fluidframework/aqueduct#DataObject} & {@link @fluidframework/aqueduct#TreeDataObject} do not have type information and thus are not included in the list.\n */\nexport const defaultVisualizers: Record<string, VisualizeSharedObject> = {\n\t[SharedCell.getFactory().type]: visualizeSharedCell,\n\t[SharedCounter.getFactory().type]: visualizeSharedCounter,\n\t[SharedDirectory.getFactory().type]: visualizeSharedDirectory,\n\t[SharedMap.getFactory().type]: visualizeSharedMap,\n\t[SharedMatrix.getFactory().type]: visualizeSharedMatrix,\n\t[SharedString.getFactory().type]: visualizeSharedString,\n\t[SharedTree.getFactory().type]: visualizeSharedTree,\n\t// TODO: the others\n};\n"]}
@@ -159,7 +159,7 @@ async function visualizeObjectNode(tree, schema, treeDefinitions, { allowedTypes
159
159
  const objectNodeSchemaProperties = {};
160
160
  for (const [fieldKey, treeFieldSimpleSchema] of schema.fields) {
161
161
  objectNodeSchemaProperties[fieldKey] = {
162
- allowedTypes: treeFieldSimpleSchema.allowedTypesIdentifiers,
162
+ allowedTypes: new Set(treeFieldSimpleSchema.simpleAllowedTypes.keys()),
163
163
  isRequired: treeFieldSimpleSchema.kind === FieldKind.Required ? true : false,
164
164
  };
165
165
  }
@@ -180,7 +180,7 @@ async function visualizeMapNode(tree, schema, treeDefinitions, { allowedTypes, i
180
180
  const mapNodeSchemaProperties = {};
181
181
  for (const key of Object.keys(tree.fields)) {
182
182
  mapNodeSchemaProperties[key] = {
183
- allowedTypes: schema.allowedTypesIdentifiers,
183
+ allowedTypes: new Set(schema.simpleAllowedTypes.keys()),
184
184
  // Map values are always required. Don't display field requirement information, since that information is redundant.
185
185
  isRequired: undefined,
186
186
  };
@@ -206,7 +206,7 @@ async function visualizeArrayNode(tree, schema, treeDefinitions, { allowedTypes,
206
206
  const arrayNodeSchemaProperties = {};
207
207
  for (const [i] of children.entries()) {
208
208
  arrayNodeSchemaProperties[i] = {
209
- allowedTypes: schema.allowedTypesIdentifiers,
209
+ allowedTypes: new Set(schema.simpleAllowedTypes.keys()),
210
210
  // Array values are always required. Don't display field requirement information, since that information is redundant.
211
211
  isRequired: undefined,
212
212
  };
@@ -1 +1 @@
1
- {"version":3,"file":"SharedTreeVisualizer.js","sourceRoot":"","sources":["../../src/data-visualization/SharedTreeVisualizer.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { FieldKind } from \"@fluidframework/tree\";\nimport type {\n\tSimpleArrayNodeSchema,\n\tSimpleMapNodeSchema,\n\tSimpleNodeSchema,\n\tSimpleObjectNodeSchema,\n\tVerboseTree,\n\tVerboseTreeNode,\n} from \"@fluidframework/tree/internal\";\nimport { NodeKind, SchemaFactory, Tree } from \"@fluidframework/tree/internal\";\n\nimport type { VisualizeChildData } from \"./DataVisualization.js\";\nimport type { VisualSharedTreeNode, SharedTreeSchemaNode } from \"./VisualSharedTreeTypes.js\";\nimport { VisualSharedTreeNodeKind } from \"./VisualSharedTreeTypes.js\";\nimport {\n\ttype VisualChildNode,\n\tVisualNodeKind,\n\ttype VisualValueNode,\n\ttype VisualTreeNode,\n\ttype FluidHandleNode,\n\ttype UnknownObjectNode,\n} from \"./VisualTree.js\";\n\n/**\n * Returns VisualNodeKind that is compatible to {@link FluidObjectNode} based on the `visualTree`'s node kind.\n */\nexport function determineNodeKind(nodeKind: VisualNodeKind): VisualNodeKind {\n\tswitch (nodeKind) {\n\t\tcase VisualNodeKind.TreeNode:\n\t\tcase VisualNodeKind.FluidHandleNode: {\n\t\t\treturn VisualNodeKind.FluidTreeNode;\n\t\t}\n\t\tcase VisualNodeKind.ValueNode: {\n\t\t\treturn VisualNodeKind.FluidValueNode;\n\t\t}\n\t\tdefault: {\n\t\t\treturn VisualNodeKind.FluidUnknownObjectNode;\n\t\t}\n\t}\n}\n\n/**\n * Returns allowed types of the non-leaf nodes in the tree.\n * @param allowedTypes - a string if array node, `Record<string, string>` for non-array nodes.\n * @returns a VisualChildNode with the allowed type.\n */\nfunction createAllowedTypesVisualTree(\n\tallowedTypes: string | Record<string, string>,\n): VisualChildNode {\n\tif (typeof allowedTypes === \"string\") {\n\t\treturn {\n\t\t\tvalue: allowedTypes,\n\t\t\tnodeKind: VisualNodeKind.ValueNode,\n\t\t};\n\t}\n\n\tconst result: Record<string, VisualValueNode> = {};\n\tfor (const [allowedTypeKey, allowedType] of Object.entries(allowedTypes)) {\n\t\tresult[allowedTypeKey] = {\n\t\t\tnodeKind: VisualNodeKind.ValueNode,\n\t\t\tvalue: allowedType,\n\t\t};\n\t}\n\n\treturn {\n\t\tchildren: result,\n\t\tnodeKind: VisualNodeKind.TreeNode,\n\t};\n}\n\n/**\n * Creates a visual representation of the schema of the tree in {@link VisualTreeNode} format.\n */\nfunction createToolTipContents(schema: SharedTreeSchemaNode): VisualTreeNode {\n\tconst children: Record<string, VisualChildNode> = {\n\t\tname: {\n\t\t\tnodeKind: VisualNodeKind.ValueNode,\n\t\t\tvalue: schema.schemaName,\n\t\t},\n\t};\n\tif (schema.allowedTypes !== undefined) {\n\t\tchildren.allowedTypes = createAllowedTypesVisualTree(schema.allowedTypes);\n\t}\n\tif (schema.isRequired !== undefined) {\n\t\tchildren.isRequired = {\n\t\t\tnodeKind: VisualNodeKind.ValueNode,\n\t\t\tvalue: schema.isRequired,\n\t\t};\n\t}\n\treturn {\n\t\tnodeKind: VisualNodeKind.TreeNode,\n\t\tchildren,\n\t};\n}\n\n/**\n * Converts the visual representation from {@link visualizeNodeBySchema} to a visual tree compatible with the devtools-view.\n * @param tree - the visual representation of the SharedTree.\n * @returns the visual representation of type {@link VisualChildNode}\n */\nexport function toVisualTree(tree: VisualSharedTreeNode): VisualChildNode {\n\tif (tree.kind === VisualSharedTreeNodeKind.LeafNode) {\n\t\tswitch (tree.value.nodeKind) {\n\t\t\tcase VisualNodeKind.ValueNode: {\n\t\t\t\tconst result: VisualValueNode = {\n\t\t\t\t\tvalue: tree.value.value,\n\t\t\t\t\tnodeKind: VisualNodeKind.ValueNode,\n\t\t\t\t\ttooltipContents: {\n\t\t\t\t\t\tschema: createToolTipContents(tree.schema),\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tcase VisualNodeKind.FluidHandleNode: {\n\t\t\t\tconst result: FluidHandleNode = {\n\t\t\t\t\tfluidObjectId: tree.value.fluidObjectId,\n\t\t\t\t\tnodeKind: VisualNodeKind.FluidHandleNode,\n\t\t\t\t\ttooltipContents: {\n\t\t\t\t\t\tschema: createToolTipContents(tree.schema),\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tconsole.error(`Unknown node kind: ${tree.value.nodeKind}`);\n\t\t\t\tconst result: UnknownObjectNode = {\n\t\t\t\t\tnodeKind: VisualNodeKind.UnknownObjectNode,\n\t\t\t\t\ttooltipContents: {\n\t\t\t\t\t\tschema: createToolTipContents(tree.schema),\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t} else {\n\t\tconst children: Record<string, VisualChildNode> = {};\n\n\t\tfor (const [key, value] of Object.entries(tree.fields)) {\n\t\t\tconst child = toVisualTree(value);\n\t\t\tchildren[key] = child;\n\t\t}\n\n\t\treturn {\n\t\t\tchildren,\n\t\t\tnodeKind: VisualNodeKind.TreeNode,\n\t\t\ttooltipContents: {\n\t\t\t\tschema: createToolTipContents(tree.schema),\n\t\t\t},\n\t\t};\n\t}\n}\n\n/**\n * Concatenate allowed types for `ObjectNodeStoredSchema` and `MapNodeStoredSchema`.\n */\nexport function concatenateTypes(fieldTypes: ReadonlySet<string>): string {\n\treturn [...fieldTypes].join(\" | \");\n}\n\n/**\n * Properties that describe schema constraints for a field in the tree\n */\ninterface FieldSchemaProperties {\n\tallowedTypes: ReadonlySet<string> | undefined;\n\n\t/**\n\t * Whether the field is required (true) or optional (false).\n\t *\n\t * `undefined` indicates that the field is implicitly required.\n\t * In this case, no requirement information will be displayed by the devtools.\n\t */\n\tisRequired: boolean | undefined;\n}\n\n/**\n * Processes and visualizes the fields of a verbose tree node.\n *\n * @param treeFields - The fields of the tree node to visualize. Can be either an array of VerboseTree (for array nodes) or a Record of field names to VerboseTree (for object/map nodes).\n * @param treeDefinitions - Map containing all schema definitions for the entire tree structure. Each definition describes the shape and constraints of a particular node type.\n * @param fieldSchemaProperties - Record mapping field names to their schema properties, including allowed types and whether they are required.\n * @param visualizeChildData - Callback function to visualize child node data.\n *\n * @returns A record mapping field names/indices to their visual tree representations.\n */\nasync function visualizeVerboseNodeFields(\n\ttreeFields: readonly VerboseTree[] | Record<string, VerboseTree>,\n\ttreeDefinitions: ReadonlyMap<string, SimpleNodeSchema>,\n\tfieldSchemaProperties: Record<string, FieldSchemaProperties>,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<Record<string, VisualSharedTreeNode>> {\n\tconst fields: Record<string | number, VisualSharedTreeNode> = {};\n\n\tfor (const [fieldKey, childField] of Object.entries(treeFields)) {\n\t\tfields[fieldKey] = await visualizeSharedTreeBySchema(\n\t\t\tchildField,\n\t\t\ttreeDefinitions,\n\t\t\t{\n\t\t\t\tallowedTypes: fieldSchemaProperties[fieldKey]?.allowedTypes,\n\t\t\t\tisRequired: fieldSchemaProperties[fieldKey]?.isRequired,\n\t\t\t},\n\t\t\tvisualizeChildData,\n\t\t);\n\t}\n\n\treturn fields;\n}\n\n/**\n * Returns the schema & fields of the node with type {@link ObjectNodeStoredSchema}.\n */\nasync function visualizeObjectNode(\n\ttree: VerboseTreeNode,\n\tschema: SimpleObjectNodeSchema,\n\ttreeDefinitions: ReadonlyMap<string, SimpleNodeSchema>,\n\t{ allowedTypes, isRequired }: FieldSchemaProperties,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<VisualSharedTreeNode> {\n\tconst objectNodeSchemaProperties: Record<string, FieldSchemaProperties> = {};\n\tfor (const [fieldKey, treeFieldSimpleSchema] of schema.fields) {\n\t\tobjectNodeSchemaProperties[fieldKey] = {\n\t\t\tallowedTypes: treeFieldSimpleSchema.allowedTypesIdentifiers,\n\t\t\tisRequired: treeFieldSimpleSchema.kind === FieldKind.Required ? true : false,\n\t\t};\n\t}\n\n\treturn {\n\t\tschema: {\n\t\t\tschemaName: tree.type,\n\t\t\tallowedTypes: concatenateTypes(allowedTypes ?? new Set()),\n\t\t\tisRequired: isRequired?.toString(),\n\t\t},\n\t\tfields: await visualizeVerboseNodeFields(\n\t\t\ttree.fields,\n\t\t\ttreeDefinitions,\n\t\t\tobjectNodeSchemaProperties,\n\t\t\tvisualizeChildData,\n\t\t),\n\t\tkind: VisualSharedTreeNodeKind.InternalNode,\n\t};\n}\n\n/**\n * Returns the schema & fields of the node with type {@link MapNodeStoredSchema}.\n */\nasync function visualizeMapNode(\n\ttree: VerboseTreeNode,\n\tschema: SimpleMapNodeSchema,\n\ttreeDefinitions: ReadonlyMap<string, SimpleNodeSchema>,\n\t{ allowedTypes, isRequired }: FieldSchemaProperties,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<VisualSharedTreeNode> {\n\tconst mapNodeSchemaProperties: Record<string, FieldSchemaProperties> = {};\n\tfor (const key of Object.keys(tree.fields)) {\n\t\tmapNodeSchemaProperties[key] = {\n\t\t\tallowedTypes: schema.allowedTypesIdentifiers,\n\t\t\t// Map values are always required. Don't display field requirement information, since that information is redundant.\n\t\t\tisRequired: undefined,\n\t\t};\n\t}\n\n\treturn {\n\t\tschema: {\n\t\t\tschemaName: tree.type,\n\t\t\tallowedTypes: concatenateTypes(allowedTypes ?? new Set()),\n\t\t\tisRequired: isRequired?.toString(),\n\t\t},\n\t\tfields: await visualizeVerboseNodeFields(\n\t\t\ttree.fields,\n\t\t\ttreeDefinitions,\n\t\t\tmapNodeSchemaProperties,\n\t\t\tvisualizeChildData,\n\t\t),\n\t\tkind: VisualSharedTreeNodeKind.InternalNode,\n\t};\n}\n\n/**\n * Returns the schema & fields of the node with type {@link ArrayNodeStoredSchema}.\n */\nasync function visualizeArrayNode(\n\ttree: VerboseTreeNode,\n\tschema: SimpleArrayNodeSchema,\n\ttreeDefinitions: ReadonlyMap<string, SimpleNodeSchema>,\n\t{ allowedTypes, isRequired }: FieldSchemaProperties,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<VisualSharedTreeNode> {\n\tconst children = tree.fields;\n\tif (!Array.isArray(children)) {\n\t\tthrow new TypeError(\"Invalid array\");\n\t}\n\n\tconst arrayNodeSchemaProperties: Record<string, FieldSchemaProperties> = {};\n\tfor (const [i] of children.entries()) {\n\t\tarrayNodeSchemaProperties[i] = {\n\t\t\tallowedTypes: schema.allowedTypesIdentifiers,\n\t\t\t// Array values are always required. Don't display field requirement information, since that information is redundant.\n\t\t\tisRequired: undefined,\n\t\t};\n\t}\n\n\treturn {\n\t\tschema: {\n\t\t\tschemaName: tree.type,\n\t\t\tallowedTypes: concatenateTypes(allowedTypes ?? new Set()),\n\t\t\tisRequired: isRequired?.toString(),\n\t\t},\n\t\tfields: await visualizeVerboseNodeFields(\n\t\t\ttree.fields,\n\t\t\ttreeDefinitions,\n\t\t\tarrayNodeSchemaProperties,\n\t\t\tvisualizeChildData,\n\t\t),\n\t\tkind: VisualSharedTreeNodeKind.InternalNode,\n\t};\n}\n\n/**\n * Creates the visual representation of non-leaf SharedTree nodes.\n *\n * @remarks\n * Processes internal tree nodes based on their schema type (e.g., ObjectNodeStoredSchema, MapNodeStoredSchema, ArrayNodeStoredSchema),\n * producing the visual representation for each type.\n *\n * @see {@link https://fluidframework.com/docs/data-structures/tree/} for more information on the SharedTree schema.\n *\n * @remarks\n */\nasync function visualizeNodeBySchema(\n\ttree: VerboseTreeNode,\n\ttreeDefinitions: ReadonlyMap<string, SimpleNodeSchema>,\n\t{ allowedTypes, isRequired }: FieldSchemaProperties,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<VisualSharedTreeNode> {\n\tconst schema = treeDefinitions.get(tree.type);\n\n\tif (schema === undefined) {\n\t\tthrow new TypeError(\"Unrecognized schema type.\");\n\t}\n\n\tswitch (schema.kind) {\n\t\tcase NodeKind.Object: {\n\t\t\tconst objectVisualized = visualizeObjectNode(\n\t\t\t\ttree,\n\t\t\t\tschema,\n\t\t\t\ttreeDefinitions,\n\t\t\t\t{ allowedTypes, isRequired },\n\t\t\t\tvisualizeChildData,\n\t\t\t);\n\t\t\treturn objectVisualized;\n\t\t}\n\t\tcase NodeKind.Map: {\n\t\t\tconst mapVisualized = visualizeMapNode(\n\t\t\t\ttree,\n\t\t\t\tschema,\n\t\t\t\ttreeDefinitions,\n\t\t\t\t{ allowedTypes, isRequired },\n\t\t\t\tvisualizeChildData,\n\t\t\t);\n\t\t\treturn mapVisualized;\n\t\t}\n\t\tcase NodeKind.Array: {\n\t\t\treturn visualizeArrayNode(\n\t\t\t\ttree,\n\t\t\t\tschema,\n\t\t\t\ttreeDefinitions,\n\t\t\t\t{ allowedTypes, isRequired },\n\t\t\t\tvisualizeChildData,\n\t\t\t);\n\t\t}\n\t\tdefault: {\n\t\t\tthrow new TypeError(\"Unrecognized schema type.\");\n\t\t}\n\t}\n}\n\n/**\n * Creates a visual representation of a SharedTree based on its schema.\n * @param tree - The {@link VerboseTree} to visualize\n * @param treeDefinitions - Map containing all schema definitions for the entire tree structure. Each definition\n * describes the shape and constraints of a particular node type.\n * @param fieldSchemaProperties - Properties describing schema constraints for this field:\n * - `allowedTypes`: Set of type names that are valid for this specific node position in the tree.\n * This is a subset of the types defined in treeDefinitions.\n * - `isRequired`: Whether this field is required in its parent object schema.\n * Only meaningful for direct children of object nodes.\n * Undefined for array/map elements since they are always required within their parent.\n * @param visualizeChildData - Callback function to visualize child node data\n * @returns A visual representation of the tree that includes schema information and node values\n *\n * @remarks\n * This function handles both leaf nodes (primitive values, handles) and internal nodes (objects, maps, arrays).\n * For leaf nodes, it creates a visual representation with the node's schema and value.\n * For internal nodes, it recursively processes the node's fields using {@link visualizeNodeBySchema}.\n */\nexport async function visualizeSharedTreeBySchema(\n\ttree: VerboseTree,\n\ttreeDefinitions: ReadonlyMap<string, SimpleNodeSchema>,\n\t{ allowedTypes, isRequired }: FieldSchemaProperties,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<VisualSharedTreeNode> {\n\treturn Tree.is(tree, SchemaFactory.leaves)\n\t\t? {\n\t\t\t\tschema: {\n\t\t\t\t\tschemaName: Tree.schema(tree).identifier,\n\t\t\t\t\tallowedTypes: concatenateTypes(allowedTypes ?? new Set()),\n\t\t\t\t\tisRequired: isRequired?.toString(),\n\t\t\t\t},\n\t\t\t\tvalue: await visualizeChildData(tree),\n\t\t\t\tkind: VisualSharedTreeNodeKind.LeafNode,\n\t\t\t}\n\t\t: visualizeNodeBySchema(\n\t\t\t\ttree,\n\t\t\t\ttreeDefinitions,\n\t\t\t\t{ allowedTypes, isRequired },\n\t\t\t\tvisualizeChildData,\n\t\t\t);\n}\n"]}
1
+ {"version":3,"file":"SharedTreeVisualizer.js","sourceRoot":"","sources":["../../src/data-visualization/SharedTreeVisualizer.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { FieldKind } from \"@fluidframework/tree\";\nimport type {\n\tSimpleArrayNodeSchema,\n\tSimpleMapNodeSchema,\n\tSimpleNodeSchema,\n\tSimpleObjectNodeSchema,\n\tVerboseTree,\n\tVerboseTreeNode,\n} from \"@fluidframework/tree/internal\";\nimport { NodeKind, SchemaFactory, Tree } from \"@fluidframework/tree/internal\";\n\nimport type { VisualizeChildData } from \"./DataVisualization.js\";\nimport type { VisualSharedTreeNode, SharedTreeSchemaNode } from \"./VisualSharedTreeTypes.js\";\nimport { VisualSharedTreeNodeKind } from \"./VisualSharedTreeTypes.js\";\nimport {\n\ttype VisualChildNode,\n\tVisualNodeKind,\n\ttype VisualValueNode,\n\ttype VisualTreeNode,\n\ttype FluidHandleNode,\n\ttype UnknownObjectNode,\n} from \"./VisualTree.js\";\n\n/**\n * Returns VisualNodeKind that is compatible to {@link FluidObjectNode} based on the `visualTree`'s node kind.\n */\nexport function determineNodeKind(nodeKind: VisualNodeKind): VisualNodeKind {\n\tswitch (nodeKind) {\n\t\tcase VisualNodeKind.TreeNode:\n\t\tcase VisualNodeKind.FluidHandleNode: {\n\t\t\treturn VisualNodeKind.FluidTreeNode;\n\t\t}\n\t\tcase VisualNodeKind.ValueNode: {\n\t\t\treturn VisualNodeKind.FluidValueNode;\n\t\t}\n\t\tdefault: {\n\t\t\treturn VisualNodeKind.FluidUnknownObjectNode;\n\t\t}\n\t}\n}\n\n/**\n * Returns allowed types of the non-leaf nodes in the tree.\n * @param allowedTypes - a string if array node, `Record<string, string>` for non-array nodes.\n * @returns a VisualChildNode with the allowed type.\n */\nfunction createAllowedTypesVisualTree(\n\tallowedTypes: string | Record<string, string>,\n): VisualChildNode {\n\tif (typeof allowedTypes === \"string\") {\n\t\treturn {\n\t\t\tvalue: allowedTypes,\n\t\t\tnodeKind: VisualNodeKind.ValueNode,\n\t\t};\n\t}\n\n\tconst result: Record<string, VisualValueNode> = {};\n\tfor (const [allowedTypeKey, allowedType] of Object.entries(allowedTypes)) {\n\t\tresult[allowedTypeKey] = {\n\t\t\tnodeKind: VisualNodeKind.ValueNode,\n\t\t\tvalue: allowedType,\n\t\t};\n\t}\n\n\treturn {\n\t\tchildren: result,\n\t\tnodeKind: VisualNodeKind.TreeNode,\n\t};\n}\n\n/**\n * Creates a visual representation of the schema of the tree in {@link VisualTreeNode} format.\n */\nfunction createToolTipContents(schema: SharedTreeSchemaNode): VisualTreeNode {\n\tconst children: Record<string, VisualChildNode> = {\n\t\tname: {\n\t\t\tnodeKind: VisualNodeKind.ValueNode,\n\t\t\tvalue: schema.schemaName,\n\t\t},\n\t};\n\tif (schema.allowedTypes !== undefined) {\n\t\tchildren.allowedTypes = createAllowedTypesVisualTree(schema.allowedTypes);\n\t}\n\tif (schema.isRequired !== undefined) {\n\t\tchildren.isRequired = {\n\t\t\tnodeKind: VisualNodeKind.ValueNode,\n\t\t\tvalue: schema.isRequired,\n\t\t};\n\t}\n\treturn {\n\t\tnodeKind: VisualNodeKind.TreeNode,\n\t\tchildren,\n\t};\n}\n\n/**\n * Converts the visual representation from {@link visualizeNodeBySchema} to a visual tree compatible with the devtools-view.\n * @param tree - the visual representation of the SharedTree.\n * @returns the visual representation of type {@link VisualChildNode}\n */\nexport function toVisualTree(tree: VisualSharedTreeNode): VisualChildNode {\n\tif (tree.kind === VisualSharedTreeNodeKind.LeafNode) {\n\t\tswitch (tree.value.nodeKind) {\n\t\t\tcase VisualNodeKind.ValueNode: {\n\t\t\t\tconst result: VisualValueNode = {\n\t\t\t\t\tvalue: tree.value.value,\n\t\t\t\t\tnodeKind: VisualNodeKind.ValueNode,\n\t\t\t\t\ttooltipContents: {\n\t\t\t\t\t\tschema: createToolTipContents(tree.schema),\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tcase VisualNodeKind.FluidHandleNode: {\n\t\t\t\tconst result: FluidHandleNode = {\n\t\t\t\t\tfluidObjectId: tree.value.fluidObjectId,\n\t\t\t\t\tnodeKind: VisualNodeKind.FluidHandleNode,\n\t\t\t\t\ttooltipContents: {\n\t\t\t\t\t\tschema: createToolTipContents(tree.schema),\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tconsole.error(`Unknown node kind: ${tree.value.nodeKind}`);\n\t\t\t\tconst result: UnknownObjectNode = {\n\t\t\t\t\tnodeKind: VisualNodeKind.UnknownObjectNode,\n\t\t\t\t\ttooltipContents: {\n\t\t\t\t\t\tschema: createToolTipContents(tree.schema),\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t} else {\n\t\tconst children: Record<string, VisualChildNode> = {};\n\n\t\tfor (const [key, value] of Object.entries(tree.fields)) {\n\t\t\tconst child = toVisualTree(value);\n\t\t\tchildren[key] = child;\n\t\t}\n\n\t\treturn {\n\t\t\tchildren,\n\t\t\tnodeKind: VisualNodeKind.TreeNode,\n\t\t\ttooltipContents: {\n\t\t\t\tschema: createToolTipContents(tree.schema),\n\t\t\t},\n\t\t};\n\t}\n}\n\n/**\n * Concatenate allowed types for `ObjectNodeStoredSchema` and `MapNodeStoredSchema`.\n */\nexport function concatenateTypes(fieldTypes: ReadonlySet<string>): string {\n\treturn [...fieldTypes].join(\" | \");\n}\n\n/**\n * Properties that describe schema constraints for a field in the tree\n */\ninterface FieldSchemaProperties {\n\tallowedTypes: ReadonlySet<string> | undefined;\n\n\t/**\n\t * Whether the field is required (true) or optional (false).\n\t *\n\t * `undefined` indicates that the field is implicitly required.\n\t * In this case, no requirement information will be displayed by the devtools.\n\t */\n\tisRequired: boolean | undefined;\n}\n\n/**\n * Processes and visualizes the fields of a verbose tree node.\n *\n * @param treeFields - The fields of the tree node to visualize. Can be either an array of VerboseTree (for array nodes) or a Record of field names to VerboseTree (for object/map nodes).\n * @param treeDefinitions - Map containing all schema definitions for the entire tree structure. Each definition describes the shape and constraints of a particular node type.\n * @param fieldSchemaProperties - Record mapping field names to their schema properties, including allowed types and whether they are required.\n * @param visualizeChildData - Callback function to visualize child node data.\n *\n * @returns A record mapping field names/indices to their visual tree representations.\n */\nasync function visualizeVerboseNodeFields(\n\ttreeFields: readonly VerboseTree[] | Record<string, VerboseTree>,\n\ttreeDefinitions: ReadonlyMap<string, SimpleNodeSchema>,\n\tfieldSchemaProperties: Record<string, FieldSchemaProperties>,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<Record<string, VisualSharedTreeNode>> {\n\tconst fields: Record<string | number, VisualSharedTreeNode> = {};\n\n\tfor (const [fieldKey, childField] of Object.entries(treeFields)) {\n\t\tfields[fieldKey] = await visualizeSharedTreeBySchema(\n\t\t\tchildField,\n\t\t\ttreeDefinitions,\n\t\t\t{\n\t\t\t\tallowedTypes: fieldSchemaProperties[fieldKey]?.allowedTypes,\n\t\t\t\tisRequired: fieldSchemaProperties[fieldKey]?.isRequired,\n\t\t\t},\n\t\t\tvisualizeChildData,\n\t\t);\n\t}\n\n\treturn fields;\n}\n\n/**\n * Returns the schema & fields of the node with type {@link ObjectNodeStoredSchema}.\n */\nasync function visualizeObjectNode(\n\ttree: VerboseTreeNode,\n\tschema: SimpleObjectNodeSchema,\n\ttreeDefinitions: ReadonlyMap<string, SimpleNodeSchema>,\n\t{ allowedTypes, isRequired }: FieldSchemaProperties,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<VisualSharedTreeNode> {\n\tconst objectNodeSchemaProperties: Record<string, FieldSchemaProperties> = {};\n\tfor (const [fieldKey, treeFieldSimpleSchema] of schema.fields) {\n\t\tobjectNodeSchemaProperties[fieldKey] = {\n\t\t\tallowedTypes: new Set(treeFieldSimpleSchema.simpleAllowedTypes.keys()),\n\t\t\tisRequired: treeFieldSimpleSchema.kind === FieldKind.Required ? true : false,\n\t\t};\n\t}\n\n\treturn {\n\t\tschema: {\n\t\t\tschemaName: tree.type,\n\t\t\tallowedTypes: concatenateTypes(allowedTypes ?? new Set()),\n\t\t\tisRequired: isRequired?.toString(),\n\t\t},\n\t\tfields: await visualizeVerboseNodeFields(\n\t\t\ttree.fields,\n\t\t\ttreeDefinitions,\n\t\t\tobjectNodeSchemaProperties,\n\t\t\tvisualizeChildData,\n\t\t),\n\t\tkind: VisualSharedTreeNodeKind.InternalNode,\n\t};\n}\n\n/**\n * Returns the schema & fields of the node with type {@link MapNodeStoredSchema}.\n */\nasync function visualizeMapNode(\n\ttree: VerboseTreeNode,\n\tschema: SimpleMapNodeSchema,\n\ttreeDefinitions: ReadonlyMap<string, SimpleNodeSchema>,\n\t{ allowedTypes, isRequired }: FieldSchemaProperties,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<VisualSharedTreeNode> {\n\tconst mapNodeSchemaProperties: Record<string, FieldSchemaProperties> = {};\n\tfor (const key of Object.keys(tree.fields)) {\n\t\tmapNodeSchemaProperties[key] = {\n\t\t\tallowedTypes: new Set(schema.simpleAllowedTypes.keys()),\n\t\t\t// Map values are always required. Don't display field requirement information, since that information is redundant.\n\t\t\tisRequired: undefined,\n\t\t};\n\t}\n\n\treturn {\n\t\tschema: {\n\t\t\tschemaName: tree.type,\n\t\t\tallowedTypes: concatenateTypes(allowedTypes ?? new Set()),\n\t\t\tisRequired: isRequired?.toString(),\n\t\t},\n\t\tfields: await visualizeVerboseNodeFields(\n\t\t\ttree.fields,\n\t\t\ttreeDefinitions,\n\t\t\tmapNodeSchemaProperties,\n\t\t\tvisualizeChildData,\n\t\t),\n\t\tkind: VisualSharedTreeNodeKind.InternalNode,\n\t};\n}\n\n/**\n * Returns the schema & fields of the node with type {@link ArrayNodeStoredSchema}.\n */\nasync function visualizeArrayNode(\n\ttree: VerboseTreeNode,\n\tschema: SimpleArrayNodeSchema,\n\ttreeDefinitions: ReadonlyMap<string, SimpleNodeSchema>,\n\t{ allowedTypes, isRequired }: FieldSchemaProperties,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<VisualSharedTreeNode> {\n\tconst children = tree.fields;\n\tif (!Array.isArray(children)) {\n\t\tthrow new TypeError(\"Invalid array\");\n\t}\n\n\tconst arrayNodeSchemaProperties: Record<string, FieldSchemaProperties> = {};\n\tfor (const [i] of children.entries()) {\n\t\tarrayNodeSchemaProperties[i] = {\n\t\t\tallowedTypes: new Set(schema.simpleAllowedTypes.keys()),\n\t\t\t// Array values are always required. Don't display field requirement information, since that information is redundant.\n\t\t\tisRequired: undefined,\n\t\t};\n\t}\n\n\treturn {\n\t\tschema: {\n\t\t\tschemaName: tree.type,\n\t\t\tallowedTypes: concatenateTypes(allowedTypes ?? new Set()),\n\t\t\tisRequired: isRequired?.toString(),\n\t\t},\n\t\tfields: await visualizeVerboseNodeFields(\n\t\t\ttree.fields,\n\t\t\ttreeDefinitions,\n\t\t\tarrayNodeSchemaProperties,\n\t\t\tvisualizeChildData,\n\t\t),\n\t\tkind: VisualSharedTreeNodeKind.InternalNode,\n\t};\n}\n\n/**\n * Creates the visual representation of non-leaf SharedTree nodes.\n *\n * @remarks\n * Processes internal tree nodes based on their schema type (e.g., ObjectNodeStoredSchema, MapNodeStoredSchema, ArrayNodeStoredSchema),\n * producing the visual representation for each type.\n *\n * @see {@link https://fluidframework.com/docs/data-structures/tree/} for more information on the SharedTree schema.\n *\n * @remarks\n */\nasync function visualizeNodeBySchema(\n\ttree: VerboseTreeNode,\n\ttreeDefinitions: ReadonlyMap<string, SimpleNodeSchema>,\n\t{ allowedTypes, isRequired }: FieldSchemaProperties,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<VisualSharedTreeNode> {\n\tconst schema = treeDefinitions.get(tree.type);\n\n\tif (schema === undefined) {\n\t\tthrow new TypeError(\"Unrecognized schema type.\");\n\t}\n\n\tswitch (schema.kind) {\n\t\tcase NodeKind.Object: {\n\t\t\tconst objectVisualized = visualizeObjectNode(\n\t\t\t\ttree,\n\t\t\t\tschema,\n\t\t\t\ttreeDefinitions,\n\t\t\t\t{ allowedTypes, isRequired },\n\t\t\t\tvisualizeChildData,\n\t\t\t);\n\t\t\treturn objectVisualized;\n\t\t}\n\t\tcase NodeKind.Map: {\n\t\t\tconst mapVisualized = visualizeMapNode(\n\t\t\t\ttree,\n\t\t\t\tschema,\n\t\t\t\ttreeDefinitions,\n\t\t\t\t{ allowedTypes, isRequired },\n\t\t\t\tvisualizeChildData,\n\t\t\t);\n\t\t\treturn mapVisualized;\n\t\t}\n\t\tcase NodeKind.Array: {\n\t\t\treturn visualizeArrayNode(\n\t\t\t\ttree,\n\t\t\t\tschema,\n\t\t\t\ttreeDefinitions,\n\t\t\t\t{ allowedTypes, isRequired },\n\t\t\t\tvisualizeChildData,\n\t\t\t);\n\t\t}\n\t\tdefault: {\n\t\t\tthrow new TypeError(\"Unrecognized schema type.\");\n\t\t}\n\t}\n}\n\n/**\n * Creates a visual representation of a SharedTree based on its schema.\n * @param tree - The {@link VerboseTree} to visualize\n * @param treeDefinitions - Map containing all schema definitions for the entire tree structure. Each definition\n * describes the shape and constraints of a particular node type.\n * @param fieldSchemaProperties - Properties describing schema constraints for this field:\n * - `allowedTypes`: Set of type names that are valid for this specific node position in the tree.\n * This is a subset of the types defined in treeDefinitions.\n * - `isRequired`: Whether this field is required in its parent object schema.\n * Only meaningful for direct children of object nodes.\n * Undefined for array/map elements since they are always required within their parent.\n * @param visualizeChildData - Callback function to visualize child node data\n * @returns A visual representation of the tree that includes schema information and node values\n *\n * @remarks\n * This function handles both leaf nodes (primitive values, handles) and internal nodes (objects, maps, arrays).\n * For leaf nodes, it creates a visual representation with the node's schema and value.\n * For internal nodes, it recursively processes the node's fields using {@link visualizeNodeBySchema}.\n */\nexport async function visualizeSharedTreeBySchema(\n\ttree: VerboseTree,\n\ttreeDefinitions: ReadonlyMap<string, SimpleNodeSchema>,\n\t{ allowedTypes, isRequired }: FieldSchemaProperties,\n\tvisualizeChildData: VisualizeChildData,\n): Promise<VisualSharedTreeNode> {\n\treturn Tree.is(tree, SchemaFactory.leaves)\n\t\t? {\n\t\t\t\tschema: {\n\t\t\t\t\tschemaName: Tree.schema(tree).identifier,\n\t\t\t\t\tallowedTypes: concatenateTypes(allowedTypes ?? new Set()),\n\t\t\t\t\tisRequired: isRequired?.toString(),\n\t\t\t\t},\n\t\t\t\tvalue: await visualizeChildData(tree),\n\t\t\t\tkind: VisualSharedTreeNodeKind.LeafNode,\n\t\t\t}\n\t\t: visualizeNodeBySchema(\n\t\t\t\ttree,\n\t\t\t\ttreeDefinitions,\n\t\t\t\t{ allowedTypes, isRequired },\n\t\t\t\tvisualizeChildData,\n\t\t\t);\n}\n"]}
@@ -5,5 +5,5 @@
5
5
  * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY
6
6
  */
7
7
  export declare const pkgName = "@fluidframework/devtools-core";
8
- export declare const pkgVersion = "2.70.0-361788";
8
+ export declare const pkgVersion = "2.71.0";
9
9
  //# sourceMappingURL=packageVersion.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"packageVersion.d.ts","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,OAAO,kCAAkC,CAAC;AACvD,eAAO,MAAM,UAAU,kBAAkB,CAAC"}
1
+ {"version":3,"file":"packageVersion.d.ts","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,OAAO,kCAAkC,CAAC;AACvD,eAAO,MAAM,UAAU,WAAW,CAAC"}
@@ -5,5 +5,5 @@
5
5
  * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY
6
6
  */
7
7
  export const pkgName = "@fluidframework/devtools-core";
8
- export const pkgVersion = "2.70.0-361788";
8
+ export const pkgVersion = "2.71.0";
9
9
  //# sourceMappingURL=packageVersion.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"packageVersion.js","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,+BAA+B,CAAC;AACvD,MAAM,CAAC,MAAM,UAAU,GAAG,eAAe,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n *\n * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY\n */\n\nexport const pkgName = \"@fluidframework/devtools-core\";\nexport const pkgVersion = \"2.70.0-361788\";\n"]}
1
+ {"version":3,"file":"packageVersion.js","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,+BAA+B,CAAC;AACvD,MAAM,CAAC,MAAM,UAAU,GAAG,QAAQ,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n *\n * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY\n */\n\nexport const pkgName = \"@fluidframework/devtools-core\";\nexport const pkgVersion = \"2.71.0\";\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluidframework/devtools-core",
3
- "version": "2.70.0-361788",
3
+ "version": "2.71.0",
4
4
  "description": "Fluid Framework developer tools core functionality",
5
5
  "homepage": "https://fluidframework.com",
6
6
  "repository": {
@@ -77,37 +77,37 @@
77
77
  "temp-directory": "nyc/.nyc_output"
78
78
  },
79
79
  "dependencies": {
80
- "@fluid-internal/client-utils": "2.70.0-361788",
81
- "@fluidframework/aqueduct": "2.70.0-361788",
82
- "@fluidframework/cell": "2.70.0-361788",
83
- "@fluidframework/container-definitions": "2.70.0-361788",
84
- "@fluidframework/container-loader": "2.70.0-361788",
85
- "@fluidframework/container-runtime": "2.70.0-361788",
86
- "@fluidframework/container-runtime-definitions": "2.70.0-361788",
87
- "@fluidframework/core-interfaces": "2.70.0-361788",
88
- "@fluidframework/core-utils": "2.70.0-361788",
89
- "@fluidframework/counter": "2.70.0-361788",
90
- "@fluidframework/datastore-definitions": "2.70.0-361788",
91
- "@fluidframework/driver-definitions": "2.70.0-361788",
92
- "@fluidframework/map": "2.70.0-361788",
93
- "@fluidframework/matrix": "2.70.0-361788",
94
- "@fluidframework/runtime-definitions": "2.70.0-361788",
95
- "@fluidframework/sequence": "2.70.0-361788",
96
- "@fluidframework/shared-object-base": "2.70.0-361788",
97
- "@fluidframework/telemetry-utils": "2.70.0-361788",
98
- "@fluidframework/tree": "2.70.0-361788"
80
+ "@fluid-internal/client-utils": "~2.71.0",
81
+ "@fluidframework/aqueduct": "~2.71.0",
82
+ "@fluidframework/cell": "~2.71.0",
83
+ "@fluidframework/container-definitions": "~2.71.0",
84
+ "@fluidframework/container-loader": "~2.71.0",
85
+ "@fluidframework/container-runtime": "~2.71.0",
86
+ "@fluidframework/container-runtime-definitions": "~2.71.0",
87
+ "@fluidframework/core-interfaces": "~2.71.0",
88
+ "@fluidframework/core-utils": "~2.71.0",
89
+ "@fluidframework/counter": "~2.71.0",
90
+ "@fluidframework/datastore-definitions": "~2.71.0",
91
+ "@fluidframework/driver-definitions": "~2.71.0",
92
+ "@fluidframework/map": "~2.71.0",
93
+ "@fluidframework/matrix": "~2.71.0",
94
+ "@fluidframework/runtime-definitions": "~2.71.0",
95
+ "@fluidframework/sequence": "~2.71.0",
96
+ "@fluidframework/shared-object-base": "~2.71.0",
97
+ "@fluidframework/telemetry-utils": "~2.71.0",
98
+ "@fluidframework/tree": "~2.71.0"
99
99
  },
100
100
  "devDependencies": {
101
101
  "@arethetypeswrong/cli": "^0.17.1",
102
102
  "@biomejs/biome": "~1.9.3",
103
- "@fluid-internal/mocha-test-setup": "2.70.0-361788",
103
+ "@fluid-internal/mocha-test-setup": "~2.71.0",
104
104
  "@fluid-tools/build-cli": "^0.58.3",
105
105
  "@fluidframework/build-common": "^2.0.3",
106
106
  "@fluidframework/build-tools": "^0.58.3",
107
- "@fluidframework/devtools-core-previous": "npm:@fluidframework/devtools-core@2.63.0",
108
- "@fluidframework/eslint-config-fluid": "^6.1.0",
109
- "@fluidframework/id-compressor": "2.70.0-361788",
110
- "@fluidframework/test-runtime-utils": "2.70.0-361788",
107
+ "@fluidframework/devtools-core-previous": "npm:@fluidframework/devtools-core@2.70.0",
108
+ "@fluidframework/eslint-config-fluid": "^7.0.0",
109
+ "@fluidframework/id-compressor": "~2.71.0",
110
+ "@fluidframework/test-runtime-utils": "~2.71.0",
111
111
  "@microsoft/api-extractor": "7.52.11",
112
112
  "@types/chai": "^4.0.0",
113
113
  "@types/mocha": "^10.0.10",
@@ -154,8 +154,8 @@
154
154
  "check:format": "npm run check:biome",
155
155
  "ci:build:docs": "api-extractor run",
156
156
  "clean": "rimraf --glob _api-extractor-temp nyc dist lib {alpha,beta,internal,legacy}.d.ts \"**/*.tsbuildinfo\" \"**/*.build.log\"",
157
- "eslint": "eslint src",
158
- "eslint:fix": "eslint src --fix",
157
+ "eslint": "eslint --quiet src",
158
+ "eslint:fix": "eslint --quiet src --fix",
159
159
  "format": "npm run format:biome",
160
160
  "format-and-build": "npm run format && npm run build",
161
161
  "format-and-compile": "npm run format && npm run build:compile",
@@ -318,7 +318,7 @@ export const visualizeSharedTree: VisualizeSharedObject = async (
318
318
  * Since the {@link SimpleTreeSchema.allowedTypes} of each children node is only accessible at the parent field level,
319
319
  * each node's allowed types are computed at the parent field level.
320
320
  */
321
- const allowedTypes = treeSimpleSchema.root.allowedTypesIdentifiers;
321
+ const allowedTypes = new Set(treeSimpleSchema.root.simpleAllowedTypes.keys());
322
322
  const isRequired = treeSimpleSchema.root.kind === FieldKind.Required;
323
323
 
324
324
  if (treeView === undefined) {
@@ -223,7 +223,7 @@ async function visualizeObjectNode(
223
223
  const objectNodeSchemaProperties: Record<string, FieldSchemaProperties> = {};
224
224
  for (const [fieldKey, treeFieldSimpleSchema] of schema.fields) {
225
225
  objectNodeSchemaProperties[fieldKey] = {
226
- allowedTypes: treeFieldSimpleSchema.allowedTypesIdentifiers,
226
+ allowedTypes: new Set(treeFieldSimpleSchema.simpleAllowedTypes.keys()),
227
227
  isRequired: treeFieldSimpleSchema.kind === FieldKind.Required ? true : false,
228
228
  };
229
229
  }
@@ -257,7 +257,7 @@ async function visualizeMapNode(
257
257
  const mapNodeSchemaProperties: Record<string, FieldSchemaProperties> = {};
258
258
  for (const key of Object.keys(tree.fields)) {
259
259
  mapNodeSchemaProperties[key] = {
260
- allowedTypes: schema.allowedTypesIdentifiers,
260
+ allowedTypes: new Set(schema.simpleAllowedTypes.keys()),
261
261
  // Map values are always required. Don't display field requirement information, since that information is redundant.
262
262
  isRequired: undefined,
263
263
  };
@@ -297,7 +297,7 @@ async function visualizeArrayNode(
297
297
  const arrayNodeSchemaProperties: Record<string, FieldSchemaProperties> = {};
298
298
  for (const [i] of children.entries()) {
299
299
  arrayNodeSchemaProperties[i] = {
300
- allowedTypes: schema.allowedTypesIdentifiers,
300
+ allowedTypes: new Set(schema.simpleAllowedTypes.keys()),
301
301
  // Array values are always required. Don't display field requirement information, since that information is redundant.
302
302
  isRequired: undefined,
303
303
  };
@@ -6,4 +6,4 @@
6
6
  */
7
7
 
8
8
  export const pkgName = "@fluidframework/devtools-core";
9
- export const pkgVersion = "2.70.0-361788";
9
+ export const pkgVersion = "2.71.0";