Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Move Json domain from test to internal #23043

Merged
merged 14 commits into from
Feb 25, 2025
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,18 @@

import { strict as assert } from "node:assert";

import { JsonArray } from "@fluidframework/tree/internal";

import { RecursiveMap } from "../testExports.js";

describe("import tests", () => {
it("recursive map", () => {
const r = new RecursiveMap([["", new RecursiveMap([])]]);
assert.equal(r.size, 1);
});

it("JsonArray", () => {
const r = new JsonArray([1]);
assert.equal(r[0], 1);
});
});
37 changes: 37 additions & 0 deletions packages/dds/tree/api-report/tree.alpha.api.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,20 @@ export type AllowedTypes = readonly LazyItem<TreeNodeSchema>[];
// @public
type AllowedTypesUnsafe = readonly LazyItem<TreeNodeSchemaUnsafe>[];

// @alpha
export const _APIExtractorWorkaroundJsonArrayBase: TreeNodeSchemaClass_2<"com.fluidframework.json.array", NodeKind_2.Array, TreeArrayNodeUnsafe_2<readonly [() => typeof JsonObject, () => typeof JsonArray, TreeNodeSchemaNonClass_2<"com.fluidframework.leaf.null", NodeKind_2.Leaf, null, null, true, unknown, never>, TreeNodeSchemaNonClass_2<"com.fluidframework.leaf.boolean", NodeKind_2.Leaf, boolean, boolean, true, unknown, never>, TreeNodeSchemaNonClass_2<"com.fluidframework.leaf.number", NodeKind_2.Leaf, number, number, true, unknown, never>, TreeNodeSchemaNonClass_2<"com.fluidframework.leaf.string", NodeKind_2.Leaf, string, string, true, unknown, never>]> & WithType_2<"com.fluidframework.json.array", NodeKind_2.Array, unknown>, {
[Symbol.iterator](): Iterator<string | number | JsonObject | JsonArray | InsertableTypedNodeUnsafe_2<TreeNodeSchemaNonClass_2<"com.fluidframework.leaf.boolean", NodeKind_2.Leaf, boolean, boolean, true, unknown, never>, TreeNodeSchemaCore_2<"com.fluidframework.leaf.boolean", NodeKind_2.Leaf, true, unknown, boolean> & {
create(data: boolean): boolean;
}> | null, any, undefined>;
}, false, readonly [() => typeof JsonObject, () => typeof JsonArray, TreeNodeSchemaNonClass_2<"com.fluidframework.leaf.null", NodeKind_2.Leaf, null, null, true, unknown, never>, TreeNodeSchemaNonClass_2<"com.fluidframework.leaf.boolean", NodeKind_2.Leaf, boolean, boolean, true, unknown, never>, TreeNodeSchemaNonClass_2<"com.fluidframework.leaf.number", NodeKind_2.Leaf, number, number, true, unknown, never>, TreeNodeSchemaNonClass_2<"com.fluidframework.leaf.string", NodeKind_2.Leaf, string, string, true, unknown, never>], undefined>;

// @alpha
export const _APIExtractorWorkaroundJsonObjectBase: TreeNodeSchemaClass_2<"com.fluidframework.json.object", NodeKind_2.Map, TreeMapNodeUnsafe_2<readonly [() => typeof JsonObject, () => typeof JsonArray, TreeNodeSchemaNonClass_2<"com.fluidframework.leaf.null", NodeKind_2.Leaf, null, null, true, unknown, never>, TreeNodeSchemaNonClass_2<"com.fluidframework.leaf.boolean", NodeKind_2.Leaf, boolean, boolean, true, unknown, never>, TreeNodeSchemaNonClass_2<"com.fluidframework.leaf.number", NodeKind_2.Leaf, number, number, true, unknown, never>, TreeNodeSchemaNonClass_2<"com.fluidframework.leaf.string", NodeKind_2.Leaf, string, string, true, unknown, never>]> & WithType_2<"com.fluidframework.json.object", NodeKind_2.Map, unknown>, {
[Symbol.iterator](): Iterator<[string, string | number | JsonObject | JsonArray | InsertableTypedNodeUnsafe_2<TreeNodeSchemaNonClass_2<"com.fluidframework.leaf.boolean", NodeKind_2.Leaf, boolean, boolean, true, unknown, never>, TreeNodeSchemaCore_2<"com.fluidframework.leaf.boolean", NodeKind_2.Leaf, true, unknown, boolean> & {
create(data: boolean): boolean;
}> | null], any, undefined>;
}, false, readonly [() => typeof JsonObject, () => typeof JsonArray, TreeNodeSchemaNonClass_2<"com.fluidframework.leaf.null", NodeKind_2.Leaf, null, null, true, unknown, never>, TreeNodeSchemaNonClass_2<"com.fluidframework.leaf.boolean", NodeKind_2.Leaf, boolean, boolean, true, unknown, never>, TreeNodeSchemaNonClass_2<"com.fluidframework.leaf.number", NodeKind_2.Leaf, number, number, true, unknown, never>, TreeNodeSchemaNonClass_2<"com.fluidframework.leaf.string", NodeKind_2.Leaf, string, string, true, unknown, never>], undefined>;

// @public
type ApplyKind<T, Kind extends FieldKind> = {
[FieldKind.Required]: T;
Expand Down Expand Up @@ -337,6 +351,10 @@ export interface ITreeViewConfiguration<TSchema extends ImplicitFieldSchema = Im
readonly schema: TSchema;
}

// @alpha
export class JsonArray extends _APIExtractorWorkaroundJsonArrayBase {
}

// @alpha @sealed
export interface JsonArrayNodeSchema extends JsonNodeSchemaBase<NodeKind.Array, "array"> {
readonly items: JsonFieldSchema;
Expand Down Expand Up @@ -381,13 +399,23 @@ export interface JsonNodeSchemaBase<TNodeKind extends NodeKind, TJsonSchemaType
readonly type: TJsonSchemaType;
}

// @alpha
export class JsonObject extends _APIExtractorWorkaroundJsonObjectBase {
}

// @alpha @sealed
export interface JsonObjectNodeSchema extends JsonNodeSchemaBase<NodeKind.Object, "object"> {
readonly additionalProperties?: boolean;
readonly properties: Record<string, JsonFieldSchema>;
readonly required?: string[];
}

// @alpha
export const JsonPrimitive: readonly [TreeNodeSchemaNonClass_2<"com.fluidframework.leaf.null", NodeKind_2.Leaf, null, null, true, unknown, never>, TreeNodeSchemaNonClass_2<"com.fluidframework.leaf.boolean", NodeKind_2.Leaf, boolean, boolean, true, unknown, never>, TreeNodeSchemaNonClass_2<"com.fluidframework.leaf.number", NodeKind_2.Leaf, number, number, true, unknown, never>, TreeNodeSchemaNonClass_2<"com.fluidframework.leaf.string", NodeKind_2.Leaf, string, string, true, unknown, never>];

// @alpha (undocumented)
export type JsonPrimitive = TreeNodeFromImplicitAllowedTypes<typeof JsonPrimitive>;

// @alpha
export type JsonRefPath = `#/$defs/${JsonSchemaId}`;

Expand All @@ -407,6 +435,12 @@ export type JsonTreeSchema = JsonFieldSchema & {
readonly $defs: Record<JsonSchemaId, JsonNodeSchema>;
};

// @alpha
export const JsonUnion: readonly [() => typeof JsonObject, () => typeof JsonArray, TreeNodeSchemaNonClass_2<"com.fluidframework.leaf.null", NodeKind_2.Leaf, null, null, true, unknown, never>, TreeNodeSchemaNonClass_2<"com.fluidframework.leaf.boolean", NodeKind_2.Leaf, boolean, boolean, true, unknown, never>, TreeNodeSchemaNonClass_2<"com.fluidframework.leaf.number", NodeKind_2.Leaf, number, number, true, unknown, never>, TreeNodeSchemaNonClass_2<"com.fluidframework.leaf.string", NodeKind_2.Leaf, string, string, true, unknown, never>];

// @alpha (undocumented)
export type JsonUnion = TreeNodeFromImplicitAllowedTypes<typeof JsonUnion>;

// @alpha
export interface JsonValidator {
compile<Schema extends TSchema>(schema: Schema): SchemaValidationFunction<Schema>;
Expand Down Expand Up @@ -518,6 +552,9 @@ export type ReadSchema<TSchema extends ImplicitFieldSchema | UnsafeUnknownSchema
TSchema
] extends [ImplicitFieldSchema] ? TSchema : ImplicitFieldSchema;

// @alpha
export const _RecursiveArrayWorkaroundJsonArray: FixRecursiveArraySchema<typeof _APIExtractorWorkaroundJsonArrayBase>;

// @public @deprecated
export type RestrictiveReadonlyRecord<K extends symbol | string, T> = {
readonly [P in symbol | string]: P extends K ? T : never;
Expand Down
10 changes: 10 additions & 0 deletions packages/dds/tree/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -233,3 +233,13 @@ export {
export type { MapNodeInsertableData } from "./simple-tree/index.js";

export type { JsonCompatible, JsonCompatibleObject } from "./util/index.js";

export {
JsonUnion,
JsonArray,
JsonObject,
JsonPrimitive,
_RecursiveArrayWorkaroundJsonArray,
_APIExtractorWorkaroundJsonObjectBase,
_APIExtractorWorkaroundJsonArrayBase,
} from "./jsonDomainSchema.js";
110 changes: 110 additions & 0 deletions packages/dds/tree/src/jsonDomainSchema.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
/*!
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
* Licensed under the MIT License.
*/

import {
SchemaFactory,
type AllowedTypes,
type FixRecursiveArraySchema,
type TreeNodeFromImplicitAllowedTypes,
type ValidateRecursiveSchema,
} from "./simple-tree/index.js";

const sf = new SchemaFactory("com.fluidframework.json");

/**
* {@link AllowedTypes} for primitives types allowed in JSON.
* @alpha
*/
export const JsonPrimitive = [
sf.null,
sf.boolean,
sf.number,
sf.string,
] as const satisfies AllowedTypes;

/**
* @alpha
*/
export type JsonPrimitive = TreeNodeFromImplicitAllowedTypes<typeof JsonPrimitive>;

/**
* {@link AllowedTypes} for any content allowed in the JSON domain.
* @example
* ```typescript
* const tree = TreeAlpha.importConcise(JsonUnion, { example: { nested: true }, value: 5 });
* ```
* @alpha
*/
export const JsonUnion = [() => JsonObject, () => JsonArray, ...JsonPrimitive] as const;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My vote would be to call this Json or JsonTree. The term "Union", while correct, is more mechanical than it is semantic.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think having a top level package export called Json is a great idea. JS already has JSON, and our package has lots of Json related stuff other than this. JsonTree also seems questionable as VerboseTree and ConciseTree are both Json tree formats, and this is nothing like them. If changing this, I'd lean in the direction of making it more explicitly not named like that.

Copy link
Contributor

@Josmithr Josmithr Feb 24, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we want to be more careful / explicit with the naming, we could possibly do something like JsonDomainTree. I agree that JsonUnion doesn't really convey the semantics we want here.

But of the existing suggestions, I like JsonTree the best personally.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think JsonDomain really does it either. Its perfectly reasonable to think of VerboseTree and ConciseTree as projections of trees into the JSON domain. This format on the other hand isn't even a JSON style object since it uses maps for objects.

Maybe JsonAsTree for JsonUnion, and JsonObjectAsTree for JsonObject?

Another approach would be to go with a namespace. Since everything in it needs the same release tag, I think we can make that work. In that case maybe JsonDomain, with a big doc comment on the namespace, would work, then the members could have short names like Object, Union/Tree, Array, etc.?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think namespaces will break re-exports in fluid-framework 😕
microsoft/rushstack#4807

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Or, well, maybe not, since we're generating our own rollups now. I'm not sure.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But I do like namespaces for things like this. JsonAsTree also seems reasonable to me.


/**
* @alpha
*/
export type JsonUnion = TreeNodeFromImplicitAllowedTypes<typeof JsonUnion>;

/**
* Do not use. Exists only as a workaround for {@link https://github.com/microsoft/TypeScript/issues/59550} and {@link https://github.com/microsoft/rushstack/issues/4429}.
* @system @alpha
*/
export const _APIExtractorWorkaroundJsonObjectBase = sf.mapRecursive("object", JsonUnion);

/**
* Arbitrary JSON object as a {@link TreeNode}.
* @remarks
* API of the tree node is more aligned with an es6 map than a JS object using its properties like a map.
* @example
* ```typescript
* // Due to TypeScript restrictions on recursive types, the constructor and be somewhat limiting.
* const fromArray = new JsonObject([["a", 0]]);
* // Using `importConcise` can work better for JSON data:
* const imported = TreeAlpha.importConcise(JsonObject, { a: 0 });
* // Node API is like a Map:
* const value = imported.get("a");
* ```
* @alpha
*/
export class JsonObject extends _APIExtractorWorkaroundJsonObjectBase {}
{
type _check = ValidateRecursiveSchema<typeof JsonObject>;
}

/**
* D.ts bug workaround, see {@link FixRecursiveArraySchema}.
* @privateRemarks
* Normally this would reference JsonArray, but when combining this workaround with the other workaround, this has to reference the base type.
* Testing for this has to be in a separate package, and is thus part of experimental/framework/tree-react-api/src/test/importer.spec.ts.
* @system @alpha
*/
export declare const _RecursiveArrayWorkaroundJsonArray: FixRecursiveArraySchema<
typeof _APIExtractorWorkaroundJsonArrayBase
>;

/**
* Do not use. Exists only as a workaround for {@link https://github.com/microsoft/TypeScript/issues/59550} and {@link https://github.com/microsoft/rushstack/issues/4429}.
* @system @alpha
*/
export const _APIExtractorWorkaroundJsonArrayBase = sf.arrayRecursive("array", JsonUnion);

/**
* Arbitrary JSON object as a {@link TreeNode}.
* @remarks
* This can be worked around by using {@link TreeAlpha.importConcise}.
* @example
* ```typescript
* // Due to TypeScript restrictions on recursive types, the constructor and be somewhat limiting.
* const usingConstructor = new JsonArray(["a", 0, new JsonArray([1])]);
* // Using `importConcise` can work better for JSON data:
* const imported = TreeAlpha.importConcise(JsonArray, ["a", 0, [1]]);
* // Node API is like an Array:
* const outer: JsonUnion = imported[0];
* assert(Tree.is(outer, JsonArray));
* const inner = outer[0];
* ```
* @alpha
*/
export class JsonArray extends _APIExtractorWorkaroundJsonArrayBase {}
{
type _check = ValidateRecursiveSchema<typeof JsonArray>;
}
2 changes: 1 addition & 1 deletion packages/dds/tree/src/test/cursorTestSuite.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ import {
SchemaFactory,
stringSchema,
} from "../simple-tree/index.js";
import { JsonArray, JsonObject } from "./json/index.js";
import { JsonArray, JsonObject } from "../jsonDomainSchema.js";

const sf = new SchemaFactory("Cursor Test Suite");

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,8 @@ import { clone } from "./jsObjectUtil.js";
import { generateTwitterJsonByByteSize } from "./twitter.js";
// eslint-disable-next-line import/no-internal-modules
import { toStoredSchema } from "../../../simple-tree/toStoredSchema.js";
import { JsonUnion, cursorToJsonObject, singleJsonCursor } from "../../json/index.js";
import { cursorToJsonObject, singleJsonCursor } from "../../json/index.js";
import { JsonUnion } from "../../../jsonDomainSchema.js";

// Shared tree keys that map to the type used by the Twitter type/dataset
export const TwitterKey = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ import {
} from "../../cursorTestSuite.js";
import { numberSequenceField, validateChunkCursor } from "./fieldCursorTestUtilities.js";
import { emptyShape, testData } from "./uniformChunkTestData.js";
import { JsonObject } from "../../json/index.js";
import { JsonObject } from "../../../jsonDomainSchema.js";
import { numberSchema } from "../../../simple-tree/index.js";

const basicOnlyChunkCompressor: ChunkCompressor = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ import type { Format } from "../../../feature-libraries/forest-summary/format.js
import type { EncodedFieldBatch } from "../../../feature-libraries/chunked-forest/index.js";
import { jsonSequenceRootSchema } from "../../sequenceRootUtils.js";
// eslint-disable-next-line import/no-internal-modules
import { JsonObject } from "../../json/jsonDomainSchema.js";
import { JsonObject } from "../../../jsonDomainSchema.js";
import { brand } from "../../../util/index.js";
// eslint-disable-next-line import/no-internal-modules
import { ChunkedForest } from "../../../feature-libraries/chunked-forest/chunkedForest.js";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,9 @@ import {
stringSchema,
toStoredSchema,
} from "../../../simple-tree/index.js";
import { fieldJsonCursor, JsonObject, singleJsonCursor } from "../../json/index.js";
import { fieldJsonCursor, singleJsonCursor } from "../../json/index.js";
import { testIdCompressor } from "../../utils.js";
import { JsonObject } from "../../../jsonDomainSchema.js";

const builder = new SchemaFactory("chunkTree");
const empty = builder.object("empty", {});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import { strict as assert } from "assert";
import { BenchmarkType, benchmark } from "@fluid-tools/benchmark";

import { EmptyKey, type ITreeCursorSynchronous } from "../../../core/index.js";
import { cursorToJsonObject, singleJsonCursor, JsonObject } from "../../json/index.js";
import { cursorToJsonObject, singleJsonCursor } from "../../json/index.js";
import {
type ChunkShape,
TreeShape,
Expand All @@ -31,6 +31,7 @@ import { brand } from "../../../util/index.js";
// eslint-disable-next-line import/no-internal-modules
import { numberSchema, stringSchema } from "../../../simple-tree/leafNodeSchema.js";
import { validateUsageError } from "../../utils.js";
import { JsonObject } from "../../../jsonDomainSchema.js";

// Validate a few aspects of shapes that are easier to verify here than via checking the cursor.
function validateShape(shape: ChunkShape): void {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import {
import { numberSchema } from "../../../simple-tree/index.js";
import { brand, makeArray } from "../../../util/index.js";
import { type TestField, EmptyObject } from "../../cursorTestSuite.js";
import { JsonArray, JsonObject } from "../../json/index.js";
import { JsonArray, JsonObject } from "../../../jsonDomainSchema.js";

export const emptyShape = new TreeShape(brand(EmptyObject.identifier), false, []);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ import {
testIdCompressor,
testRevisionTagCodec,
} from "../../utils.js";
import { JsonObject } from "../../json/index.js";
import { JsonObject } from "../../../jsonDomainSchema.js";
import { numberSchema, stringSchema } from "../../../simple-tree/index.js";

const defaultChangeFamily = new DefaultChangeFamily(failCodecFamily);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,8 @@ import {
stringSchema,
} from "../../../simple-tree/index.js";
import { getStoredSchema, toStoredSchema } from "../../../simple-tree/toStoredSchema.js";
import { JsonObject, JsonUnion, singleJsonCursor } from "../../json/index.js";
import { singleJsonCursor } from "../../json/index.js";
import { JsonObject, JsonUnion } from "../../../jsonDomainSchema.js";

const detachedField: FieldKey = brand("detached");
const detachedFieldAnchor: FieldAnchor = { parent: undefined, fieldKey: detachedField };
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,10 @@ import type { FlexTreeField, FlexTreeNode } from "../../../feature-libraries/ind

import { readonlyTreeWithContent } from "./utils.js";
import { cursorFromInsertable, SchemaFactory } from "../../../simple-tree/index.js";
import { JsonObject, singleJsonCursor } from "../../json/index.js";
import { singleJsonCursor } from "../../json/index.js";
import { stringSchema } from "../../../simple-tree/leafNodeSchema.js";
import { brand } from "../../../util/index.js";
import { JsonObject } from "../../../jsonDomainSchema.js";

/**
* Test {@link LazyTreeNode} implementation.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,11 @@ import { type EncodingTestData, makeEncodingTestSuite } from "../../utils.js";
// eslint-disable-next-line import/no-internal-modules
import { toStoredSchema } from "../../../simple-tree/toStoredSchema.js";
import { SchemaFactory } from "../../../simple-tree/index.js";
import { jsonPrimitiveSchema, JsonUnion } from "../../json/index.js";
import { JsonPrimitive, JsonUnion } from "../../../jsonDomainSchema.js";

const codec = makeSchemaCodec({ jsonValidator: typeboxValidator });

const schema2 = toStoredSchema(new SchemaFactory("testSchemas").optional(jsonPrimitiveSchema));
const schema2 = toStoredSchema(new SchemaFactory("testSchemas").optional(JsonPrimitive));

const testCases: EncodingTestData<TreeStoredSchema, Format> = {
successes: [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import {
} from "../../../feature-libraries/schema-index/schemaSummarizer.js";
import { toStoredSchema } from "../../../simple-tree/index.js";
import { takeJsonSnapshot, useSnapshotDirectory } from "../../snapshots/index.js";
import { JsonUnion } from "../../json/index.js";
import { JsonUnion } from "../../../jsonDomainSchema.js";

describe("schemaSummarizer", () => {
describe("encodeTreeSchema", () => {
Expand Down
3 changes: 2 additions & 1 deletion packages/dds/tree/src/test/forestTestSuite.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,8 @@ import {
toStoredSchema,
} from "../simple-tree/index.js";
import { jsonSequenceRootSchema } from "./sequenceRootUtils.js";
import { cursorToJsonObject, JsonArray, singleJsonCursor } from "./json/index.js";
import { cursorToJsonObject, singleJsonCursor } from "./json/index.js";
import { JsonArray } from "../jsonDomainSchema.js";

/**
* Configuration for the forest test suite.
Expand Down
1 change: 0 additions & 1 deletion packages/dds/tree/src/test/json/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,3 @@ export {
cursorToJsonObject,
fieldJsonCursor,
} from "./jsonCursor.js";
export { JsonUnion, JsonArray, JsonObject, jsonPrimitiveSchema } from "./jsonDomainSchema.js";
2 changes: 1 addition & 1 deletion packages/dds/tree/src/test/json/jsonCursor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import {
} from "../../feature-libraries/index.js";
import { brand, isReadonlyArray, type JsonCompatible } from "../../util/index.js";

import { JsonArray, JsonObject } from "./jsonDomainSchema.js";
import { JsonArray, JsonObject } from "../../jsonDomainSchema.js";
import { isFluidHandle } from "@fluidframework/runtime-utils/internal";
import {
booleanSchema,
Expand Down
24 changes: 0 additions & 24 deletions packages/dds/tree/src/test/json/jsonDomainSchema.ts

This file was deleted.

Loading
Loading