@fluidframework/datastore-definitions 2.0.0-dev-rc.3.0.0.254866 → 2.0.0-dev-rc.5.0.0.263932
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +44 -0
- package/api-report/datastore-definitions.api.md +5 -4
- package/dist/dataStoreRuntime.d.ts +10 -13
- package/dist/dataStoreRuntime.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/{alpha.d.ts → legacy.d.ts} +4 -2
- package/dist/public.d.ts +3 -1
- package/{dist/beta.d.ts → internal.d.ts} +2 -12
- package/{lib/beta.d.ts → legacy.d.ts} +2 -12
- package/lib/dataStoreRuntime.d.ts +10 -13
- package/lib/dataStoreRuntime.d.ts.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/{alpha.d.ts → legacy.d.ts} +4 -2
- package/lib/public.d.ts +3 -1
- package/lib/tsdoc-metadata.json +1 -1
- package/package.json +22 -18
- package/src/dataStoreRuntime.ts +11 -13
- package/src/index.ts +5 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,49 @@
|
|
|
1
1
|
# @fluidframework/datastore-definitions
|
|
2
2
|
|
|
3
|
+
## 2.0.0-rc.4.0.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- Type Erase IFluidDataStoreRuntime.deltaManager [96872186d0](https://github.com/microsoft/FluidFramework/commit/96872186d0d0f245c1fece7d19b3743e501679b6)
|
|
8
|
+
|
|
9
|
+
Make IFluidDataStoreRuntime.deltaManager have an opaque type.
|
|
10
|
+
Marks the following types which were reachable from it as alpha:
|
|
11
|
+
|
|
12
|
+
- IConnectionDetails
|
|
13
|
+
- IDeltaSender
|
|
14
|
+
- IDeltaManagerEvents
|
|
15
|
+
- IDeltaManager
|
|
16
|
+
- IDeltaQueueEvents
|
|
17
|
+
- IDeltaQueue
|
|
18
|
+
- ReadOnlyInfo
|
|
19
|
+
|
|
20
|
+
As a temporary workaround, users needing access to the full delta manager API can use the `@alpha` `toDeltaManagerInternal` API to retrieve its members, but should migrate away from requiring access to those APIs.
|
|
21
|
+
|
|
22
|
+
Implementing a custom `IFluidDataStoreRuntime` is not supported: this is now indicated by it being marked with `@sealed`.
|
|
23
|
+
|
|
24
|
+
## 2.0.0-rc.3.0.0
|
|
25
|
+
|
|
26
|
+
### Major Changes
|
|
27
|
+
|
|
28
|
+
- Packages now use package.json "exports" and require modern module resolution [97d68aa06b](https://github.com/microsoft/FluidFramework/commit/97d68aa06bd5c022ecb026655814aea222a062ae)
|
|
29
|
+
|
|
30
|
+
Fluid Framework packages have been updated to use the [package.json "exports"
|
|
31
|
+
field](https://nodejs.org/docs/latest-v18.x/api/packages.html#exports) to define explicit entry points for both
|
|
32
|
+
TypeScript types and implementation code.
|
|
33
|
+
|
|
34
|
+
This means that using Fluid Framework packages require the following TypeScript settings in tsconfig.json:
|
|
35
|
+
|
|
36
|
+
- `"moduleResolution": "Node16"` with `"module": "Node16"`
|
|
37
|
+
- `"moduleResolution": "Bundler"` with `"module": "ESNext"`
|
|
38
|
+
|
|
39
|
+
We recommend using Node16/Node16 unless absolutely necessary. That will produce transpiled JavaScript that is suitable
|
|
40
|
+
for use with modern versions of Node.js _and_ Bundlers.
|
|
41
|
+
[See the TypeScript documentation](https://www.typescriptlang.org/tsconfig#moduleResolution) for more information
|
|
42
|
+
regarding the module and moduleResolution options.
|
|
43
|
+
|
|
44
|
+
**Node10 moduleResolution is not supported; it does not support Fluid Framework's API structuring pattern that is used
|
|
45
|
+
to distinguish stable APIs from those that are in development.**
|
|
46
|
+
|
|
3
47
|
## 2.0.0-rc.2.0.0
|
|
4
48
|
|
|
5
49
|
### Minor Changes
|
|
@@ -5,11 +5,10 @@
|
|
|
5
5
|
```ts
|
|
6
6
|
|
|
7
7
|
import type { AttachState } from '@fluidframework/container-definitions';
|
|
8
|
+
import type { ErasedType } from '@fluidframework/core-interfaces';
|
|
8
9
|
import type { FluidObject } from '@fluidframework/core-interfaces';
|
|
9
10
|
import type { IAudience } from '@fluidframework/container-definitions';
|
|
10
|
-
import type { IDeltaManager } from '@fluidframework/container-definitions';
|
|
11
11
|
import type { IDisposable } from '@fluidframework/core-interfaces';
|
|
12
|
-
import type { IDocumentMessage } from '@fluidframework/protocol-definitions';
|
|
13
12
|
import type { IEvent } from '@fluidframework/core-interfaces';
|
|
14
13
|
import type { IEventProvider } from '@fluidframework/core-interfaces';
|
|
15
14
|
import type { IExperimentalIncrementalSummaryContext } from '@fluidframework/runtime-definitions';
|
|
@@ -88,6 +87,9 @@ export interface IDeltaHandler {
|
|
|
88
87
|
}
|
|
89
88
|
|
|
90
89
|
// @public
|
|
90
|
+
export type IDeltaManagerErased = ErasedType<"@fluidframework/container-definitions.IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>">;
|
|
91
|
+
|
|
92
|
+
// @public @sealed
|
|
91
93
|
export interface IFluidDataStoreRuntime extends IEventProvider<IFluidDataStoreRuntimeEvents>, IDisposable {
|
|
92
94
|
addChannel(channel: IChannel): void;
|
|
93
95
|
readonly attachState: AttachState;
|
|
@@ -100,8 +102,7 @@ export interface IFluidDataStoreRuntime extends IEventProvider<IFluidDataStoreRu
|
|
|
100
102
|
readonly connected: boolean;
|
|
101
103
|
createChannel(id: string | undefined, type: string): IChannel;
|
|
102
104
|
// (undocumented)
|
|
103
|
-
readonly deltaManager:
|
|
104
|
-
ensureNoDataModelChanges<T>(callback: () => T): T;
|
|
105
|
+
readonly deltaManager: IDeltaManagerErased;
|
|
105
106
|
readonly entryPoint: IFluidHandle<FluidObject>;
|
|
106
107
|
getAudience(): IAudience;
|
|
107
108
|
getChannel(id: string): Promise<IChannel>;
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
|
-
import type { AttachState, IAudience
|
|
6
|
-
import type { FluidObject, IDisposable, IEvent, IEventProvider, IFluidHandle, IFluidHandleContext, ITelemetryBaseLogger } from "@fluidframework/core-interfaces";
|
|
5
|
+
import type { AttachState, IAudience } from "@fluidframework/container-definitions";
|
|
6
|
+
import type { FluidObject, IDisposable, IEvent, IEventProvider, IFluidHandle, IFluidHandleContext, ITelemetryBaseLogger, ErasedType } from "@fluidframework/core-interfaces";
|
|
7
7
|
import type { IIdCompressor } from "@fluidframework/id-compressor";
|
|
8
|
-
import type {
|
|
8
|
+
import type { IQuorumClients, ISequencedDocumentMessage } from "@fluidframework/protocol-definitions";
|
|
9
9
|
import type { IInboundSignalMessage } from "@fluidframework/runtime-definitions";
|
|
10
10
|
import type { IChannel } from "./channel.js";
|
|
11
11
|
/**
|
|
@@ -18,8 +18,14 @@ export interface IFluidDataStoreRuntimeEvents extends IEvent {
|
|
|
18
18
|
(event: "signal", listener: (message: IInboundSignalMessage, local: boolean) => void): any;
|
|
19
19
|
(event: "connected", listener: (clientId: string) => void): any;
|
|
20
20
|
}
|
|
21
|
+
/**
|
|
22
|
+
* Manages the transmission of ops between the runtime and storage.
|
|
23
|
+
* @public
|
|
24
|
+
*/
|
|
25
|
+
export type IDeltaManagerErased = ErasedType<"@fluidframework/container-definitions.IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>">;
|
|
21
26
|
/**
|
|
22
27
|
* Represents the runtime for the data store. Contains helper functions/state of the data store.
|
|
28
|
+
* @sealed
|
|
23
29
|
* @public
|
|
24
30
|
*/
|
|
25
31
|
export interface IFluidDataStoreRuntime extends IEventProvider<IFluidDataStoreRuntimeEvents>, IDisposable {
|
|
@@ -29,7 +35,7 @@ export interface IFluidDataStoreRuntime extends IEventProvider<IFluidDataStoreRu
|
|
|
29
35
|
readonly channelsRoutingContext: IFluidHandleContext;
|
|
30
36
|
readonly objectsRoutingContext: IFluidHandleContext;
|
|
31
37
|
readonly options: Record<string | number, any>;
|
|
32
|
-
readonly deltaManager:
|
|
38
|
+
readonly deltaManager: IDeltaManagerErased;
|
|
33
39
|
readonly clientId: string | undefined;
|
|
34
40
|
readonly connected: boolean;
|
|
35
41
|
readonly logger: ITelemetryBaseLogger;
|
|
@@ -42,15 +48,6 @@ export interface IFluidDataStoreRuntime extends IEventProvider<IFluidDataStoreRu
|
|
|
42
48
|
* Returns the channel with the given id
|
|
43
49
|
*/
|
|
44
50
|
getChannel(id: string): Promise<IChannel>;
|
|
45
|
-
/**
|
|
46
|
-
* Invokes the given callback and expects that no ops are submitted
|
|
47
|
-
* until execution finishes. If an op is submitted, an error will be raised.
|
|
48
|
-
*
|
|
49
|
-
* Can be disabled by feature gate `Fluid.ContainerRuntime.DisableOpReentryCheck`
|
|
50
|
-
*
|
|
51
|
-
* @param callback - the callback to be invoked
|
|
52
|
-
*/
|
|
53
|
-
ensureNoDataModelChanges<T>(callback: () => T): T;
|
|
54
51
|
/**
|
|
55
52
|
* Creates a new channel of the given type.
|
|
56
53
|
* @param id - ID of the channel to be created. A unique ID will be generated if left undefined.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataStoreRuntime.d.ts","sourceRoot":"","sources":["../src/dataStoreRuntime.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"dataStoreRuntime.d.ts","sourceRoot":"","sources":["../src/dataStoreRuntime.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* @packageDocumentation
|
|
10
10
|
*/
|
|
11
11
|
export type { IChannel, IChannelFactory, IChannelServices, IChannelStorageService, IDeltaConnection, IDeltaHandler, } from "./channel.js";
|
|
12
|
-
export type { IFluidDataStoreRuntime, IFluidDataStoreRuntimeEvents } from "./dataStoreRuntime.js";
|
|
12
|
+
export type { IFluidDataStoreRuntime, IFluidDataStoreRuntimeEvents, IDeltaManagerErased, } from "./dataStoreRuntime.js";
|
|
13
13
|
export type { Jsonable, JsonableTypeWith, Internal_InterfaceOfJsonableTypesWith, } from "./jsonable.js";
|
|
14
14
|
export type { Serializable } from "./serializable.js";
|
|
15
15
|
export type { IChannelAttributes } from "./storage.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;GAKG;AAEH,YAAY,EACX,QAAQ,EACR,eAAe,EACf,gBAAgB,EAChB,sBAAsB,EACtB,gBAAgB,EAChB,aAAa,GACb,MAAM,cAAc,CAAC;AACtB,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;GAKG;AAEH,YAAY,EACX,QAAQ,EACR,eAAe,EACf,gBAAgB,EAChB,sBAAsB,EACtB,gBAAgB,EAChB,aAAa,GACb,MAAM,cAAc,CAAC;AACtB,YAAY,EACX,sBAAsB,EACtB,4BAA4B,EAC5B,mBAAmB,GACnB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACX,QAAQ,EACR,gBAAgB,EAChB,qCAAqC,GACrC,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -7,8 +7,9 @@
|
|
|
7
7
|
* THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
|
8
8
|
* Generated by "flub generate entrypoints" in @fluidframework/build-tools.
|
|
9
9
|
*/
|
|
10
|
+
|
|
10
11
|
export {
|
|
11
|
-
// public APIs
|
|
12
|
+
// @public APIs
|
|
12
13
|
IChannel,
|
|
13
14
|
IChannelAttributes,
|
|
14
15
|
IChannelFactory,
|
|
@@ -16,10 +17,11 @@ export {
|
|
|
16
17
|
IChannelStorageService,
|
|
17
18
|
IDeltaConnection,
|
|
18
19
|
IDeltaHandler,
|
|
20
|
+
IDeltaManagerErased,
|
|
19
21
|
IFluidDataStoreRuntime,
|
|
20
22
|
IFluidDataStoreRuntimeEvents,
|
|
21
23
|
|
|
22
|
-
// alpha APIs
|
|
24
|
+
// @alpha APIs
|
|
23
25
|
Internal_InterfaceOfJsonableTypesWith,
|
|
24
26
|
Jsonable,
|
|
25
27
|
JsonableTypeWith,
|
package/dist/public.d.ts
CHANGED
|
@@ -7,8 +7,9 @@
|
|
|
7
7
|
* THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
|
8
8
|
* Generated by "flub generate entrypoints" in @fluidframework/build-tools.
|
|
9
9
|
*/
|
|
10
|
+
|
|
10
11
|
export {
|
|
11
|
-
// public APIs
|
|
12
|
+
// @public APIs
|
|
12
13
|
IChannel,
|
|
13
14
|
IChannelAttributes,
|
|
14
15
|
IChannelFactory,
|
|
@@ -16,6 +17,7 @@ export {
|
|
|
16
17
|
IChannelStorageService,
|
|
17
18
|
IDeltaConnection,
|
|
18
19
|
IDeltaHandler,
|
|
20
|
+
IDeltaManagerErased,
|
|
19
21
|
IFluidDataStoreRuntime,
|
|
20
22
|
IFluidDataStoreRuntimeEvents
|
|
21
23
|
} from "./index.js";
|
|
@@ -7,15 +7,5 @@
|
|
|
7
7
|
* THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
|
8
8
|
* Generated by "flub generate entrypoints" in @fluidframework/build-tools.
|
|
9
9
|
*/
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
IChannel,
|
|
13
|
-
IChannelAttributes,
|
|
14
|
-
IChannelFactory,
|
|
15
|
-
IChannelServices,
|
|
16
|
-
IChannelStorageService,
|
|
17
|
-
IDeltaConnection,
|
|
18
|
-
IDeltaHandler,
|
|
19
|
-
IFluidDataStoreRuntime,
|
|
20
|
-
IFluidDataStoreRuntimeEvents
|
|
21
|
-
} from "./index.js";
|
|
10
|
+
|
|
11
|
+
export type * from "./lib/index.d.ts";
|
|
@@ -7,15 +7,5 @@
|
|
|
7
7
|
* THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
|
8
8
|
* Generated by "flub generate entrypoints" in @fluidframework/build-tools.
|
|
9
9
|
*/
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
IChannel,
|
|
13
|
-
IChannelAttributes,
|
|
14
|
-
IChannelFactory,
|
|
15
|
-
IChannelServices,
|
|
16
|
-
IChannelStorageService,
|
|
17
|
-
IDeltaConnection,
|
|
18
|
-
IDeltaHandler,
|
|
19
|
-
IFluidDataStoreRuntime,
|
|
20
|
-
IFluidDataStoreRuntimeEvents
|
|
21
|
-
} from "./index.js";
|
|
10
|
+
|
|
11
|
+
export type * from "./lib/legacy.d.ts";
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
|
-
import type { AttachState, IAudience
|
|
6
|
-
import type { FluidObject, IDisposable, IEvent, IEventProvider, IFluidHandle, IFluidHandleContext, ITelemetryBaseLogger } from "@fluidframework/core-interfaces";
|
|
5
|
+
import type { AttachState, IAudience } from "@fluidframework/container-definitions";
|
|
6
|
+
import type { FluidObject, IDisposable, IEvent, IEventProvider, IFluidHandle, IFluidHandleContext, ITelemetryBaseLogger, ErasedType } from "@fluidframework/core-interfaces";
|
|
7
7
|
import type { IIdCompressor } from "@fluidframework/id-compressor";
|
|
8
|
-
import type {
|
|
8
|
+
import type { IQuorumClients, ISequencedDocumentMessage } from "@fluidframework/protocol-definitions";
|
|
9
9
|
import type { IInboundSignalMessage } from "@fluidframework/runtime-definitions";
|
|
10
10
|
import type { IChannel } from "./channel.js";
|
|
11
11
|
/**
|
|
@@ -18,8 +18,14 @@ export interface IFluidDataStoreRuntimeEvents extends IEvent {
|
|
|
18
18
|
(event: "signal", listener: (message: IInboundSignalMessage, local: boolean) => void): any;
|
|
19
19
|
(event: "connected", listener: (clientId: string) => void): any;
|
|
20
20
|
}
|
|
21
|
+
/**
|
|
22
|
+
* Manages the transmission of ops between the runtime and storage.
|
|
23
|
+
* @public
|
|
24
|
+
*/
|
|
25
|
+
export type IDeltaManagerErased = ErasedType<"@fluidframework/container-definitions.IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>">;
|
|
21
26
|
/**
|
|
22
27
|
* Represents the runtime for the data store. Contains helper functions/state of the data store.
|
|
28
|
+
* @sealed
|
|
23
29
|
* @public
|
|
24
30
|
*/
|
|
25
31
|
export interface IFluidDataStoreRuntime extends IEventProvider<IFluidDataStoreRuntimeEvents>, IDisposable {
|
|
@@ -29,7 +35,7 @@ export interface IFluidDataStoreRuntime extends IEventProvider<IFluidDataStoreRu
|
|
|
29
35
|
readonly channelsRoutingContext: IFluidHandleContext;
|
|
30
36
|
readonly objectsRoutingContext: IFluidHandleContext;
|
|
31
37
|
readonly options: Record<string | number, any>;
|
|
32
|
-
readonly deltaManager:
|
|
38
|
+
readonly deltaManager: IDeltaManagerErased;
|
|
33
39
|
readonly clientId: string | undefined;
|
|
34
40
|
readonly connected: boolean;
|
|
35
41
|
readonly logger: ITelemetryBaseLogger;
|
|
@@ -42,15 +48,6 @@ export interface IFluidDataStoreRuntime extends IEventProvider<IFluidDataStoreRu
|
|
|
42
48
|
* Returns the channel with the given id
|
|
43
49
|
*/
|
|
44
50
|
getChannel(id: string): Promise<IChannel>;
|
|
45
|
-
/**
|
|
46
|
-
* Invokes the given callback and expects that no ops are submitted
|
|
47
|
-
* until execution finishes. If an op is submitted, an error will be raised.
|
|
48
|
-
*
|
|
49
|
-
* Can be disabled by feature gate `Fluid.ContainerRuntime.DisableOpReentryCheck`
|
|
50
|
-
*
|
|
51
|
-
* @param callback - the callback to be invoked
|
|
52
|
-
*/
|
|
53
|
-
ensureNoDataModelChanges<T>(callback: () => T): T;
|
|
54
51
|
/**
|
|
55
52
|
* Creates a new channel of the given type.
|
|
56
53
|
* @param id - ID of the channel to be created. A unique ID will be generated if left undefined.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataStoreRuntime.d.ts","sourceRoot":"","sources":["../src/dataStoreRuntime.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"dataStoreRuntime.d.ts","sourceRoot":"","sources":["../src/dataStoreRuntime.ts"],"names":[],"mappings":"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"}
|
package/lib/index.d.ts
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* @packageDocumentation
|
|
10
10
|
*/
|
|
11
11
|
export type { IChannel, IChannelFactory, IChannelServices, IChannelStorageService, IDeltaConnection, IDeltaHandler, } from "./channel.js";
|
|
12
|
-
export type { IFluidDataStoreRuntime, IFluidDataStoreRuntimeEvents } from "./dataStoreRuntime.js";
|
|
12
|
+
export type { IFluidDataStoreRuntime, IFluidDataStoreRuntimeEvents, IDeltaManagerErased, } from "./dataStoreRuntime.js";
|
|
13
13
|
export type { Jsonable, JsonableTypeWith, Internal_InterfaceOfJsonableTypesWith, } from "./jsonable.js";
|
|
14
14
|
export type { Serializable } from "./serializable.js";
|
|
15
15
|
export type { IChannelAttributes } from "./storage.js";
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;GAKG;AAEH,YAAY,EACX,QAAQ,EACR,eAAe,EACf,gBAAgB,EAChB,sBAAsB,EACtB,gBAAgB,EAChB,aAAa,GACb,MAAM,cAAc,CAAC;AACtB,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;GAKG;AAEH,YAAY,EACX,QAAQ,EACR,eAAe,EACf,gBAAgB,EAChB,sBAAsB,EACtB,gBAAgB,EAChB,aAAa,GACb,MAAM,cAAc,CAAC;AACtB,YAAY,EACX,sBAAsB,EACtB,4BAA4B,EAC5B,mBAAmB,GACnB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACX,QAAQ,EACR,gBAAgB,EAChB,qCAAqC,GACrC,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -7,8 +7,9 @@
|
|
|
7
7
|
* THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
|
8
8
|
* Generated by "flub generate entrypoints" in @fluidframework/build-tools.
|
|
9
9
|
*/
|
|
10
|
+
|
|
10
11
|
export {
|
|
11
|
-
// public APIs
|
|
12
|
+
// @public APIs
|
|
12
13
|
IChannel,
|
|
13
14
|
IChannelAttributes,
|
|
14
15
|
IChannelFactory,
|
|
@@ -16,10 +17,11 @@ export {
|
|
|
16
17
|
IChannelStorageService,
|
|
17
18
|
IDeltaConnection,
|
|
18
19
|
IDeltaHandler,
|
|
20
|
+
IDeltaManagerErased,
|
|
19
21
|
IFluidDataStoreRuntime,
|
|
20
22
|
IFluidDataStoreRuntimeEvents,
|
|
21
23
|
|
|
22
|
-
// alpha APIs
|
|
24
|
+
// @alpha APIs
|
|
23
25
|
Internal_InterfaceOfJsonableTypesWith,
|
|
24
26
|
Jsonable,
|
|
25
27
|
JsonableTypeWith,
|
package/lib/public.d.ts
CHANGED
|
@@ -7,8 +7,9 @@
|
|
|
7
7
|
* THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
|
8
8
|
* Generated by "flub generate entrypoints" in @fluidframework/build-tools.
|
|
9
9
|
*/
|
|
10
|
+
|
|
10
11
|
export {
|
|
11
|
-
// public APIs
|
|
12
|
+
// @public APIs
|
|
12
13
|
IChannel,
|
|
13
14
|
IChannelAttributes,
|
|
14
15
|
IChannelFactory,
|
|
@@ -16,6 +17,7 @@ export {
|
|
|
16
17
|
IChannelStorageService,
|
|
17
18
|
IDeltaConnection,
|
|
18
19
|
IDeltaHandler,
|
|
20
|
+
IDeltaManagerErased,
|
|
19
21
|
IFluidDataStoreRuntime,
|
|
20
22
|
IFluidDataStoreRuntimeEvents
|
|
21
23
|
} from "./index.js";
|
package/lib/tsdoc-metadata.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fluidframework/datastore-definitions",
|
|
3
|
-
"version": "2.0.0-dev-rc.
|
|
3
|
+
"version": "2.0.0-dev-rc.5.0.0.263932",
|
|
4
4
|
"description": "Fluid data store definitions",
|
|
5
5
|
"homepage": "https://fluidframework.com",
|
|
6
6
|
"repository": {
|
|
@@ -21,12 +21,12 @@
|
|
|
21
21
|
"types": "./dist/public.d.ts"
|
|
22
22
|
}
|
|
23
23
|
},
|
|
24
|
-
"./
|
|
24
|
+
"./legacy": {
|
|
25
25
|
"import": {
|
|
26
|
-
"types": "./lib/
|
|
26
|
+
"types": "./lib/legacy.d.ts"
|
|
27
27
|
},
|
|
28
28
|
"require": {
|
|
29
|
-
"types": "./dist/
|
|
29
|
+
"types": "./dist/legacy.d.ts"
|
|
30
30
|
}
|
|
31
31
|
},
|
|
32
32
|
"./internal": {
|
|
@@ -39,23 +39,23 @@
|
|
|
39
39
|
}
|
|
40
40
|
},
|
|
41
41
|
"main": "",
|
|
42
|
-
"types": "
|
|
42
|
+
"types": "lib/public.d.ts",
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@fluidframework/container-definitions": "2.0.0-dev-rc.
|
|
45
|
-
"@fluidframework/core-interfaces": "2.0.0-dev-rc.
|
|
46
|
-
"@fluidframework/id-compressor": "2.0.0-dev-rc.
|
|
44
|
+
"@fluidframework/container-definitions": "2.0.0-dev-rc.5.0.0.263932",
|
|
45
|
+
"@fluidframework/core-interfaces": "2.0.0-dev-rc.5.0.0.263932",
|
|
46
|
+
"@fluidframework/id-compressor": "2.0.0-dev-rc.5.0.0.263932",
|
|
47
47
|
"@fluidframework/protocol-definitions": "^3.2.0",
|
|
48
|
-
"@fluidframework/runtime-definitions": "2.0.0-dev-rc.
|
|
48
|
+
"@fluidframework/runtime-definitions": "2.0.0-dev-rc.5.0.0.263932"
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|
|
51
51
|
"@arethetypeswrong/cli": "^0.15.2",
|
|
52
52
|
"@biomejs/biome": "^1.6.2",
|
|
53
|
-
"@fluid-tools/build-cli": "^0.
|
|
53
|
+
"@fluid-tools/build-cli": "^0.38.0",
|
|
54
54
|
"@fluidframework/build-common": "^2.0.3",
|
|
55
|
-
"@fluidframework/build-tools": "^0.
|
|
56
|
-
"@fluidframework/datastore-definitions-previous": "npm:@fluidframework/datastore-definitions@2.0.0-
|
|
55
|
+
"@fluidframework/build-tools": "^0.38.0",
|
|
56
|
+
"@fluidframework/datastore-definitions-previous": "npm:@fluidframework/datastore-definitions@2.0.0-rc.3.0.0",
|
|
57
57
|
"@fluidframework/eslint-config-fluid": "^5.1.0",
|
|
58
|
-
"@microsoft/api-extractor": "^7.
|
|
58
|
+
"@microsoft/api-extractor": "^7.43.1",
|
|
59
59
|
"copyfiles": "^2.4.1",
|
|
60
60
|
"eslint": "~8.55.0",
|
|
61
61
|
"prettier": "~3.0.3",
|
|
@@ -65,6 +65,10 @@
|
|
|
65
65
|
"typeValidation": {
|
|
66
66
|
"broken": {
|
|
67
67
|
"InterfaceDeclaration_IFluidDataStoreRuntime": {
|
|
68
|
+
"backCompat": false,
|
|
69
|
+
"forwardCompat": false
|
|
70
|
+
},
|
|
71
|
+
"InterfaceDeclaration_IChannel": {
|
|
68
72
|
"forwardCompat": false,
|
|
69
73
|
"backCompat": false
|
|
70
74
|
}
|
|
@@ -72,8 +76,8 @@
|
|
|
72
76
|
},
|
|
73
77
|
"scripts": {
|
|
74
78
|
"api": "fluid-build . --task api",
|
|
75
|
-
"api-extractor:commonjs": "flub generate entrypoints --outDir ./dist",
|
|
76
|
-
"api-extractor:esnext": "flub generate entrypoints --outDir ./lib",
|
|
79
|
+
"api-extractor:commonjs": "flub generate entrypoints --outFileAlpha legacy --outDir ./dist",
|
|
80
|
+
"api-extractor:esnext": "flub generate entrypoints --outFileAlpha legacy --outDir ./lib --node10TypeCompat",
|
|
77
81
|
"build": "fluid-build . --task build",
|
|
78
82
|
"build:compile": "fluid-build . --task compile",
|
|
79
83
|
"build:docs": "api-extractor run --local",
|
|
@@ -81,11 +85,11 @@
|
|
|
81
85
|
"build:test": "npm run build:test:esm && npm run build:test:cjs",
|
|
82
86
|
"build:test:cjs": "fluid-tsc commonjs --project ./src/test/tsconfig.cjs.json",
|
|
83
87
|
"build:test:esm": "tsc --project ./src/test/tsconfig.json",
|
|
84
|
-
"check:are-the-types-wrong": "attw --pack .
|
|
88
|
+
"check:are-the-types-wrong": "attw --pack .",
|
|
85
89
|
"check:prettier": "prettier --check . --cache --ignore-path ../../../.prettierignore",
|
|
86
90
|
"check:release-tags": "api-extractor run --local --config ./api-extractor-lint.json",
|
|
87
91
|
"ci:build:docs": "api-extractor run",
|
|
88
|
-
"clean": "rimraf --glob dist lib \"**/*.tsbuildinfo\" \"**/*.build.log\" _api-extractor-temp",
|
|
92
|
+
"clean": "rimraf --glob dist lib \"*.d.ts\" \"**/*.tsbuildinfo\" \"**/*.build.log\" _api-extractor-temp",
|
|
89
93
|
"eslint": "eslint --format stylish src",
|
|
90
94
|
"eslint:fix": "eslint --format stylish src --fix --fix-type problem,suggestion,layout",
|
|
91
95
|
"format": "fluid-build --task format .",
|
|
@@ -93,7 +97,7 @@
|
|
|
93
97
|
"lint": "fluid-build . --task lint",
|
|
94
98
|
"lint:fix": "fluid-build . --task eslint:fix --task format",
|
|
95
99
|
"tsc": "fluid-tsc commonjs --project ./tsconfig.cjs.json && copyfiles -f ../../../common/build/build-common/src/cjs/package.json ./dist",
|
|
96
|
-
"typetests:gen": "
|
|
100
|
+
"typetests:gen": "flub generate typetests --dir . -v --publicFallback",
|
|
97
101
|
"typetests:prepare": "flub typetests --dir . --reset --previous --normalize"
|
|
98
102
|
}
|
|
99
103
|
}
|
package/src/dataStoreRuntime.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import type { AttachState, IAudience
|
|
6
|
+
import type { AttachState, IAudience } from "@fluidframework/container-definitions";
|
|
7
7
|
import type {
|
|
8
8
|
FluidObject,
|
|
9
9
|
IDisposable,
|
|
@@ -12,10 +12,10 @@ import type {
|
|
|
12
12
|
IFluidHandle,
|
|
13
13
|
IFluidHandleContext,
|
|
14
14
|
ITelemetryBaseLogger,
|
|
15
|
+
ErasedType,
|
|
15
16
|
} from "@fluidframework/core-interfaces";
|
|
16
17
|
import type { IIdCompressor } from "@fluidframework/id-compressor";
|
|
17
18
|
import type {
|
|
18
|
-
IDocumentMessage,
|
|
19
19
|
IQuorumClients,
|
|
20
20
|
ISequencedDocumentMessage,
|
|
21
21
|
} from "@fluidframework/protocol-definitions";
|
|
@@ -34,8 +34,16 @@ export interface IFluidDataStoreRuntimeEvents extends IEvent {
|
|
|
34
34
|
(event: "connected", listener: (clientId: string) => void);
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
+
/**
|
|
38
|
+
* Manages the transmission of ops between the runtime and storage.
|
|
39
|
+
* @public
|
|
40
|
+
*/
|
|
41
|
+
export type IDeltaManagerErased =
|
|
42
|
+
ErasedType<"@fluidframework/container-definitions.IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>">;
|
|
43
|
+
|
|
37
44
|
/**
|
|
38
45
|
* Represents the runtime for the data store. Contains helper functions/state of the data store.
|
|
46
|
+
* @sealed
|
|
39
47
|
* @public
|
|
40
48
|
*/
|
|
41
49
|
export interface IFluidDataStoreRuntime
|
|
@@ -52,7 +60,7 @@ export interface IFluidDataStoreRuntime
|
|
|
52
60
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
53
61
|
readonly options: Record<string | number, any>;
|
|
54
62
|
|
|
55
|
-
readonly deltaManager:
|
|
63
|
+
readonly deltaManager: IDeltaManagerErased;
|
|
56
64
|
|
|
57
65
|
readonly clientId: string | undefined;
|
|
58
66
|
|
|
@@ -72,16 +80,6 @@ export interface IFluidDataStoreRuntime
|
|
|
72
80
|
*/
|
|
73
81
|
getChannel(id: string): Promise<IChannel>;
|
|
74
82
|
|
|
75
|
-
/**
|
|
76
|
-
* Invokes the given callback and expects that no ops are submitted
|
|
77
|
-
* until execution finishes. If an op is submitted, an error will be raised.
|
|
78
|
-
*
|
|
79
|
-
* Can be disabled by feature gate `Fluid.ContainerRuntime.DisableOpReentryCheck`
|
|
80
|
-
*
|
|
81
|
-
* @param callback - the callback to be invoked
|
|
82
|
-
*/
|
|
83
|
-
ensureNoDataModelChanges<T>(callback: () => T): T;
|
|
84
|
-
|
|
85
83
|
/**
|
|
86
84
|
* Creates a new channel of the given type.
|
|
87
85
|
* @param id - ID of the channel to be created. A unique ID will be generated if left undefined.
|
package/src/index.ts
CHANGED
|
@@ -18,7 +18,11 @@ export type {
|
|
|
18
18
|
IDeltaConnection,
|
|
19
19
|
IDeltaHandler,
|
|
20
20
|
} from "./channel.js";
|
|
21
|
-
export type {
|
|
21
|
+
export type {
|
|
22
|
+
IFluidDataStoreRuntime,
|
|
23
|
+
IFluidDataStoreRuntimeEvents,
|
|
24
|
+
IDeltaManagerErased,
|
|
25
|
+
} from "./dataStoreRuntime.js";
|
|
22
26
|
export type {
|
|
23
27
|
Jsonable,
|
|
24
28
|
JsonableTypeWith,
|