Dependency updates only.
-
Deprecated properties have been removed from IRuntimeStorageService and IContainerStorageService (#25708) 82c936ed28
The following deprecated properties have been removed from
IRuntimeStorageService:createBlobdisposedisposeddownloadSummarygetSnapshotgetSnapshotTreegetVersionspoliciesuploadSummaryWithContext
The following deprecated properties have been removed from
IContainerStorageService:disposedisposeddownloadSummary
Please see this Github issue for more details.
Dependency updates only.
Dependency updates only.
-
minVersionForCollabis now available onIFluidDataStoreContext(#25130) 2566772d24minVersionForCollabis now passed down from theContainerRuntimeto the Datastore layer where it is made available forSharedObjectconstruction. DDSes may optionally consume this value and use it to determine which sets of feature flags should be enabled.- @fluidframework/datastore:
FluidDataStoreRuntime- ExposesminVersionForCollab. - @fluidframework/runtime-definitions:
IFluidDataStoreContext- Exposes optional memberminVersionForCollab. SeeFluidDataStoreContextfor an example implementation. - @fluidframework/test-runtime-utils:
MockFluidDataStoreContext,MockFluidDataStoreRuntime- ExposesminVersionForCollabeither via a getter or as a readonly field.
Note that the new implementations are optional fields and in some cases accept
undefined. This is needed for layer compatibility, and in a future release these members will no longer be optional. - @fluidframework/datastore:
Dependency updates only.
Dependency updates only.
-
Introduced new interface "IRuntimeStorageService" to replace "IDocumentStorageService" between Runtime and DataStore layers (#25057) 92012de557
Added an interface
IRuntimeStorageServicewhich will replaceIDocumentStorageServicein theDataStorelayer. This is exposed by theRuntimelayer to theDataStorelayer. This new interface will only contain properties that are needed and used by theDataStorelayer.The following properties from
IRuntimeStorageServiceare deprecated as they are not needed by theDataStorelayer. These be removed in a future release:disposeddisposepoliciesgetSnapshotTreegetSnapshotgetVersionscreateBlobuploadSummaryWithContextdownloadSummary
Dependency updates only.
Dependency updates only.
Dependency updates only.
Dependency updates only.
Dependency updates only.
Dependency updates only.
Dependency updates only.
Dependency updates only.
Dependency updates only.
-
The process and processDocumentSchemaOp functions have been removed (#24018) bc35d543d5
processhas been replaced byprocessMessagesfrom the following:FluidDataStoreRuntimeIDeltaHandlerIFluidDataStoreChannelMockFluidDataStoreRuntimeMockDeltaConnection
processDocumentSchemaOphas been replaced byprocessDocumentSchemaMessagesfromDocumentsSchemaController.See the deprecation release note for more details.
Dependency updates only.
Dependency updates only.
Dependency updates only.
-
The createDataStoreWithProps APIs on ContainerRuntime and IContainerRuntimeBase have been removed (#22996) bd243fb292
ContainerRuntime.createDataStoreWithPropsandIContainerRuntimeBase.createDataStoreWithPropswere deprecated in version 0.25.0 and have been removed.Replace uses of these APIs with
PureDataObjectFactory.createInstanceWithDataStoreand pass in props via theinitialStateparameter.These changes were originally announced in version 0.25.0. See the following issues for more details:
Dependency updates only.
Dependency updates only.
-
Synchronous Child Datastore Creation (#23143) 3426b434df
This feature introduces a new pattern for creating datastores synchronously within the Fluid Framework. It allows for the synchronous creation of a child datastore from an existing datastore, provided that the child datastore is available synchronously via the existing datastore's registry and that the child's factory supports synchronous creation. This method also ensures strong typing for the consumer.
In this context, "child" refers specifically to the organization of factories and registries, not to any hierarchical or hosting relationship between datastores. The parent datastore does not control the runtime behaviors of the child datastore beyond its creation.
The synchronous creation of child datastores enhances the flexibility of datastore management within the Fluid Framework. It ensures type safety and provides a different way to manage datastores within a container. However, it is important to consider the overhead associated with datastores, as they are stored, summarized, garbage collected, loaded, and referenced independently. This overhead should be justified by the scenario's requirements.
Datastores offer increased capabilities, such as the ability to reference them via handles, allowing multiple references to exist and enabling those references to be moved, swapped, or changed. Additionally, datastores are garbage collected after becoming unreferenced, which can simplify final cleanup across clients. This is in contrast to subdirectories in a shared directory, which do not have native capabilities for referencing or garbage collection but are very low overhead to create.
Synchronous creation relies on both the factory and the datastore to support it. This means that asynchronous operations, such as resolving handles, some browser API calls, consensus-based operations, or other asynchronous tasks, cannot be performed during the creation flow. Therefore, synchronous child datastore creation is best limited to scenarios where the existing asynchronous process cannot be used, such as when a new datastore must be created in direct response to synchronous user input.
- Synchronous Creation: Allows for the immediate creation of child datastores without waiting for asynchronous operations.
- Strong Typing: Ensures type safety and better developer experience by leveraging TypeScript's type system.
In this example, we demonstrate how to support creating a child datastore synchronously from a parent datastore.
/** * This is the parent DataObject, which is also a datastore. It has a * synchronous method to create child datastores, which could be called * in response to synchronous user input, like a key press. */ class ParentDataObject extends DataObject { createChild(name: string): ChildDataStore { assert( this.context.createChildDataStore !== undefined, "this.context.createChildDataStore", ); const { entrypoint } = this.context.createChildDataStore( ChildDataStoreFactory.instance, ); const dir = this.root.createSubDirectory("children"); dir.set(name, entrypoint.handle); entrypoint.setProperty("childValue", name); return entrypoint; } getChild(name: string): IFluidHandle<ChildDataStore> | undefined { const dir = this.root.getSubDirectory("children"); return dir?.get<IFluidHandle<ChildDataStore>>(name); } }
For a complete example see the following test: https://github.com/microsoft/FluidFramework/blob/main/packages/test/local-server-tests/src/test/synchronousDataStoreCreation.spec.ts
-
Changes to the batchBegin and batchEnd events on ContainerRuntime (#22791) d252af539a
The 'batchBegin'/'batchEnd' events on ContainerRuntime indicate when a batch is beginning or finishing being processed. The
contentsproperty on the event argumentopis not useful or relevant when reasoning over incoming changes at the batch level. Accordingly, it has been removed from theopevent argument. -
"Remove
IFluidParentContext.ensureNoDataModelChangesand its implementations (#22842) 3aff19a462IFluidParentContext.ensureNoDataModelChangeshas been removed. prior deprecation commitMockFluidDataStoreContext.ensureNoDataModelChangeshas also been removed.
-
The inbound and outbound properties have been removed from IDeltaManager (#22282) 45a57693f2
The inbound and outbound properties were deprecated in version 2.0.0-rc.2.0.0 and have been removed from
IDeltaManager.IDeltaManager.inboundcontained functionality that could break core runtime features such as summarization and processing batches if used improperly. Data loss or corruption could occur whenIDeltaManger.inbound.pause()orIDeltaManager.inbound.resume()were called.Similarly,
IDeltaManager.outboundcontained functionality that could break core runtime features such as generation of batches and chunking. Data loss or corruption could occur whenIDeltaManger.inbound.pause()orIDeltaManager.inbound.resume()were called.- Alternatives to
IDeltaManager.inbound.on("op", ...)areIDeltaManager.on("op", ...) - Alternatives to calling
IDeltaManager.inbound.pause,IDeltaManager.outbound.pauseforIContainerdisconnect useIContainer.disconnect. - Alternatives to calling
IDeltaManager.inbound.resume,IDeltaManager.outbound.resumeforIContainerreconnect useIContainer.connect.
- Alternatives to
-
The op event on IFluidDataStoreRuntimeEvents and IContainerRuntimeBaseEvents is emitted at a different time (#22840) 2e5b969d3a
Previously, in versions 2.4 and below, the
opevent was emitted immediately after an op was processed and before the next op was processed.In versions 2.5.0 and beyond, the
opevent will be emitted after an op is processed, but it may not be immediate. In addition, other ops in a batch may be processed before the op event is emitted for a particular op. -
The process function on IFluidDataStoreChannel, IDeltaHandler, MockFluidDataStoreRuntime and MockDeltaConnection is now deprecated (#22840) 2e5b969d3a
The process function on IFluidDataStoreChannel, IDeltaHandler, MockFluidDataStoreRuntime and MockDeltaConnection is now deprecated. It has been replaced with a new function
processMessages, which will be called to process multiple messages instead of a single one on the channel. This is part of a feature called "Op bunching", where contiguous ops of a given type and to a given data store / DDS are bunched and sent together for processing.Implementations of
IFluidDataStoreChannelandIDeltaHandlermust now also implementprocessMessages. For reference implementations, seeFluidDataStoreRuntime::processMessagesandSharedObjectCore::attachDeltaHandler.
Dependency updates only.
Dependency updates only.
-
gcThrowOnTombstoneUsage and gcTombstoneEnforcementAllowed are deprecated (#21992) b2bfed3a62
These properties
gcThrowOnTombstoneUsageandgcTombstoneEnforcementAllowedhave been deprecated inIFluidParentContextandContainerRuntime. These were included in certain garbage collection (GC) telemetry to identify whether the corresponding features have been enabled. These features are now enabled by default and this information is added to the "GarbageCollectorLoaded" telemetry.Also, the following Garbage collection runtime options and configs have been removed. They were added during GC feature development to roll out and control functionalities. The corresponding features are on by default and can no longer be disabled or controlled:
GC runtime options removed:
gcDisableThrowOnTombstoneLoaddisableDataStoreSweep
GC configs removed:
"Fluid.GarbageCollection.DisableTombstone""Fluid.GarbageCollection.ThrowOnTombstoneUsage""Fluid.GarbageCollection.DisableDataStoreSweep"
Dependency updates only.
-
fluid-framework: Type Erase ISharedObjectKind (#21081) 78f228e370
A new type,
SharedObjectKindis added as a type erased version ofISharedObjectKindandDataObjectClass.This type fills the role of both
ISharedObjectKindandDataObjectClassin the@public"declarative API" exposed in thefluid-frameworkpackage.This allows several types referenced by
ISharedObjectKindto be made@alphaas they should only need to be used by legacy code and users of the unstable/alpha/legacy "encapsulated API".Access to these now less public types should not be required for users of the
@public"declarative API" exposed in thefluid-frameworkpackage, but can still be accessed for those who need them under the/legacyimport paths. The full list of such types is:SharedTreeas exported from@fluidframwork/tree: It is still exported as@publicfromfluid-frameworkasSharedObjectKind.ISharedObjectKind: See newSharedObjectKindtype for use in@publicAPIs.ISharedObjectIChannelIChannelAttributesIChannelFactoryIExperimentalIncrementalSummaryContextIGarbageCollectionDataISummaryStatsISummaryTreeWithStatsITelemetryContextIDeltaManagerErasedIFluidDataStoreRuntimeEventsIFluidHandleContextIProvideFluidHandleContext
Removed APIs:
DataObjectClass: Usages replaced withSharedObjectKind.LoadableObjectClass: Replaced withSharedObjectKind.LoadableObjectClassRecord: Replaced withRecord<string, SharedObjectKind>.
-
Update to TypeScript 5.4 (#21214) 0e6256c722
Update package implementations to use TypeScript 5.4.5.
-
runtime-definitions: Remove deprecated 'get' and 'serialize' members on the ITelemetryContext interface (#21009) c0483b49a3
The
ITelemetryContextinterface was not intended to allow getting properties that had been added to it, so it is now "write-only". Internal usage within FluidFramework should use the newITelemetryContextExt. -
runtime-definitions: Make IInboundSignalMessage alpha and readonly (#21226) 1df91dd844
Users of
IInboundSignalMessagewill need to import it from the/legacyscope and should not mutate it. Only users of existing@alphaAPIs likeIFluidDataStoreRuntimeshould be able to use this type, so it should not introduce new/legacyusage.
-
Deprecated members of IFluidHandle are split off into new IFluidHandleInternal interface 96872186d0
Split IFluidHandle into two interfaces,
IFluidHandleandIFluidHandleInternal. Code depending on the previously deprecated members of IFluidHandle can access them by usingtoFluidHandleInternalfrom@fluidframework/runtime-utils/legacy.External implementation of the
IFluidHandleinterface are not supported: this change makes the typing better convey this using theErasedTypepattern. Any existing and previously working, and now broken, external implementations ofIFluidHandleshould 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.
-
runtime-definitions: IFluidDataStoreContext no longer raises events, IFluidDataStoreChannel needs to implement new method 97d68aa06b
This change could be ignored, unless you have custom implementations of IFluidDataStoreChannel or listened to IFluidDataStoreContext's "attached" or "attaching" events
IFluidDataStoreContext no longer raises events. Instead, it will call IFluidDataStoreChannel.setAttachState(). If you are implementing data store runtme, please implement setAttachState() API and rely on this flow. If you are not data store developer, and were reaching out to context, then please stop doing it - the only purpose of IFluidDataStoreContext is communication with IFluidDataStoreChannel. Context object should not be exposed by impplementers of IFluidDataStoreChannel. If you are using stock implementations of IFluidDataStoreChannel, you can listen for same events on IFluidDataStoreRuntime instead.
-
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.
-
runtime-definitions: ITelemetryContext: Functions
getandserializeare now deprecated (#19409) 42696564ddITelemetryContext is to be used only for instrumentation, not for attempting to read the values already set by other code. This is important because this public interface may soon use FF's should-be internal logging instrumentation types, which we reserve the right to expand (to support richer instrumentation). In that case, we would not be able to do so in a minor release if they're used as an "out" type like the return type for
get.There is no replacement given in terms of immediate programmatic access to this data. The expected use pattern is something like this:
- Some code creates a concrete implementation of
ITelemetryContextand passes it around - Callers use the "write" functions on the interface to build up the context
- The originator uses a function like
serialize(on the concrete impl, not exposed on the interface any longer) and passes the result to a logger - The data is inspected along with other logs in whatever telemetry pipeline is used by the application (or Debug Tools, etc)
- Some code creates a concrete implementation of
-
container-runtime: New feature: ID compression for DataStores & DDSs (#19859) 51f0d3db73
- A new API IContainerRuntimeBase.generateDocumentUniqueId() is exposed. This API will opportunistically generate IDs in short format (non-negative numbers). If it can't achieve that, it will return UUID strings. UUIDs generated will have low entropy in groups and will compress well. It can be leveraged anywhere in container where container unique IDs are required. I.e. any place that uses uuid() and stores data in container is likely candidate to start leveraging this API.
- Data store internal IDs (IDs that are auto generated by FF system) will opportunistically be generated in shorter form. Data stores created in detached container will always have short IDs, data stores created in attached container will opportunistically be short (by using newly added IContainerRuntimeBase.generateDocumentUniqueId() capability)
- Similar DDS names will be opportunistically short (same considerations for detached DDS vs. attached DDS)
- Container level ID Compressor can now be enabled with delay. With such setting, only new IContainerRuntimeBase.generateDocumentUniqueId() is exposed (ID Compressor is not exposed in such case, as leveraging any of its other capabilities requires future container sessions to load ID Compressor on container load, for correctness reasons). Once Container establishes connection and any changes are made in container, newly added API will start generating more compact IDs (in most cases).
- DDS names can no longer start with "_" symbol - this is reserved for FF needs. I've validated that's not an issue for AzureClient (it only creates root object by name, everything else is referred by handle). Our main internal partners almost never use named DDSs (I can find only 4 instances in Loop).
- Data store internal IDs could collide with earlier used names data stores. Earlier versions of FF framework (before DataStore aliasing feature was added) allowed customers to supply IDs for data stores. And thus, files created with earlier versions of framework could have data store IDs that will be similar to names FF will use for newly created data stores ("A", ... "Z", "a"..."z", "AA", etc.). While such collision is possible, it's very unlikely (almost impossible) if user-provided names were at least 4-5 characters long.
- If application runs to these problems, or wants to reduce risks, consider disabling ID compressor via IContainerRuntimeOptions.enableRuntimeIdCompressor = "off".
- IContainerRuntime.createDetachedRootDataStore() is removed. Please use IContainerRuntime.createDetachedDataStore and IDataStore.trySetAlias() instead
- IContainerRuntimeOptions.enableRuntimeIdCompressor has been changes from boolean to tri-state.
-
driver-definitions: repositoryUrl removed from IDocumentStorageService (#19522) 90eb3c9d33
The
repositoryUrlmember ofIDocumentStorageServicewas unused and always equal to the empty string. It has been removed. -
runtime-definitions: FlushMode.Immediate is deprecated (#19963) 861500c1e2
FlushMode.Immediateis deprecated and will be removed in the next major version. It should not be used. UseFlushMode.TurnBasedinstead, which is the default. See https://github.com/microsoft/FluidFramework/tree/main/packages/runtime/container-runtime/src/opLifecycle#how-batching-works for more information -
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.
-
runtime-definitions: Deprecated ID compressor related types have been removed. (#19031) de92ef0ac5
This change should be a no-op for consumers, as these types were almost certainly unused and are also available in the standalone package id-compressor (see #18749).
-
container-definitions: Added containerMetadata prop on IContainer interface (#19142) d0d77f3516
Added
containerMetadataprop on IContainer interface. -
runtime-definitions: Moved ISignalEnvelope interface to core-interfaces (#19142) d0d77f3516
The
ISignalEnvelopeinterface has been moved to the @fluidframework/core-interfaces package.
-
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.
-
garbage collection: Deprecate addedGCOutboundReference (#18456) 0619cf8a41
The
addedGCOutboundReferenceproperty on IDeltaConnection, IFluidDataStoreContext, and MockFluidDataStoreRuntime is now deprecated.The responsibility of adding outbound references (for Garbage Collection tracking) is moving up to the ContainerRuntime. Previously, DDSes themselves were responsible to detect and report added outbound references (via a handle being stored), so these interfaces (and corresponding mock) needed to plumb that information up to the ContainerRuntime layer where GC sits. This is no longer necessary so they're being removed in an upcoming release.
-
container-runtime-definitions: Removed resolveHandle and IFluidHandleContext from ContainerRuntime interfaces 9a451d4946
The
IContainerRuntime.resolveHandle(...)method and theIContainerRuntimeBase.IFluidHandleContextproperty have been removed. Please remove all usage of these APIs.See Removing-IFluidRouter.md for more details.
-
container-runtime: Removed request pattern from ContainerRuntime, IRuntime, and IContainerRuntimeBase 9a451d4946
The
request(...)method andIFluidRouterproperty have been removed from the following places:ContainerRuntimeIRuntimeIContainerRuntimeBase
Please use the
IRuntime.getEntryPoint()method to get the runtime's entry point.See Removing-IFluidRouter.md for more details.
-
runtime-definitions: Removed IFluidRouter from IFluidDataStoreChannel and FluidDataStoreRuntime 9a451d4946
The
IFluidRouterproperty has been removed fromIFluidDataStoreChannelandFluidDataStoreRuntime. Please migrate all usage to theIFluidDataStoreChannel.entryPointAPI.See Removing-IFluidRouter.md for more details.
-
runtime-definitions: Removed request and IFluidRouter from IDataStore 9a451d4946
The
requestmethod andIFluidRouterproperty have been removed fromIDataStore. Please migrate all usage to theIDataStore.entryPointAPI.See Removing-IFluidRouter.md for more details.
-
container-runtime/runtime-definitions:
IdCompressorand related types deprecated (#18749) 6f070179deIdCompressorand related types from the @fluidframework/container-runtime and @fluidframework/runtime-definitions packages have been deprecated. They can now be found in a new package, @fluidframework/id-compressor.The
IdCompressorclass is deprecated even in the new package. Consumers should use the interfaces,IIdCompressorandIIdCompressorCore, in conjunction with the factory functioncreateIdCompressorinstead.
Dependency updates only.
Dependency updates only.
Dependency updates only.
-
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.
-
runtime-definitions:
bindToContextAPI removed 871b3493ddbindToContexthas been removed fromFluidDataStoreRuntime,IFluidDataStoreContextandMockFluidDataStoreContext. This has been deprecated for several releases and cannot be used anymore. -
DEPRECATED: resolveHandle and IFluidHandleContext deprecated on IContainerRuntime 871b3493dd
The
resolveHandle(...)andget IFluidHandleContext()methods have been deprecated on the following interfaces:IContainerRuntimeIContainerRuntimeBase
Requesting arbitrary URLs has been deprecated on
IContainerRuntime. Please migrate all usage to theIContainerRuntime.getEntryPoint()method if trying to obtain the application-specified root object.See Removing-IFluidRouter.md for more details.
-
container-definitions: IContainer's and IDataStore's IFluidRouter capabilities are deprecated 871b3493dd
IFluidRouterandrequest({ url: "/" })onIContainerandIDataStoreare deprecated and will be removed in a future major release. Please migrate all usage to the appropriategetEntryPoint()orentryPointAPIs.See Removing-IFluidRouter.md for more details.
-
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
-
test-utils: provideEntryPoint is required 871b3493dd
The optional
provideEntryPointmethod has become required on a number of constructors. A value will need to be provided to the following classes:BaseContainerRuntimeFactoryRuntimeFactoryContainerRuntime(constructor andloadRuntime)FluidDataStoreRuntime
See testContainerRuntimeFactoryWithDefaultDataStore.ts for an example implemtation of
provideEntryPointfor ContainerRuntime. See pureDataObjectFactory.ts for an example implementation ofprovideEntryPointfor DataStoreRuntime.Subsequently, various
entryPointandgetEntryPoint()endpoints have become required. Please see containerRuntime.ts for example implementations of these APIs.For more details, see Removing-IFluidRouter.md
-
Minimum TypeScript version now 5.1.6 871b3493dd
The minimum supported TypeScript version for Fluid 2.0 clients is now 5.1.6.
-
Upcoming: The type of the logger property/param in various APIs will be changing (#17350) 27284bcda3
- @fluidframework/runtime-definitions
IFluidDataStoreRuntime.loggerwill be re-typed asITelemetryBaseLogger
- @fluidframework/odsp-driver
protected OdspDocumentServiceFactoryCore.createDocumentServiceCore's parameterodspLoggerwill be re-typed asITelemetryLoggerExtprotected LocalOdspDocumentServiceFactory.createDocumentServiceCore's parameterodspLoggerwill be re-typed asITelemetryLoggerExt
Additionally, several of @fluidframework/telemetry-utils's exports are being marked as internal and should not be consumed outside of other FF packages.
- @fluidframework/runtime-definitions
Dependency updates only.
-
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
Dependency updates only.
-
Request APIs deprecated from many places 8abce8cdb4
The
requestAPI (associated with theIFluidRouterinterface) has been deprecated on a number of classes and interfaces. The following are impacted:IRuntimeandContainerRuntimeIFluidDataStoreRuntimeandFluidDataStoreRuntimeIFluidDataStoreChannelMockFluidDataStoreRuntimeTestFluidObject
Please migrate usage to the corresponding
entryPointorgetEntryPoint()of the object. The value for these "entryPoint" related APIs is determined from factories (forIRuntimeandIFluidDataStoreRuntime) via theinitializeEntryPointmethod. If no method is passed to the factory, the correspondingentryPointandgetEntryPoint()will be undefined.For an example implementation of
initializeEntryPoint, see pureDataObjectFactory.ts.More information of the migration off the request pattern, and current status of its removal, is documented in Removing-IFluidRouter.md.
-
IContainer's and IDataStore's IFluidRouter capabilities are deprecated. 8abce8cdb4
- The
requestfunction taking an arbitrary URL and headers is deprecated - However, an overload taking only
{ url: "/" }is not, for back-compat purposes during the migration from the request pattern to using entryPoint.
Requesting "/" is an idiom some consumers of Fluid Framework have used in their own
requestHandlers (passed toContainerRuntime.loadRuntimeandFluidDataStoreRuntime's constructor). The ability to access the "root" or "entry point" of a Container / DataStore will presently be provided byIContainer.getEntryPointandIDataStore.entryPoint. However these are still optional, so a temporary workaround is needed.See Removing-IFluidRouter.md for more info on this transition from request to entryPoint.
Suppose you have these variables:
const container: IContainer = ...; const dataStore: IDataStore = ...;
Before:
container.request({ url, headers }); dataStore.request({ url, headers });
After:
// Assume there is an interface like this in the app's Container implementation interface CustomUrlRouter { doRequestRouting(request: { url: string; headers: Record<string, any>; }): any; } // Prerequisite: Pass a requestHandler to ContainerRuntime.loadRuntime that routes "/" // to some root object implementing CustomUrlRouter const containerRouter: CustomUrlRouter = await container.request({ "/" }); containerRouter.doRequestRouting({ url, headers }); // Prerequisite: Pass a requestHandler to FluidDataStoreRuntime's constructor that routes "/" // to some root object implementing CustomUrlRouter const dataStoreRouter: CustomUrlRouter = await dataStore.request({ "/" }); dataStoreRouter.doRequestRouting({ url, headers });
In the next major release,
getEntryPointandentryPointshould be mandatory and available for use. Then you may replace each callrequest({ url: "/" })with a call to get the entryPoint using these functions/properties. - The
-
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.
-
IDeltaManager members disposed and dispose() removed 8abce8cdb4
IDeltaManager members disposed and dispose() were deprecated in 2.0.0-internal.5.3.0 and have now been removed.
Dependency updates only.
Dependency updates only.
Dependency updates only.
Dependency updates only.
-
GC interfaces removed from runtime-definitions 8b242fdc79
The following interfaces available in
@fluidframework/runtime-definitionswere deprecated in 2.0.0-internal.4.1.0 and are now removed.IGarbageCollectionNodeDataIGarbageCollectionStateIGarbageCollectionSnapshotDataIGarbageCollectionSummaryDetailsLegacy
Dependency updates only.
-
GC interfaces removed from runtime-definitions (#14750) 60274eacab
The following interfaces available in
@fluidframework/runtime-definitionsare internal implementation details and have been deprecated for public use. They will be removed in an upcoming release.IGarbageCollectionNodeDataIGarbageCollectionStateIGarbageCollectionSnapshotDataIGarbageCollectionSummaryDetailsLegacy