-
Compilation no longer fails when building with TypeScript's libCheck option (#22923) a1b4cdd45e
When compiling code using Fluid Framework with TypeScript's
libCheck
(meaning without skipLibCheck), two compile errors can be encountered:> tsc node_modules/@fluidframework/merge-tree/lib/client.d.ts:124:18 - error TS2368: Type parameter name cannot be 'undefined'. 124 walkSegments<undefined>(handler: ISegmentAction<undefined>, start?: number, end?: number, accum?: undefined, splitRange?: boolean): void; ~~~~~~~~~ node_modules/@fluidframework/tree/lib/util/utils.d.ts:5:29 - error TS7016: Could not find a declaration file for module '@ungap/structured-clone'. 'node_modules/@ungap/structured-clone/esm/index.js' implicitly has an 'any' type. Try `npm i --save-dev @types/ungap__structured-clone` if it exists or add a new declaration (.d.ts) file containing `declare module '@ungap/structured-clone';` 5 import structuredClone from "@ungap/structured-clone"; ~~~~~~~~~~~~~~~~~~~~~~~~~
The first error impacts projects using TypeScript 5.5 or greater and either of the
fluid-framework
or@fluidframework/merge-tree
packages. The second error impacts projects using thenoImplicitAny
tsconfig setting and thefluid-framework
or@fluidframework/tree
packages.Both errors have been fixed.
This should allow
libCheck
to be reenabled in any impacted projects.
-
Several MergeTree
Client
Legacy APIs are now deprecated (#22629) 0b59ae89e0To reduce exposure of the
Client
class in the merge-tree package, several types have been deprecated. These types directly or indirectly expose the merge-treeClient
class.Most of these types are not meant to be used directly, and direct use is not supported:
- AttributionPolicy
- IClientEvents
- IMergeTreeAttributionOptions
- SharedSegmentSequence
- SharedStringClass
Some of the deprecations are class constructors. In those cases, we plan to replace the class with an interface which has an equivalent API. Direct instantiation of these classes is not currently supported or necessary for any supported scenario, so the change to an interface should not impact usage. This applies to the following types:
- SequenceInterval
- SequenceEvent
- SequenceDeltaEvent
- SequenceMaintenanceEvent
Dependency updates only.
-
The PropertyManager class and related functions and properties are deprecated (#22183) cbba69554f
The
PropertyManager
class, along with thepropertyManager
properties andaddProperties
functions on segments and intervals, are not intended for external use. These elements will be removed in a future release for the following reasons:- There are no scenarios where they need to be used directly.
- Using them directly will cause eventual consistency problems.
- Upcoming features will require modifications to these mechanisms.
-
Deprecate segmentGroups and ack on ISegment (#22212) 2b0199dae3
The
SegmentGroupCollection
class, along with thesegmentGroups
property andack
function on segments, are not intended for external use. These elements will be removed in a future release for the following reasons:- There are no scenarios where they need to be used directly.
- Using them directly will cause eventual consistency problems.
- Upcoming features will require modifications to these mechanisms.
-
The Marker.fromJSONObject and TextSegment.fromJSONObject argument types have been corrected (#21684) d2d472bd88
Previously, the arguments of
Marker.fromJSONObject
andTextSegment.fromJSONObject
were of typeany
. However, at runtime only certain types were expected and using other types would cause errors.Now, the argument for the Marker implementation is of type
IJSONSegment
and the argument for the TextSegment implementation is of typestring | IJSONSegment
. This reflects actual runtime support.This change should have no impact on existing code unless the code is using incorrect types. Such code already does not function and should be corrected.
-
Update to TypeScript 5.4 (#21214) 0e6256c722
Update package implementations to use TypeScript 5.4.5.
Dependency updates only.
-
Packages now use package.json "exports" and require modern module resolution 97d68aa06b
Fluid Framework packages have been updated to use the package.json "exports" field to define explicit entry points for both TypeScript types and implementation code.
This means that using Fluid Framework packages require the following TypeScript settings in tsconfig.json:
"moduleResolution": "Node16"
with"module": "Node16"
"moduleResolution": "Bundler"
with"module": "ESNext"
We recommend using Node16/Node16 unless absolutely necessary. That will produce transpiled JavaScript that is suitable for use with modern versions of Node.js and Bundlers. See the TypeScript documentation for more information regarding the module and moduleResolution options.
Node10 moduleResolution is not supported; it does not support Fluid Framework's API structuring pattern that is used to distinguish stable APIs from those that are in development.
Dependency updates only.
-
Updated server dependencies (#19122) 25366b4229
The following Fluid server dependencies have been updated to the latest version, 3.0.0. See the full changelog.
- @fluidframework/gitresources
- @fluidframework/server-kafka-orderer
- @fluidframework/server-lambdas
- @fluidframework/server-lambdas-driver
- @fluidframework/server-local-server
- @fluidframework/server-memory-orderer
- @fluidframework/protocol-base
- @fluidframework/server-routerlicious
- @fluidframework/server-routerlicious-base
- @fluidframework/server-services
- @fluidframework/server-services-client
- @fluidframework/server-services-core
- @fluidframework/server-services-ordering-kafkanode
- @fluidframework/server-services-ordering-rdkafka
- @fluidframework/server-services-ordering-zookeeper
- @fluidframework/server-services-shared
- @fluidframework/server-services-telemetry
- @fluidframework/server-services-utils
- @fluidframework/server-test-utils
- tinylicious
-
Updated @fluidframework/protocol-definitions (#19122) 25366b4229
The @fluidframework/protocol-definitions dependency has been upgraded to v3.1.0. See the full changelog.
-
sequence: Remove the findTile API (#18908) 29b093e55c
The
findTile
API that was previously deprecated is now being removed. The newsearchForMarker
function provides similar functionality, and can be called with the start position, the client ID, the desired marker label to find, and the search direction, where a value oftrue
indicates a forward search.
-
sequence: Some function return types are now void instead of any 9a451d4946
The return types of some functions have changed from
any
tovoid
because the projects are now being compiled with thenoImplicitAny
TypeScript compilation option. This does not represent a logic change and only serves to make the typing of these functions more accurate. -
sequence: Add experimental support for the obliterate operation 9a451d4946
This change adds experimental support for obliterate, a form of remove that deletes concurrently inserted segments. To use, enable the
mergeTreeEnableObliterate
feature flag and call the newobliterateRange
functions.Note: this change may cause compilation errors for those attaching event listeners. As long as obliterate isn't used in current handlers, their current implementation is sound.
-
sequence: Removed Marker.hasSimpleType and made sequence operations return void 9a451d4946
Marker.hasSimpleType
was unused. Sequence operations now no longer return IMergeTree*Msg types. These types are redundant with the input. -
sequence: Removed several public exports from merge-tree and sequence 9a451d4946
The following APIs have been removed or marked internal in merge-tree and sequence. This functionality was never intended for public export.
BaseSegment.ack
Client
CollaborationWindow
compareNumbers
compareStrings
createAnnotateMarkerOp
createAnnotateRangeOp
createGroupOp
createInsertOp
createInsertSegmentOp
createRemoveRangeOp
IConsensusInfo
IConsensusValue
IMarkerModifiedAction
IMergeTreeTextHelper
LocalClientId
MergeTreeDeltaCallback
MergeTreeMaintenanceCallback
NonCollabClient
SegmentAccumulator
SegmentGroup
SegmentGroupCollection.enqueue
SegmentGroupCollection.dequeue
SegmentGroupCollection.pop
SortedSegmentSet
SortedSegmentSetItem
SortedSet
toRemovalInfo
TreeMaintenanceSequenceNumber
UniversalSequenceNumber
SharedSegmentSequence.submitSequenceMessage
-
merge-tree: Remove
IIntegerRange
9a451d4946This interface is deprecated and was not intended for public export.
-
sequence: Remove support for combining ops 9a451d4946
In sequence, removed the following APIs:
- the
combiningOp
argument fromSharedSegmentSequence.annotateRange
andSharedString.annotateMarker
- the function
SharedString.annotateMarkerNotifyConsensus
In merge-tree, removed the following APIs:
ICombiningOp
- the
combiningOp
field fromIMergeTreeAnnotateMsg
- the
op
argument fromBaseSegment.addProperties
,PropertiesManager.addProperties
, andReferencePosition.addProperties
- the enum variant
PropertiesRollback.Rewrite
.
This functionality was largely unused and had no test coverage.
- the
-
sequence: Removed several APIs 9a451d4946
The following APIs have been removed:
Client.getStackContext
SharedSegmentSequence.getStackContext
IntervalType.Nest
ReferenceType.NestBegin
ReferenceType.NestEnd
internedSpaces
RangeStackMap
refGetRangeLabels
refHasRangeLabel
refHasRangeLabels
This functionality is deprecated, has low test coverage, and is largely unused.
-
merge-tree: Remove several APIs 9a451d4946
Removed the following APIs:
Stack
clone
combine
createMap
extend
extendIfUndefined
matchProperties
This functionality is deprecated and was not intended for public export.
-
sequence: Deprecated ICombiningOp, PropertiesRollback.Rewrite, and SharedString.annotateMarkerNotifyConsensus (#18318) e67c2cac5f
The
ICombiningOp
and its usage in various APIs has been deprecated. APIs affected includeSharedSegmentSequence.annotateRange
andSharedString.annotateMarker
.SharedString.annotateMarkerNotifyConsensus
has also been deprecated, because it is related to combining ops. This functionality had no test coverage and was largely unused.
-
Deprecate BaseSegment.ack, Client, CollaborationWindow, compareNumbers, compareStrings, createAnnotateMarkerOp, createAnnotateRangeOp, createInsertOp, createInsertSegmentOp, createRemoveRangeOp, IConsensusInfo, IConsensusValue, IMarkerModifiedAction, IMergeTreeTextHelper, ISegment.ack, LocalClientId, MergeTreeDeltaCallback, MergeTreeMaintenanceCallback, NonCollabClient, SegmentAccumulator, SegmentGroup, SegmentGroupCollection.dequeue, SegmentGroupCollection.enqueue, SegmentGroupCollection.pop, SortedSegmentSet, SortedSegmentSetItem, SortedSet, toRemovalInfo, TreeMaintenanceSequenceNumber, UnassignedSequenceNumber, UniversalSequenceNumber (#17952) b762798c48
This functionality was not intended for export and will be removed in a future release.
Dependency updates only.
-
merge-tree: Deprecate Stack, clone, combine, createMap, extend, extendIfUndefined, and matchProperties (#17650) 2b12bc7e59
The following classes and functions have been deprecated. They were not intended for public export and will be removed in a future release.
- Stack
- clone
- combine
- createMap
- extend
- extendIfUndefined
- matchProperties
-
merge-tree: Deprecate IntervalType.Nest, internedSpaces, RangeStackMap, refGetRangeLabels, refHasRangeLabel, and refHasRangeLabels (#17555) e4c11874ef
The following classes and functions have been deprecated. The functionality has poor test coverage and is largely unused. They will be removed in a future release.
- IntervalType.Nest
- internedSpaces
- RangeStackMap
- refGetRangeLabels
- refHasRangeLabel
- refHasRangeLabels
-
sequence: New API for specifying spatial positioning of intervals 871b3493dd
Previously intervals were specified with only an index. Now the model is a bit more nuanced in that you can specify positions that lie before or after a given index. This makes it more clear how interval endpoints should interact with changes to the sequence. See the docs for SequencePlace for additional context.
-
Dependencies on @fluidframework/protocol-definitions package updated to 3.0.0 871b3493dd
This included the following changes from the protocol-definitions release:
- Updating signal interfaces for some planned improvements. The intention is split the interface between signals
submitted by clients to the server and the resulting signals sent from the server to clients.
- A new optional type member is available on the ISignalMessage interface and a new ISentSignalMessage interface has been added, which will be the typing for signals sent from the client to the server. Both extend a new ISignalMessageBase interface that contains common members.
- The @fluidframework/common-definitions package dependency has been updated to version 1.0.0.
- Updating signal interfaces for some planned improvements. The intention is split the interface between signals
submitted by clients to the server and the resulting signals sent from the server to clients.
-
Server upgrade: dependencies on Fluid server packages updated to 2.0.1 871b3493dd
Dependencies on the following Fluid server package have been updated to version 2.0.1:
- @fluidframework/gitresources: 2.0.1
- @fluidframework/server-kafka-orderer: 2.0.1
- @fluidframework/server-lambdas: 2.0.1
- @fluidframework/server-lambdas-driver: 2.0.1
- @fluidframework/server-local-server: 2.0.1
- @fluidframework/server-memory-orderer: 2.0.1
- @fluidframework/protocol-base: 2.0.1
- @fluidframework/server-routerlicious: 2.0.1
- @fluidframework/server-routerlicious-base: 2.0.1
- @fluidframework/server-services: 2.0.1
- @fluidframework/server-services-client: 2.0.1
- @fluidframework/server-services-core: 2.0.1
- @fluidframework/server-services-ordering-kafkanode: 2.0.1
- @fluidframework/server-services-ordering-rdkafka: 2.0.1
- @fluidframework/server-services-ordering-zookeeper: 2.0.1
- @fluidframework/server-services-shared: 2.0.1
- @fluidframework/server-services-telemetry: 2.0.1
- @fluidframework/server-services-utils: 2.0.1
- @fluidframework/server-test-utils: 2.0.1
- tinylicious: 2.0.1
-
Minimum TypeScript version now 5.1.6 871b3493dd
The minimum supported TypeScript version for Fluid 2.0 clients is now 5.1.6.
-
sequence: Remove the mergeTreeUseNewLengthCalculations flag 871b3493dd
The
mergeTreeUseNewLengthCalculations
flag has been removed, because the feature was enabled by default in 2.0.0-internal.6.0.0.
Dependency updates only.
Dependency updates only.
-
Deprecate getStackContext and associated NestBegin/End (#16877) 8e743fe1dd
Deprecate SharedSegmentSequence.getStackContext and Client.getStackContext (and the enums ReferenceType.NestBegin and NestEnd they use). This functionality is unused, poorly tested, and incurs performance overhead.
-
Remove use of @fluidframework/common-definitions (#16638) a8c81509c9
The @fluidframework/common-definitions package is being deprecated, so the following interfaces and types are now imported from the @fluidframework/core-interfaces package:
- interface IDisposable
- interface IErrorEvent
- interface IErrorEvent
- interface IEvent
- interface IEventProvider
- interface ILoggingError
- interface ITaggedTelemetryPropertyType
- interface ITelemetryBaseEvent
- interface ITelemetryBaseLogger
- interface ITelemetryErrorEvent
- interface ITelemetryGenericEvent
- interface ITelemetryLogger
- interface ITelemetryPerformanceEvent
- interface ITelemetryProperties
- type ExtendEventProvider
- type IEventThisPlaceHolder
- type IEventTransformer
- type ReplaceIEventThisPlaceHolder
- type ReplaceIEventThisPlaceHolder
- type TelemetryEventCategory
- type TelemetryEventPropertyType
-
Deprecation of findTile in favor of searchForMarker, which uses depthFirstNodeWalk to locate the nearest marker. (#16517) e928b1f185
findTile has a decent amount of buggy behavior, which leads partners who want to use it to implement workarounds for the odd behavior. searchForMarker is being introduced as a replacement. It performs the same basic functionality of searching for the nearest marker to a given start position in the indicated direction. However, it includes the start position as one of the nodes to search, so markers at the start position will be returned as the nearest marker to that position. Notably, positions 0 and length-1 will be included in the search as well, so searching forwards from position 0 or backwards from position length-1 would allow the entire string to be searched.
Dependency updates only.
-
Client.getSlideToSegment removed 8abce8cdb4
Client.getSlideToSegment was deprecated in 2.0.0-internal.5.3.0 and has been removed. Use getSlideToSegoff function instead.
-
Remove ISegment.parent 8abce8cdb4
This change removed the parent property on the ISegment interface. The property will still exist, but should not generally be used by outside consumers.
There are some circumstances where a consumer may wish to know if a segment is still in the underlying tree and were using the parent property to determine that.
Please change those checks to use the following
"parent" in segment && segment.parent !== undefined
-
merge-tree now has new length calculations by default 8abce8cdb4
The merge-tree now enables new length calculations by default and resolves some related performance bugs by making cached segment length nullable.
Hierarchy cached segment length is
undefined
if the length of all child nodes isundefined
. -
Segments Property Removed from TrackingGroup 8abce8cdb4
Tracking groups can contain more than just segments, so the deprecated segments property has been removed. Use the tracked property instead to see all tracked objects.
-
Remove unnecessary exports 8abce8cdb4
This change removes a number of interfaces in the merge tree package that are not used in the exported apis surface and therefore should not be used.
-
Upgraded typescript transpilation target to ES2020 8abce8cdb4
Upgraded typescript transpilation target to ES2020. This is done in order to decrease the bundle sizes of Fluid Framework packages. This has provided size improvements across the board for ex. Loader, Driver, Runtime etc. Reduced bundle sizes helps to load lesser code in apps and hence also helps to improve the perf.If any app wants to target any older versions of browsers with which this target version is not compatible, then they can use packages like babel to transpile to a older target.
Dependency updates only.
Dependency updates only.
-
Deprecate unnecessary exports (#16097) 9486bec0ea
This change deprecates a number of interfaces in the merge tree package that are not used in the exported apis surface and therefore should not be used.
-
Deprecate ISegment.parent (#16097) 9486bec0ea
This change deprecates the parent property on the ISegment interface. The property will still exist, but should not generally be used by outside consumers.
There are some circumstances where a consumer may wish to know if a segment is still in the underlying tree and were using the parent property to determine that.
Please change those checks to use the following
"parent" in segment && segment.parent !== undefined
-
New APIs for interval querying by range (#15837) 2a4242e1b5
SharedString now supports querying intervals whose start/end-points fall in a specified range.
Dependency updates only.
- New feature: Revertibles for SharedString and Interval provide undo-redo functionality. This includes all direct interval edits as well as string edits that indirectly affect intervals, wrapping merge-tree revertibles. (#15778) 6433cb2937
Dependency updates only.