-
fluid-framework: Type Erase ISharedObjectKind (#21081) 78f228e370
A new type,
SharedObjectKind
is added as a type erased version ofISharedObjectKind
andDataObjectClass
.This type fills the role of both
ISharedObjectKind
andDataObjectClass
in the@public
"declarative API" exposed in thefluid-framework
package.This allows several types referenced by
ISharedObjectKind
to be made@alpha
as 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-framework
package, but can still be accessed for those who need them under the/legacy
import paths. The full list of such types is:SharedTree
as exported from@fluidframwork/tree
: It is still exported as@public
fromfluid-framework
asSharedObjectKind
.ISharedObjectKind
: See newSharedObjectKind
type for use in@public
APIs.ISharedObject
IChannel
IChannelAttributes
IChannelFactory
IExperimentalIncrementalSummaryContext
IGarbageCollectionData
ISummaryStats
ISummaryTreeWithStats
ITelemetryContext
IDeltaManagerErased
IFluidDataStoreRuntimeEvents
IFluidHandleContext
IProvideFluidHandleContext
Removed APIs:
DataObjectClass
: Usages replaced withSharedObjectKind
.LoadableObjectClass
: Replaced withSharedObjectKind
.LoadableObjectClassRecord
: Replaced withRecord<string, SharedObjectKind>
.
-
tree: Added support for optional schema validation on newly inserted content in SharedTree (#21011) b14e9fa607
When defining how to view a SharedTree, an application can now specify that new content inserted into the tree should be subject to schema validation at the time it is inserted, so if it's not valid according to the stored schema in the tree an error is thrown immediately.
This can be accomplished by passing an
ITreeConfigurationOptions
argument withenableSchemaValidation
set totrue
when creating aTreeConfiguration
to use with the SharedTree.Since this feature requires additional compute when inserting new content into the tree, it is not enabled by default.
-
Update to TypeScript 5.4 (#21214) 0e6256c722
Update package implementations to use TypeScript 5.4.5.
-
fluid-framework: Remove some types from
@public
that are not needed (#21326) b629cb80b0Mark the following APIs
@alpha
instead of@public
:- IBranchOrigin
- ISequencedDocumentMessage
- ISignalMessage
- ISignalMessageBase
- ITrace
-
tree: A new tree status has been added for SharedTree nodes. (#21270) 8760e321b0
TreeStatus.Created
indicates that a SharedTree node has been constructed but not yet inserted into the tree. Constraints passed to therunTransaction
API are now marked asreadonly
. -
fluid-framework: Remove several types from
@public
scope (#21142) 983e9f09f7The following types have been moved from
@public
to@alpha
:IFluidSerializer
ISharedObjectEvents
IChannelServices
IChannelStorageService
IDeltaConnection
IDeltaHandler
These should not be needed by users of the declarative API, which is what
@public
is targeting. -
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.
-
Update to ES 2022 (#21292) 68921502f7
Update tsconfig to target ES 2022.
-
tree: Move several types into InternalTypes (#21482) 64d49dd362
The stable public API surface for Tree has been reduced. Several types have been moved into InternalTypes, indicating that they are not fully stable nor intended to be referenced by users of Tree.
- NodeBuilderData
- FieldHasDefault
- TreeNodeSchemaNonClass
- TreeArrayNodeBase
- ScopedSchemaName
- DefaultProvider
- typeNameSymbol
- InsertableObjectFromSchemaRecord
- ObjectFromSchemaRecord
- FieldHasDefaultUnsafe
- ObjectFromSchemaRecordUnsafe
- TreeObjectNodeUnsafe
- TreeFieldFromImplicitFieldUnsafe
- TreeNodeFromImplicitAllowedTypesUnsafe
- InsertableTreeNodeFromImplicitAllowedTypesUnsafe
- TreeArrayNodeUnsafe
- TreeMapNodeUnsafe
- InsertableObjectFromSchemaRecordUnsafe
- InsertableTreeFieldFromImplicitFieldUnsafe
- InsertableTypedNodeUnsafe
- NodeBuilderDataUnsafe
- NodeFromSchemaUnsafe
- FlexList
- TreeApi
Additionally a few more types which could not be moved due to technically limitations have been documented that they should be treated similarly.
- TreeNodeApi
- TreeNodeSchemaCore
- All *Unsafe type (use for construction of recursive schema).
- WithType
- AllowedTypes
- FieldSchemaUnsafe
Also to reduce confusion
type
was renamed totypeNameSymbol
, and is now only type exported.Tree.is
should be used to get type information fromTreeNodes
instead. -
tree: object node fields with statically known default values are now optional (#21193) 21eac41660
Makes object node fields with statically known default values (i.e.,
optional
andidentifier
fields) optional when creating trees, where they were previously required.Example:
class Foo extends schemaFactory.object("Foo", { name: schemaFactory.string, id: schemaFactory.identifier, nickname: schemaFactory.optional(schemaFactory.string), }) {} // Before const foo = new Foo({ name: "Bar", id: undefined, // Had to explicitly specify `undefined` to opt into default behavior nickname: undefined, // Had to explicitly specify `undefined` for optional field }); // After const foo = new Foo({ name: "Bar", // Can omit `id` and `nickname` fields, as both have statically known defaults! });
-
tree: Breaking change:
TreeStatus.Created
is nowTreeStatus.New
(#21278) 5a26346a14TreeStatus.Created
has been renamed toTreeStatus.New
. -
core-interfaces, tree: Unify
IDisposable
interfaces (#21184) cfcb827851Public APIs in
@fluidframework/tree
now useIDisposable
from@fluidframework/core-interfaces
replacingdisposeSymbol
with "dispose".IDisposable
in@fluidframework/core-interfaces
is now@sealed
indicating that third parties should not implement it to reserve the ability for Fluid Framework to extend it to includeSymbol.dispose
as a future non-breaking change. -
fluid-framework: Cleanup
fluid-framework
legacy exports (#21153) efee21c296Cleanup
fluid-framework
legacy exports to remove no longer required types.
-
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. -
Minor API fixes for "@fluidframework/tree" package. 96872186d0
Changes constructor for
FieldSchema
from public to private. Users should callmakeFieldSchema
to create instance ofFieldSchema
. -
Make several driver types no longer public b7ad7d0b55
Move the following types from
@public
to@alpha
:- ITokenClaims
- IDocumentMessage
- IClientConfiguration
- IAnyDriverError
- IDriverErrorBase
- DriverErrorTypes
DriverErrorTypes
is no longer exported from thefluid-framework
package. -
Rename
AzureMember.userName
toAzureMember.name
andIMember.userId
toIMember.id
96872186d0- Renamed
AzureMember.userName
toAzureMember.name
to establish uniform naming across odsp-client and azure-client. - Renamed
IMember.userId
toIMember.id
to align with the properties received from AFR.
- Renamed
-
fluid-framework: DDS classes are no longer publicly exported 97d68aa06b
SharedDirectory now only exports its factory and the interface type. The actual concrete classes which leak implementation details are no longer exported. Users of the
SharedDirectory
type should useISharedDirectory
.Most of other internal crufts are also hided within the API surface, such as the encoded format, ILocalValue, ICreateInfo, local op metadata types, etc.
-
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.
-
tree: Allow root editing and make TreeView parameterized over schema. 97d68aa06b
TreeView now is parameterized over the field schema instead of the root field type. This was needed to infer the correct input type when reassigning the root. Code providing an explicit type to TreeView, like
TreeView<Foo>
can usually be updated by replacing that withTreeView<typeof Foo>
. -
fluid-framework: Replace SharedObjectClass with new ISharedObjectKind type. 97d68aa06b
The static objects used as SharedObjectClass now explicitly implement the new ISharedObjectKind type. SharedObjectClass has been removed as ISharedObjectKind now fills that role. LoadableObjectCtor has been inlined as it only had one use: an external user of it can replace it with
(new (...args: any[]) => T)
. -
fluid-framework: Moved SharedMap to 'fluid-framework/legacy' 97d68aa06b
Please use SharedTree for new containers. SharedMap is supported for loading preexisting Fluid Framework 1.x containers only.
Fluid Framework 1.x users migrating to Fluid Framework 2.x will need to import SharedMap from the './legacy' import path.
import { SharedMap } from "fluid-framework/legacy";
-
fluid-framework: Make some interface members readonly 97d68aa06b
Remove unneeded mutability from some interface members.
-
fluid-framework: EventEmitterWithErrorHandling is no longer publicly exported (#19717) ae1d0be26d
EventEmitterWithErrorHandling is intended for authoring DDSes, and thus is only intended for use within the Fluid Framework client packages. It is no longer publicly exported: any users should fine their own solution or be upstreamed. EventEmitterWithErrorHandling is available for now as
@alpha
to make this migration less disrupting for any existing users. -
fluid-framework: SharedObject classes are no longer exported as public (#19717) ae1d0be26d
SharedObject
andSharedObjectCore
are intended for authoring DDSes, and thus are only intended for use within the Fluid Framework client packages. They is no longer publicly exported: any users should fine their own solution or be upstreamed.SharedObject
andSharedObjectCore
are available for now as@alpha
to make this migration less disrupting for any existing users. -
API tightening (#20012) 049de899dd
The Fluid Framework API has been clarified with tags applied to package exports. As we are working toward a clear, safe, and stable API surface, some build settings and imports may need to be adjusted.
Now: Most packages are specifying "exports" - import specifierss like
@fluidframework/foo/lib/internals
will become build errors. The fix is to use only public APIs from @fluidframework/foo.Coming soon: Build resolutions (
moduleResolution
in tsconfig compilerOptions) will need to be resolved with Node16, NodeNext, or a bundler that supports resolution of named import/export paths. Internally, some FF packages will use@fluidframework/foo/internal
import paths that allow packages to talk to each other using non-public APIs.Final stage: APIs that are not tagged @public will be removed from @fluidframework/foo imports.
-
Deprecated error-related enums have been removed (#19067) 59793302e5
Error-related enums
ContainerErrorType
,DriverErrorType
,OdspErrorType
andRouterliciousErrorType
were previously deprecated and are now removed. There are replacement object-based enumerations ofContainerErrorTypes
,DriverErrorTypes
,OdspErrorTypes
andRouterliciousErrorTypes
. Refer to the release notes of Fluid Framework version 2.0.0-internal.7.0.0 for details on the replacements. -
map, tree: DDS classes are no longer publicly exported (#19717) ae1d0be26d
SharedMap and SharedTree now only export their factories and the interface types. The actual concrete classes which leak implementation details are no longer exported. Users of the
SharedMap
type should useISharedMap
. Users of theSharedTree
type should useISharedTree
. -
tree: Minor API fixes for "@fluidframework/tree" package. (#19057) 3e0f218832
Rename
IterableTreeListContent
toIterableTreeArrayContent
, inlineTreeMapNodeBase
intoTreeMapNode
, renameTreeArrayNode.spread
toTreeArrayNode.spread
and removecreate
which was not supposed to be public (useTreeArrayNode.spread
instead). -
fluid-framework: ContainerSchema is now readonly (#19717) ae1d0be26d
The
ContainerSchema
type is intended for defining input to these packages. This should make the APIs more tolerant and thus be non-breaking, however its possible for some users ofContainerSchema
to use it in ways where this could be a breaking change: any such users should remove their mutations and/or use a different type.
Dependency updates only.
-
azure-client: Removed deprecated FluidStatic classes 9a451d4946
Several FluidStatic classes were unnecessarily exposed and were deprecated in an earlier release. They have been replaced with creation functions. This helps us keep implementations decoupled from usage which is easier to maintain and extend. It has very minimal impact on the public surface area of downstream packages. The removed classes are as follows:
AzureAudience
(useIAzureAudience
instead)TinyliciousAudience
(useITinyliciousAudience
instead)DOProviderContainerRuntimeFactory
FluidContainer
ServiceAudience
-
azure-client: Deprecated FluidStatic Classes (#18402) 589ec39de5
Several FluidStatic classes were unnecessarily exposed. They have been replaced with creation functions. This helps us keep implementations decoupled from usage which is easier to maintain and extend. It has very minimal impact on the public surface area of downstream packages. The deprecated classes are as follows:
AzureAudience
(useIAzureAudience
instead)TinyliciousAudience
(useITinyliciousAudience
instead)DOProviderContainerRuntimeFactory
FluidContainer
ServiceAudience
Dependency updates only.
Dependency updates only.
Dependency updates only.
-
Minimum TypeScript version now 5.1.6 871b3493dd
The minimum supported TypeScript version for Fluid 2.0 clients is now 5.1.6.
Dependency updates only.
Dependency updates only.
Dependency updates only.
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.
-
RootDataObject and RootDataObjectProps no longer exported from fluid-static or fluid-framework packages 8abce8cdb4
RootDataObject and RootDataObjectProps are internal implementations and not intended for direct use. Instead use IRootDataObject to refer to the root data object.
-
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.
Dependency updates only.
Dependency updates only.
Dependency updates only.
Dependency updates only.
Dependency updates only.