diff --git a/.changeset/gentle-needles-own.md b/.changeset/gentle-needles-own.md new file mode 100644 index 000000000000..b5929a0f7ed2 --- /dev/null +++ b/.changeset/gentle-needles-own.md @@ -0,0 +1,10 @@ +--- +"@fluid-experimental/tree": minor +--- +--- +"section": other +--- + +Adds `getLocalEdits` method to OrderedEditSet interface and removed `./test/EditLog` export + +Previously, `EditLog` was imported to cast to this type for access to the `getLocalEdits` method. This change removes the need for this cast, so we can get rid of the `./test/EditLog` export. diff --git a/examples/version-migration/tree-shim/src/model/inventoryList.ts b/examples/version-migration/tree-shim/src/model/inventoryList.ts index 803f918dda9c..7a95570f2c4e 100644 --- a/examples/version-migration/tree-shim/src/model/inventoryList.ts +++ b/examples/version-migration/tree-shim/src/model/inventoryList.ts @@ -10,7 +10,6 @@ import { SharedTreeShim, SharedTreeShimFactory, } from "@fluid-experimental/tree"; -import { EditLog } from "@fluid-experimental/tree/test/EditLog"; import { DataObject, DataObjectFactory } from "@fluidframework/aqueduct/legacy"; import { IFluidHandle } from "@fluidframework/core-interfaces"; import { ITree } from "@fluidframework/tree"; @@ -39,7 +38,7 @@ const newTreeFactory = SharedTree.getFactory(); function migrate(legacyTree: LegacySharedTree, newTree: ITree) { // Revert local edits - otherwise we will be eventually inconsistent - const edits = legacyTree.edits as EditLog; + const edits = legacyTree.edits; const localEdits = [...edits.getLocalEdits()].reverse(); for (const edit of localEdits) { legacyTree.revert(edit.id); diff --git a/experimental/dds/tree/api-report/experimental-tree.alpha.api.md b/experimental/dds/tree/api-report/experimental-tree.alpha.api.md index ae6dd6b1079b..fa6859e79a1a 100644 --- a/experimental/dds/tree/api-report/experimental-tree.alpha.api.md +++ b/experimental/dds/tree/api-report/experimental-tree.alpha.api.md @@ -496,6 +496,7 @@ export interface OrderedEditSet { getIdAtIndex(index: number): EditId; // (undocumented) getIndexOfId(editId: EditId): number; + getLocalEdits(): Iterable>; readonly length: number; // @deprecated (undocumented) tryGetEdit(editId: EditId): Promise | undefined>; diff --git a/experimental/dds/tree/package.json b/experimental/dds/tree/package.json index 3a72c0693952..2427fa8973bc 100644 --- a/experimental/dds/tree/package.json +++ b/experimental/dds/tree/package.json @@ -22,16 +22,6 @@ "types": "./dist/index.d.ts", "default": "./dist/index.js" } - }, - "./test/EditLog": { - "import": { - "types": "./lib/EditLog.d.ts", - "default": "./lib/EditLog.js" - }, - "require": { - "types": "./dist/EditLog.d.ts", - "default": "./dist/EditLog.js" - } } }, "main": "lib/index.js", @@ -41,7 +31,7 @@ "build:compile": "fluid-build . --task compile", "build:docs": "api-extractor run --local", "build:esnext": "tsc --project ./tsconfig.esnext.json", - "check:are-the-types-wrong": "attw --pack . --exclude-entrypoints ./test/EditLog", + "check:are-the-types-wrong": "attw --pack .", "check:biome": "biome check .", "check:exports": "concurrently \"npm:check:exports:*\"", "check:exports:bundle-release-tags": "api-extractor run --config api-extractor/api-extractor-lint-bundle.json", diff --git a/experimental/dds/tree/src/EditLog.ts b/experimental/dds/tree/src/EditLog.ts index 9fc2d2f7835a..50dcb7a2f9e9 100644 --- a/experimental/dds/tree/src/EditLog.ts +++ b/experimental/dds/tree/src/EditLog.ts @@ -74,6 +74,11 @@ export interface OrderedEditSet { * @deprecated this will be removed in favor of {@link OrderedEditSet.tryGetEditAtIndex} */ getEditInSessionAtIndex(index: number): Edit; + + /** + * Gets all local edits. + */ + getLocalEdits(): Iterable>; } /** diff --git a/fluidBuild.config.cjs b/fluidBuild.config.cjs index a9f5d1bc4d53..98a6a54e33de 100644 --- a/fluidBuild.config.cjs +++ b/fluidBuild.config.cjs @@ -415,8 +415,6 @@ module.exports = { // Packages that violate the API linting rules // ae-missing-release-tags, ae-incompatible-release-tags "^examples/data-objects/table-document/", - // AB#8147: ./test/EditLog export should be ./internal/... or tagged for support - "^experimental/dds/tree/", // Packages with APIs that don't need strict API linting "^build-tools/", diff --git a/packages/test/test-end-to-end-tests/src/test/migration-shim/reconnect.spec.ts b/packages/test/test-end-to-end-tests/src/test/migration-shim/reconnect.spec.ts index e7cff7c15ca3..dcbb9d1ddf5d 100644 --- a/packages/test/test-end-to-end-tests/src/test/migration-shim/reconnect.spec.ts +++ b/packages/test/test-end-to-end-tests/src/test/migration-shim/reconnect.spec.ts @@ -16,8 +16,6 @@ import { StablePlace, type TraitLabel, } from "@fluid-experimental/tree"; -// eslint-disable-next-line import/no-internal-modules -import { type EditLog } from "@fluid-experimental/tree/test/EditLog"; import { describeCompat } from "@fluid-private/test-version-utils"; import { LoaderHeader } from "@fluidframework/container-definitions/internal"; import { type IContainerExperimental } from "@fluidframework/container-loader/internal"; @@ -158,7 +156,7 @@ describeCompat("Stamped v2 ops", "NoCompat", (getTestObjectProvider, apis) => { (legacyTree, newTree) => { // Migration code that the customer writes // Revert local edits - otherwise we will be eventually inconsistent - const edits = legacyTree.edits as EditLog; + const edits = legacyTree.edits; const localEdits = [...edits.getLocalEdits()].reverse(); for (const edit of localEdits) { legacyTree.revert(edit.id); diff --git a/packages/test/test-end-to-end-tests/src/test/migration-shim/stampedV2Ops.spec.ts b/packages/test/test-end-to-end-tests/src/test/migration-shim/stampedV2Ops.spec.ts index 6448ea7fc21b..fb02326fab33 100644 --- a/packages/test/test-end-to-end-tests/src/test/migration-shim/stampedV2Ops.spec.ts +++ b/packages/test/test-end-to-end-tests/src/test/migration-shim/stampedV2Ops.spec.ts @@ -16,7 +16,6 @@ import { StablePlace, type TraitLabel, } from "@fluid-experimental/tree"; -import { type EditLog } from "@fluid-experimental/tree/test/EditLog"; import { describeCompat } from "@fluid-private/test-version-utils"; import { LoaderHeader } from "@fluidframework/container-definitions/internal"; import { type IContainerRuntimeOptions } from "@fluidframework/container-runtime/internal"; @@ -151,7 +150,7 @@ describeCompat("Stamped v2 ops", "NoCompat", (getTestObjectProvider, apis) => { (legacyTree, newTree) => { // Migration code that the customer writes // Revert local edits - otherwise we will be eventually inconsistent - const edits = legacyTree.edits as EditLog; + const edits = legacyTree.edits; const localEdits = [...edits.getLocalEdits()].reverse(); for (const edit of localEdits) { legacyTree.revert(edit.id); diff --git a/packages/test/test-end-to-end-tests/src/test/migration-shim/storingHandles.spec.ts b/packages/test/test-end-to-end-tests/src/test/migration-shim/storingHandles.spec.ts index 2817ed75602d..fb2ed8dc5242 100644 --- a/packages/test/test-end-to-end-tests/src/test/migration-shim/storingHandles.spec.ts +++ b/packages/test/test-end-to-end-tests/src/test/migration-shim/storingHandles.spec.ts @@ -16,8 +16,6 @@ import { StablePlace, type TraitLabel, } from "@fluid-experimental/tree"; -// eslint-disable-next-line import/no-internal-modules -import { type EditLog } from "@fluid-experimental/tree/test/EditLog"; import { bufferToString, stringToBuffer } from "@fluid-internal/client-utils"; import { describeCompat } from "@fluid-private/test-version-utils"; import { LoaderHeader } from "@fluidframework/container-definitions/internal"; @@ -171,7 +169,7 @@ describeCompat("Storing handles", "NoCompat", (getTestObjectProvider, apis) => { (legacyTree, newTree) => { // Migration code that the customer writes // Revert local edits - otherwise we will be eventually inconsistent - const edits = legacyTree.edits as EditLog; + const edits = legacyTree.edits; const localEdits = [...edits.getLocalEdits()].reverse(); for (const edit of localEdits) { legacyTree.revert(edit.id);