@fluidframework/fluid-static 2.0.0-internal.7.3.0 → 2.0.0-internal.8.0.0
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 +32 -0
- package/api-extractor-lint.json +13 -0
- package/api-extractor.json +3 -3
- package/api-report/fluid-static.api.md +45 -61
- package/dist/fluid-static-alpha.d.ts +408 -0
- package/dist/fluid-static-beta.d.ts +78 -0
- package/dist/fluid-static-public.d.ts +78 -0
- package/dist/fluid-static-untrimmed.d.ts +448 -0
- package/dist/fluidContainer.cjs +10 -4
- package/dist/fluidContainer.cjs.map +1 -1
- package/dist/fluidContainer.d.ts +8 -82
- package/dist/fluidContainer.d.ts.map +1 -1
- package/dist/index.cjs +4 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/rootDataObject.cjs +34 -12
- package/dist/rootDataObject.cjs.map +1 -1
- package/dist/rootDataObject.d.ts +6 -58
- package/dist/rootDataObject.d.ts.map +1 -1
- package/dist/serviceAudience.cjs +11 -3
- package/dist/serviceAudience.cjs.map +1 -1
- package/dist/serviceAudience.d.ts +7 -66
- package/dist/serviceAudience.d.ts.map +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.ts +24 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/utils.cjs +3 -1
- package/dist/utils.cjs.map +1 -1
- package/dist/utils.d.ts +10 -2
- package/dist/utils.d.ts.map +1 -1
- package/lib/fluid-static-alpha.d.ts +408 -0
- package/lib/fluid-static-beta.d.ts +78 -0
- package/lib/fluid-static-public.d.ts +78 -0
- package/lib/fluid-static-untrimmed.d.ts +448 -0
- package/lib/fluidContainer.d.ts +9 -83
- package/lib/fluidContainer.d.ts.map +1 -1
- package/lib/fluidContainer.mjs +9 -3
- package/lib/fluidContainer.mjs.map +1 -1
- package/lib/index.d.ts +4 -9
- package/lib/index.d.ts.map +1 -1
- package/lib/index.mjs +3 -3
- package/lib/index.mjs.map +1 -1
- package/lib/rootDataObject.d.ts +6 -58
- package/lib/rootDataObject.d.ts.map +1 -1
- package/lib/rootDataObject.mjs +36 -15
- package/lib/rootDataObject.mjs.map +1 -1
- package/lib/serviceAudience.d.ts +7 -66
- package/lib/serviceAudience.d.ts.map +1 -1
- package/lib/serviceAudience.mjs +10 -2
- package/lib/serviceAudience.mjs.map +1 -1
- package/lib/types.d.ts +24 -3
- package/lib/types.d.ts.map +1 -1
- package/lib/types.mjs.map +1 -1
- package/lib/utils.d.ts +11 -3
- package/lib/utils.d.ts.map +1 -1
- package/lib/utils.mjs +3 -1
- package/lib/utils.mjs.map +1 -1
- package/package.json +56 -32
- package/src/fluidContainer.ts +18 -3
- package/src/index.ts +4 -3
- package/src/rootDataObject.ts +48 -18
- package/src/serviceAudience.ts +17 -12
- package/src/types.ts +23 -3
- package/src/utils.ts +20 -3
package/src/serviceAudience.ts
CHANGED
|
@@ -8,6 +8,16 @@ import { IAudience, IContainer } from "@fluidframework/container-definitions";
|
|
|
8
8
|
import { IClient } from "@fluidframework/protocol-definitions";
|
|
9
9
|
import { IServiceAudience, IServiceAudienceEvents, IMember, Myself } from "./types";
|
|
10
10
|
|
|
11
|
+
/**
|
|
12
|
+
* @internal
|
|
13
|
+
*/
|
|
14
|
+
export function createServiceAudience<M extends IMember = IMember>(props: {
|
|
15
|
+
container: IContainer;
|
|
16
|
+
createServiceMember: (audienceMember: IClient) => M;
|
|
17
|
+
}): IServiceAudience<M> {
|
|
18
|
+
return new ServiceAudience(props.container, props.createServiceMember);
|
|
19
|
+
}
|
|
20
|
+
|
|
11
21
|
/**
|
|
12
22
|
* Base class for providing audience information for sessions interacting with {@link IFluidContainer}
|
|
13
23
|
*
|
|
@@ -17,15 +27,16 @@ import { IServiceAudience, IServiceAudienceEvents, IMember, Myself } from "./typ
|
|
|
17
27
|
* the user and client details returned in {@link IMember}.
|
|
18
28
|
*
|
|
19
29
|
* @typeParam M - A service-specific {@link IMember} implementation.
|
|
30
|
+
* @internal
|
|
20
31
|
*/
|
|
21
|
-
|
|
32
|
+
class ServiceAudience<M extends IMember = IMember>
|
|
22
33
|
extends TypedEventEmitter<IServiceAudienceEvents<M>>
|
|
23
34
|
implements IServiceAudience<M>
|
|
24
35
|
{
|
|
25
36
|
/**
|
|
26
37
|
* Audience object which includes all the existing members of the {@link IFluidContainer | container}.
|
|
27
38
|
*/
|
|
28
|
-
|
|
39
|
+
private readonly audience: IAudience;
|
|
29
40
|
|
|
30
41
|
/**
|
|
31
42
|
* Retain the most recent member list.
|
|
@@ -44,13 +55,14 @@ export abstract class ServiceAudience<M extends IMember = IMember>
|
|
|
44
55
|
* every `addMember` event. It is mapped `clientId` to `M` to be better work with what the {@link IServiceAudience}
|
|
45
56
|
* events provide.
|
|
46
57
|
*/
|
|
47
|
-
|
|
58
|
+
private lastMembers = new Map<string, M>();
|
|
48
59
|
|
|
49
60
|
constructor(
|
|
50
61
|
/**
|
|
51
62
|
* Fluid Container to read the audience from.
|
|
52
63
|
*/
|
|
53
|
-
|
|
64
|
+
private readonly container: IContainer,
|
|
65
|
+
private readonly createServiceMember: (audienceMember: IClient) => M,
|
|
54
66
|
) {
|
|
55
67
|
super();
|
|
56
68
|
this.audience = container.audience;
|
|
@@ -77,13 +89,6 @@ export abstract class ServiceAudience<M extends IMember = IMember>
|
|
|
77
89
|
this.container.on("connected", () => this.emit("membersChanged"));
|
|
78
90
|
}
|
|
79
91
|
|
|
80
|
-
/**
|
|
81
|
-
* Provides ability for inheriting class to modify/extend the audience object.
|
|
82
|
-
*
|
|
83
|
-
* @param audienceMember - Record of a specific audience member.
|
|
84
|
-
*/
|
|
85
|
-
protected abstract createServiceMember(audienceMember: IClient): M;
|
|
86
|
-
|
|
87
92
|
/**
|
|
88
93
|
* {@inheritDoc IServiceAudience.getMembers}
|
|
89
94
|
*/
|
|
@@ -152,7 +157,7 @@ export abstract class ServiceAudience<M extends IMember = IMember>
|
|
|
152
157
|
*
|
|
153
158
|
* @param member - Member to be included/omitted.
|
|
154
159
|
*/
|
|
155
|
-
|
|
160
|
+
private shouldIncludeAsMember(member: IClient): boolean {
|
|
156
161
|
// Include only human members
|
|
157
162
|
return member.details.capabilities.interactive;
|
|
158
163
|
}
|
package/src/types.ts
CHANGED
|
@@ -5,16 +5,17 @@
|
|
|
5
5
|
|
|
6
6
|
import { IEvent, IEventProvider, IFluidLoadable } from "@fluidframework/core-interfaces";
|
|
7
7
|
import { IChannelFactory } from "@fluidframework/datastore-definitions";
|
|
8
|
-
import { IFluidDataStoreFactory } from "@fluidframework/runtime-definitions";
|
|
9
8
|
|
|
10
9
|
/**
|
|
11
10
|
* A mapping of string identifiers to instantiated `DataObject`s or `SharedObject`s.
|
|
11
|
+
* @alpha
|
|
12
12
|
*/
|
|
13
13
|
export type LoadableObjectRecord = Record<string, IFluidLoadable>;
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
16
|
* A mapping of string identifiers to classes that will later be used to instantiate a corresponding `DataObject`
|
|
17
17
|
* or `SharedObject` in a {@link LoadableObjectRecord}.
|
|
18
|
+
* @alpha
|
|
18
19
|
*/
|
|
19
20
|
export type LoadableObjectClassRecord = Record<string, LoadableObjectClass<any>>;
|
|
20
21
|
|
|
@@ -22,6 +23,7 @@ export type LoadableObjectClassRecord = Record<string, LoadableObjectClass<any>>
|
|
|
22
23
|
* A class object of `DataObject` or `SharedObject`.
|
|
23
24
|
*
|
|
24
25
|
* @typeParam T - The class of the `DataObject` or `SharedObject`.
|
|
26
|
+
* @alpha
|
|
25
27
|
*/
|
|
26
28
|
export type LoadableObjectClass<T extends IFluidLoadable> =
|
|
27
29
|
| DataObjectClass<T>
|
|
@@ -32,9 +34,10 @@ export type LoadableObjectClass<T extends IFluidLoadable> =
|
|
|
32
34
|
* constructor that will return the type of the `DataObject`.
|
|
33
35
|
*
|
|
34
36
|
* @typeParam T - The class of the `DataObject`.
|
|
37
|
+
* @alpha
|
|
35
38
|
*/
|
|
36
39
|
export type DataObjectClass<T extends IFluidLoadable> = {
|
|
37
|
-
readonly factory: IFluidDataStoreFactory;
|
|
40
|
+
readonly factory: { IFluidDataStoreFactory: DataObjectClass<T>["factory"] };
|
|
38
41
|
} & LoadableObjectCtor<T>;
|
|
39
42
|
|
|
40
43
|
/**
|
|
@@ -42,6 +45,7 @@ export type DataObjectClass<T extends IFluidLoadable> = {
|
|
|
42
45
|
* constructor that will return the type of the `DataObject`.
|
|
43
46
|
*
|
|
44
47
|
* @typeParam T - The class of the `SharedObject`.
|
|
48
|
+
* @alpha
|
|
45
49
|
*/
|
|
46
50
|
export type SharedObjectClass<T extends IFluidLoadable> = {
|
|
47
51
|
readonly getFactory: () => IChannelFactory;
|
|
@@ -51,6 +55,7 @@ export type SharedObjectClass<T extends IFluidLoadable> = {
|
|
|
51
55
|
* An object with a constructor that will return an {@link @fluidframework/core-interfaces#IFluidLoadable}.
|
|
52
56
|
*
|
|
53
57
|
* @typeParam T - The class of the loadable object.
|
|
58
|
+
* @alpha
|
|
54
59
|
*/
|
|
55
60
|
export type LoadableObjectCtor<T extends IFluidLoadable> = new (...args: any[]) => T;
|
|
56
61
|
|
|
@@ -61,6 +66,7 @@ export type LoadableObjectCtor<T extends IFluidLoadable> = new (...args: any[])
|
|
|
61
66
|
*
|
|
62
67
|
* It includes both the instances of objects that are initially available upon `Container` creation, as well
|
|
63
68
|
* as the types of objects that may be dynamically created throughout the lifetime of the `Container`.
|
|
69
|
+
* @alpha
|
|
64
70
|
*/
|
|
65
71
|
export interface ContainerSchema {
|
|
66
72
|
/**
|
|
@@ -96,11 +102,19 @@ export interface ContainerSchema {
|
|
|
96
102
|
dynamicObjectTypes?: LoadableObjectClass<any>[];
|
|
97
103
|
}
|
|
98
104
|
|
|
105
|
+
/**
|
|
106
|
+
* @internal
|
|
107
|
+
*/
|
|
108
|
+
export interface IProvideRootDataObject {
|
|
109
|
+
readonly IRootDataObject: IRootDataObject;
|
|
110
|
+
}
|
|
111
|
+
|
|
99
112
|
/**
|
|
100
113
|
* Holds the collection of objects that the container was initially created with, as well as provides the ability
|
|
101
114
|
* to dynamically create further objects during usage.
|
|
115
|
+
* @internal
|
|
102
116
|
*/
|
|
103
|
-
export interface IRootDataObject {
|
|
117
|
+
export interface IRootDataObject extends IProvideRootDataObject {
|
|
104
118
|
/**
|
|
105
119
|
* Provides a record of the initial objects defined on creation.
|
|
106
120
|
*/
|
|
@@ -123,6 +137,7 @@ export interface IRootDataObject {
|
|
|
123
137
|
* @param member - The service-specific member object for the client.
|
|
124
138
|
*
|
|
125
139
|
* @see See {@link IServiceAudienceEvents} for usage details.
|
|
140
|
+
* @alpha
|
|
126
141
|
*/
|
|
127
142
|
export type MemberChangedListener<M extends IMember> = (clientId: string, member: M) => void;
|
|
128
143
|
|
|
@@ -135,6 +150,7 @@ export type MemberChangedListener<M extends IMember> = (clientId: string, member
|
|
|
135
150
|
* {@link IServiceAudience.getMembers} method will emit events.
|
|
136
151
|
*
|
|
137
152
|
* @typeParam M - A service-specific {@link IMember} implementation.
|
|
153
|
+
* @alpha
|
|
138
154
|
*/
|
|
139
155
|
export interface IServiceAudienceEvents<M extends IMember> extends IEvent {
|
|
140
156
|
/**
|
|
@@ -168,6 +184,7 @@ export interface IServiceAudienceEvents<M extends IMember> extends IEvent {
|
|
|
168
184
|
* details about the connecting client, such as device information, environment, or a username.
|
|
169
185
|
*
|
|
170
186
|
* @typeParam M - A service-specific {@link IMember} type.
|
|
187
|
+
* @alpha
|
|
171
188
|
*/
|
|
172
189
|
export interface IServiceAudience<M extends IMember>
|
|
173
190
|
extends IEventProvider<IServiceAudienceEvents<M>> {
|
|
@@ -188,6 +205,7 @@ export interface IServiceAudience<M extends IMember>
|
|
|
188
205
|
* Base interface for information for each connection made to the Fluid session.
|
|
189
206
|
*
|
|
190
207
|
* @remarks This interface can be extended to provide additional information specific to each service.
|
|
208
|
+
* @alpha
|
|
191
209
|
*/
|
|
192
210
|
export interface IConnection {
|
|
193
211
|
/**
|
|
@@ -205,6 +223,7 @@ export interface IConnection {
|
|
|
205
223
|
* Base interface to be implemented to fetch each service's member.
|
|
206
224
|
*
|
|
207
225
|
* @remarks This interface can be extended by each service to provide additional service-specific user metadata.
|
|
226
|
+
* @alpha
|
|
208
227
|
*/
|
|
209
228
|
export interface IMember {
|
|
210
229
|
/**
|
|
@@ -220,5 +239,6 @@ export interface IMember {
|
|
|
220
239
|
|
|
221
240
|
/**
|
|
222
241
|
* An extended member object that includes currentConnection
|
|
242
|
+
* @alpha
|
|
223
243
|
*/
|
|
224
244
|
export type Myself<M extends IMember = IMember> = M & { currentConnection: string };
|
package/src/utils.ts
CHANGED
|
@@ -4,14 +4,31 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import { IChannelFactory } from "@fluidframework/datastore-definitions";
|
|
7
|
-
import {
|
|
7
|
+
import {
|
|
8
|
+
IFluidDataStoreFactory,
|
|
9
|
+
NamedFluidDataStoreRegistryEntry,
|
|
10
|
+
} from "@fluidframework/runtime-definitions";
|
|
11
|
+
import { IFluidLoadable } from "@fluidframework/core-interfaces";
|
|
8
12
|
import { ContainerSchema, DataObjectClass, LoadableObjectClass, SharedObjectClass } from "./types";
|
|
9
13
|
|
|
14
|
+
/**
|
|
15
|
+
* An internal type used by the internal type guard isDataObjectClass to cast a
|
|
16
|
+
* DataObjectClass to a type that is strongly coupled to IFluidDataStoreFactory.
|
|
17
|
+
* Unlike the external and exported type DataObjectClass which is
|
|
18
|
+
* weakly coupled to the IFluidDataStoreFactory to prevent leaking internals.
|
|
19
|
+
*/
|
|
20
|
+
export type InternalDataObjectClass<T extends IFluidLoadable> = DataObjectClass<T> &
|
|
21
|
+
Record<"factory", IFluidDataStoreFactory>;
|
|
22
|
+
|
|
10
23
|
/**
|
|
11
24
|
* Runtime check to determine if a class is a DataObject type
|
|
12
25
|
*/
|
|
13
|
-
export const isDataObjectClass = (obj: any): obj is
|
|
14
|
-
|
|
26
|
+
export const isDataObjectClass = (obj: any): obj is InternalDataObjectClass<IFluidLoadable> => {
|
|
27
|
+
const maybe: Partial<InternalDataObjectClass<IFluidLoadable>> | undefined = obj;
|
|
28
|
+
return (
|
|
29
|
+
maybe?.factory?.IFluidDataStoreFactory !== undefined &&
|
|
30
|
+
maybe?.factory?.IFluidDataStoreFactory === maybe?.factory
|
|
31
|
+
);
|
|
15
32
|
};
|
|
16
33
|
|
|
17
34
|
/**
|