Contents
- 🌳 SharedTree DDS Changes
- Bug fix: revert preconditions no longer cause document corruption and other errors (#28317)
- Optimize memory use of arrays when using ForestTypeOptimized (#27386)
- createIndependentTreeAlpha no longer has the unused TSchema type parameter (#28349)
- 🐛 Bug Fixes
- Point-in-time load failures now release container resources reliably (#28291)
- Reject reverts across schema changes (#28320)
- Record node property read types now include undefined (#28163)
- Preserve custom commit metadata when applying serialized changes (#28330)
- Legacy API Changes
- Remove legacy direct ID compressor lifecycle APIs (#27559)
- Remove direct ID range finalization from mock runtime APIs (#27559)
- Other Changes
- The Quill views now use quill-next and no longer need a DOM at import time (#28318)
🌳 SharedTree DDS Changes
Bug fix: revert preconditions no longer cause document corruption and other errors (#28317)
Before this release, when a SharedTree client specified a constraint as a precondition for a revert and (whether or not a revert was performed) such a constraint was violated, that client could later error during the rebasing of its shared branches (when processing peer changes) or local branches and was liable to generate invalid edits that would cause document corruption in the meantime.
Change details
Commit: b4384d7
Affected packages:
- @fluidframework/tree
- fluid-framework
⬆️ Table of contents
Optimize memory use of arrays when using ForestTypeOptimized (#27386)
ForestTypeOptimized now more efficiently deduplicates structural information for adjacent children in array nodes after edits. For arrays of small, uniformly shaped subtrees, such as PlainText, this reduces fragmentation and can reduce memory use by approximately 60%.
Change details
Commit: 0735ff5
Affected packages:
- @fluidframework/tree
- fluid-framework
⬆️ Table of contents
createIndependentTreeAlpha no longer has the unused TSchema type parameter (#28349)
The unused TSchema type parameter has been removed from createIndependentTreeAlpha. Calls that explicitly supply a type argument to createIndependentTreeAlpha must remove it.
createIndependentTreeBeta keeps its deprecated type parameter temporarily for compatibility, but the type parameter continues to have no effect. Callers should omit it.
Change details
Commit: 071fa2a
Affected packages:
- @fluidframework/tree
- fluid-framework
⬆️ Table of contents
🐛 Bug Fixes
Point-in-time load failures now release container resources reliably (#28291)
Failed point-in-time loads now dispose their temporary containers, including when the container becomes unavailable during read-only setup or operation replay. Cancellation and lifecycle errors are preserved while the container resources and event listeners are cleaned up.
Change details
Commit: 7a88746
Affected packages:
- @fluidframework/container-loader
⬆️ Table of contents
Reject reverts across schema changes (#28320)
UntypedTreeViewAlpha.revertTo() now throws a usage error if any commit being reverted contains a schema change. The operation leaves the document unchanged, preserving transaction atomicity for commits that contain both schema and data changes. You can still revert data changes made after a schema upgrade by targeting the revision of that upgrade or a later revision.
Change details
Commit: ca6f67c
Affected packages:
- @fluidframework/tree
- fluid-framework
⬆️ Table of contents
Record node property read types now include undefined (#28163)
Reading a property from a record node is now typed as T | undefined instead of T, matching the existing runtime behavior when the key is absent. Consumers must narrow the result before using it as T.
const value = record.foo;
if (value !== undefined) {
// Use value as T.
}This is a bug fix to the @beta record node APIs: the previous typing incorrectly claimed that reading any key would produce a value, which could result in unexpected undefined values at runtime.
Note that this does not change what a record node can store; entries are still always defined. Assigning undefined to a key continues to remove that entry, as before.
Change details
Commit: 2de794b
Affected packages:
- @fluidframework/tree
- fluid-framework
⬆️ Table of contents
Preserve custom commit metadata when applying serialized changes (#28330)
Changes returned by LocalChangeMetadata.getChange() now include the commit's custom metadata, including metadata from nested transactions. Applying these changes to another view preserves that metadata in its branch history.
Change details
Commit: 89dc735
Affected packages:
- @fluidframework/tree
- fluid-framework
⬆️ Table of contents
Legacy API Changes
Remove legacy direct ID compressor lifecycle APIs (#27559)
The legacy-beta entrypoint no longer exports createIdCompressor, deserializeIdCompressor, serializeIdCompressor, createSessionId, IdCreationRange, or the SerializedIdCompressor* types. These APIs expose Fluid runtime implementation and persistence details and are now internal. IIdCompressor and its compressed ID types remain available.
Change details
Commit: bee7b1a
Affected packages:
- @fluidframework/id-compressor
⬆️ Table of contents
Remove direct ID range finalization from mock runtime APIs (#27559)
MockContainerRuntime.finalizeIdRange is now private. Mock runtimes continue to finalize ID ranges automatically when processing allocation messages. Derived mock runtimes that customize message processing can use the protected maybeProcessIdAllocationMessage method to process allocation messages without depending on internal ID compressor types.
Change details
Commit: bee7b1a
Affected packages:
- @fluidframework/test-runtime-utils
⬆️ Table of contents
Other Changes
The Quill views now use quill-next and no longer need a DOM at import time (#28318)
The Quill-based views now depend on quill-next instead of quill, and on @quill-next/delta-es instead of quill-delta. Unlike quill, quill-next does not access the DOM when it is imported. You no longer need to set up JSDOM before you import this package in Node.js tests or server-side code.
If your application imports Quill assets, such as theme stylesheets, from quill, import them from quill-next instead.
Change details
Commit: 8c7da38
Affected packages:
- @fluidframework/quill-react
⬆️ Table of contents
🛠️ Start Building Today!
Please continue to engage with us on GitHub Discussion and Issue pages as you adopt Fluid Framework!