From b355165484935be32bb129cdcc46532dcd196882 Mon Sep 17 00:00:00 2001 From: Tyler Butler Date: Tue, 27 May 2025 10:15:04 -0700 Subject: [PATCH 1/7] build(client): Update changesets for clarity and concision --- .changeset/afraid-rice-feel.md | 4 ++-- .changeset/gentle-eggs-heal.md | 4 ++-- .changeset/old-bees-itch.md | 2 +- .changeset/public-houses-add.md | 4 +++- .changeset/public-snakes-fetch.md | 2 +- .changeset/tabaxi-fellas-inspire.md | 2 +- .changeset/tough-parts-kick.md | 5 +++-- .changeset/tricky-shrimps-hunt.md | 14 +++++++++++++- 8 files changed, 26 insertions(+), 11 deletions(-) diff --git a/.changeset/afraid-rice-feel.md b/.changeset/afraid-rice-feel.md index 63ca8bc3ad60..e30f21219f3f 100644 --- a/.changeset/afraid-rice-feel.md +++ b/.changeset/afraid-rice-feel.md @@ -6,7 +6,7 @@ TreeAlpha.create now accepts unhydrated nodes [TreeAlpha.create](https://fluidframework.com/docs/api/fluid-framework/treealpha-interface#create-methodsignature) now accepts [unhydrated](https://fluidframework.com/docs/api/fluid-framework/unhydrated-typealias) nodes. -`TreeAlpha.create`'s documentation has been fixed to indicate support instead of being self contradictory about it. +`TreeAlpha.create`'s documentation has been updated to clarify that this is supported. Additionally `TreeAlpha.create` no longer throws a "Tree does not conform to schema" error when given a tree omitting an identifier. -Instead the identifier behaves like it would for other ways to build unhydrated nodes: remaining unreadable until hydrated. +Instead, the identifier behaves like it would for other ways to build unhydrated nodes: remaining unreadable until hydrated. diff --git a/.changeset/gentle-eggs-heal.md b/.changeset/gentle-eggs-heal.md index f3f3c317f0b1..a5b9dbe507fe 100644 --- a/.changeset/gentle-eggs-heal.md +++ b/.changeset/gentle-eggs-heal.md @@ -2,7 +2,7 @@ "@fluid-experimental/tree-react-api": minor "__section": feature --- -New experimental objectIdNumber API has been added +New experimental objectIdNumber API -A new `objectIdNumber` has been added, which is handy when an identifier is needed which corresponds to an object identity. +A new `objectIdNumber` has been added, which is useful you need an identifier which corresponds to an object identity. For example: when specifying a React "key" that corresponds to a `TreeNode`. diff --git a/.changeset/old-bees-itch.md b/.changeset/old-bees-itch.md index ad5045dd1778..728948ff0e4d 100644 --- a/.changeset/old-bees-itch.md +++ b/.changeset/old-bees-itch.md @@ -3,7 +3,7 @@ "@fluidframework/tree": minor "__section": tree --- -comparePersistedSchema (alpha) has had its canInitialize parameter removed +The comparePersistedSchema function (alpha) has had its canInitialize parameter removed [comparePersistedSchema](https://fluidframework.com/docs/api/tree/#comparepersistedschema-function) has had its `canInitialize` parameter removed. This parameter was only used to add to the output [SchemaCompatibilityStatus](https://fluidframework.com/docs/api/fluid-framework/schemacompatibilitystatus-interface). diff --git a/.changeset/public-houses-add.md b/.changeset/public-houses-add.md index 71ee6eae7849..99368da7fcd9 100644 --- a/.changeset/public-houses-add.md +++ b/.changeset/public-houses-add.md @@ -4,4 +4,6 @@ --- "getPresence(container: IFluidContainer): Presence" now supported -`getPresence` is now supported and may be used to directly acquire `Presence` instead of using `ExperimentalPresenceManager` in container schema and calling `getPresenceViaDataObject`. (Both of those are now deprecated.) +You can now use the `getPresence` function to directly acquire `Presence`. In previous releases, you were required to +use `ExperimentalPresenceManager` in container schema and calling `getPresenceViaDataObject`, but that is no longer +required. Both `ExperimentalPresenceManager` and `getPresenceViaDataObject` are now deprecated. diff --git a/.changeset/public-snakes-fetch.md b/.changeset/public-snakes-fetch.md index 748e3025c10f..5240268d30b4 100644 --- a/.changeset/public-snakes-fetch.md +++ b/.changeset/public-snakes-fetch.md @@ -6,7 +6,7 @@ TreeNodes now implicitly generate identifiers on access instead of throwing Accessing a defaulted [identifier](https://fluidframework.com/docs/api/fluid-framework/schemafactory-class#identifier-property) on an [Unhydrated](https://fluidframework.com/docs/api/fluid-framework/unhydrated-typealias) `TreeNode` no longer throws a usage error. -Instead a new UUID is allocated for the identifier and returned. +Instead, a new UUID is allocated for the identifier and returned. These UUIDs will be more compressible than random ones, since they all come from a single sequence (starting with a random UUID). They will not be fully compressed like the identifiers generated after hydration that leverage the document's [IIdCompressor](https://fluidframework.com/docs/api/id-compressor/iidcompressor-interface). diff --git a/.changeset/tabaxi-fellas-inspire.md b/.changeset/tabaxi-fellas-inspire.md index b225bc14b8ec..9e48394aca84 100644 --- a/.changeset/tabaxi-fellas-inspire.md +++ b/.changeset/tabaxi-fellas-inspire.md @@ -3,7 +3,7 @@ "@fluidframework/tree": minor "__section": tree --- -TableSchema (alpha) APIs have been added +New TableSchema (alpha) APIs A `TableSchema` utility has been added to Shared Tree for managing dynamic, tabular data. This new `TableSchema` namespace contains APIs for creating column, row, and table [node schema](https://fluidframework.com/docs/api/fluid-framework/treenodeschema-typealias). diff --git a/.changeset/tough-parts-kick.md b/.changeset/tough-parts-kick.md index 3262eb98ee85..19be9103a3ba 100644 --- a/.changeset/tough-parts-kick.md +++ b/.changeset/tough-parts-kick.md @@ -2,6 +2,7 @@ "@fluidframework/tree": minor "__section": feature --- -TreeAlpha.key2 API added +New TreeAlpha.key2 API -The `TreeAlpha.key2` method is meant to eventually replace the public `Tree.key` method. This new method now returns undefined in the case where there is a root node. +The `TreeAlpha.key2` method is meant to eventually replace the public `Tree.key` method. +This new method returns `undefined` in the case where there is a root node. diff --git a/.changeset/tricky-shrimps-hunt.md b/.changeset/tricky-shrimps-hunt.md index ca9bf7989e0c..abcc7a8d07cd 100644 --- a/.changeset/tricky-shrimps-hunt.md +++ b/.changeset/tricky-shrimps-hunt.md @@ -3,9 +3,10 @@ "@fluidframework/tree": minor "__section": feature --- -TreeAlpha identifier APIs for converting, retrieving, and generating identifiers have been added +New TreeAlpha identifier APIs for converting, retrieving, and generating identifiers #### TreeAlpha.identifier + You can retrieve the long identifier with `TreeAlpha.identifier(node)`, where `node` is a `TreeNode`. The long identifier is a stable, compressible UUID generated by the tree. In cases where the node does not yet have an identifier assigned, this will return `undefined`. These cases include: @@ -13,45 +14,56 @@ These cases include: - The node is a non-hydrated node with a user provided identifier. Note that if it is a non-hydrated node without an identifier provided, it will throw an error. #### TreeAlpha.identifier.shorten + You can shorten a long identifier with `TreeAlpha.identifier.shorten(branch, identifier)`, where `branch` is a `TreeBranch`, and `identifier` is a `string`. If the method returns a valid short identifier, this identifier can be passed into `TreeAlpha.identifier.lengthen` to get the original valid long `identifier` back. In the cases where it's not possible to shorten the `identifier`, it will return `undefined`. These cases include: + - A compressible long identifier, but it is unrecognized by the tree that the node belongs to. This can occur if the identifier is not generated from the tree. - An identifier which is not compressible by the tree. This can occur if the node's identifier was a user provided string. #### TreeAlpha.identifier.lengthen + You can lengthen a short identifier with `TreeAlpha.identifier.lengthen(branch, identifier)`, where `branch` is a `TreeBranch`, and `identifier` is a `number`. If the method returns a valid long identifier, this identifier can be passed into `TreeAlpha.identifier.shorten` to get the original `identifier` back. In the cases where it's not possible to lengthen the `identifier`, this method will throw an error. These cases include: + - An unrecognized short identifier. This can occur if the identifier is not generated from the tree. #### TreeAlpha.identifier.getShort + You can retrieve the short identifier from a node with `TreeAlpha.identifier.getShort(node)` where `node` is a `TreeNode`. If it is not possible to retrieve the short identifier, it will return `undefined` ##### Example for a node with valid identifier + ```typescript // This will retrieve the short identifier from the node. const shortIdentifier = TreeAlpha.identifier.getShort(nodeWithValidIdentifier) ``` ##### Examples for when you get undefined + In cases where the node provided does not contain an identifier that is recognized or compressible by the tree that the node belongs to, this method will return undefined. This will occur in the following cases: + - The node is an non-hydrated node with a user provided identifier. Note that if it is an non-hydrated node without an identifier provided, it will throw an error. - The node does not contain an identifier field. - The node contains a compressible long identifier, but it is unrecognized by the tree that the node belongs to. This can occur if the identifier is not generated from the tree. - The node contains an identifier which is not compressible by its id compressor. This can occur if the node's identifier was a user provided string. + ```typescript // This will return undefined const shortIdentifier = TreeAlpha.identifier.getShort(node) ``` #### TreeAlpha.identifier.create + You can create a long identifier from a branch with `TreeAlpha.identifier.create(branch)` where `branch` is a `TreeBranch`. + ```typescript const createdIdentifier = TreeAlpha.identifier.create(branch) ``` From bc1139bed4c792d3d5222e1e21e6480e1eda66ca Mon Sep 17 00:00:00 2001 From: Tyler Butler Date: Tue, 27 May 2025 10:23:23 -0700 Subject: [PATCH 2/7] build(client): Add release notes for 2.41.0 --- RELEASE_NOTES/2.41.0.md | 443 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 443 insertions(+) create mode 100644 RELEASE_NOTES/2.41.0.md diff --git a/RELEASE_NOTES/2.41.0.md b/RELEASE_NOTES/2.41.0.md new file mode 100644 index 000000000000..f734e3ee81e2 --- /dev/null +++ b/RELEASE_NOTES/2.41.0.md @@ -0,0 +1,443 @@ + + +# Fluid Framework v2.41.0 + +## Contents + +- [✨ New Features](#-new-features) + - [New experimental objectIdNumber API (#21115)](#new-experimental-objectidnumber-api-21115) + - [New TreeAlpha.key2 API (#24623)](#new-treealphakey2-api-24623) + - [New TreeAlpha identifier APIs for converting, retrieving, and generating identifiers (#24218)](#new-treealpha-identifier-apis-for-converting-retrieving-and-generating-identifiers-24218) + - ["getPresence(container: IFluidContainer): Presence" now supported (#24399)](#getpresencecontainer-ifluidcontainer-presence-now-supported-24399) +- [🌳 SharedTree DDS Changes](#-sharedtree-dds-changes) + - [The comparePersistedSchema function (alpha) has had its canInitialize parameter removed (#24606)](#the-comparepersistedschema-function-alpha-has-had-its-caninitialize-parameter-removed-24606) + - [TreeAlpha.create now accepts unhydrated nodes (#24629)](#treealphacreate-now-accepts-unhydrated-nodes-24629) + - [New TableSchema (alpha) APIs (#24579)](#new-tableschema-alpha-apis-24579) + - [SharedTrees's FluidClientVersion enum (alpha) has been redesigned (#24638)](#sharedtreess-fluidclientversion-enum-alpha-has-been-redesigned-24638) + - [ForestTypeExpensiveDebug now validates content against schema (#24658)](#foresttypeexpensivedebug-now-validates-content-against-schema-24658) + - [TreeNodes now implicitly generate identifiers on access instead of throwing (#24665)](#treenodes-now-implicitly-generate-identifiers-on-access-instead-of-throwing-24665) + +## ✨ New Features + +### New experimental objectIdNumber API ([#21115](https://github.com/microsoft/FluidFramework/issues/21115)) + +A new `objectIdNumber` has been added, which is useful you need an identifier which corresponds to an object identity. For example: when specifying a React "key" that corresponds to a `TreeNode`. + +#### Change details + +Commit: [`df2f139`](https://github.com/microsoft/FluidFramework/commit/df2f139be8e8145d5eea313814cd6d35018cacee) + +Affected packages: + +- @fluid-experimental/tree-react-api + +[⬆️ Table of contents](#contents) + +### New TreeAlpha.key2 API ([#24623](https://github.com/microsoft/FluidFramework/issues/24623)) + +The `TreeAlpha.key2` method is meant to eventually replace the public `Tree.key` method. This new method returns `undefined` in the case where there is a root node. + +#### Change details + +Commit: [`0ddd6b0`](https://github.com/microsoft/FluidFramework/commit/0ddd6b030bf21ef2f315b84e428954ecfe951728) + +Affected packages: + +- @fluidframework/tree + +[⬆️ Table of contents](#contents) + +### New TreeAlpha identifier APIs for converting, retrieving, and generating identifiers ([#24218](https://github.com/microsoft/FluidFramework/issues/24218)) + +#### TreeAlpha.identifier + +You can retrieve the long identifier with `TreeAlpha.identifier(node)`, where `node` is a `TreeNode`. The long identifier is a stable, compressible UUID generated by the tree. In cases where the node does not yet have an identifier assigned, this will return `undefined`. These cases include: + +- The node does not contain an identifier field. +- The node is a non-hydrated node with a user provided identifier. Note that if it is a non-hydrated node without an identifier provided, it will throw an error. + +#### TreeAlpha.identifier.shorten + +You can shorten a long identifier with `TreeAlpha.identifier.shorten(branch, identifier)`, where `branch` is a `TreeBranch`, and `identifier` is a `string`. If the method returns a valid short identifier, this identifier can be passed into `TreeAlpha.identifier.lengthen` to get the original valid long `identifier` back. In the cases where it's not possible to shorten the `identifier`, it will return `undefined`. These cases include: + +- A compressible long identifier, but it is unrecognized by the tree that the node belongs to. This can occur if the identifier is not generated from the tree. +- An identifier which is not compressible by the tree. This can occur if the node's identifier was a user provided string. + +#### TreeAlpha.identifier.lengthen + +You can lengthen a short identifier with `TreeAlpha.identifier.lengthen(branch, identifier)`, where `branch` is a `TreeBranch`, and `identifier` is a `number`. If the method returns a valid long identifier, this identifier can be passed into `TreeAlpha.identifier.shorten` to get the original `identifier` back. In the cases where it's not possible to lengthen the `identifier`, this method will throw an error. These cases include: + +- An unrecognized short identifier. This can occur if the identifier is not generated from the tree. + +#### TreeAlpha.identifier.getShort + +You can retrieve the short identifier from a node with `TreeAlpha.identifier.getShort(node)` where `node` is a `TreeNode`. If it is not possible to retrieve the short identifier, it will return `undefined` + +##### Example for a node with valid identifier + +```typescript +// This will retrieve the short identifier from the node. +const shortIdentifier = TreeAlpha.identifier.getShort(nodeWithValidIdentifier); +``` + +##### Examples for when you get undefined + +In cases where the node provided does not contain an identifier that is recognized or compressible by the tree that the node belongs to, this method will return undefined. This will occur in the following cases: + +- The node is an non-hydrated node with a user provided identifier. Note that if it is an non-hydrated node without an identifier provided, it will throw an error. +- The node does not contain an identifier field. +- The node contains a compressible long identifier, but it is unrecognized by the tree that the node belongs to. This can occur if the identifier is not generated from the tree. +- The node contains an identifier which is not compressible by its id compressor. This can occur if the node's identifier was a user provided string. + +```typescript +// This will return undefined +const shortIdentifier = TreeAlpha.identifier.getShort(node); +``` + +#### TreeAlpha.identifier.create + +You can create a long identifier from a branch with `TreeAlpha.identifier.create(branch)` where `branch` is a `TreeBranch`. + +```typescript +const createdIdentifier = TreeAlpha.identifier.create(branch); +``` + +#### Change details + +Commit: [`e5b2882`](https://github.com/microsoft/FluidFramework/commit/e5b28821323566112096f05805281b8d5321077d) + +Affected packages: + +- fluid-framework +- @fluidframework/tree + +[⬆️ Table of contents](#contents) + +### "getPresence(container: IFluidContainer): Presence" now supported ([#24399](https://github.com/microsoft/FluidFramework/issues/24399)) + +You can now use the `getPresence` function to directly acquire `Presence`. In previous releases, you were required to use `ExperimentalPresenceManager` in container schema and calling `getPresenceViaDataObject`, but that is no longer required. Both `ExperimentalPresenceManager` and `getPresenceViaDataObject` are now deprecated. + +#### Change details + +Commit: [`5c6824a`](https://github.com/microsoft/FluidFramework/commit/5c6824a48da7dad6cb5911e6b1af02dfaf6382e1) + +Affected packages: + +- @fluidframework/presence + +[⬆️ Table of contents](#contents) + +## 🌳 SharedTree DDS Changes + +### The comparePersistedSchema function (alpha) has had its canInitialize parameter removed ([#24606](https://github.com/microsoft/FluidFramework/issues/24606)) + +[comparePersistedSchema](https://fluidframework.com/docs/api/tree/#comparepersistedschema-function) has had its `canInitialize` parameter removed. This parameter was only used to add to the output [SchemaCompatibilityStatus](https://fluidframework.com/docs/api/fluid-framework/schemacompatibilitystatus-interface). If a full `SchemaCompatibilityStatus` is still desired, the `canInitialize` value can be added to the result: + +```typescript +// old +const result = comparePersistedSchema(a, b, canInitialize); +// new +const result = { ...comparePersistedSchema(a, b), canInitialize }; +``` + +#### Change details + +Commit: [`d083a17`](https://github.com/microsoft/FluidFramework/commit/d083a1780a1db74a922cbfb451d23ab932c0eb32) + +Affected packages: + +- fluid-framework +- @fluidframework/tree + +[⬆️ Table of contents](#contents) + +### TreeAlpha.create now accepts unhydrated nodes ([#24629](https://github.com/microsoft/FluidFramework/issues/24629)) + +[TreeAlpha.create](https://fluidframework.com/docs/api/fluid-framework/treealpha-interface#create-methodsignature) now accepts [unhydrated](https://fluidframework.com/docs/api/fluid-framework/unhydrated-typealias) nodes. `TreeAlpha.create`'s documentation has been updated to clarify that this is supported. + +Additionally `TreeAlpha.create` no longer throws a "Tree does not conform to schema" error when given a tree omitting an identifier. Instead, the identifier behaves like it would for other ways to build unhydrated nodes: remaining unreadable until hydrated. + +#### Change details + +Commit: [`e63af87`](https://github.com/microsoft/FluidFramework/commit/e63af87aeb7ece1ff0969027904c3b18f122d2d1) + +Affected packages: + +- @fluidframework/tree +- fluid-framework + +[⬆️ Table of contents](#contents) + +### New TableSchema (alpha) APIs ([#24579](https://github.com/microsoft/FluidFramework/issues/24579)) + +A `TableSchema` utility has been added to Shared Tree for managing dynamic, tabular data. This new `TableSchema` namespace contains APIs for creating column, row, and table [node schema](https://fluidframework.com/docs/api/fluid-framework/treenodeschema-typealias). + +Note: these APIs require the use of [SchemaFactoryAlpha](https://fluidframework.com/docs/api/fluid-framework/schemafactoryalpha-class). + +> \[!WARNING] +> +> These APIs are in preview and are subject to change. Until these APIs have stabilized, it is not recommended to use them in production code. There may be breaking changes to these APIs and their underlying data format. Using these APIs in production code may result in data loss or corruption. + +#### Creating a table + +You can craft a table schema with `TableSchema.table`. This includes providing a schema for the cells that will appear in the table: + +```typescript +class MyTable extends TableSchema.table({ + schemaFactory, + cell: schemaFactory.string, +}) {} + +const table = new MyTable({ + columns: [{ id: "column-0" }], + rows: [{ id: "row-0", cells: { "column-0": "Hello world!" } }], +}); +``` + +#### Creating a table with custom column and row schema + +To associate additional data with your rows or columns, generate custom row and column schema using `TableSchema.column` and `TableSchema.row`. These schema can then be provided to `TableSchema.table`: + +```typescript +class MyColumn extends TableSchema.column({ + schemaFactory, + cell: Cell, + props: schemaFactory.object("TableColumnProps", { + label: schemaFactory.string, + }), +}) {} + +class MyRow extends TableSchema.row({ + schemaFactory, + cell: Cell, +}) {} + +class MyTable extends TableSchema.table({ + schemaFactory, + cell: Cell, + column: MyColumn, + row: MyRow, +}) {} + +const table = new MyTable({ + columns: [ + new MyColumn({ props: { label: "Entry" } }), + new MyColumn({ props: { label: "Date" } }), + new MyColumn({ props: { label: "Amount" } }), + ], + rows: [], +}); +``` + +#### Interacting with the table + +Table trees created using `TableSchema` offer various APIs to make working with tabular data easy. These include: + +- Insertion and removal of columns, rows, and cells. +- Cell access by column/row. + +```typescript +// Create an empty table +const table = MyTable.empty(); + +const column0 = new MyColumn({ + props: { label: "Column 0" }, +}); + +// Append a column to the end of the table. +table.insertColumn({ + column: column0, +}); + +const rows = [new MyRow({ cells: {} }), new MyRow({ cells: {} })]; + +// Insert rows at the beginning of the table. +table.insertRows({ + index: 0, + rows, +}); + +// Set cell at row 0, column 0. +table.setCell({ + key: { + column: column0, + row: rows[0], + }, + cell: "Hello", +}); + +// Set cell at row 1, column 0. +table.setCell({ + key: { + column: column0, + row: rows[1], + }, + cell: "World", +}); + +// Remove the first row. +// Note: this will also remove the row's cell. +table.removeRow(rows[0]); + +// Remove the column. +// Note: this will *not* remove the remaining cell under this column. +table.removeColumn(column0); +``` + +#### Listening for changes + +Listening for changes to table trees behaves just like it would for any other nodes in a Shared Tree (see [here](https://fluidframework.com/docs/data-structures/tree/events) for more details). + +The most straightforward option is to listen for any changes to the table node and its descendants. For example: + +```typescript +class Cell extends schemaFactory.object("TableCell", { + value: schemaFactory.string, +}) {} + +class Table extends TableSchema.table({ + schemaFactory, + cell: Cell, +}) {} + +const table = new Table({ + columns: [{ id: "column-0" }], + rows: [{ id: "row-0", cells: {} }], +}); + +// Listen for any changes to the table and its children. +// The "treeChanged" event will fire when the `table` node or any of its descendants change. +Tree.on(table, "treeChanged", () => { + // Respond to the change. +}); +``` + +If you need more granular eventing to meet your performance needs, that is possible as well. For example, if you wish to know when the table's list of rows changes, you could do the following: + +```typescript +class Cell extends schemaFactory.object("TableCell", { + value: schemaFactory.string, +}) {} + +class Table extends TableSchema.table({ + schemaFactory, + cell: Cell, +}) {} + +const table = new Table({ + columns: [{ id: "column-0" }], + rows: [{ id: "row-0", cells: {} }], +}); + +// Listen for any changes to the list of rows. +// The "nodeChanged" event will fire only when the `rows` node itself changes (i.e., its own properties change). +// In this case, the event will fire when a row is added or removed, or the order of the list is changed. +// But it won't fire when a row's properties change, or when the row's cells change, etc. +Tree.on(table.rows, "nodeChanged", () => { + // Respond to the change. +}); +``` + +#### Limitations + +##### Orphaned cells + +Cells in the table may become "orphaned." That is, it is possible to enter a state where one or more rows contain cells with no corresponding column. To reduce the likelihood of this, you can manually remove corresponding cells when removing columns. + +For example: + +```typescript +// Remove column1 and all of its cells. +// The "transaction" method will ensure that all changes are applied atomically. +Tree.runTransaction(table, () => { + // Remove column1 + table.removeColumn(column1); + + // Remove the cell at column1 for each row. + for (const row of table.rows) { + table.removeCell({ + column: column1, + row, + }); + } +}); +``` + +> \[!WARNING] +> +> Note that even with the above precaution, it is possible to enter such an orphaned cell state via the merging of edits. For example: one client might add a row while another concurrently removes a column, orphaning the cell where the column and row intersected. + +#### Change details + +Commit: [`e565f68`](https://github.com/microsoft/FluidFramework/commit/e565f6838b31d3e777da942c806606575123f6d6) + +Affected packages: + +- fluid-framework +- @fluidframework/tree + +[⬆️ Table of contents](#contents) + +### SharedTrees's FluidClientVersion enum (alpha) has been redesigned ([#24638](https://github.com/microsoft/FluidFramework/issues/24638)) + +Users of [FluidClientVersion](https://fluidframework.com/docs/api/fluid-framework/fluidclientversion-enum)'s `v2_1`, `v2_2`, and `v2_3` entries should specify `v2_0` instead. This will result in no functional differences since no code currently opts into any additional functionality based on specifying those versions. The new approach avoids listing versions which there is currently no reason to select, and thus these options have been removed. If future work adds support to opt into features which only work starting with some of those versions, they will be re-added at that time. + +#### Change details + +Commit: [`5f3b9d7`](https://github.com/microsoft/FluidFramework/commit/5f3b9d7b7d12307d89cbd4b88f5e2d6e1833680d) + +Affected packages: + +- fluid-framework +- @fluidframework/tree + +[⬆️ Table of contents](#contents) + +### ForestTypeExpensiveDebug now validates content against schema ([#24658](https://github.com/microsoft/FluidFramework/issues/24658)) + +When opting into using [ForestTypeExpensiveDebug](https://fluidframework.com/docs/api/fluid-framework/#foresttypeexpensivedebug-variable) using [configuredSharedTree](https://fluidframework.com/docs/api/fluid-framework/#configuredsharedtree-function), the tree is now checked against the schema on load and after every edit. This should help detect and diagnose document corruption bugs. + +```typescript +const DebugSharedTree = configuredSharedTree({ + jsonValidator: typeboxValidator, + // Now detects corrupted documents which are out of schema. + forest: ForestTypeExpensiveDebug, +}); +``` + +#### Change details + +Commit: [`9d600aa`](https://github.com/microsoft/FluidFramework/commit/9d600aae88b9045392067719638258ea7407c2eb) + +Affected packages: + +- @fluidframework/tree +- fluid-framework + +[⬆️ Table of contents](#contents) + +### TreeNodes now implicitly generate identifiers on access instead of throwing ([#24665](https://github.com/microsoft/FluidFramework/issues/24665)) + +Accessing a defaulted [identifier](https://fluidframework.com/docs/api/fluid-framework/schemafactory-class#identifier-property) on an [Unhydrated](https://fluidframework.com/docs/api/fluid-framework/unhydrated-typealias) `TreeNode` no longer throws a usage error. Instead, a new UUID is allocated for the identifier and returned. These UUIDs will be more compressible than random ones, since they all come from a single sequence (starting with a random UUID). They will not be fully compressed like the identifiers generated after hydration that leverage the document's [IIdCompressor](https://fluidframework.com/docs/api/id-compressor/iidcompressor-interface). + +```typescript +const factory = new SchemaFactory("test"); +class HasIdentifier extends schema.object("A", { id: factory.identifier }) {} +// This used to throw an error: +const id = new HasIdentifier({}).id; +``` + +#### Change details + +Commit: [`cd5976b`](https://github.com/microsoft/FluidFramework/commit/cd5976b959d6b7a5259e3bb9ef816f842724bc6e) + +Affected packages: + +- @fluidframework/tree +- fluid-framework + +[⬆️ Table of contents](#contents) + +### 🛠️ Start Building Today! + +Please continue to engage with us on GitHub [Discussion](https://github.com/microsoft/FluidFramework/discussions) and [Issue](https://github.com/microsoft/FluidFramework/issues) pages as you adopt Fluid Framework! From 37c32da6fd98320827974cd81515e6f96138d585 Mon Sep 17 00:00:00 2001 From: Tyler Butler Date: Tue, 27 May 2025 11:14:28 -0700 Subject: [PATCH 3/7] updates --- RELEASE_NOTES/2.41.0.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RELEASE_NOTES/2.41.0.md b/RELEASE_NOTES/2.41.0.md index f734e3ee81e2..cffa34124f04 100644 --- a/RELEASE_NOTES/2.41.0.md +++ b/RELEASE_NOTES/2.41.0.md @@ -21,7 +21,7 @@ ### New experimental objectIdNumber API ([#21115](https://github.com/microsoft/FluidFramework/issues/21115)) -A new `objectIdNumber` has been added, which is useful you need an identifier which corresponds to an object identity. For example: when specifying a React "key" that corresponds to a `TreeNode`. +A new `objectIdNumber` has been added, which is useful when you need an identifier which corresponds to an object identity. For example: when specifying a React "key" that corresponds to a `TreeNode`. #### Change details From 8cab405ed14c8c9dc7b8ec976e46c78154ae189e Mon Sep 17 00:00:00 2001 From: Tyler Butler Date: Tue, 27 May 2025 12:57:01 -0700 Subject: [PATCH 4/7] changeset --- .changeset/fluffy-donkeys-obey.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.changeset/fluffy-donkeys-obey.md b/.changeset/fluffy-donkeys-obey.md index c62a15738723..ae52f6dd864a 100644 --- a/.changeset/fluffy-donkeys-obey.md +++ b/.changeset/fluffy-donkeys-obey.md @@ -4,6 +4,6 @@ --- Presence now available at beta support -Importing via `@fluidframework/presence/beta` is now supported. +[Presence APIs](https://fluidframework.com/docs/build/presence) are now beta and can be imported via `@fluidframework/presence/beta`. -Note: `Notifications` support remains only supported via `/alpha` imports. Cast `Presence` to `PresenceWithNotifications` to access notifications only workspace support. +Note: `Notifications` are only supported via `/alpha` imports. To access notifications-only workspace support, cast `Presence` to `PresenceWithNotifications`. From c99d20a8b46daa845331cda4c9334b7634cc3e16 Mon Sep 17 00:00:00 2001 From: Tyler Butler Date: Tue, 27 May 2025 12:59:23 -0700 Subject: [PATCH 5/7] updates --- .changeset/fluffy-donkeys-obey.md | 3 ++- RELEASE_NOTES/2.41.0.md | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/.changeset/fluffy-donkeys-obey.md b/.changeset/fluffy-donkeys-obey.md index ae52f6dd864a..d3a9eb0f2199 100644 --- a/.changeset/fluffy-donkeys-obey.md +++ b/.changeset/fluffy-donkeys-obey.md @@ -1,8 +1,9 @@ --- "@fluidframework/presence": minor "__section": feature +__highlight: true --- -Presence now available at beta support +Presence APIs promoted to beta [Presence APIs](https://fluidframework.com/docs/build/presence) are now beta and can be imported via `@fluidframework/presence/beta`. diff --git a/RELEASE_NOTES/2.41.0.md b/RELEASE_NOTES/2.41.0.md index cffa34124f04..e4ad5cff10b5 100644 --- a/RELEASE_NOTES/2.41.0.md +++ b/RELEASE_NOTES/2.41.0.md @@ -5,6 +5,7 @@ ## Contents - [✨ New Features](#-new-features) + - [Presence APIs promoted to beta (#24710)](#presence-apis-promoted-to-beta-24710) - [New experimental objectIdNumber API (#21115)](#new-experimental-objectidnumber-api-21115) - [New TreeAlpha.key2 API (#24623)](#new-treealphakey2-api-24623) - [New TreeAlpha identifier APIs for converting, retrieving, and generating identifiers (#24218)](#new-treealpha-identifier-apis-for-converting-retrieving-and-generating-identifiers-24218) @@ -19,6 +20,22 @@ ## ✨ New Features +### Presence APIs promoted to beta ([#24710](https://github.com/microsoft/FluidFramework/issues/24710)) + +[Presence APIs](https://fluidframework.com/docs/build/presence) are now beta and can be imported via `@fluidframework/presence/beta`. + +Note: `Notifications` are only supported via `/alpha` imports. To access notifications-only workspace support, cast `Presence` to `PresenceWithNotifications`. + +#### Change details + +Commit: [`6fce410`](https://github.com/microsoft/FluidFramework/commit/6fce4100ca8a3fce8cf69f0ac25d709a3a64d13e) + +Affected packages: + +- @fluidframework/presence + +[⬆️ Table of contents](#contents) + ### New experimental objectIdNumber API ([#21115](https://github.com/microsoft/FluidFramework/issues/21115)) A new `objectIdNumber` has been added, which is useful when you need an identifier which corresponds to an object identity. For example: when specifying a React "key" that corresponds to a `TreeNode`. From 73d3fd3198c07d013a38af775db5a90483f414bf Mon Sep 17 00:00:00 2001 From: Tyler Butler Date: Tue, 27 May 2025 13:02:54 -0700 Subject: [PATCH 6/7] changelogs --- .changeset/afraid-rice-feel.md | 12 - .changeset/fluffy-donkeys-obey.md | 10 - .changeset/fuzzy-eagles-drum.md | 11 - .changeset/gentle-eggs-heal.md | 8 - .changeset/lemon-words-pump.md | 17 - .changeset/old-bees-itch.md | 17 - .changeset/public-houses-add.md | 9 - .changeset/public-snakes-fetch.md | 19 - .changeset/tabaxi-fellas-inspire.md | 216 ----------- .changeset/tough-parts-kick.md | 8 - .changeset/tricky-shrimps-hunt.md | 69 ---- .../packages/azure-local-service/CHANGELOG.md | 4 + .../packages/azure-service-utils/CHANGELOG.md | 4 + examples/apps/ai-collab/CHANGELOG.md | 4 + examples/apps/attributable-map/CHANGELOG.md | 4 + examples/apps/blobs/CHANGELOG.md | 4 + .../apps/collaborative-textarea/CHANGELOG.md | 4 + examples/apps/contact-collection/CHANGELOG.md | 4 + examples/apps/data-object-grid/CHANGELOG.md | 4 + examples/apps/presence-tracker/CHANGELOG.md | 4 + examples/apps/staging/CHANGELOG.md | 4 + examples/apps/task-selection/CHANGELOG.md | 4 + examples/apps/tree-cli-app/CHANGELOG.md | 4 + examples/apps/tree-comparison/CHANGELOG.md | 4 + .../bubblebench/baseline/CHANGELOG.md | 4 + .../bubblebench/common/CHANGELOG.md | 4 + .../experimental-tree/CHANGELOG.md | 4 + .../benchmarks/bubblebench/ot/CHANGELOG.md | 4 + .../bubblebench/shared-tree/CHANGELOG.md | 4 + .../CHANGELOG.md | 4 + examples/benchmarks/tablebench/CHANGELOG.md | 4 + .../app-insights-logger/CHANGELOG.md | 4 + examples/data-objects/canvas/CHANGELOG.md | 4 + examples/data-objects/clicker/CHANGELOG.md | 4 + examples/data-objects/codemirror/CHANGELOG.md | 4 + examples/data-objects/diceroller/CHANGELOG.md | 4 + .../data-objects/inventory-app/CHANGELOG.md | 4 + examples/data-objects/monaco/CHANGELOG.md | 4 + .../constellation-model/CHANGELOG.md | 4 + .../multiview/constellation-view/CHANGELOG.md | 4 + .../multiview/container/CHANGELOG.md | 4 + .../multiview/coordinate-model/CHANGELOG.md | 4 + .../multiview/interface/CHANGELOG.md | 4 + .../plot-coordinate-view/CHANGELOG.md | 4 + .../slider-coordinate-view/CHANGELOG.md | 4 + .../multiview/triangle-view/CHANGELOG.md | 4 + .../data-objects/prosemirror/CHANGELOG.md | 4 + examples/data-objects/smde/CHANGELOG.md | 4 + .../data-objects/table-document/CHANGELOG.md | 4 + examples/data-objects/table-tree/CHANGELOG.md | 4 + examples/data-objects/todo/CHANGELOG.md | 4 + examples/data-objects/webflow/CHANGELOG.md | 4 + examples/external-data/CHANGELOG.md | 4 + .../external-controller/CHANGELOG.md | 4 + .../odsp-client/shared-tree-demo/CHANGELOG.md | 4 + examples/utils/bundle-size-tests/CHANGELOG.md | 4 + examples/utils/example-utils/CHANGELOG.md | 4 + examples/utils/import-testing/CHANGELOG.md | 4 + examples/utils/migration-tools/CHANGELOG.md | 4 + .../utils/webpack-fluid-loader/CHANGELOG.md | 4 + .../live-schema-upgrade/CHANGELOG.md | 4 + .../same-container/CHANGELOG.md | 4 + .../separate-container/CHANGELOG.md | 4 + .../version-migration/tree-shim/CHANGELOG.md | 4 + .../container-views/CHANGELOG.md | 4 + .../external-views/CHANGELOG.md | 4 + .../view-framework-sampler/CHANGELOG.md | 4 + .../packages/property-changeset/CHANGELOG.md | 4 + .../packages/property-common/CHANGELOG.md | 4 + .../platform-dependent/CHANGELOG.md | 4 + .../packages/property-dds/CHANGELOG.md | 4 + .../packages/property-properties/CHANGELOG.md | 4 + .../dds/attributable-map/CHANGELOG.md | 4 + experimental/dds/ot/ot/CHANGELOG.md | 4 + .../dds/ot/sharejs/json1/CHANGELOG.md | 4 + .../dds/sequence-deprecated/CHANGELOG.md | 4 + experimental/dds/tree/CHANGELOG.md | 4 + .../framework/data-objects/CHANGELOG.md | 4 + .../framework/last-edited/CHANGELOG.md | 4 + .../framework/tree-react-api/CHANGELOG.md | 9 + packages/common/client-utils/CHANGELOG.md | 4 + .../common/container-definitions/CHANGELOG.md | 4 + packages/common/core-interfaces/CHANGELOG.md | 4 + packages/common/core-utils/CHANGELOG.md | 4 + .../common/driver-definitions/CHANGELOG.md | 4 + packages/dds/cell/CHANGELOG.md | 4 + packages/dds/counter/CHANGELOG.md | 4 + packages/dds/ink/CHANGELOG.md | 4 + packages/dds/legacy-dds/CHANGELOG.md | 3 + packages/dds/map/CHANGELOG.md | 4 + packages/dds/matrix/CHANGELOG.md | 4 + packages/dds/merge-tree/CHANGELOG.md | 4 + packages/dds/ordered-collection/CHANGELOG.md | 4 + packages/dds/pact-map/CHANGELOG.md | 4 + packages/dds/register-collection/CHANGELOG.md | 4 + packages/dds/sequence/CHANGELOG.md | 4 + packages/dds/shared-object-base/CHANGELOG.md | 4 + .../dds/shared-summary-block/CHANGELOG.md | 4 + packages/dds/task-manager/CHANGELOG.md | 4 + packages/dds/test-dds-utils/CHANGELOG.md | 4 + packages/dds/tree/CHANGELOG.md | 341 ++++++++++++++++++ packages/drivers/debugger/CHANGELOG.md | 4 + packages/drivers/driver-base/CHANGELOG.md | 4 + .../drivers/driver-web-cache/CHANGELOG.md | 4 + packages/drivers/file-driver/CHANGELOG.md | 4 + packages/drivers/local-driver/CHANGELOG.md | 4 + .../odsp-driver-definitions/CHANGELOG.md | 4 + packages/drivers/odsp-driver/CHANGELOG.md | 4 + .../drivers/odsp-urlResolver/CHANGELOG.md | 4 + packages/drivers/replay-driver/CHANGELOG.md | 4 + .../drivers/routerlicious-driver/CHANGELOG.md | 4 + .../routerlicious-urlResolver/CHANGELOG.md | 4 + .../drivers/tinylicious-driver/CHANGELOG.md | 4 + .../framework/agent-scheduler/CHANGELOG.md | 4 + packages/framework/ai-collab/CHANGELOG.md | 4 + packages/framework/aqueduct/CHANGELOG.md | 4 + packages/framework/attributor/CHANGELOG.md | 4 + .../app-insights-logger/CHANGELOG.md | 4 + .../fluid-telemetry/CHANGELOG.md | 4 + .../framework/data-object-base/CHANGELOG.md | 4 + .../framework/dds-interceptions/CHANGELOG.md | 4 + .../framework/fluid-framework/CHANGELOG.md | 336 +++++++++++++++++ packages/framework/fluid-static/CHANGELOG.md | 4 + .../oldest-client-observer/CHANGELOG.md | 4 + packages/framework/presence/CHANGELOG.md | 16 + .../framework/request-handler/CHANGELOG.md | 4 + packages/framework/synthesize/CHANGELOG.md | 4 + packages/framework/undo-redo/CHANGELOG.md | 4 + packages/loader/container-loader/CHANGELOG.md | 4 + packages/loader/driver-utils/CHANGELOG.md | 4 + .../loader/test-loader-utils/CHANGELOG.md | 4 + .../CHANGELOG.md | 4 + .../runtime/container-runtime/CHANGELOG.md | 4 + .../datastore-definitions/CHANGELOG.md | 4 + packages/runtime/datastore/CHANGELOG.md | 4 + packages/runtime/id-compressor/CHANGELOG.md | 4 + .../runtime/runtime-definitions/CHANGELOG.md | 4 + packages/runtime/runtime-utils/CHANGELOG.md | 4 + .../runtime/test-runtime-utils/CHANGELOG.md | 4 + .../service-clients/azure-client/CHANGELOG.md | 4 + .../azure-client/CHANGELOG.md | 4 + .../end-to-end-tests/odsp-client/CHANGELOG.md | 4 + .../service-clients/odsp-client/CHANGELOG.md | 4 + .../tinylicious-client/CHANGELOG.md | 4 + packages/test/functional-tests/CHANGELOG.md | 4 + .../local-server-stress-tests/CHANGELOG.md | 4 + packages/test/local-server-tests/CHANGELOG.md | 4 + packages/test/mocha-test-setup/CHANGELOG.md | 4 + packages/test/snapshots/CHANGELOG.md | 4 + .../test/stochastic-test-utils/CHANGELOG.md | 4 + .../test/test-driver-definitions/CHANGELOG.md | 4 + packages/test/test-drivers/CHANGELOG.md | 4 + .../test/test-end-to-end-tests/CHANGELOG.md | 4 + .../test/test-pairwise-generator/CHANGELOG.md | 4 + packages/test/test-service-load/CHANGELOG.md | 4 + packages/test/test-utils/CHANGELOG.md | 4 + packages/test/test-version-utils/CHANGELOG.md | 4 + .../changelog-generator-wrapper/CHANGELOG.md | 4 + .../devtools-browser-extension/CHANGELOG.md | 4 + .../tools/devtools/devtools-core/CHANGELOG.md | 4 + .../devtools/devtools-test-app/CHANGELOG.md | 4 + .../tools/devtools/devtools-view/CHANGELOG.md | 4 + packages/tools/devtools/devtools/CHANGELOG.md | 4 + packages/tools/fetch-tool/CHANGELOG.md | 4 + packages/tools/fluid-runner/CHANGELOG.md | 4 + packages/tools/replay-tool/CHANGELOG.md | 4 + packages/utils/odsp-doclib-utils/CHANGELOG.md | 4 + packages/utils/telemetry-utils/CHANGELOG.md | 4 + packages/utils/tool-utils/CHANGELOG.md | 4 + tools/markdown-magic/CHANGELOG.md | 4 + 170 files changed, 1321 insertions(+), 396 deletions(-) delete mode 100644 .changeset/afraid-rice-feel.md delete mode 100644 .changeset/fluffy-donkeys-obey.md delete mode 100644 .changeset/fuzzy-eagles-drum.md delete mode 100644 .changeset/gentle-eggs-heal.md delete mode 100644 .changeset/lemon-words-pump.md delete mode 100644 .changeset/old-bees-itch.md delete mode 100644 .changeset/public-houses-add.md delete mode 100644 .changeset/public-snakes-fetch.md delete mode 100644 .changeset/tabaxi-fellas-inspire.md delete mode 100644 .changeset/tough-parts-kick.md delete mode 100644 .changeset/tricky-shrimps-hunt.md create mode 100644 packages/dds/legacy-dds/CHANGELOG.md diff --git a/.changeset/afraid-rice-feel.md b/.changeset/afraid-rice-feel.md deleted file mode 100644 index e30f21219f3f..000000000000 --- a/.changeset/afraid-rice-feel.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -"@fluidframework/tree": minor -"fluid-framework": minor -"__section": tree ---- -TreeAlpha.create now accepts unhydrated nodes - -[TreeAlpha.create](https://fluidframework.com/docs/api/fluid-framework/treealpha-interface#create-methodsignature) now accepts [unhydrated](https://fluidframework.com/docs/api/fluid-framework/unhydrated-typealias) nodes. -`TreeAlpha.create`'s documentation has been updated to clarify that this is supported. - -Additionally `TreeAlpha.create` no longer throws a "Tree does not conform to schema" error when given a tree omitting an identifier. -Instead, the identifier behaves like it would for other ways to build unhydrated nodes: remaining unreadable until hydrated. diff --git a/.changeset/fluffy-donkeys-obey.md b/.changeset/fluffy-donkeys-obey.md deleted file mode 100644 index d3a9eb0f2199..000000000000 --- a/.changeset/fluffy-donkeys-obey.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -"@fluidframework/presence": minor -"__section": feature -__highlight: true ---- -Presence APIs promoted to beta - -[Presence APIs](https://fluidframework.com/docs/build/presence) are now beta and can be imported via `@fluidframework/presence/beta`. - -Note: `Notifications` are only supported via `/alpha` imports. To access notifications-only workspace support, cast `Presence` to `PresenceWithNotifications`. diff --git a/.changeset/fuzzy-eagles-drum.md b/.changeset/fuzzy-eagles-drum.md deleted file mode 100644 index 3db1040b4f2d..000000000000 --- a/.changeset/fuzzy-eagles-drum.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -"fluid-framework": minor -"@fluidframework/tree": minor -"__section": tree ---- -SharedTrees's FluidClientVersion enum (alpha) has been redesigned - -Users of [FluidClientVersion](https://fluidframework.com/docs/api/fluid-framework/fluidclientversion-enum)'s `v2_1`, `v2_2`, and `v2_3` entries should specify `v2_0` instead. -This will result in no functional differences since no code currently opts into any additional functionality based on specifying those versions. -The new approach avoids listing versions which there is currently no reason to select, and thus these options have been removed. -If future work adds support to opt into features which only work starting with some of those versions, they will be re-added at that time. diff --git a/.changeset/gentle-eggs-heal.md b/.changeset/gentle-eggs-heal.md deleted file mode 100644 index 70f0c4e1a888..000000000000 --- a/.changeset/gentle-eggs-heal.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -"@fluid-experimental/tree-react-api": minor -"__section": feature ---- -New experimental objectIdNumber API - -A new `objectIdNumber` has been added, which is useful when you need an identifier which corresponds to an object identity. -For example: when specifying a React "key" that corresponds to a `TreeNode`. diff --git a/.changeset/lemon-words-pump.md b/.changeset/lemon-words-pump.md deleted file mode 100644 index 942842b66519..000000000000 --- a/.changeset/lemon-words-pump.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -"@fluidframework/tree": minor -"fluid-framework": minor -"__section": tree ---- -ForestTypeExpensiveDebug now validates content against schema - -When opting into using [ForestTypeExpensiveDebug](https://fluidframework.com/docs/api/fluid-framework/#foresttypeexpensivedebug-variable) using [configuredSharedTree](https://fluidframework.com/docs/api/fluid-framework/#configuredsharedtree-function), the tree is now checked against the schema on load and after every edit. -This should help detect and diagnose document corruption bugs. - -```typescript -const DebugSharedTree = configuredSharedTree({ - jsonValidator: typeboxValidator, - // Now detects corrupted documents which are out of schema. - forest: ForestTypeExpensiveDebug, -}); -``` diff --git a/.changeset/old-bees-itch.md b/.changeset/old-bees-itch.md deleted file mode 100644 index 728948ff0e4d..000000000000 --- a/.changeset/old-bees-itch.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -"fluid-framework": minor -"@fluidframework/tree": minor -"__section": tree ---- -The comparePersistedSchema function (alpha) has had its canInitialize parameter removed - -[comparePersistedSchema](https://fluidframework.com/docs/api/tree/#comparepersistedschema-function) has had its `canInitialize` parameter removed. -This parameter was only used to add to the output [SchemaCompatibilityStatus](https://fluidframework.com/docs/api/fluid-framework/schemacompatibilitystatus-interface). -If a full `SchemaCompatibilityStatus` is still desired, the `canInitialize` value can be added to the result: - -```typescript -// old -const result = comparePersistedSchema(a, b, canInitialize); -// new -const result = {...comparePersistedSchema(a, b), canInitialize}; -``` diff --git a/.changeset/public-houses-add.md b/.changeset/public-houses-add.md deleted file mode 100644 index 99368da7fcd9..000000000000 --- a/.changeset/public-houses-add.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -"@fluidframework/presence": minor -"__section": feature ---- -"getPresence(container: IFluidContainer): Presence" now supported - -You can now use the `getPresence` function to directly acquire `Presence`. In previous releases, you were required to -use `ExperimentalPresenceManager` in container schema and calling `getPresenceViaDataObject`, but that is no longer -required. Both `ExperimentalPresenceManager` and `getPresenceViaDataObject` are now deprecated. diff --git a/.changeset/public-snakes-fetch.md b/.changeset/public-snakes-fetch.md deleted file mode 100644 index 5240268d30b4..000000000000 --- a/.changeset/public-snakes-fetch.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -"@fluidframework/tree": minor -"fluid-framework": minor -"__section": tree ---- -TreeNodes now implicitly generate identifiers on access instead of throwing - -Accessing a defaulted [identifier](https://fluidframework.com/docs/api/fluid-framework/schemafactory-class#identifier-property) on an [Unhydrated](https://fluidframework.com/docs/api/fluid-framework/unhydrated-typealias) `TreeNode` no longer throws a usage error. -Instead, a new UUID is allocated for the identifier and returned. -These UUIDs will be more compressible than random ones, since they all come from a single sequence (starting with a random UUID). -They will not be fully compressed like the identifiers generated after hydration that leverage the document's [IIdCompressor](https://fluidframework.com/docs/api/id-compressor/iidcompressor-interface). - -```typescript -const factory = new SchemaFactory("test"); -class HasIdentifier extends schema.object("A", { id: factory.identifier }) {} -// This used to throw an error: -const id = new HasIdentifier({}).id; - -``` diff --git a/.changeset/tabaxi-fellas-inspire.md b/.changeset/tabaxi-fellas-inspire.md deleted file mode 100644 index 9e48394aca84..000000000000 --- a/.changeset/tabaxi-fellas-inspire.md +++ /dev/null @@ -1,216 +0,0 @@ ---- -"fluid-framework": minor -"@fluidframework/tree": minor -"__section": tree ---- -New TableSchema (alpha) APIs - -A `TableSchema` utility has been added to Shared Tree for managing dynamic, tabular data. -This new `TableSchema` namespace contains APIs for creating column, row, and table [node schema](https://fluidframework.com/docs/api/fluid-framework/treenodeschema-typealias). - -Note: these APIs require the use of [SchemaFactoryAlpha](https://fluidframework.com/docs/api/fluid-framework/schemafactoryalpha-class). - -> [!WARNING] -> These APIs are in preview and are subject to change. -> Until these APIs have stabilized, it is not recommended to use them in production code. -> There may be breaking changes to these APIs and their underlying data format. -> Using these APIs in production code may result in data loss or corruption. - -#### Creating a table - -You can craft a table schema with `TableSchema.table`. -This includes providing a schema for the cells that will appear in the table: - -```typescript -class MyTable extends TableSchema.table({ - schemaFactory, - cell: schemaFactory.string, -}) {} - -const table = new MyTable({ - columns: [{ id: "column-0" }], - rows: [{ id: "row-0", cells: { "column-0": "Hello world!" } }], -}); -``` - -#### Creating a table with custom column and row schema - -To associate additional data with your rows or columns, generate custom row and column schema using `TableSchema.column` and `TableSchema.row`. -These schema can then be provided to `TableSchema.table`: - -```typescript -class MyColumn extends TableSchema.column({ - schemaFactory, - cell: Cell, - props: schemaFactory.object("TableColumnProps", { - label: schemaFactory.string, - }), -}) {} - -class MyRow extends TableSchema.row({ - schemaFactory, - cell: Cell, -}) {} - -class MyTable extends TableSchema.table({ - schemaFactory, - cell: Cell, - column: MyColumn, - row: MyRow, -}) {} - -const table = new MyTable({ - columns: [ - new MyColumn({ props: { label: "Entry" } }), - new MyColumn({ props: { label: "Date" } }), - new MyColumn({ props: { label: "Amount" } }), - ], - rows: [], -}); -``` - -#### Interacting with the table - -Table trees created using `TableSchema` offer various APIs to make working with tabular data easy. -These include: - -- Insertion and removal of columns, rows, and cells. -- Cell access by column/row. - -```typescript -// Create an empty table -const table = MyTable.empty(); - -const column0 = new MyColumn({ - props: { label: "Column 0" }, -}); - -// Append a column to the end of the table. -table.insertColumn({ - column: column0, -}); - -const rows = [ - new MyRow({ cells: { } }), - new MyRow({ cells: { } }), -]; - -// Insert rows at the beginning of the table. -table.insertRows({ - index: 0, - rows, -}); - -// Set cell at row 0, column 0. -table.setCell({ - key: { - column: column0, - row: rows[0], - }, - cell: "Hello", -}); - -// Set cell at row 1, column 0. -table.setCell({ - key: { - column: column0, - row: rows[1], - }, - cell: "World", -}); - -// Remove the first row. -// Note: this will also remove the row's cell. -table.removeRow(rows[0]); - -// Remove the column. -// Note: this will *not* remove the remaining cell under this column. -table.removeColumn(column0); -``` - -#### Listening for changes - -Listening for changes to table trees behaves just like it would for any other nodes in a Shared Tree (see [here](https://fluidframework.com/docs/data-structures/tree/events) for more details). - -The most straightforward option is to listen for any changes to the table node and its descendants. -For example: - -```typescript -class Cell extends schemaFactory.object("TableCell", { - value: schemaFactory.string, -}) {} - -class Table extends TableSchema.table({ - schemaFactory, - cell: Cell, -}) {} - -const table = new Table({ - columns: [{ id: "column-0" }], - rows: [{ id: "row-0", cells: {} }], -}); - -// Listen for any changes to the table and its children. -// The "treeChanged" event will fire when the `table` node or any of its descendants change. -Tree.on(table, "treeChanged", () => { - // Respond to the change. -}); -``` - -If you need more granular eventing to meet your performance needs, that is possible as well. -For example, if you wish to know when the table's list of rows changes, you could do the following: - -```typescript -class Cell extends schemaFactory.object("TableCell", { - value: schemaFactory.string, -}) {} - -class Table extends TableSchema.table({ - schemaFactory, - cell: Cell, -}) {} - -const table = new Table({ - columns: [{ id: "column-0" }], - rows: [{ id: "row-0", cells: {} }], -}); - -// Listen for any changes to the list of rows. -// The "nodeChanged" event will fire only when the `rows` node itself changes (i.e., its own properties change). -// In this case, the event will fire when a row is added or removed, or the order of the list is changed. -// But it won't fire when a row's properties change, or when the row's cells change, etc. -Tree.on(table.rows, "nodeChanged", () => { - // Respond to the change. -}); -``` - -#### Limitations - -##### Orphaned cells - -Cells in the table may become "orphaned." -That is, it is possible to enter a state where one or more rows contain cells with no corresponding column. -To reduce the likelihood of this, you can manually remove corresponding cells when removing columns. - -For example: - -```typescript -// Remove column1 and all of its cells. -// The "transaction" method will ensure that all changes are applied atomically. -Tree.runTransaction(table, () => { - // Remove column1 - table.removeColumn(column1); - - // Remove the cell at column1 for each row. - for (const row of table.rows) { - table.removeCell({ - column: column1, - row, - }); - } -}); -``` - -> [!WARNING] -> Note that even with the above precaution, it is possible to enter such an orphaned cell state via the merging of edits. -> For example: one client might add a row while another concurrently removes a column, orphaning the cell where the column and row intersected. diff --git a/.changeset/tough-parts-kick.md b/.changeset/tough-parts-kick.md deleted file mode 100644 index 19be9103a3ba..000000000000 --- a/.changeset/tough-parts-kick.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -"@fluidframework/tree": minor -"__section": feature ---- -New TreeAlpha.key2 API - -The `TreeAlpha.key2` method is meant to eventually replace the public `Tree.key` method. -This new method returns `undefined` in the case where there is a root node. diff --git a/.changeset/tricky-shrimps-hunt.md b/.changeset/tricky-shrimps-hunt.md deleted file mode 100644 index abcc7a8d07cd..000000000000 --- a/.changeset/tricky-shrimps-hunt.md +++ /dev/null @@ -1,69 +0,0 @@ ---- -"fluid-framework": minor -"@fluidframework/tree": minor -"__section": feature ---- -New TreeAlpha identifier APIs for converting, retrieving, and generating identifiers - -#### TreeAlpha.identifier - -You can retrieve the long identifier with `TreeAlpha.identifier(node)`, where `node` is a `TreeNode`. The long identifier is a stable, compressible UUID generated by the tree. -In cases where the node does not yet have an identifier assigned, this will return `undefined`. -These cases include: -- The node does not contain an identifier field. -- The node is a non-hydrated node with a user provided identifier. Note that if it is a non-hydrated node without an identifier provided, it will throw an error. - -#### TreeAlpha.identifier.shorten - -You can shorten a long identifier with `TreeAlpha.identifier.shorten(branch, identifier)`, where `branch` is a `TreeBranch`, and `identifier` is a `string`. -If the method returns a valid short identifier, this identifier can be passed into `TreeAlpha.identifier.lengthen` -to get the original valid long `identifier` back. -In the cases where it's not possible to shorten the `identifier`, it will return `undefined`. -These cases include: - -- A compressible long identifier, but it is unrecognized by the tree that the node belongs to. This can occur if the identifier is not generated from the tree. -- An identifier which is not compressible by the tree. This can occur if the node's identifier was a user provided string. - -#### TreeAlpha.identifier.lengthen - -You can lengthen a short identifier with `TreeAlpha.identifier.lengthen(branch, identifier)`, where `branch` is a `TreeBranch`, and `identifier` is a `number`. -If the method returns a valid long identifier, this identifier can be passed into `TreeAlpha.identifier.shorten` to get the original `identifier` back. -In the cases where it's not possible to lengthen the `identifier`, this method will throw an error. -These cases include: - -- An unrecognized short identifier. This can occur if the identifier is not generated from the tree. - -#### TreeAlpha.identifier.getShort - -You can retrieve the short identifier from a node with `TreeAlpha.identifier.getShort(node)` where `node` is a `TreeNode`. -If it is not possible to retrieve the short identifier, it will return `undefined` - -##### Example for a node with valid identifier - -```typescript -// This will retrieve the short identifier from the node. -const shortIdentifier = TreeAlpha.identifier.getShort(nodeWithValidIdentifier) -``` - -##### Examples for when you get undefined - -In cases where the node provided does not contain an identifier that is recognized or compressible by the tree that the node belongs to, this method will return undefined. -This will occur in the following cases: - -- The node is an non-hydrated node with a user provided identifier. Note that if it is an non-hydrated node without an identifier provided, it will throw an error. -- The node does not contain an identifier field. -- The node contains a compressible long identifier, but it is unrecognized by the tree that the node belongs to. This can occur if the identifier is not generated from the tree. -- The node contains an identifier which is not compressible by its id compressor. This can occur if the node's identifier was a user provided string. - -```typescript -// This will return undefined -const shortIdentifier = TreeAlpha.identifier.getShort(node) -``` - -#### TreeAlpha.identifier.create - -You can create a long identifier from a branch with `TreeAlpha.identifier.create(branch)` where `branch` is a `TreeBranch`. - -```typescript -const createdIdentifier = TreeAlpha.identifier.create(branch) -``` diff --git a/azure/packages/azure-local-service/CHANGELOG.md b/azure/packages/azure-local-service/CHANGELOG.md index 468b9657ce64..ab0fb97104f1 100644 --- a/azure/packages/azure-local-service/CHANGELOG.md +++ b/azure/packages/azure-local-service/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/azure-local-service +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/azure/packages/azure-service-utils/CHANGELOG.md b/azure/packages/azure-service-utils/CHANGELOG.md index f74f29992d85..bd0d07d3925c 100644 --- a/azure/packages/azure-service-utils/CHANGELOG.md +++ b/azure/packages/azure-service-utils/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/azure-service-utils +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/apps/ai-collab/CHANGELOG.md b/examples/apps/ai-collab/CHANGELOG.md index 4263302d83e0..c2b751b24ee8 100644 --- a/examples/apps/ai-collab/CHANGELOG.md +++ b/examples/apps/ai-collab/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-example/ai-collab +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/apps/attributable-map/CHANGELOG.md b/examples/apps/attributable-map/CHANGELOG.md index d7e245dc4973..4936eb16cb60 100644 --- a/examples/apps/attributable-map/CHANGELOG.md +++ b/examples/apps/attributable-map/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-example/attributable-map +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/apps/blobs/CHANGELOG.md b/examples/apps/blobs/CHANGELOG.md index 7be84c88a7be..274d39c1227f 100644 --- a/examples/apps/blobs/CHANGELOG.md +++ b/examples/apps/blobs/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-example/blobs +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/apps/collaborative-textarea/CHANGELOG.md b/examples/apps/collaborative-textarea/CHANGELOG.md index 02f712ba91af..390c5bc746ec 100644 --- a/examples/apps/collaborative-textarea/CHANGELOG.md +++ b/examples/apps/collaborative-textarea/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-example/collaborative-textarea +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/apps/contact-collection/CHANGELOG.md b/examples/apps/contact-collection/CHANGELOG.md index 34fd2bdddbba..37c899803bff 100644 --- a/examples/apps/contact-collection/CHANGELOG.md +++ b/examples/apps/contact-collection/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-example/contact-collection +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/apps/data-object-grid/CHANGELOG.md b/examples/apps/data-object-grid/CHANGELOG.md index 052e70d60634..0b2c8dd9040d 100644 --- a/examples/apps/data-object-grid/CHANGELOG.md +++ b/examples/apps/data-object-grid/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-example/data-object-grid +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/apps/presence-tracker/CHANGELOG.md b/examples/apps/presence-tracker/CHANGELOG.md index 1aaf9e3e4215..52d8c962fc50 100644 --- a/examples/apps/presence-tracker/CHANGELOG.md +++ b/examples/apps/presence-tracker/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-example/presence-tracker +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/apps/staging/CHANGELOG.md b/examples/apps/staging/CHANGELOG.md index 699bd6c32fde..a16e59b9c14d 100644 --- a/examples/apps/staging/CHANGELOG.md +++ b/examples/apps/staging/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-example/staging +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/apps/task-selection/CHANGELOG.md b/examples/apps/task-selection/CHANGELOG.md index e9c706859054..30d7f12e866a 100644 --- a/examples/apps/task-selection/CHANGELOG.md +++ b/examples/apps/task-selection/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-example/task-selection +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/apps/tree-cli-app/CHANGELOG.md b/examples/apps/tree-cli-app/CHANGELOG.md index f5bf27adca92..f257776bc049 100644 --- a/examples/apps/tree-cli-app/CHANGELOG.md +++ b/examples/apps/tree-cli-app/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-example/tree-cli-app +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/apps/tree-comparison/CHANGELOG.md b/examples/apps/tree-comparison/CHANGELOG.md index b698e3840737..eb854b26b027 100644 --- a/examples/apps/tree-comparison/CHANGELOG.md +++ b/examples/apps/tree-comparison/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-example/tree-comparison +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/benchmarks/bubblebench/baseline/CHANGELOG.md b/examples/benchmarks/bubblebench/baseline/CHANGELOG.md index 04e85d2366fe..bc2c1390b657 100644 --- a/examples/benchmarks/bubblebench/baseline/CHANGELOG.md +++ b/examples/benchmarks/bubblebench/baseline/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-example/bubblebench-baseline +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/benchmarks/bubblebench/common/CHANGELOG.md b/examples/benchmarks/bubblebench/common/CHANGELOG.md index 7884b9245c66..4c78387a813d 100644 --- a/examples/benchmarks/bubblebench/common/CHANGELOG.md +++ b/examples/benchmarks/bubblebench/common/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-example/bubblebench-common +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/benchmarks/bubblebench/experimental-tree/CHANGELOG.md b/examples/benchmarks/bubblebench/experimental-tree/CHANGELOG.md index 5ad3be32970d..8b843a7ca36e 100644 --- a/examples/benchmarks/bubblebench/experimental-tree/CHANGELOG.md +++ b/examples/benchmarks/bubblebench/experimental-tree/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-example/bubblebench-experimental-tree +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/benchmarks/bubblebench/ot/CHANGELOG.md b/examples/benchmarks/bubblebench/ot/CHANGELOG.md index dd2fe7a64ed2..bcce5e3038ee 100644 --- a/examples/benchmarks/bubblebench/ot/CHANGELOG.md +++ b/examples/benchmarks/bubblebench/ot/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-example/bubblebench-ot +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/benchmarks/bubblebench/shared-tree/CHANGELOG.md b/examples/benchmarks/bubblebench/shared-tree/CHANGELOG.md index 447de9d8e1f5..b33fd056ec1c 100644 --- a/examples/benchmarks/bubblebench/shared-tree/CHANGELOG.md +++ b/examples/benchmarks/bubblebench/shared-tree/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-example/bubblebench-simple-tree +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/benchmarks/odspsnapshotfetch-perftestapp/CHANGELOG.md b/examples/benchmarks/odspsnapshotfetch-perftestapp/CHANGELOG.md index 56dca75f6115..18335f3179c3 100644 --- a/examples/benchmarks/odspsnapshotfetch-perftestapp/CHANGELOG.md +++ b/examples/benchmarks/odspsnapshotfetch-perftestapp/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-example/odspsnapshotfetch-perftestapp +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/benchmarks/tablebench/CHANGELOG.md b/examples/benchmarks/tablebench/CHANGELOG.md index bd37e78e6670..fd2eb3d727a1 100644 --- a/examples/benchmarks/tablebench/CHANGELOG.md +++ b/examples/benchmarks/tablebench/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-internal/tablebench +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/client-logger/app-insights-logger/CHANGELOG.md b/examples/client-logger/app-insights-logger/CHANGELOG.md index 69ee642607a7..1cc041c0476d 100644 --- a/examples/client-logger/app-insights-logger/CHANGELOG.md +++ b/examples/client-logger/app-insights-logger/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-example/app-insights-logger +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/data-objects/canvas/CHANGELOG.md b/examples/data-objects/canvas/CHANGELOG.md index 45270c3efea7..134f7ee40579 100644 --- a/examples/data-objects/canvas/CHANGELOG.md +++ b/examples/data-objects/canvas/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-example/canvas +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/data-objects/clicker/CHANGELOG.md b/examples/data-objects/clicker/CHANGELOG.md index 3db41e6b2c34..ff9e6a9bf96a 100644 --- a/examples/data-objects/clicker/CHANGELOG.md +++ b/examples/data-objects/clicker/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-example/clicker +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/data-objects/codemirror/CHANGELOG.md b/examples/data-objects/codemirror/CHANGELOG.md index c4faa9a38ac7..3dbadff67206 100644 --- a/examples/data-objects/codemirror/CHANGELOG.md +++ b/examples/data-objects/codemirror/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-example/codemirror +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/data-objects/diceroller/CHANGELOG.md b/examples/data-objects/diceroller/CHANGELOG.md index 3aa3c863ad23..b0bc6e2eebe0 100644 --- a/examples/data-objects/diceroller/CHANGELOG.md +++ b/examples/data-objects/diceroller/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-example/diceroller +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/data-objects/inventory-app/CHANGELOG.md b/examples/data-objects/inventory-app/CHANGELOG.md index e9ba55cfdc97..24515bf0f733 100644 --- a/examples/data-objects/inventory-app/CHANGELOG.md +++ b/examples/data-objects/inventory-app/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-experimental/inventory-app +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/data-objects/monaco/CHANGELOG.md b/examples/data-objects/monaco/CHANGELOG.md index 57a2acec882e..8e842e1f3408 100644 --- a/examples/data-objects/monaco/CHANGELOG.md +++ b/examples/data-objects/monaco/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-example/monaco +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/data-objects/multiview/constellation-model/CHANGELOG.md b/examples/data-objects/multiview/constellation-model/CHANGELOG.md index 82bd5fd18497..ff2464fad585 100644 --- a/examples/data-objects/multiview/constellation-model/CHANGELOG.md +++ b/examples/data-objects/multiview/constellation-model/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-example/multiview-constellation-model +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/data-objects/multiview/constellation-view/CHANGELOG.md b/examples/data-objects/multiview/constellation-view/CHANGELOG.md index c373f60951ae..21ed2ec8ea22 100644 --- a/examples/data-objects/multiview/constellation-view/CHANGELOG.md +++ b/examples/data-objects/multiview/constellation-view/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-example/multiview-constellation-view +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/data-objects/multiview/container/CHANGELOG.md b/examples/data-objects/multiview/container/CHANGELOG.md index 21a8057f5add..3b3fe7d34b03 100644 --- a/examples/data-objects/multiview/container/CHANGELOG.md +++ b/examples/data-objects/multiview/container/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-example/multiview-container +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/data-objects/multiview/coordinate-model/CHANGELOG.md b/examples/data-objects/multiview/coordinate-model/CHANGELOG.md index bd51d3a5e99c..bfe497f93fb0 100644 --- a/examples/data-objects/multiview/coordinate-model/CHANGELOG.md +++ b/examples/data-objects/multiview/coordinate-model/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-example/multiview-coordinate-model +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/data-objects/multiview/interface/CHANGELOG.md b/examples/data-objects/multiview/interface/CHANGELOG.md index 5b146f9c6829..7b498710d27d 100644 --- a/examples/data-objects/multiview/interface/CHANGELOG.md +++ b/examples/data-objects/multiview/interface/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-example/multiview-coordinate-interface +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/data-objects/multiview/plot-coordinate-view/CHANGELOG.md b/examples/data-objects/multiview/plot-coordinate-view/CHANGELOG.md index be3a0af635ec..71ceef63752e 100644 --- a/examples/data-objects/multiview/plot-coordinate-view/CHANGELOG.md +++ b/examples/data-objects/multiview/plot-coordinate-view/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-example/multiview-plot-coordinate-view +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/data-objects/multiview/slider-coordinate-view/CHANGELOG.md b/examples/data-objects/multiview/slider-coordinate-view/CHANGELOG.md index 5ca5daccb407..4af3c2b7938f 100644 --- a/examples/data-objects/multiview/slider-coordinate-view/CHANGELOG.md +++ b/examples/data-objects/multiview/slider-coordinate-view/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-example/multiview-slider-coordinate-view +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/data-objects/multiview/triangle-view/CHANGELOG.md b/examples/data-objects/multiview/triangle-view/CHANGELOG.md index 16312ac369c6..d7241151a4cd 100644 --- a/examples/data-objects/multiview/triangle-view/CHANGELOG.md +++ b/examples/data-objects/multiview/triangle-view/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-example/multiview-triangle-view +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/data-objects/prosemirror/CHANGELOG.md b/examples/data-objects/prosemirror/CHANGELOG.md index 2b5a8f4d2a63..cdb20bba39e7 100644 --- a/examples/data-objects/prosemirror/CHANGELOG.md +++ b/examples/data-objects/prosemirror/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-example/prosemirror +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/data-objects/smde/CHANGELOG.md b/examples/data-objects/smde/CHANGELOG.md index 468c5210bcfb..5ec4379ce348 100644 --- a/examples/data-objects/smde/CHANGELOG.md +++ b/examples/data-objects/smde/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-example/smde +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/data-objects/table-document/CHANGELOG.md b/examples/data-objects/table-document/CHANGELOG.md index 24d18d401247..d32bf4295a16 100644 --- a/examples/data-objects/table-document/CHANGELOG.md +++ b/examples/data-objects/table-document/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-example/table-document +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/data-objects/table-tree/CHANGELOG.md b/examples/data-objects/table-tree/CHANGELOG.md index a5e1045e6a51..dc86c598a01e 100644 --- a/examples/data-objects/table-tree/CHANGELOG.md +++ b/examples/data-objects/table-tree/CHANGELOG.md @@ -1,3 +1,7 @@ # @fluid-example/table-tree +## 2.41.0 + +Dependency updates only. + ## 2.40.0 diff --git a/examples/data-objects/todo/CHANGELOG.md b/examples/data-objects/todo/CHANGELOG.md index ed091782d32b..662aa13ed252 100644 --- a/examples/data-objects/todo/CHANGELOG.md +++ b/examples/data-objects/todo/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-example/todo +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/data-objects/webflow/CHANGELOG.md b/examples/data-objects/webflow/CHANGELOG.md index 9348cf942fb5..dc8a670dc908 100644 --- a/examples/data-objects/webflow/CHANGELOG.md +++ b/examples/data-objects/webflow/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-example/webflow +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/external-data/CHANGELOG.md b/examples/external-data/CHANGELOG.md index fcb16e2b898c..79fc1cc488ec 100644 --- a/examples/external-data/CHANGELOG.md +++ b/examples/external-data/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-example/app-integration-external-data +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/service-clients/azure-client/external-controller/CHANGELOG.md b/examples/service-clients/azure-client/external-controller/CHANGELOG.md index 18135536aeb5..52f22967d896 100644 --- a/examples/service-clients/azure-client/external-controller/CHANGELOG.md +++ b/examples/service-clients/azure-client/external-controller/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-example/app-integration-external-controller +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/service-clients/odsp-client/shared-tree-demo/CHANGELOG.md b/examples/service-clients/odsp-client/shared-tree-demo/CHANGELOG.md index 33889f1126de..e60b0dbf7286 100644 --- a/examples/service-clients/odsp-client/shared-tree-demo/CHANGELOG.md +++ b/examples/service-clients/odsp-client/shared-tree-demo/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-example/shared-tree-demo +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/utils/bundle-size-tests/CHANGELOG.md b/examples/utils/bundle-size-tests/CHANGELOG.md index 90642c046bea..de68d9a36ef7 100644 --- a/examples/utils/bundle-size-tests/CHANGELOG.md +++ b/examples/utils/bundle-size-tests/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-example/bundle-size-tests +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/utils/example-utils/CHANGELOG.md b/examples/utils/example-utils/CHANGELOG.md index 1e989f8702e7..f31dd02efe96 100644 --- a/examples/utils/example-utils/CHANGELOG.md +++ b/examples/utils/example-utils/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-example/example-utils +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/utils/import-testing/CHANGELOG.md b/examples/utils/import-testing/CHANGELOG.md index c0dca76b8e32..c6465bcb019f 100644 --- a/examples/utils/import-testing/CHANGELOG.md +++ b/examples/utils/import-testing/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-example/import-testing +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/utils/migration-tools/CHANGELOG.md b/examples/utils/migration-tools/CHANGELOG.md index 101add7bb697..e03b270e3e16 100644 --- a/examples/utils/migration-tools/CHANGELOG.md +++ b/examples/utils/migration-tools/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-example/migration-tools +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/utils/webpack-fluid-loader/CHANGELOG.md b/examples/utils/webpack-fluid-loader/CHANGELOG.md index 14203046a0c2..fe5d132eb0bc 100644 --- a/examples/utils/webpack-fluid-loader/CHANGELOG.md +++ b/examples/utils/webpack-fluid-loader/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-example/webpack-fluid-loader +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/version-migration/live-schema-upgrade/CHANGELOG.md b/examples/version-migration/live-schema-upgrade/CHANGELOG.md index 639af3556743..aaf3b51ae9f6 100644 --- a/examples/version-migration/live-schema-upgrade/CHANGELOG.md +++ b/examples/version-migration/live-schema-upgrade/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-example/app-integration-live-schema-upgrade +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/version-migration/same-container/CHANGELOG.md b/examples/version-migration/same-container/CHANGELOG.md index ec4496679ad5..918545e97134 100644 --- a/examples/version-migration/same-container/CHANGELOG.md +++ b/examples/version-migration/same-container/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-example/version-migration-same-container +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/version-migration/separate-container/CHANGELOG.md b/examples/version-migration/separate-container/CHANGELOG.md index 2fed90ca84a1..dec8074aa410 100644 --- a/examples/version-migration/separate-container/CHANGELOG.md +++ b/examples/version-migration/separate-container/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-example/version-migration-separate-container +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/version-migration/tree-shim/CHANGELOG.md b/examples/version-migration/tree-shim/CHANGELOG.md index 58f10cdad9ca..4079941ce7c4 100644 --- a/examples/version-migration/tree-shim/CHANGELOG.md +++ b/examples/version-migration/tree-shim/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-example/tree-comparison +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/view-integration/container-views/CHANGELOG.md b/examples/view-integration/container-views/CHANGELOG.md index 0e1333637e1e..0db2187b5630 100644 --- a/examples/view-integration/container-views/CHANGELOG.md +++ b/examples/view-integration/container-views/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-example/app-integration-container-views +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/view-integration/external-views/CHANGELOG.md b/examples/view-integration/external-views/CHANGELOG.md index a0328e4437c5..da98f9aa281d 100644 --- a/examples/view-integration/external-views/CHANGELOG.md +++ b/examples/view-integration/external-views/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-example/app-integration-external-views +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/examples/view-integration/view-framework-sampler/CHANGELOG.md b/examples/view-integration/view-framework-sampler/CHANGELOG.md index 5aa062bcfdd9..b6b2b30bf6aa 100644 --- a/examples/view-integration/view-framework-sampler/CHANGELOG.md +++ b/examples/view-integration/view-framework-sampler/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-example/view-framework-sampler +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/experimental/PropertyDDS/packages/property-changeset/CHANGELOG.md b/experimental/PropertyDDS/packages/property-changeset/CHANGELOG.md index 959c1cdb0fcb..dbf850d107ea 100644 --- a/experimental/PropertyDDS/packages/property-changeset/CHANGELOG.md +++ b/experimental/PropertyDDS/packages/property-changeset/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-experimental/property-changeset +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/experimental/PropertyDDS/packages/property-common/CHANGELOG.md b/experimental/PropertyDDS/packages/property-common/CHANGELOG.md index 585f03de817a..1956e1a42ee1 100644 --- a/experimental/PropertyDDS/packages/property-common/CHANGELOG.md +++ b/experimental/PropertyDDS/packages/property-common/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-experimental/property-common +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/experimental/PropertyDDS/packages/property-common/platform-dependent/CHANGELOG.md b/experimental/PropertyDDS/packages/property-common/platform-dependent/CHANGELOG.md index 29ca71a18094..154884049fe7 100644 --- a/experimental/PropertyDDS/packages/property-common/platform-dependent/CHANGELOG.md +++ b/experimental/PropertyDDS/packages/property-common/platform-dependent/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-internal/platform-dependent +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/experimental/PropertyDDS/packages/property-dds/CHANGELOG.md b/experimental/PropertyDDS/packages/property-dds/CHANGELOG.md index d478ea9d1140..3df0b046865e 100644 --- a/experimental/PropertyDDS/packages/property-dds/CHANGELOG.md +++ b/experimental/PropertyDDS/packages/property-dds/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-experimental/property-dds +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/experimental/PropertyDDS/packages/property-properties/CHANGELOG.md b/experimental/PropertyDDS/packages/property-properties/CHANGELOG.md index 757e5f0b424a..d0731aa31f6e 100644 --- a/experimental/PropertyDDS/packages/property-properties/CHANGELOG.md +++ b/experimental/PropertyDDS/packages/property-properties/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-experimental/property-properties +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/experimental/dds/attributable-map/CHANGELOG.md b/experimental/dds/attributable-map/CHANGELOG.md index f793e81e648b..c825e7f8252f 100644 --- a/experimental/dds/attributable-map/CHANGELOG.md +++ b/experimental/dds/attributable-map/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-experimental/attributable-map +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/experimental/dds/ot/ot/CHANGELOG.md b/experimental/dds/ot/ot/CHANGELOG.md index 25f2a093c961..e162eab11df4 100644 --- a/experimental/dds/ot/ot/CHANGELOG.md +++ b/experimental/dds/ot/ot/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-experimental/ot +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/experimental/dds/ot/sharejs/json1/CHANGELOG.md b/experimental/dds/ot/sharejs/json1/CHANGELOG.md index c296f254250b..10f4bb557d1b 100644 --- a/experimental/dds/ot/sharejs/json1/CHANGELOG.md +++ b/experimental/dds/ot/sharejs/json1/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-experimental/sharejs-json1 +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/experimental/dds/sequence-deprecated/CHANGELOG.md b/experimental/dds/sequence-deprecated/CHANGELOG.md index 20ee0c1f196e..d95e42a1cb35 100644 --- a/experimental/dds/sequence-deprecated/CHANGELOG.md +++ b/experimental/dds/sequence-deprecated/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-experimental/sequence-deprecated +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/experimental/dds/tree/CHANGELOG.md b/experimental/dds/tree/CHANGELOG.md index 8a40676eb250..e2c671af1e53 100644 --- a/experimental/dds/tree/CHANGELOG.md +++ b/experimental/dds/tree/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-experimental/tree +## 2.41.0 + +Dependency updates only. + ## 2.40.0 ### Minor Changes diff --git a/experimental/framework/data-objects/CHANGELOG.md b/experimental/framework/data-objects/CHANGELOG.md index 1147c77d9637..d5bb056e5d29 100644 --- a/experimental/framework/data-objects/CHANGELOG.md +++ b/experimental/framework/data-objects/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-experimental/data-objects +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/experimental/framework/last-edited/CHANGELOG.md b/experimental/framework/last-edited/CHANGELOG.md index 2bd68e6f653f..37266b09aeef 100644 --- a/experimental/framework/last-edited/CHANGELOG.md +++ b/experimental/framework/last-edited/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-experimental/last-edited +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/experimental/framework/tree-react-api/CHANGELOG.md b/experimental/framework/tree-react-api/CHANGELOG.md index 5950114dc52c..520c8a35f657 100644 --- a/experimental/framework/tree-react-api/CHANGELOG.md +++ b/experimental/framework/tree-react-api/CHANGELOG.md @@ -1,5 +1,14 @@ # @fluid-experimental/tree-react-api +## 2.41.0 + +### Minor Changes + +- New experimental objectIdNumber API ([#21115](https://github.com/microsoft/FluidFramework/pull/21115)) [df2f139be8](https://github.com/microsoft/FluidFramework/commit/df2f139be8e8145d5eea313814cd6d35018cacee) + + A new `objectIdNumber` has been added, which is useful when you need an identifier which corresponds to an object identity. + For example: when specifying a React "key" that corresponds to a `TreeNode`. + ## 2.40.0 Dependency updates only. diff --git a/packages/common/client-utils/CHANGELOG.md b/packages/common/client-utils/CHANGELOG.md index 676b3f146424..cbd21f094084 100644 --- a/packages/common/client-utils/CHANGELOG.md +++ b/packages/common/client-utils/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-internal/client-utils +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/common/container-definitions/CHANGELOG.md b/packages/common/container-definitions/CHANGELOG.md index bc2aa86a230a..d7eb6231063a 100644 --- a/packages/common/container-definitions/CHANGELOG.md +++ b/packages/common/container-definitions/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/container-definitions +## 2.41.0 + +Dependency updates only. + ## 2.40.0 ### Minor Changes diff --git a/packages/common/core-interfaces/CHANGELOG.md b/packages/common/core-interfaces/CHANGELOG.md index 6ba0132c8a53..a713009a88f7 100644 --- a/packages/common/core-interfaces/CHANGELOG.md +++ b/packages/common/core-interfaces/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/core-interfaces +## 2.41.0 + +Dependency updates only. + ## 2.40.0 ### Minor Changes diff --git a/packages/common/core-utils/CHANGELOG.md b/packages/common/core-utils/CHANGELOG.md index efbdb5e0285e..f2590465055d 100644 --- a/packages/common/core-utils/CHANGELOG.md +++ b/packages/common/core-utils/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/core-utils +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/common/driver-definitions/CHANGELOG.md b/packages/common/driver-definitions/CHANGELOG.md index e467ef0f3b58..3558957dd25e 100644 --- a/packages/common/driver-definitions/CHANGELOG.md +++ b/packages/common/driver-definitions/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/driver-definitions +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/dds/cell/CHANGELOG.md b/packages/dds/cell/CHANGELOG.md index 7428d6e32815..2c8ecf8df62b 100644 --- a/packages/dds/cell/CHANGELOG.md +++ b/packages/dds/cell/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/cell +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/dds/counter/CHANGELOG.md b/packages/dds/counter/CHANGELOG.md index fb998c5b5427..3fd14a08d92d 100644 --- a/packages/dds/counter/CHANGELOG.md +++ b/packages/dds/counter/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/counter +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/dds/ink/CHANGELOG.md b/packages/dds/ink/CHANGELOG.md index 622f1c86770b..e3a5eda6a93a 100644 --- a/packages/dds/ink/CHANGELOG.md +++ b/packages/dds/ink/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-experimental/ink +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/dds/legacy-dds/CHANGELOG.md b/packages/dds/legacy-dds/CHANGELOG.md new file mode 100644 index 000000000000..13886b733914 --- /dev/null +++ b/packages/dds/legacy-dds/CHANGELOG.md @@ -0,0 +1,3 @@ +# @fluid-private/legacy-dds + +## 2.41.0 diff --git a/packages/dds/map/CHANGELOG.md b/packages/dds/map/CHANGELOG.md index 3476e52e0e5b..2336e29ec89c 100644 --- a/packages/dds/map/CHANGELOG.md +++ b/packages/dds/map/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/map +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/dds/matrix/CHANGELOG.md b/packages/dds/matrix/CHANGELOG.md index ed6eddf9a155..7251b8603cd3 100644 --- a/packages/dds/matrix/CHANGELOG.md +++ b/packages/dds/matrix/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/matrix +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/dds/merge-tree/CHANGELOG.md b/packages/dds/merge-tree/CHANGELOG.md index 318d820ca0ff..520bf089272d 100644 --- a/packages/dds/merge-tree/CHANGELOG.md +++ b/packages/dds/merge-tree/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/merge-tree +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/dds/ordered-collection/CHANGELOG.md b/packages/dds/ordered-collection/CHANGELOG.md index 0bef1273fe25..abdba53e1854 100644 --- a/packages/dds/ordered-collection/CHANGELOG.md +++ b/packages/dds/ordered-collection/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/ordered-collection +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/dds/pact-map/CHANGELOG.md b/packages/dds/pact-map/CHANGELOG.md index e732a6c443da..6d8ffc1de884 100644 --- a/packages/dds/pact-map/CHANGELOG.md +++ b/packages/dds/pact-map/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-experimental/pact-map +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/dds/register-collection/CHANGELOG.md b/packages/dds/register-collection/CHANGELOG.md index ee6289bbbe5f..c19ade82a0d2 100644 --- a/packages/dds/register-collection/CHANGELOG.md +++ b/packages/dds/register-collection/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/register-collection +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/dds/sequence/CHANGELOG.md b/packages/dds/sequence/CHANGELOG.md index 2e6b1ef8305a..baaaa916ca81 100644 --- a/packages/dds/sequence/CHANGELOG.md +++ b/packages/dds/sequence/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/sequence +## 2.41.0 + +Dependency updates only. + ## 2.40.0 ### Minor Changes diff --git a/packages/dds/shared-object-base/CHANGELOG.md b/packages/dds/shared-object-base/CHANGELOG.md index e921e4df0583..bcf12885aab7 100644 --- a/packages/dds/shared-object-base/CHANGELOG.md +++ b/packages/dds/shared-object-base/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/shared-object-base +## 2.41.0 + +Dependency updates only. + ## 2.40.0 ### Minor Changes diff --git a/packages/dds/shared-summary-block/CHANGELOG.md b/packages/dds/shared-summary-block/CHANGELOG.md index 1e409274ea0c..bdc7d2355d12 100644 --- a/packages/dds/shared-summary-block/CHANGELOG.md +++ b/packages/dds/shared-summary-block/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/shared-summary-block +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/dds/task-manager/CHANGELOG.md b/packages/dds/task-manager/CHANGELOG.md index f704c7eed37d..e0fe8c38e121 100644 --- a/packages/dds/task-manager/CHANGELOG.md +++ b/packages/dds/task-manager/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/task-manager +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/dds/test-dds-utils/CHANGELOG.md b/packages/dds/test-dds-utils/CHANGELOG.md index 2c3818504879..dc079b16ebd9 100644 --- a/packages/dds/test-dds-utils/CHANGELOG.md +++ b/packages/dds/test-dds-utils/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-private/test-dds-utils +## 2.41.0 + +Dependency updates only. + ## 2.40.0 ### Minor Changes diff --git a/packages/dds/tree/CHANGELOG.md b/packages/dds/tree/CHANGELOG.md index a198788823bc..17d3a5d5a7a1 100644 --- a/packages/dds/tree/CHANGELOG.md +++ b/packages/dds/tree/CHANGELOG.md @@ -1,5 +1,346 @@ # @fluidframework/tree +## 2.41.0 + +### Minor Changes + +- TreeAlpha.create now accepts unhydrated nodes ([#24629](https://github.com/microsoft/FluidFramework/pull/24629)) [e63af87aeb](https://github.com/microsoft/FluidFramework/commit/e63af87aeb7ece1ff0969027904c3b18f122d2d1) + + [TreeAlpha.create](https://fluidframework.com/docs/api/fluid-framework/treealpha-interface#create-methodsignature) now accepts [unhydrated](https://fluidframework.com/docs/api/fluid-framework/unhydrated-typealias) nodes. + `TreeAlpha.create`'s documentation has been updated to clarify that this is supported. + + Additionally `TreeAlpha.create` no longer throws a "Tree does not conform to schema" error when given a tree omitting an identifier. + Instead, the identifier behaves like it would for other ways to build unhydrated nodes: remaining unreadable until hydrated. + +- SharedTrees's FluidClientVersion enum (alpha) has been redesigned ([#24638](https://github.com/microsoft/FluidFramework/pull/24638)) [5f3b9d7b7d](https://github.com/microsoft/FluidFramework/commit/5f3b9d7b7d12307d89cbd4b88f5e2d6e1833680d) + + Users of [FluidClientVersion](https://fluidframework.com/docs/api/fluid-framework/fluidclientversion-enum)'s `v2_1`, `v2_2`, and `v2_3` entries should specify `v2_0` instead. + This will result in no functional differences since no code currently opts into any additional functionality based on specifying those versions. + The new approach avoids listing versions which there is currently no reason to select, and thus these options have been removed. + If future work adds support to opt into features which only work starting with some of those versions, they will be re-added at that time. + +- ForestTypeExpensiveDebug now validates content against schema ([#24658](https://github.com/microsoft/FluidFramework/pull/24658)) [9d600aae88](https://github.com/microsoft/FluidFramework/commit/9d600aae88b9045392067719638258ea7407c2eb) + + When opting into using [ForestTypeExpensiveDebug](https://fluidframework.com/docs/api/fluid-framework/#foresttypeexpensivedebug-variable) using [configuredSharedTree](https://fluidframework.com/docs/api/fluid-framework/#configuredsharedtree-function), the tree is now checked against the schema on load and after every edit. + This should help detect and diagnose document corruption bugs. + + ```typescript + const DebugSharedTree = configuredSharedTree({ + jsonValidator: typeboxValidator, + // Now detects corrupted documents which are out of schema. + forest: ForestTypeExpensiveDebug, + }); + ``` + +- The comparePersistedSchema function (alpha) has had its canInitialize parameter removed ([#24606](https://github.com/microsoft/FluidFramework/pull/24606)) [d083a1780a](https://github.com/microsoft/FluidFramework/commit/d083a1780a1db74a922cbfb451d23ab932c0eb32) + + [comparePersistedSchema](https://fluidframework.com/docs/api/tree/#comparepersistedschema-function) has had its `canInitialize` parameter removed. + This parameter was only used to add to the output [SchemaCompatibilityStatus](https://fluidframework.com/docs/api/fluid-framework/schemacompatibilitystatus-interface). + If a full `SchemaCompatibilityStatus` is still desired, the `canInitialize` value can be added to the result: + + ```typescript + // old + const result = comparePersistedSchema(a, b, canInitialize); + // new + const result = { ...comparePersistedSchema(a, b), canInitialize }; + ``` + +- TreeNodes now implicitly generate identifiers on access instead of throwing ([#24665](https://github.com/microsoft/FluidFramework/pull/24665)) [cd5976b959](https://github.com/microsoft/FluidFramework/commit/cd5976b959d6b7a5259e3bb9ef816f842724bc6e) + + Accessing a defaulted [identifier](https://fluidframework.com/docs/api/fluid-framework/schemafactory-class#identifier-property) on an [Unhydrated](https://fluidframework.com/docs/api/fluid-framework/unhydrated-typealias) `TreeNode` no longer throws a usage error. + Instead, a new UUID is allocated for the identifier and returned. + These UUIDs will be more compressible than random ones, since they all come from a single sequence (starting with a random UUID). + They will not be fully compressed like the identifiers generated after hydration that leverage the document's [IIdCompressor](https://fluidframework.com/docs/api/id-compressor/iidcompressor-interface). + + ```typescript + const factory = new SchemaFactory("test"); + class HasIdentifier extends schema.object("A", { id: factory.identifier }) {} + // This used to throw an error: + const id = new HasIdentifier({}).id; + ``` + +- New TableSchema (alpha) APIs ([#24579](https://github.com/microsoft/FluidFramework/pull/24579)) [e565f6838b](https://github.com/microsoft/FluidFramework/commit/e565f6838b31d3e777da942c806606575123f6d6) + + A `TableSchema` utility has been added to Shared Tree for managing dynamic, tabular data. + This new `TableSchema` namespace contains APIs for creating column, row, and table [node schema](https://fluidframework.com/docs/api/fluid-framework/treenodeschema-typealias). + + Note: these APIs require the use of [SchemaFactoryAlpha](https://fluidframework.com/docs/api/fluid-framework/schemafactoryalpha-class). + + > [!WARNING] + > These APIs are in preview and are subject to change. + > Until these APIs have stabilized, it is not recommended to use them in production code. + > There may be breaking changes to these APIs and their underlying data format. + > Using these APIs in production code may result in data loss or corruption. + + #### Creating a table + + You can craft a table schema with `TableSchema.table`. + This includes providing a schema for the cells that will appear in the table: + + ```typescript + class MyTable extends TableSchema.table({ + schemaFactory, + cell: schemaFactory.string, + }) {} + + const table = new MyTable({ + columns: [{ id: "column-0" }], + rows: [{ id: "row-0", cells: { "column-0": "Hello world!" } }], + }); + ``` + + #### Creating a table with custom column and row schema + + To associate additional data with your rows or columns, generate custom row and column schema using `TableSchema.column` and `TableSchema.row`. + These schema can then be provided to `TableSchema.table`: + + ```typescript + class MyColumn extends TableSchema.column({ + schemaFactory, + cell: Cell, + props: schemaFactory.object("TableColumnProps", { + label: schemaFactory.string, + }), + }) {} + + class MyRow extends TableSchema.row({ + schemaFactory, + cell: Cell, + }) {} + + class MyTable extends TableSchema.table({ + schemaFactory, + cell: Cell, + column: MyColumn, + row: MyRow, + }) {} + + const table = new MyTable({ + columns: [ + new MyColumn({ props: { label: "Entry" } }), + new MyColumn({ props: { label: "Date" } }), + new MyColumn({ props: { label: "Amount" } }), + ], + rows: [], + }); + ``` + + #### Interacting with the table + + Table trees created using `TableSchema` offer various APIs to make working with tabular data easy. + These include: + + - Insertion and removal of columns, rows, and cells. + - Cell access by column/row. + + ```typescript + // Create an empty table + const table = MyTable.empty(); + + const column0 = new MyColumn({ + props: { label: "Column 0" }, + }); + + // Append a column to the end of the table. + table.insertColumn({ + column: column0, + }); + + const rows = [new MyRow({ cells: {} }), new MyRow({ cells: {} })]; + + // Insert rows at the beginning of the table. + table.insertRows({ + index: 0, + rows, + }); + + // Set cell at row 0, column 0. + table.setCell({ + key: { + column: column0, + row: rows[0], + }, + cell: "Hello", + }); + + // Set cell at row 1, column 0. + table.setCell({ + key: { + column: column0, + row: rows[1], + }, + cell: "World", + }); + + // Remove the first row. + // Note: this will also remove the row's cell. + table.removeRow(rows[0]); + + // Remove the column. + // Note: this will *not* remove the remaining cell under this column. + table.removeColumn(column0); + ``` + + #### Listening for changes + + Listening for changes to table trees behaves just like it would for any other nodes in a Shared Tree (see [here](https://fluidframework.com/docs/data-structures/tree/events) for more details). + + The most straightforward option is to listen for any changes to the table node and its descendants. + For example: + + ```typescript + class Cell extends schemaFactory.object("TableCell", { + value: schemaFactory.string, + }) {} + + class Table extends TableSchema.table({ + schemaFactory, + cell: Cell, + }) {} + + const table = new Table({ + columns: [{ id: "column-0" }], + rows: [{ id: "row-0", cells: {} }], + }); + + // Listen for any changes to the table and its children. + // The "treeChanged" event will fire when the `table` node or any of its descendants change. + Tree.on(table, "treeChanged", () => { + // Respond to the change. + }); + ``` + + If you need more granular eventing to meet your performance needs, that is possible as well. + For example, if you wish to know when the table's list of rows changes, you could do the following: + + ```typescript + class Cell extends schemaFactory.object("TableCell", { + value: schemaFactory.string, + }) {} + + class Table extends TableSchema.table({ + schemaFactory, + cell: Cell, + }) {} + + const table = new Table({ + columns: [{ id: "column-0" }], + rows: [{ id: "row-0", cells: {} }], + }); + + // Listen for any changes to the list of rows. + // The "nodeChanged" event will fire only when the `rows` node itself changes (i.e., its own properties change). + // In this case, the event will fire when a row is added or removed, or the order of the list is changed. + // But it won't fire when a row's properties change, or when the row's cells change, etc. + Tree.on(table.rows, "nodeChanged", () => { + // Respond to the change. + }); + ``` + + #### Limitations + + ##### Orphaned cells + + Cells in the table may become "orphaned." + That is, it is possible to enter a state where one or more rows contain cells with no corresponding column. + To reduce the likelihood of this, you can manually remove corresponding cells when removing columns. + + For example: + + ```typescript + // Remove column1 and all of its cells. + // The "transaction" method will ensure that all changes are applied atomically. + Tree.runTransaction(table, () => { + // Remove column1 + table.removeColumn(column1); + + // Remove the cell at column1 for each row. + for (const row of table.rows) { + table.removeCell({ + column: column1, + row, + }); + } + }); + ``` + + > [!WARNING] + > Note that even with the above precaution, it is possible to enter such an orphaned cell state via the merging of edits. + > For example: one client might add a row while another concurrently removes a column, orphaning the cell where the column and row intersected. + +- New TreeAlpha.key2 API ([#24623](https://github.com/microsoft/FluidFramework/pull/24623)) [0ddd6b030b](https://github.com/microsoft/FluidFramework/commit/0ddd6b030bf21ef2f315b84e428954ecfe951728) + + The `TreeAlpha.key2` method is meant to eventually replace the public `Tree.key` method. + This new method returns `undefined` in the case where there is a root node. + +- New TreeAlpha identifier APIs for converting, retrieving, and generating identifiers ([#24218](https://github.com/microsoft/FluidFramework/pull/24218)) [e5b2882132](https://github.com/microsoft/FluidFramework/commit/e5b28821323566112096f05805281b8d5321077d) + + #### TreeAlpha.identifier + + You can retrieve the long identifier with `TreeAlpha.identifier(node)`, where `node` is a `TreeNode`. The long identifier is a stable, compressible UUID generated by the tree. + In cases where the node does not yet have an identifier assigned, this will return `undefined`. + These cases include: + + - The node does not contain an identifier field. + - The node is a non-hydrated node with a user provided identifier. Note that if it is a non-hydrated node without an identifier provided, it will throw an error. + + #### TreeAlpha.identifier.shorten + + You can shorten a long identifier with `TreeAlpha.identifier.shorten(branch, identifier)`, where `branch` is a `TreeBranch`, and `identifier` is a `string`. + If the method returns a valid short identifier, this identifier can be passed into `TreeAlpha.identifier.lengthen` + to get the original valid long `identifier` back. + In the cases where it's not possible to shorten the `identifier`, it will return `undefined`. + These cases include: + + - A compressible long identifier, but it is unrecognized by the tree that the node belongs to. This can occur if the identifier is not generated from the tree. + - An identifier which is not compressible by the tree. This can occur if the node's identifier was a user provided string. + + #### TreeAlpha.identifier.lengthen + + You can lengthen a short identifier with `TreeAlpha.identifier.lengthen(branch, identifier)`, where `branch` is a `TreeBranch`, and `identifier` is a `number`. + If the method returns a valid long identifier, this identifier can be passed into `TreeAlpha.identifier.shorten` to get the original `identifier` back. + In the cases where it's not possible to lengthen the `identifier`, this method will throw an error. + These cases include: + + - An unrecognized short identifier. This can occur if the identifier is not generated from the tree. + + #### TreeAlpha.identifier.getShort + + You can retrieve the short identifier from a node with `TreeAlpha.identifier.getShort(node)` where `node` is a `TreeNode`. + If it is not possible to retrieve the short identifier, it will return `undefined` + + ##### Example for a node with valid identifier + + ```typescript + // This will retrieve the short identifier from the node. + const shortIdentifier = TreeAlpha.identifier.getShort( + nodeWithValidIdentifier, + ); + ``` + + ##### Examples for when you get undefined + + In cases where the node provided does not contain an identifier that is recognized or compressible by the tree that the node belongs to, this method will return undefined. + This will occur in the following cases: + + - The node is an non-hydrated node with a user provided identifier. Note that if it is an non-hydrated node without an identifier provided, it will throw an error. + - The node does not contain an identifier field. + - The node contains a compressible long identifier, but it is unrecognized by the tree that the node belongs to. This can occur if the identifier is not generated from the tree. + - The node contains an identifier which is not compressible by its id compressor. This can occur if the node's identifier was a user provided string. + + ```typescript + // This will return undefined + const shortIdentifier = TreeAlpha.identifier.getShort(node); + ``` + + #### TreeAlpha.identifier.create + + You can create a long identifier from a branch with `TreeAlpha.identifier.create(branch)` where `branch` is a `TreeBranch`. + + ```typescript + const createdIdentifier = TreeAlpha.identifier.create(branch); + ``` + ## 2.40.0 ### Minor Changes diff --git a/packages/drivers/debugger/CHANGELOG.md b/packages/drivers/debugger/CHANGELOG.md index 6bc0faf8559e..7f974a94cc07 100644 --- a/packages/drivers/debugger/CHANGELOG.md +++ b/packages/drivers/debugger/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/debugger +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/drivers/driver-base/CHANGELOG.md b/packages/drivers/driver-base/CHANGELOG.md index fc32798395a1..90258feb12c3 100644 --- a/packages/drivers/driver-base/CHANGELOG.md +++ b/packages/drivers/driver-base/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/driver-base +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/drivers/driver-web-cache/CHANGELOG.md b/packages/drivers/driver-web-cache/CHANGELOG.md index bd2a2ac7870c..57c2b4cc404f 100644 --- a/packages/drivers/driver-web-cache/CHANGELOG.md +++ b/packages/drivers/driver-web-cache/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/driver-web-cache +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/drivers/file-driver/CHANGELOG.md b/packages/drivers/file-driver/CHANGELOG.md index ecc420bc15d5..b9e26469a1ba 100644 --- a/packages/drivers/file-driver/CHANGELOG.md +++ b/packages/drivers/file-driver/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/file-driver +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/drivers/local-driver/CHANGELOG.md b/packages/drivers/local-driver/CHANGELOG.md index 35a5b8acfe61..718b9d8955b7 100644 --- a/packages/drivers/local-driver/CHANGELOG.md +++ b/packages/drivers/local-driver/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/local-driver +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/drivers/odsp-driver-definitions/CHANGELOG.md b/packages/drivers/odsp-driver-definitions/CHANGELOG.md index 40fffab6def4..18f7e050711d 100644 --- a/packages/drivers/odsp-driver-definitions/CHANGELOG.md +++ b/packages/drivers/odsp-driver-definitions/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/odsp-driver-definitions +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/drivers/odsp-driver/CHANGELOG.md b/packages/drivers/odsp-driver/CHANGELOG.md index cb9a75832de1..a16207c5e08c 100644 --- a/packages/drivers/odsp-driver/CHANGELOG.md +++ b/packages/drivers/odsp-driver/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/odsp-driver +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/drivers/odsp-urlResolver/CHANGELOG.md b/packages/drivers/odsp-urlResolver/CHANGELOG.md index acf15fa4fb10..6bdef45b7bf8 100644 --- a/packages/drivers/odsp-urlResolver/CHANGELOG.md +++ b/packages/drivers/odsp-urlResolver/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/odsp-urlresolver +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/drivers/replay-driver/CHANGELOG.md b/packages/drivers/replay-driver/CHANGELOG.md index 993223fdbfb2..1a86f2663070 100644 --- a/packages/drivers/replay-driver/CHANGELOG.md +++ b/packages/drivers/replay-driver/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/replay-driver +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/drivers/routerlicious-driver/CHANGELOG.md b/packages/drivers/routerlicious-driver/CHANGELOG.md index ff60a9982f0d..75f79f968459 100644 --- a/packages/drivers/routerlicious-driver/CHANGELOG.md +++ b/packages/drivers/routerlicious-driver/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/routerlicious-driver +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/drivers/routerlicious-urlResolver/CHANGELOG.md b/packages/drivers/routerlicious-urlResolver/CHANGELOG.md index 40a0528d6a80..390f4e1236fd 100644 --- a/packages/drivers/routerlicious-urlResolver/CHANGELOG.md +++ b/packages/drivers/routerlicious-urlResolver/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/routerlicious-urlresolver +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/drivers/tinylicious-driver/CHANGELOG.md b/packages/drivers/tinylicious-driver/CHANGELOG.md index a86e99f48914..efab797c8121 100644 --- a/packages/drivers/tinylicious-driver/CHANGELOG.md +++ b/packages/drivers/tinylicious-driver/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/tinylicious-driver +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/framework/agent-scheduler/CHANGELOG.md b/packages/framework/agent-scheduler/CHANGELOG.md index 2894dbe033f7..32db4501a4db 100644 --- a/packages/framework/agent-scheduler/CHANGELOG.md +++ b/packages/framework/agent-scheduler/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/agent-scheduler +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/framework/ai-collab/CHANGELOG.md b/packages/framework/ai-collab/CHANGELOG.md index 2af0b2535951..a5d6f9f2cafb 100644 --- a/packages/framework/ai-collab/CHANGELOG.md +++ b/packages/framework/ai-collab/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/ai-collab +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/framework/aqueduct/CHANGELOG.md b/packages/framework/aqueduct/CHANGELOG.md index 10159bc4c18e..3f9055f678ae 100644 --- a/packages/framework/aqueduct/CHANGELOG.md +++ b/packages/framework/aqueduct/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/aqueduct +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/framework/attributor/CHANGELOG.md b/packages/framework/attributor/CHANGELOG.md index 9b19a13cec37..e4da811cb07f 100644 --- a/packages/framework/attributor/CHANGELOG.md +++ b/packages/framework/attributor/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-experimental/attributor +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/framework/client-logger/app-insights-logger/CHANGELOG.md b/packages/framework/client-logger/app-insights-logger/CHANGELOG.md index 8c7eedc95ae2..02da0965a4bf 100644 --- a/packages/framework/client-logger/app-insights-logger/CHANGELOG.md +++ b/packages/framework/client-logger/app-insights-logger/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-internal/app-insights-logger +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/framework/client-logger/fluid-telemetry/CHANGELOG.md b/packages/framework/client-logger/fluid-telemetry/CHANGELOG.md index 96a6ff2eb316..1c7c7b2d7b3c 100644 --- a/packages/framework/client-logger/fluid-telemetry/CHANGELOG.md +++ b/packages/framework/client-logger/fluid-telemetry/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/fluid-telemetry +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/framework/data-object-base/CHANGELOG.md b/packages/framework/data-object-base/CHANGELOG.md index ca27710b5623..44092f59e7f6 100644 --- a/packages/framework/data-object-base/CHANGELOG.md +++ b/packages/framework/data-object-base/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/data-object-base +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/framework/dds-interceptions/CHANGELOG.md b/packages/framework/dds-interceptions/CHANGELOG.md index 6ac7ce3e47b2..c229ed9ac470 100644 --- a/packages/framework/dds-interceptions/CHANGELOG.md +++ b/packages/framework/dds-interceptions/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/dds-interceptions +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/framework/fluid-framework/CHANGELOG.md b/packages/framework/fluid-framework/CHANGELOG.md index ca63241469bb..53469cb6babd 100644 --- a/packages/framework/fluid-framework/CHANGELOG.md +++ b/packages/framework/fluid-framework/CHANGELOG.md @@ -1,5 +1,341 @@ # fluid-framework +## 2.41.0 + +### Minor Changes + +- TreeAlpha.create now accepts unhydrated nodes ([#24629](https://github.com/microsoft/FluidFramework/pull/24629)) [e63af87aeb](https://github.com/microsoft/FluidFramework/commit/e63af87aeb7ece1ff0969027904c3b18f122d2d1) + + [TreeAlpha.create](https://fluidframework.com/docs/api/fluid-framework/treealpha-interface#create-methodsignature) now accepts [unhydrated](https://fluidframework.com/docs/api/fluid-framework/unhydrated-typealias) nodes. + `TreeAlpha.create`'s documentation has been updated to clarify that this is supported. + + Additionally `TreeAlpha.create` no longer throws a "Tree does not conform to schema" error when given a tree omitting an identifier. + Instead, the identifier behaves like it would for other ways to build unhydrated nodes: remaining unreadable until hydrated. + +- SharedTrees's FluidClientVersion enum (alpha) has been redesigned ([#24638](https://github.com/microsoft/FluidFramework/pull/24638)) [5f3b9d7b7d](https://github.com/microsoft/FluidFramework/commit/5f3b9d7b7d12307d89cbd4b88f5e2d6e1833680d) + + Users of [FluidClientVersion](https://fluidframework.com/docs/api/fluid-framework/fluidclientversion-enum)'s `v2_1`, `v2_2`, and `v2_3` entries should specify `v2_0` instead. + This will result in no functional differences since no code currently opts into any additional functionality based on specifying those versions. + The new approach avoids listing versions which there is currently no reason to select, and thus these options have been removed. + If future work adds support to opt into features which only work starting with some of those versions, they will be re-added at that time. + +- ForestTypeExpensiveDebug now validates content against schema ([#24658](https://github.com/microsoft/FluidFramework/pull/24658)) [9d600aae88](https://github.com/microsoft/FluidFramework/commit/9d600aae88b9045392067719638258ea7407c2eb) + + When opting into using [ForestTypeExpensiveDebug](https://fluidframework.com/docs/api/fluid-framework/#foresttypeexpensivedebug-variable) using [configuredSharedTree](https://fluidframework.com/docs/api/fluid-framework/#configuredsharedtree-function), the tree is now checked against the schema on load and after every edit. + This should help detect and diagnose document corruption bugs. + + ```typescript + const DebugSharedTree = configuredSharedTree({ + jsonValidator: typeboxValidator, + // Now detects corrupted documents which are out of schema. + forest: ForestTypeExpensiveDebug, + }); + ``` + +- The comparePersistedSchema function (alpha) has had its canInitialize parameter removed ([#24606](https://github.com/microsoft/FluidFramework/pull/24606)) [d083a1780a](https://github.com/microsoft/FluidFramework/commit/d083a1780a1db74a922cbfb451d23ab932c0eb32) + + [comparePersistedSchema](https://fluidframework.com/docs/api/tree/#comparepersistedschema-function) has had its `canInitialize` parameter removed. + This parameter was only used to add to the output [SchemaCompatibilityStatus](https://fluidframework.com/docs/api/fluid-framework/schemacompatibilitystatus-interface). + If a full `SchemaCompatibilityStatus` is still desired, the `canInitialize` value can be added to the result: + + ```typescript + // old + const result = comparePersistedSchema(a, b, canInitialize); + // new + const result = { ...comparePersistedSchema(a, b), canInitialize }; + ``` + +- TreeNodes now implicitly generate identifiers on access instead of throwing ([#24665](https://github.com/microsoft/FluidFramework/pull/24665)) [cd5976b959](https://github.com/microsoft/FluidFramework/commit/cd5976b959d6b7a5259e3bb9ef816f842724bc6e) + + Accessing a defaulted [identifier](https://fluidframework.com/docs/api/fluid-framework/schemafactory-class#identifier-property) on an [Unhydrated](https://fluidframework.com/docs/api/fluid-framework/unhydrated-typealias) `TreeNode` no longer throws a usage error. + Instead, a new UUID is allocated for the identifier and returned. + These UUIDs will be more compressible than random ones, since they all come from a single sequence (starting with a random UUID). + They will not be fully compressed like the identifiers generated after hydration that leverage the document's [IIdCompressor](https://fluidframework.com/docs/api/id-compressor/iidcompressor-interface). + + ```typescript + const factory = new SchemaFactory("test"); + class HasIdentifier extends schema.object("A", { id: factory.identifier }) {} + // This used to throw an error: + const id = new HasIdentifier({}).id; + ``` + +- New TableSchema (alpha) APIs ([#24579](https://github.com/microsoft/FluidFramework/pull/24579)) [e565f6838b](https://github.com/microsoft/FluidFramework/commit/e565f6838b31d3e777da942c806606575123f6d6) + + A `TableSchema` utility has been added to Shared Tree for managing dynamic, tabular data. + This new `TableSchema` namespace contains APIs for creating column, row, and table [node schema](https://fluidframework.com/docs/api/fluid-framework/treenodeschema-typealias). + + Note: these APIs require the use of [SchemaFactoryAlpha](https://fluidframework.com/docs/api/fluid-framework/schemafactoryalpha-class). + + > [!WARNING] + > These APIs are in preview and are subject to change. + > Until these APIs have stabilized, it is not recommended to use them in production code. + > There may be breaking changes to these APIs and their underlying data format. + > Using these APIs in production code may result in data loss or corruption. + + #### Creating a table + + You can craft a table schema with `TableSchema.table`. + This includes providing a schema for the cells that will appear in the table: + + ```typescript + class MyTable extends TableSchema.table({ + schemaFactory, + cell: schemaFactory.string, + }) {} + + const table = new MyTable({ + columns: [{ id: "column-0" }], + rows: [{ id: "row-0", cells: { "column-0": "Hello world!" } }], + }); + ``` + + #### Creating a table with custom column and row schema + + To associate additional data with your rows or columns, generate custom row and column schema using `TableSchema.column` and `TableSchema.row`. + These schema can then be provided to `TableSchema.table`: + + ```typescript + class MyColumn extends TableSchema.column({ + schemaFactory, + cell: Cell, + props: schemaFactory.object("TableColumnProps", { + label: schemaFactory.string, + }), + }) {} + + class MyRow extends TableSchema.row({ + schemaFactory, + cell: Cell, + }) {} + + class MyTable extends TableSchema.table({ + schemaFactory, + cell: Cell, + column: MyColumn, + row: MyRow, + }) {} + + const table = new MyTable({ + columns: [ + new MyColumn({ props: { label: "Entry" } }), + new MyColumn({ props: { label: "Date" } }), + new MyColumn({ props: { label: "Amount" } }), + ], + rows: [], + }); + ``` + + #### Interacting with the table + + Table trees created using `TableSchema` offer various APIs to make working with tabular data easy. + These include: + + - Insertion and removal of columns, rows, and cells. + - Cell access by column/row. + + ```typescript + // Create an empty table + const table = MyTable.empty(); + + const column0 = new MyColumn({ + props: { label: "Column 0" }, + }); + + // Append a column to the end of the table. + table.insertColumn({ + column: column0, + }); + + const rows = [new MyRow({ cells: {} }), new MyRow({ cells: {} })]; + + // Insert rows at the beginning of the table. + table.insertRows({ + index: 0, + rows, + }); + + // Set cell at row 0, column 0. + table.setCell({ + key: { + column: column0, + row: rows[0], + }, + cell: "Hello", + }); + + // Set cell at row 1, column 0. + table.setCell({ + key: { + column: column0, + row: rows[1], + }, + cell: "World", + }); + + // Remove the first row. + // Note: this will also remove the row's cell. + table.removeRow(rows[0]); + + // Remove the column. + // Note: this will *not* remove the remaining cell under this column. + table.removeColumn(column0); + ``` + + #### Listening for changes + + Listening for changes to table trees behaves just like it would for any other nodes in a Shared Tree (see [here](https://fluidframework.com/docs/data-structures/tree/events) for more details). + + The most straightforward option is to listen for any changes to the table node and its descendants. + For example: + + ```typescript + class Cell extends schemaFactory.object("TableCell", { + value: schemaFactory.string, + }) {} + + class Table extends TableSchema.table({ + schemaFactory, + cell: Cell, + }) {} + + const table = new Table({ + columns: [{ id: "column-0" }], + rows: [{ id: "row-0", cells: {} }], + }); + + // Listen for any changes to the table and its children. + // The "treeChanged" event will fire when the `table` node or any of its descendants change. + Tree.on(table, "treeChanged", () => { + // Respond to the change. + }); + ``` + + If you need more granular eventing to meet your performance needs, that is possible as well. + For example, if you wish to know when the table's list of rows changes, you could do the following: + + ```typescript + class Cell extends schemaFactory.object("TableCell", { + value: schemaFactory.string, + }) {} + + class Table extends TableSchema.table({ + schemaFactory, + cell: Cell, + }) {} + + const table = new Table({ + columns: [{ id: "column-0" }], + rows: [{ id: "row-0", cells: {} }], + }); + + // Listen for any changes to the list of rows. + // The "nodeChanged" event will fire only when the `rows` node itself changes (i.e., its own properties change). + // In this case, the event will fire when a row is added or removed, or the order of the list is changed. + // But it won't fire when a row's properties change, or when the row's cells change, etc. + Tree.on(table.rows, "nodeChanged", () => { + // Respond to the change. + }); + ``` + + #### Limitations + + ##### Orphaned cells + + Cells in the table may become "orphaned." + That is, it is possible to enter a state where one or more rows contain cells with no corresponding column. + To reduce the likelihood of this, you can manually remove corresponding cells when removing columns. + + For example: + + ```typescript + // Remove column1 and all of its cells. + // The "transaction" method will ensure that all changes are applied atomically. + Tree.runTransaction(table, () => { + // Remove column1 + table.removeColumn(column1); + + // Remove the cell at column1 for each row. + for (const row of table.rows) { + table.removeCell({ + column: column1, + row, + }); + } + }); + ``` + + > [!WARNING] + > Note that even with the above precaution, it is possible to enter such an orphaned cell state via the merging of edits. + > For example: one client might add a row while another concurrently removes a column, orphaning the cell where the column and row intersected. + +- New TreeAlpha identifier APIs for converting, retrieving, and generating identifiers ([#24218](https://github.com/microsoft/FluidFramework/pull/24218)) [e5b2882132](https://github.com/microsoft/FluidFramework/commit/e5b28821323566112096f05805281b8d5321077d) + + #### TreeAlpha.identifier + + You can retrieve the long identifier with `TreeAlpha.identifier(node)`, where `node` is a `TreeNode`. The long identifier is a stable, compressible UUID generated by the tree. + In cases where the node does not yet have an identifier assigned, this will return `undefined`. + These cases include: + + - The node does not contain an identifier field. + - The node is a non-hydrated node with a user provided identifier. Note that if it is a non-hydrated node without an identifier provided, it will throw an error. + + #### TreeAlpha.identifier.shorten + + You can shorten a long identifier with `TreeAlpha.identifier.shorten(branch, identifier)`, where `branch` is a `TreeBranch`, and `identifier` is a `string`. + If the method returns a valid short identifier, this identifier can be passed into `TreeAlpha.identifier.lengthen` + to get the original valid long `identifier` back. + In the cases where it's not possible to shorten the `identifier`, it will return `undefined`. + These cases include: + + - A compressible long identifier, but it is unrecognized by the tree that the node belongs to. This can occur if the identifier is not generated from the tree. + - An identifier which is not compressible by the tree. This can occur if the node's identifier was a user provided string. + + #### TreeAlpha.identifier.lengthen + + You can lengthen a short identifier with `TreeAlpha.identifier.lengthen(branch, identifier)`, where `branch` is a `TreeBranch`, and `identifier` is a `number`. + If the method returns a valid long identifier, this identifier can be passed into `TreeAlpha.identifier.shorten` to get the original `identifier` back. + In the cases where it's not possible to lengthen the `identifier`, this method will throw an error. + These cases include: + + - An unrecognized short identifier. This can occur if the identifier is not generated from the tree. + + #### TreeAlpha.identifier.getShort + + You can retrieve the short identifier from a node with `TreeAlpha.identifier.getShort(node)` where `node` is a `TreeNode`. + If it is not possible to retrieve the short identifier, it will return `undefined` + + ##### Example for a node with valid identifier + + ```typescript + // This will retrieve the short identifier from the node. + const shortIdentifier = TreeAlpha.identifier.getShort( + nodeWithValidIdentifier, + ); + ``` + + ##### Examples for when you get undefined + + In cases where the node provided does not contain an identifier that is recognized or compressible by the tree that the node belongs to, this method will return undefined. + This will occur in the following cases: + + - The node is an non-hydrated node with a user provided identifier. Note that if it is an non-hydrated node without an identifier provided, it will throw an error. + - The node does not contain an identifier field. + - The node contains a compressible long identifier, but it is unrecognized by the tree that the node belongs to. This can occur if the identifier is not generated from the tree. + - The node contains an identifier which is not compressible by its id compressor. This can occur if the node's identifier was a user provided string. + + ```typescript + // This will return undefined + const shortIdentifier = TreeAlpha.identifier.getShort(node); + ``` + + #### TreeAlpha.identifier.create + + You can create a long identifier from a branch with `TreeAlpha.identifier.create(branch)` where `branch` is a `TreeBranch`. + + ```typescript + const createdIdentifier = TreeAlpha.identifier.create(branch); + ``` + ## 2.40.0 ### Minor Changes diff --git a/packages/framework/fluid-static/CHANGELOG.md b/packages/framework/fluid-static/CHANGELOG.md index 9cdc9742c217..7a471b64bbd2 100644 --- a/packages/framework/fluid-static/CHANGELOG.md +++ b/packages/framework/fluid-static/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/fluid-static +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/framework/oldest-client-observer/CHANGELOG.md b/packages/framework/oldest-client-observer/CHANGELOG.md index dbb09071e538..c5c3ab25617c 100644 --- a/packages/framework/oldest-client-observer/CHANGELOG.md +++ b/packages/framework/oldest-client-observer/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-experimental/oldest-client-observer +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/framework/presence/CHANGELOG.md b/packages/framework/presence/CHANGELOG.md index f308c082eb33..24479220fb81 100644 --- a/packages/framework/presence/CHANGELOG.md +++ b/packages/framework/presence/CHANGELOG.md @@ -1,5 +1,21 @@ # @fluid-experimental/presence +## 2.41.0 + +### Minor Changes + +- Presence APIs promoted to beta [cc10c102f1](https://github.com/microsoft/FluidFramework/commit/cc10c102f150ca09d7a8b409852a7a0c14f8c2f1) + + [Presence APIs](https://fluidframework.com/docs/build/presence) are now beta and can be imported via `@fluidframework/presence/beta`. + + Note: `Notifications` are only supported via `/alpha` imports. To access notifications-only workspace support, cast `Presence` to `PresenceWithNotifications`. + +- "getPresence(container: IFluidContainer): Presence" now supported ([#24399](https://github.com/microsoft/FluidFramework/pull/24399)) [5c6824a48d](https://github.com/microsoft/FluidFramework/commit/5c6824a48da7dad6cb5911e6b1af02dfaf6382e1) + + You can now use the `getPresence` function to directly acquire `Presence`. In previous releases, you were required to + use `ExperimentalPresenceManager` in container schema and calling `getPresenceViaDataObject`, but that is no longer + required. Both `ExperimentalPresenceManager` and `getPresenceViaDataObject` are now deprecated. + ## 2.40.0 Dependency updates only. diff --git a/packages/framework/request-handler/CHANGELOG.md b/packages/framework/request-handler/CHANGELOG.md index bfd765118807..80d38dee2899 100644 --- a/packages/framework/request-handler/CHANGELOG.md +++ b/packages/framework/request-handler/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/request-handler +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/framework/synthesize/CHANGELOG.md b/packages/framework/synthesize/CHANGELOG.md index c335f55c8d21..77a245e02b8c 100644 --- a/packages/framework/synthesize/CHANGELOG.md +++ b/packages/framework/synthesize/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/synthesize +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/framework/undo-redo/CHANGELOG.md b/packages/framework/undo-redo/CHANGELOG.md index a04b045dafd6..d7bbf8e0a59d 100644 --- a/packages/framework/undo-redo/CHANGELOG.md +++ b/packages/framework/undo-redo/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/undo-redo +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/loader/container-loader/CHANGELOG.md b/packages/loader/container-loader/CHANGELOG.md index b67d08d8355d..d22c1a971b12 100644 --- a/packages/loader/container-loader/CHANGELOG.md +++ b/packages/loader/container-loader/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/container-loader +## 2.41.0 + +Dependency updates only. + ## 2.40.0 ### Minor Changes diff --git a/packages/loader/driver-utils/CHANGELOG.md b/packages/loader/driver-utils/CHANGELOG.md index b68b0402401b..42f4f461cc9c 100644 --- a/packages/loader/driver-utils/CHANGELOG.md +++ b/packages/loader/driver-utils/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/driver-utils +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/loader/test-loader-utils/CHANGELOG.md b/packages/loader/test-loader-utils/CHANGELOG.md index 43fda27c09de..3187d2bce6d7 100644 --- a/packages/loader/test-loader-utils/CHANGELOG.md +++ b/packages/loader/test-loader-utils/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-private/test-loader-utils +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/runtime/container-runtime-definitions/CHANGELOG.md b/packages/runtime/container-runtime-definitions/CHANGELOG.md index f06d5c8aa442..a1cb294b4a36 100644 --- a/packages/runtime/container-runtime-definitions/CHANGELOG.md +++ b/packages/runtime/container-runtime-definitions/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/container-runtime-definitions +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/runtime/container-runtime/CHANGELOG.md b/packages/runtime/container-runtime/CHANGELOG.md index 11752f10be8b..2cea7cdb65f7 100644 --- a/packages/runtime/container-runtime/CHANGELOG.md +++ b/packages/runtime/container-runtime/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/container-runtime +## 2.41.0 + +Dependency updates only. + ## 2.40.0 ### Minor Changes diff --git a/packages/runtime/datastore-definitions/CHANGELOG.md b/packages/runtime/datastore-definitions/CHANGELOG.md index 9775bb2d8bf0..359c07ac4e07 100644 --- a/packages/runtime/datastore-definitions/CHANGELOG.md +++ b/packages/runtime/datastore-definitions/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/datastore-definitions +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/runtime/datastore/CHANGELOG.md b/packages/runtime/datastore/CHANGELOG.md index 50cc1ba295f6..1eea08439fb1 100644 --- a/packages/runtime/datastore/CHANGELOG.md +++ b/packages/runtime/datastore/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/datastore +## 2.41.0 + +Dependency updates only. + ## 2.40.0 ### Minor Changes diff --git a/packages/runtime/id-compressor/CHANGELOG.md b/packages/runtime/id-compressor/CHANGELOG.md index e6329be9b5e7..0e9151895067 100644 --- a/packages/runtime/id-compressor/CHANGELOG.md +++ b/packages/runtime/id-compressor/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/id-compressor +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/runtime/runtime-definitions/CHANGELOG.md b/packages/runtime/runtime-definitions/CHANGELOG.md index 3222c3cd5f8c..b3e392e6fd53 100644 --- a/packages/runtime/runtime-definitions/CHANGELOG.md +++ b/packages/runtime/runtime-definitions/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/runtime-definitions +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/runtime/runtime-utils/CHANGELOG.md b/packages/runtime/runtime-utils/CHANGELOG.md index 0f6c049b2a02..df0e30166b0a 100644 --- a/packages/runtime/runtime-utils/CHANGELOG.md +++ b/packages/runtime/runtime-utils/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/runtime-utils +## 2.41.0 + +Dependency updates only. + ## 2.40.0 ### Minor Changes diff --git a/packages/runtime/test-runtime-utils/CHANGELOG.md b/packages/runtime/test-runtime-utils/CHANGELOG.md index 56aab0625341..030d7f916ada 100644 --- a/packages/runtime/test-runtime-utils/CHANGELOG.md +++ b/packages/runtime/test-runtime-utils/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/test-runtime-utils +## 2.41.0 + +Dependency updates only. + ## 2.40.0 ### Minor Changes diff --git a/packages/service-clients/azure-client/CHANGELOG.md b/packages/service-clients/azure-client/CHANGELOG.md index fc5f0c66300b..27a14f9fa5e8 100644 --- a/packages/service-clients/azure-client/CHANGELOG.md +++ b/packages/service-clients/azure-client/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/azure-client +## 2.41.0 + +Dependency updates only. + ## 2.40.0 ### Minor Changes diff --git a/packages/service-clients/end-to-end-tests/azure-client/CHANGELOG.md b/packages/service-clients/end-to-end-tests/azure-client/CHANGELOG.md index 5e198fc8db44..396888902071 100644 --- a/packages/service-clients/end-to-end-tests/azure-client/CHANGELOG.md +++ b/packages/service-clients/end-to-end-tests/azure-client/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/azure-end-to-end-tests +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/service-clients/end-to-end-tests/odsp-client/CHANGELOG.md b/packages/service-clients/end-to-end-tests/odsp-client/CHANGELOG.md index 70e4859a71cc..33d1d9d82d2c 100644 --- a/packages/service-clients/end-to-end-tests/odsp-client/CHANGELOG.md +++ b/packages/service-clients/end-to-end-tests/odsp-client/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-experimental/odsp-end-to-end-tests +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/service-clients/odsp-client/CHANGELOG.md b/packages/service-clients/odsp-client/CHANGELOG.md index 0008e30a7fe8..50acfe7fdac3 100644 --- a/packages/service-clients/odsp-client/CHANGELOG.md +++ b/packages/service-clients/odsp-client/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-experimental/odsp-client +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/service-clients/tinylicious-client/CHANGELOG.md b/packages/service-clients/tinylicious-client/CHANGELOG.md index 38708baf6a24..b6b6873d4b03 100644 --- a/packages/service-clients/tinylicious-client/CHANGELOG.md +++ b/packages/service-clients/tinylicious-client/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/tinylicious-client +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/test/functional-tests/CHANGELOG.md b/packages/test/functional-tests/CHANGELOG.md index ace9a2d52470..ed8dabde6334 100644 --- a/packages/test/functional-tests/CHANGELOG.md +++ b/packages/test/functional-tests/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-internal/functional-tests +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/test/local-server-stress-tests/CHANGELOG.md b/packages/test/local-server-stress-tests/CHANGELOG.md index 5a051a346ccb..c1c5e06b721a 100644 --- a/packages/test/local-server-stress-tests/CHANGELOG.md +++ b/packages/test/local-server-stress-tests/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-internal/local-server-stress-tests +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/test/local-server-tests/CHANGELOG.md b/packages/test/local-server-tests/CHANGELOG.md index 087873598853..9211564ced2a 100644 --- a/packages/test/local-server-tests/CHANGELOG.md +++ b/packages/test/local-server-tests/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-internal/local-server-tests +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/test/mocha-test-setup/CHANGELOG.md b/packages/test/mocha-test-setup/CHANGELOG.md index 4e3fd35649b6..b0a218ba647f 100644 --- a/packages/test/mocha-test-setup/CHANGELOG.md +++ b/packages/test/mocha-test-setup/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-internal/mocha-test-setup +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/test/snapshots/CHANGELOG.md b/packages/test/snapshots/CHANGELOG.md index 799c56322e6c..937711f30ebb 100644 --- a/packages/test/snapshots/CHANGELOG.md +++ b/packages/test/snapshots/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-internal/test-snapshots +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/test/stochastic-test-utils/CHANGELOG.md b/packages/test/stochastic-test-utils/CHANGELOG.md index a947e6da173d..a70199bfc65f 100644 --- a/packages/test/stochastic-test-utils/CHANGELOG.md +++ b/packages/test/stochastic-test-utils/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-private/stochastic-test-utils +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/test/test-driver-definitions/CHANGELOG.md b/packages/test/test-driver-definitions/CHANGELOG.md index 3ac971275d07..72e96044db73 100644 --- a/packages/test/test-driver-definitions/CHANGELOG.md +++ b/packages/test/test-driver-definitions/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-internal/test-driver-definitions +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/test/test-drivers/CHANGELOG.md b/packages/test/test-drivers/CHANGELOG.md index 1e8d07f01ad5..d7c7b14591bc 100644 --- a/packages/test/test-drivers/CHANGELOG.md +++ b/packages/test/test-drivers/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-private/test-drivers +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/test/test-end-to-end-tests/CHANGELOG.md b/packages/test/test-end-to-end-tests/CHANGELOG.md index 65307f4035c5..120b2f5424aa 100644 --- a/packages/test/test-end-to-end-tests/CHANGELOG.md +++ b/packages/test/test-end-to-end-tests/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-private/test-end-to-end-tests +## 2.41.0 + +Dependency updates only. + ## 2.40.0 ### Minor Changes diff --git a/packages/test/test-pairwise-generator/CHANGELOG.md b/packages/test/test-pairwise-generator/CHANGELOG.md index 9fec1083eb88..80cb837033d5 100644 --- a/packages/test/test-pairwise-generator/CHANGELOG.md +++ b/packages/test/test-pairwise-generator/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-private/test-pairwise-generator +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/test/test-service-load/CHANGELOG.md b/packages/test/test-service-load/CHANGELOG.md index e9330be7c609..8c81df0ca1d6 100644 --- a/packages/test/test-service-load/CHANGELOG.md +++ b/packages/test/test-service-load/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-internal/test-service-load +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/test/test-utils/CHANGELOG.md b/packages/test/test-utils/CHANGELOG.md index 65871e9847eb..247c97cb22a8 100644 --- a/packages/test/test-utils/CHANGELOG.md +++ b/packages/test/test-utils/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/test-utils +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/test/test-version-utils/CHANGELOG.md b/packages/test/test-version-utils/CHANGELOG.md index 2b51e699157a..989da3839d4a 100644 --- a/packages/test/test-version-utils/CHANGELOG.md +++ b/packages/test/test-version-utils/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-private/test-version-utils +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/tools/changelog-generator-wrapper/CHANGELOG.md b/packages/tools/changelog-generator-wrapper/CHANGELOG.md index 807a8b9f567d..540e38a3d45b 100644 --- a/packages/tools/changelog-generator-wrapper/CHANGELOG.md +++ b/packages/tools/changelog-generator-wrapper/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-private/changelog-generator-wrapper +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/tools/devtools/devtools-browser-extension/CHANGELOG.md b/packages/tools/devtools/devtools-browser-extension/CHANGELOG.md index c7484c6518e3..1e6b6ad7e7b0 100644 --- a/packages/tools/devtools/devtools-browser-extension/CHANGELOG.md +++ b/packages/tools/devtools/devtools-browser-extension/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-internal/devtools-browser-extension +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/tools/devtools/devtools-core/CHANGELOG.md b/packages/tools/devtools/devtools-core/CHANGELOG.md index b66a69afc755..968abaea0b7d 100644 --- a/packages/tools/devtools/devtools-core/CHANGELOG.md +++ b/packages/tools/devtools/devtools-core/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/devtools-core +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/tools/devtools/devtools-test-app/CHANGELOG.md b/packages/tools/devtools/devtools-test-app/CHANGELOG.md index 7ce22c7f70cb..7d4e48674e30 100644 --- a/packages/tools/devtools/devtools-test-app/CHANGELOG.md +++ b/packages/tools/devtools/devtools-test-app/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-private/devtools-test-app +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/tools/devtools/devtools-view/CHANGELOG.md b/packages/tools/devtools/devtools-view/CHANGELOG.md index a95689ba2858..2bd940d2a356 100644 --- a/packages/tools/devtools/devtools-view/CHANGELOG.md +++ b/packages/tools/devtools/devtools-view/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-internal/devtools-view +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/tools/devtools/devtools/CHANGELOG.md b/packages/tools/devtools/devtools/CHANGELOG.md index e7add893eba3..4b187248fa72 100644 --- a/packages/tools/devtools/devtools/CHANGELOG.md +++ b/packages/tools/devtools/devtools/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/devtools +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/tools/fetch-tool/CHANGELOG.md b/packages/tools/fetch-tool/CHANGELOG.md index 39895a7af61f..fd723d838c7a 100644 --- a/packages/tools/fetch-tool/CHANGELOG.md +++ b/packages/tools/fetch-tool/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-tools/fetch-tool +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/tools/fluid-runner/CHANGELOG.md b/packages/tools/fluid-runner/CHANGELOG.md index 65bd8783168a..0a04a3ecb429 100644 --- a/packages/tools/fluid-runner/CHANGELOG.md +++ b/packages/tools/fluid-runner/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/fluid-runner +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/tools/replay-tool/CHANGELOG.md b/packages/tools/replay-tool/CHANGELOG.md index dad4db1b47a1..ea34bbf66729 100644 --- a/packages/tools/replay-tool/CHANGELOG.md +++ b/packages/tools/replay-tool/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-internal/replay-tool +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/utils/odsp-doclib-utils/CHANGELOG.md b/packages/utils/odsp-doclib-utils/CHANGELOG.md index e334da23e773..a8ca3e1d82ce 100644 --- a/packages/utils/odsp-doclib-utils/CHANGELOG.md +++ b/packages/utils/odsp-doclib-utils/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/odsp-doclib-utils +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/utils/telemetry-utils/CHANGELOG.md b/packages/utils/telemetry-utils/CHANGELOG.md index fa26f3353c00..969d4a26b669 100644 --- a/packages/utils/telemetry-utils/CHANGELOG.md +++ b/packages/utils/telemetry-utils/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/telemetry-utils +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/packages/utils/tool-utils/CHANGELOG.md b/packages/utils/tool-utils/CHANGELOG.md index b8724427c609..68c4947451e4 100644 --- a/packages/utils/tool-utils/CHANGELOG.md +++ b/packages/utils/tool-utils/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluidframework/tool-utils +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. diff --git a/tools/markdown-magic/CHANGELOG.md b/tools/markdown-magic/CHANGELOG.md index 789d6c013a5d..60da7c656080 100644 --- a/tools/markdown-magic/CHANGELOG.md +++ b/tools/markdown-magic/CHANGELOG.md @@ -1,5 +1,9 @@ # @fluid-tools/markdown-magic +## 2.41.0 + +Dependency updates only. + ## 2.40.0 Dependency updates only. From 6430dbc75bb7857a4c67c32c327b627da4a2a996 Mon Sep 17 00:00:00 2001 From: Tyler Butler Date: Tue, 27 May 2025 13:03:49 -0700 Subject: [PATCH 7/7] new package manual fixup --- packages/dds/legacy-dds/CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/dds/legacy-dds/CHANGELOG.md b/packages/dds/legacy-dds/CHANGELOG.md index 13886b733914..d359c8755523 100644 --- a/packages/dds/legacy-dds/CHANGELOG.md +++ b/packages/dds/legacy-dds/CHANGELOG.md @@ -1,3 +1,5 @@ # @fluid-private/legacy-dds ## 2.41.0 + +New package.