Skip to content

Latest commit

 

History

History
587 lines (392 loc) · 33.8 KB

CHANGELOG.md

File metadata and controls

587 lines (392 loc) · 33.8 KB

@fluidframework/sequence

2.3.0

Dependency updates only.

2.2.0

Minor Changes

  • The PropertyManager class and related functions and properties are deprecated (#22183) cbba69554f

    The PropertyManager class, along with the propertyManager properties and addProperties 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.

2.1.0

Dependency updates only.

2.0.0-rc.5.0.0

Minor Changes

  • 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.

2.0.0-rc.4.0.0

Minor Changes

  • 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 as SharedStringClass.

  • Deprecated members of IFluidHandle are split off into new IFluidHandleInternal interface 96872186d0

    Split IFluidHandle into two interfaces, IFluidHandle and IFluidHandleInternal. Code depending on the previously deprecated members of IFluidHandle can access them by using toFluidHandleInternal from @fluidframework/runtime-utils/legacy.

    External implementation of the IFluidHandle interface are not supported: this change makes the typing better convey this using the ErasedType pattern. Any existing and previously working, and now broken, external implementations of IFluidHandle 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.

2.0.0-rc.3.0.0

Major Changes

  • 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.

2.0.0-rc.2.0.0

Minor Changes

  • 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.

2.0.0-rc.1.0.0

Minor Changes

  • 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 an IntervalType as a parameter is now being removed. The new signature is called without the type parameter and takes the start, end, and properties 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 new searchForMarker 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 of true 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 and IFluidSerializer 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.

2.0.0-internal.8.0.0

Major Changes

  • sequence: Some function return types are now void instead of any 9a451d4946

    The return types of some functions have changed from any to void because the projects are now being compiled with the noImplicitAny 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 new obliterateRange 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 and Serializable types from @fluidframework/datastore-definitions now require a generic parameter and if that type is any or unknownwill return a new result JsonableTypeWith<> that more accurately represents the limitation of serialization.

    Additional modifications:

    • Jsonable's TReplacement parameter default has also been changed from void to never, which now disallows void.
    • Unrecognized primitive types like symbol are now filtered to never 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 an any default that meant values were Serializable<any> (i.e. any), but now Serializable<any> is JsonableTypeWith<IFluidHandle> which may be problematic for reading or writing. Preferred correction is to specify the value type but casting through any 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 from SharedSegmentSequence.annotateRange and SharedString.annotateMarker
    • the function SharedString.annotateMarkerNotifyConsensus

    In merge-tree, removed the following APIs:

    • ICombiningOp
    • the combiningOp field from IMergeTreeAnnotateMsg
    • the op argument from BaseSegment.addProperties, PropertiesManager.addProperties, and ReferencePosition.addProperties
    • the enum variant PropertiesRollback.Rewrite.

    This functionality was largely unused and had no test coverage.

  • 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.

2.0.0-internal.7.4.0

Minor Changes

  • sequence: change and changeProperties are now a single method (#18676) 12c83d2696

    Instead 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 new start and end values for the interval, and the properties field should be an object containing the new properties for the interval. Either the endpoints field or the properties field can be omitted, and if neither are present, change will return undefined.

    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 from IntervalCollection has been deprecated. This functionality is moved to the OverlappingIntervalsIndex. 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 and nextInterval APIs from IntervalCollection have been deprecated. These functions are moved to the EndpointIndex. 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 include SharedSegmentSequence.annotateRange and SharedString.annotateMarker. SharedString.annotateMarkerNotifyConsensus has also been deprecated, because it is related to combining ops. This functionality had no test coverage and was largely unused.

2.0.0-internal.7.3.0

Dependency updates only.

2.0.0-internal.7.2.0

Minor Changes

  • 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.

2.0.0-internal.7.1.0

Minor Changes

  • sequence: IntervalCollection.add's intervalType is now deprecated (#17165) a8ea26c9d6

    The intervalType parameter is being removed from IntervalCollection.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, the change method (with the updated signature) will be used. The id of the interval is not included in the object passed to change, but is instead passed as the first parameter to change.

    Examples:

    • Change interval endpoints: change(intervalId, { start: 3, end: 4 })
    • Change interval properties: change(intervalId, { props: { a: c } })
  • 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

2.0.0-internal.7.0.0

Major Changes

  • 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.
  • 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 and compareEnds from IIntervalHelpers 871b3493dd

    These methods are redudant with the functions IInterval.compareStart and IInterval.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.

2.0.0-internal.6.4.0

Dependency updates only.

2.0.0-internal.6.3.0

Minor Changes

  • 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

2.0.0-internal.6.2.0

Minor Changes

  • 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.

2.0.0-internal.6.1.0

Dependency updates only.

2.0.0-internal.6.0.0

Major Changes

  • 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.

2.0.0-internal.5.4.0

Minor Changes

  • Some interval-related APIs are deprecated (#16573) 82de148126

    The following APIs are now deprecated from IntervalCollection:

    • findOverlappingIntervals and gatherIterationResults - these functions are moved to the OverlappingIntervalsIndex. 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 and CreateForwardIteratorWithStartPosition - 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 and nextInterval - These functionalities are moved to the EndpointIndex. 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);

2.0.0-internal.5.3.0

Dependency updates only.

2.0.0-internal.5.2.0

Minor Changes

  • 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.

2.0.0-internal.5.1.0

Minor Changes

  • New APIs for interval querying by range (#15837) 2a4242e1b5

    SharedString now supports querying intervals whose start/end-points fall in a specified range.

2.0.0-internal.5.0.0

Major Changes

  • The following types have been removed: IntervalCollection, CompressedSerializedInterval, 8b242fdc79 IntervalCollectionIterator, and ISerializedIntervalCollectionV2. These types were deprecated in version 2.0.0-internal.4.4.0.

2.0.0-internal.4.4.0

Minor Changes

  • IntervalCollection has been deprecated in favor of an interface (IIntervalCollection) containing its public API. (#15774) 8c6e76ab75 Several types transitively referenced by IntervalCollection implementation details have also been deprecated: CompressedSerializedInterval, IntervalCollectionIterator, and ISerializedIntervalCollectionV2.
  • 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: IntervalCollections now have an attachIndex and detachIndex API for interval querying. (#15683) f5db26a122

2.0.0-internal.4.1.0

Minor Changes

  • 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.