@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.
Files changed (65) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/api-extractor-lint.json +13 -0
  3. package/api-extractor.json +3 -3
  4. package/api-report/fluid-static.api.md +45 -61
  5. package/dist/fluid-static-alpha.d.ts +408 -0
  6. package/dist/fluid-static-beta.d.ts +78 -0
  7. package/dist/fluid-static-public.d.ts +78 -0
  8. package/dist/fluid-static-untrimmed.d.ts +448 -0
  9. package/dist/fluidContainer.cjs +10 -4
  10. package/dist/fluidContainer.cjs.map +1 -1
  11. package/dist/fluidContainer.d.ts +8 -82
  12. package/dist/fluidContainer.d.ts.map +1 -1
  13. package/dist/index.cjs +4 -4
  14. package/dist/index.cjs.map +1 -1
  15. package/dist/index.d.ts +4 -4
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/rootDataObject.cjs +34 -12
  18. package/dist/rootDataObject.cjs.map +1 -1
  19. package/dist/rootDataObject.d.ts +6 -58
  20. package/dist/rootDataObject.d.ts.map +1 -1
  21. package/dist/serviceAudience.cjs +11 -3
  22. package/dist/serviceAudience.cjs.map +1 -1
  23. package/dist/serviceAudience.d.ts +7 -66
  24. package/dist/serviceAudience.d.ts.map +1 -1
  25. package/dist/types.cjs.map +1 -1
  26. package/dist/types.d.ts +24 -3
  27. package/dist/types.d.ts.map +1 -1
  28. package/dist/utils.cjs +3 -1
  29. package/dist/utils.cjs.map +1 -1
  30. package/dist/utils.d.ts +10 -2
  31. package/dist/utils.d.ts.map +1 -1
  32. package/lib/fluid-static-alpha.d.ts +408 -0
  33. package/lib/fluid-static-beta.d.ts +78 -0
  34. package/lib/fluid-static-public.d.ts +78 -0
  35. package/lib/fluid-static-untrimmed.d.ts +448 -0
  36. package/lib/fluidContainer.d.ts +9 -83
  37. package/lib/fluidContainer.d.ts.map +1 -1
  38. package/lib/fluidContainer.mjs +9 -3
  39. package/lib/fluidContainer.mjs.map +1 -1
  40. package/lib/index.d.ts +4 -9
  41. package/lib/index.d.ts.map +1 -1
  42. package/lib/index.mjs +3 -3
  43. package/lib/index.mjs.map +1 -1
  44. package/lib/rootDataObject.d.ts +6 -58
  45. package/lib/rootDataObject.d.ts.map +1 -1
  46. package/lib/rootDataObject.mjs +36 -15
  47. package/lib/rootDataObject.mjs.map +1 -1
  48. package/lib/serviceAudience.d.ts +7 -66
  49. package/lib/serviceAudience.d.ts.map +1 -1
  50. package/lib/serviceAudience.mjs +10 -2
  51. package/lib/serviceAudience.mjs.map +1 -1
  52. package/lib/types.d.ts +24 -3
  53. package/lib/types.d.ts.map +1 -1
  54. package/lib/types.mjs.map +1 -1
  55. package/lib/utils.d.ts +11 -3
  56. package/lib/utils.d.ts.map +1 -1
  57. package/lib/utils.mjs +3 -1
  58. package/lib/utils.mjs.map +1 -1
  59. package/package.json +56 -32
  60. package/src/fluidContainer.ts +18 -3
  61. package/src/index.ts +4 -3
  62. package/src/rootDataObject.ts +48 -18
  63. package/src/serviceAudience.ts +17 -12
  64. package/src/types.ts +23 -3
  65. package/src/utils.ts +20 -3
@@ -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
- export abstract class ServiceAudience<M extends IMember = IMember>
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
- protected readonly audience: IAudience;
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
- protected lastMembers = new Map<string, M>();
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
- protected readonly container: IContainer,
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
- protected shouldIncludeAsMember(member: IClient): boolean {
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 { NamedFluidDataStoreRegistryEntry } from "@fluidframework/runtime-definitions";
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 DataObjectClass<any> => {
14
- return obj?.factory !== undefined;
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
  /**