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.
Dependency updates only.
-
Update to TypeScript 5.4 (#21214) 0e6256c722
Update package implementations to use TypeScript 5.4.5.
-
sequence: Stop ISharedString extending SharedObject (#21067) 47465f4b12
ISharedString no longer extends SharedSegmentSequence and instead extends the new ISharedSegmentSequence, which may be missing some APIs.
Attempt to migrate off the missing APIs, but if that is not practical, request they be added to ISharedSegmentSequence and cast to SharedSegmentSequence as a workaround temporally.
-
SharedString now uses ISharedObjectKind and does not export the factory 96872186d0
Most users of
SharedString
should be unaffected as long as they stick to the factory patterns supported by ISharedObjectKind. If the actual class type is needed it can be found asSharedStringClass
. -
Deprecated members of IFluidHandle are split off into new IFluidHandleInternal interface 96872186d0
Split IFluidHandle into two interfaces,
IFluidHandle
andIFluidHandleInternal
. Code depending on the previously deprecated members of IFluidHandle can access them by usingtoFluidHandleInternal
from@fluidframework/runtime-utils/legacy
.External implementation of the
IFluidHandle
interface are not supported: this change makes the typing better convey this using theErasedType
pattern. Any existing and previously working, and now broken, external implementations ofIFluidHandle
should still work at runtime, but will need some unsafe type casts to compile. Such handle implementation may break in the future and thus should be replaced with use of handles produced by the Fluid Framework client packages.
-
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.
-
container-definitions: ILoaderOptions no longer accepts arbitrary key/value pairs (#19306) 741926e225
ILoaderOptions has been narrowed to the specific set of supported loader options, and may no longer be used to pass arbitrary key/value pairs through to the runtime.
-
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
-
sequence: Remove the signature of IntervalCollection.add that takes a type parameter (#18916) e5b463cc8b
The previously deprecated signature of
IntervalCollection.add
that takes anIntervalType
as a parameter is now being removed. The new signature is called without the type parameter and takes thestart
,end
, andproperties
parameters as a single object. -
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: Unify the change and changeProperties methods (#18981) 31ce11010a
Instead of having two separate APIs to modify an interval's endpoints and properties, combine both into the same method, IntervalCollection.change. Change is called with a string id value as the first parameter, and an object containing the start value, the end value, and/or the properties, depending on the desired modifications to the interval. Start and end must both be either defined or undefined.
The old functionality and signatures were deprecated in the internal.7.4.0 minor release.
-
shared-object-base: SharedObject processGCDataCore now takes IFluidSerializer rather than SummarySerializer (#18803) 396b8e9738
This change should be a no-op for consumers, and
SummarySerializer
andIFluidSerializer
expose the same consumer facing APIs. This change just makes our APIs more consistent by only using interfaces, rather than a mix of interfaces and concrete implementations.
-
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.
-
datastore-definitions: Jsonable and Serializable now require a generic parameter 9a451d4946
The
Jsonable
andSerializable
types from @fluidframework/datastore-definitions now require a generic parameter and if that type isany
orunknown
will return a new resultJsonableTypeWith<>
that more accurately represents the limitation of serialization.Additional modifications:
Jsonable
'sTReplacement
parameter default has also been changed fromvoid
tonever
, which now disallowsvoid
.- Unrecognized primitive types like
symbol
are now filtered tonever
instead of{}
. - Recursive types with arrays (
[]
) are now supported.
Serializable
is commonly used for DDS values and now requires more precision when using them. For example SharedMatrix (unqualified) has anany
default that meant values wereSerializable<any>
(i.e.any
), but nowSerializable<any>
isJsonableTypeWith<IFluidHandle>
which may be problematic for reading or writing. Preferred correction is to specify the value type but casting throughany
may provide a quick fix. -
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
-
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.
-
sequence:
change
andchangeProperties
are now a single method (#18676) 12c83d2696Instead of having two separate methods to change the endpoints of an interval and the properties, they have been combined into a single method that will change the endpoints, properties, or both, depending on the arguments passed in. The signature of this combined method is now updated as well.
The new way to use the change method is to call it with an interval id as the first parameter and an object containing the desired portions of the interval to update as the second parameter. For the object parameter, the
endpoints
field should be an object containing the newstart
andend
values for the interval, and theproperties
field should be an object containing the new properties for the interval. Either theendpoints
field or theproperties
field can be omitted, and if neither are present,change
will returnundefined
.The new usage of the change method is as follows:
Change interval endpoints:
change(id, { endpoints: { start: 1, end: 4 } });
Change interval properties:
change(id { props: { a: 1 } });
Change interval endpoints and properties:
change(id, { endpoints: { start: 1, end: 4 }, props: { a: 1 } });
-
sequence: Deprecated findOverlappingIntervals API (#18036) 52b864ea42
The
findOverlappingIntervals
API fromIntervalCollection
has been deprecated. This functionality is moved to theOverlappingIntervalsIndex
. Users should independently attach the index to the collection and utilize the API accordingly, for instance:const overlappingIntervalsIndex = createOverlappingIntervalsIndex(sharedString); collection.attachIndex(overlappingIntervalsIndex); const result = overlappingIntervalsIndex.findOverlappingIntervals(start, end);
-
sequence: Deprecated previousInterval and nextInterval APIs (#18060) 05fb45d26f
The
previousInterval
andnextInterval
APIs fromIntervalCollection
have been deprecated. These functions are moved to theEndpointIndex
. Users should independently attach the index to the collection and utilize the API accordingly, for instance:const endpointIndex = createEndpointIndex(sharedString); collection.attachIndex(endpointIndex); const result1 = endpointIndex.previousInterval(pos); const result2 = endpointIndex.nextInterval(pos);
-
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.
Dependency updates only.
-
sequence: SharedString.findTile is now deprecated (#17832) 428234a2fb
findTile was previously deprecated on client and mergeTree, but was not on SharedString. Usage is mostly the same, with the exception that the parameter 'startPos' must be a number and cannot be undefined.
-
sequence: IntervalCollection.add's intervalType is now deprecated (#17165) a8ea26c9d6
The
intervalType
parameter is being removed fromIntervalCollection.add
. The new usage requires calling add with an object containing each of the desired parameters. Example:add({start: 0, end: 1, props: { a: b }})
The signature of
IntervalCollection.change
is also being updated to an object containing the desired parameters, instead of the existing list of parameters. In addition,changeProperties
will be removed, so in order to change the properties of an interval, thechange
method (with the updated signature) will be used. The id of the interval is not included in the object passed tochange
, but is instead passed as the first parameter tochange
.Examples:
- Change interval endpoints:
change(intervalId, { start: 3, end: 4 })
- Change interval properties:
change(intervalId, { props: { a: c } })
- Change interval endpoints:
-
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.
-
sequence: IIntervalCollection.change must specify both endpoints 871b3493dd
IIntervalCollection.change no longer allows an endpoint to be undefined. undefined can unintentionally result in end < start. To adapt to this change, simply use the current position of the endpoint that is not intended to change.
-
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
compareStarts
andcompareEnds
fromIIntervalHelpers
871b3493ddThese methods are redudant with the functions
IInterval.compareStart
andIInterval.compareEnd
respectively. -
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.
-
deprecate compareStarts and compareEnds on IIntervalHelpers (#17127) a830eca757
these functions will be removed in a future version. use the methods IInterval.compareStart and IInterval.compareEnd respectively instead
-
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
-
Deprecate SharedSequence, SubSequence, and IJSONRunSegment (#16829) 0cf2b6d909
The types SharedSequence, SubSequence, and IJSONRunSegment are being deprecated and moved.
They are now, and will continue to be exposed from the @fluid-experimental/sequence-deprecated package.
New usages of these types should not be added, but they may be necessary for migration.
Dependency updates only.
-
IntervalConflictResolver removed 8abce8cdb4
IntervalConflictResolver has been removed. Any lingering usages in application code can be removed as well. This change also marks APIs deprecated in #14318 as internal.
-
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
-
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.
-
Some interval-related APIs are deprecated (#16573) 82de148126
The following APIs are now deprecated from
IntervalCollection
:-
findOverlappingIntervals
andgatherIterationResults
- these functions are moved to theOverlappingIntervalsIndex
. Users are advised to independently attach the index to the collection and utilize the API accordingly, for instance:const overlappingIntervalsIndex = createOverlappingIntervalsIndex(client, helpers); collection.attachIndex(overlappingIntervalsIndex); const result1 = overlappingIntervalsIndex.findOverlappingIntervals(start, end); const result2 = []; overlappingIntervalsIndex.gatherIterationResults(result2, true);
-
CreateBackwardIteratorWithEndPosition
,CreateBackwardIteratorWithStartPosition
,CreateForwardIteratorWithEndPosition
andCreateForwardIteratorWithStartPosition
- only the default iterator will be supported in the future, and it will no longer preserve sequence order.Equivalent functionality to these four methods is provided by
IOverlappingIntervalIndex.gatherIterationResults
. -
previousInterval
andnextInterval
- These functionalities are moved to theEndpointIndex
. Users are advised to independently attach the index to the collection and utilize the API accordingly, for instance:const endpointIndex = createEndpointIndex(client, helpers); collection.attachIndex(endpointIndex); const result1 = endpointIndex.previousInterval(pos); const result2 = endpointIndex.nextInterval(pos);
-
Dependency updates only.
-
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
-
slide parameter in changeInterval event (#16117) 46f74fe568
The changeInterval event listener has a new parameter "slide" that is true if the event was caused by the interval endpoint sliding from a removed range.
-
New APIs for interval querying by range (#15837) 2a4242e1b5
SharedString now supports querying intervals whose start/end-points fall in a specified range.
- The following types have been removed:
IntervalCollection
,CompressedSerializedInterval
, 8b242fdc79IntervalCollectionIterator
, andISerializedIntervalCollectionV2
. These types were deprecated in version 2.0.0-internal.4.4.0.
IntervalCollection
has been deprecated in favor of an interface (IIntervalCollection
) containing its public API. (#15774) 8c6e76ab75 Several types transitively referenced byIntervalCollection
implementation details have also been deprecated:CompressedSerializedInterval
,IntervalCollectionIterator
, andISerializedIntervalCollectionV2
.- 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
- Experimental feature: An initial implementation of "interval stickiness". This experimental feature can only be used by (#15423) 8ba75c508f enabling the feature flag "intervalStickinessEnabled".
- New feature:
IntervalCollection
s now have anattachIndex
anddetachIndex
API for interval querying. (#15683) f5db26a122
-
IntervalConflictResolver deprecation (#15089) 38345841a7
In
SharedString
, interval conflict resolvers have been unused since this change, which added support for multiple intervals at the same position. As such, any existing usages can be removed. Related APIs have been deprecated and will be removed in an upcoming release.