@fluidframework/fluid-static 0.52.0-44610 → 0.53.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/dist/rootDataObject.d.ts +3 -1
- package/dist/rootDataObject.d.ts.map +1 -1
- package/dist/rootDataObject.js +1 -4
- package/dist/rootDataObject.js.map +1 -1
- package/dist/serviceAudience.d.ts.map +1 -1
- package/dist/serviceAudience.js +1 -0
- package/dist/serviceAudience.js.map +1 -1
- package/lib/rootDataObject.d.ts +3 -1
- package/lib/rootDataObject.d.ts.map +1 -1
- package/lib/rootDataObject.js +1 -4
- package/lib/rootDataObject.js.map +1 -1
- package/lib/serviceAudience.d.ts.map +1 -1
- package/lib/serviceAudience.js +1 -0
- package/lib/serviceAudience.js.map +1 -1
- package/package.json +12 -12
- package/src/rootDataObject.ts +2 -4
- package/src/serviceAudience.ts +2 -0
package/dist/rootDataObject.d.ts
CHANGED
|
@@ -9,7 +9,9 @@ import { ContainerSchema, LoadableObjectClass, LoadableObjectClassRecord, Loadab
|
|
|
9
9
|
export interface RootDataObjectProps {
|
|
10
10
|
initialObjects: LoadableObjectClassRecord;
|
|
11
11
|
}
|
|
12
|
-
export declare class RootDataObject extends DataObject<{
|
|
12
|
+
export declare class RootDataObject extends DataObject<{
|
|
13
|
+
InitialState: RootDataObjectProps;
|
|
14
|
+
}> {
|
|
13
15
|
private readonly initialObjectsDirKey;
|
|
14
16
|
private readonly _initialObjects;
|
|
15
17
|
private get initialObjectsDir();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rootDataObject.d.ts","sourceRoot":"","sources":["../src/rootDataObject.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EACH,2BAA2B,EAC3B,UAAU,EAGb,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEjE,OAAO,EACH,eAAe,EAEf,mBAAmB,EACnB,yBAAyB,EACzB,oBAAoB,EAEvB,MAAM,SAAS,CAAC;AAGjB,MAAM,WAAW,mBAAmB;IAChC,cAAc,EAAE,yBAAyB,CAAC;CAC7C;
|
|
1
|
+
{"version":3,"file":"rootDataObject.d.ts","sourceRoot":"","sources":["../src/rootDataObject.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EACH,2BAA2B,EAC3B,UAAU,EAGb,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEjE,OAAO,EACH,eAAe,EAEf,mBAAmB,EACnB,yBAAyB,EACzB,oBAAoB,EAEvB,MAAM,SAAS,CAAC;AAGjB,MAAM,WAAW,mBAAmB;IAChC,cAAc,EAAE,yBAAyB,CAAC;CAC7C;AAED,qBAAa,cAAe,SAAQ,UAAU,CAAC;IAAC,YAAY,EAAE,mBAAmB,CAAA;CAAC,CAAC;IAC/E,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAyB;IAC9D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA4B;IAE5D,OAAO,KAAK,iBAAiB,GAM5B;cAEe,qBAAqB,CAAC,KAAK,EAAE,mBAAmB;cAgBhD,cAAc;IAc9B,IAAW,cAAc,IAAI,oBAAoB,CAKhD;IAEY,MAAM,CAAC,CAAC,SAAS,cAAc,EACxC,WAAW,EAAE,mBAAmB,CAAC,CAAC,CAAC,GACpC,OAAO,CAAC,CAAC,CAAC;YASC,gBAAgB;IAO9B,OAAO,CAAC,kBAAkB;CAO7B;AAID;;;GAGG;AACH,qBAAa,iCAAkC,SAAQ,2BAA2B;IAC9E,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IACvC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA4B;gBAC/C,MAAM,EAAE,eAAe;cAenB,8BAA8B,CAAC,OAAO,EAAE,iBAAiB;CAO5E"}
|
package/dist/rootDataObject.js
CHANGED
|
@@ -8,7 +8,6 @@ exports.DOProviderContainerRuntimeFactory = exports.RootDataObject = void 0;
|
|
|
8
8
|
const aqueduct_1 = require("@fluidframework/aqueduct");
|
|
9
9
|
const runtime_utils_1 = require("@fluidframework/runtime-utils");
|
|
10
10
|
const utils_1 = require("./utils");
|
|
11
|
-
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
12
11
|
class RootDataObject extends aqueduct_1.DataObject {
|
|
13
12
|
constructor() {
|
|
14
13
|
super(...arguments);
|
|
@@ -83,9 +82,7 @@ const rootDataStoreId = "rootDOId";
|
|
|
83
82
|
class DOProviderContainerRuntimeFactory extends aqueduct_1.BaseContainerRuntimeFactory {
|
|
84
83
|
constructor(schema) {
|
|
85
84
|
const [registryEntries, sharedObjects] = utils_1.parseDataObjectsFromSharedObjects(schema);
|
|
86
|
-
const rootDataObjectFactory =
|
|
87
|
-
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
88
|
-
new aqueduct_1.DataObjectFactory("rootDO", RootDataObject, sharedObjects, {}, registryEntries);
|
|
85
|
+
const rootDataObjectFactory = new aqueduct_1.DataObjectFactory("rootDO", RootDataObject, sharedObjects, {}, registryEntries);
|
|
89
86
|
super([rootDataObjectFactory.registryEntry], [], [aqueduct_1.defaultRouteRequestHandler(rootDataStoreId)]);
|
|
90
87
|
this.rootDataObjectFactory = rootDataObjectFactory;
|
|
91
88
|
this.initialObjects = schema.initialObjects;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rootDataObject.js","sourceRoot":"","sources":["../src/rootDataObject.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,uDAKkC;AAGlC,iEAAmE;AASnE,mCAAoG;AAMpG,
|
|
1
|
+
{"version":3,"file":"rootDataObject.js","sourceRoot":"","sources":["../src/rootDataObject.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\nimport {\n BaseContainerRuntimeFactory,\n DataObject,\n DataObjectFactory,\n defaultRouteRequestHandler,\n} from \"@fluidframework/aqueduct\";\nimport { IContainerRuntime } from \"@fluidframework/container-runtime-definitions\";\nimport { IFluidLoadable } from \"@fluidframework/core-interfaces\";\nimport { requestFluidObject } from \"@fluidframework/runtime-utils\";\nimport {\n ContainerSchema,\n DataObjectClass,\n LoadableObjectClass,\n LoadableObjectClassRecord,\n LoadableObjectRecord,\n SharedObjectClass,\n} from \"./types\";\nimport { isDataObjectClass, isSharedObjectClass, parseDataObjectsFromSharedObjects } from \"./utils\";\n\nexport interface RootDataObjectProps {\n initialObjects: LoadableObjectClassRecord;\n}\n\nexport class RootDataObject extends DataObject<{InitialState: RootDataObjectProps}> {\n private readonly initialObjectsDirKey = \"initial-objects-key\";\n private readonly _initialObjects: LoadableObjectRecord = {};\n\n private get initialObjectsDir() {\n const dir = this.root.getSubDirectory(this.initialObjectsDirKey);\n if (dir === undefined) {\n throw new Error(\"InitialObjects sub-directory was not initialized\");\n }\n return dir;\n }\n\n protected async initializingFirstTime(props: RootDataObjectProps) {\n this.root.createSubDirectory(this.initialObjectsDirKey);\n\n // Create initial objects provided by the developer\n const initialObjectsP: Promise<void>[] = [];\n Object.entries(props.initialObjects).forEach(([id, objectClass]) => {\n const createObject = async () => {\n const obj = await this.create(objectClass);\n this.initialObjectsDir.set(id, obj.handle);\n };\n initialObjectsP.push(createObject());\n });\n\n await Promise.all(initialObjectsP);\n }\n\n protected async hasInitialized() {\n // We will always load the initial objects so they are available to the developer\n const loadInitialObjectsP: Promise<void>[] = [];\n for (const [key, value] of Array.from(this.initialObjectsDir.entries())) {\n const loadDir = async () => {\n const obj = await value.get();\n Object.assign(this._initialObjects, { [key]: obj });\n };\n loadInitialObjectsP.push(loadDir());\n }\n\n await Promise.all(loadInitialObjectsP);\n }\n\n public get initialObjects(): LoadableObjectRecord {\n if (Object.keys(this._initialObjects).length === 0) {\n throw new Error(\"Initial Objects were not correctly initialized\");\n }\n return this._initialObjects;\n }\n\n public async create<T extends IFluidLoadable>(\n objectClass: LoadableObjectClass<T>,\n ): Promise<T> {\n if (isDataObjectClass(objectClass)) {\n return this.createDataObject<T>(objectClass);\n } else if (isSharedObjectClass(objectClass)) {\n return this.createSharedObject<T>(objectClass);\n }\n throw new Error(\"Could not create new Fluid object because an unknown object was passed\");\n }\n\n private async createDataObject<T extends IFluidLoadable>(dataObjectClass: DataObjectClass<T>): Promise<T> {\n const factory = dataObjectClass.factory;\n const packagePath = [...this.context.packagePath, factory.type];\n const router = await this.context.containerRuntime.createDataStore(packagePath);\n return requestFluidObject<T>(router, \"/\");\n }\n\n private createSharedObject<T extends IFluidLoadable>(\n sharedObjectClass: SharedObjectClass<T>,\n ): T {\n const factory = sharedObjectClass.getFactory();\n const obj = this.runtime.createChannel(undefined, factory.type);\n return obj as unknown as T;\n }\n}\n\nconst rootDataStoreId = \"rootDOId\";\n\n/**\n * The DOProviderContainerRuntimeFactory is container code that provides a single RootDataObject. This data object is\n * dynamically customized (registry and initial objects) based on the schema provided to the container runtime factory.\n */\nexport class DOProviderContainerRuntimeFactory extends BaseContainerRuntimeFactory {\n private readonly rootDataObjectFactory; // type is DataObjectFactory\n private readonly initialObjects: LoadableObjectClassRecord;\n constructor(schema: ContainerSchema) {\n const [registryEntries, sharedObjects] = parseDataObjectsFromSharedObjects(schema);\n const rootDataObjectFactory =\n new DataObjectFactory(\n \"rootDO\",\n RootDataObject,\n sharedObjects,\n {},\n registryEntries,\n );\n super([rootDataObjectFactory.registryEntry], [], [defaultRouteRequestHandler(rootDataStoreId)]);\n this.rootDataObjectFactory = rootDataObjectFactory;\n this.initialObjects = schema.initialObjects;\n }\n\n protected async containerInitializingFirstTime(runtime: IContainerRuntime) {\n // The first time we create the container we create the RootDataObject\n await this.rootDataObjectFactory.createRootInstance(\n rootDataStoreId,\n runtime,\n { initialObjects: this.initialObjects });\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serviceAudience.d.ts","sourceRoot":"","sources":["../src/serviceAudience.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,uCAAuC,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAE5E;;;;;GAKG;AACH,8BAAsB,eAAe,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO,CAC/D,SAAQ,iBAAiB,CAAC,sBAAsB,CAAC,CAAC,CAAC,CACnD,YAAW,gBAAgB,CAAC,CAAC,CAAC;IAiB1B,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS;IAhB3C,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;IAEvC;;;;;;;;;;OAUG;IACH,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAa;gBAG3B,SAAS,EAAE,SAAS;
|
|
1
|
+
{"version":3,"file":"serviceAudience.d.ts","sourceRoot":"","sources":["../src/serviceAudience.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,uCAAuC,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAE5E;;;;;GAKG;AACH,8BAAsB,eAAe,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO,CAC/D,SAAQ,iBAAiB,CAAC,sBAAsB,CAAC,CAAC,CAAC,CACnD,YAAW,gBAAgB,CAAC,CAAC,CAAC;IAiB1B,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS;IAhB3C,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;IAEvC;;;;;;;;;;OAUG;IACH,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAa;gBAG3B,SAAS,EAAE,SAAS;IA2B3C,SAAS,CAAC,QAAQ,CAAC,mBAAmB,CAAC,cAAc,EAAE,OAAO,GAAG,CAAC;IAElE;;OAEG;IACI,UAAU,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IAuBnC;;OAEG;IACI,SAAS,IAAI,CAAC,GAAG,SAAS;IAQjC,OAAO,CAAC,SAAS;IAejB,SAAS,CAAC,qBAAqB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO;CAI1D"}
|
package/dist/serviceAudience.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serviceAudience.js","sourceRoot":"","sources":["../src/serviceAudience.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,+DAAiE;AAMjE;;;;;GAKG;AACH,MAAsB,eACpB,SAAQ,gCAA4C;IAiBpD,YACuB,SAAoB;QAEzC,KAAK,EAAE,CAAC;QAFa,cAAS,GAAT,SAAS,CAAW;QAd3C;;;;;;;;;;WAUG;QACO,gBAAW,GAAmB,IAAI,GAAG,EAAE,CAAC;QAMhD,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QAEnC,iFAAiF;QACjF,+EAA+E;QAC/E,IAAI,CAAC,UAAU,EAAE,CAAC;QAElB,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,QAAgB,EAAE,OAAgB,EAAE,EAAE;YACnE,IAAI,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAAE;gBACvC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;gBACxC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;gBAC3C,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;aAC7B;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,QAAgB,EAAE,EAAE;YACpD,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;gBAClC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACrE,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;aAC7B;QACH,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"serviceAudience.js","sourceRoot":"","sources":["../src/serviceAudience.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { TypedEventEmitter } from \"@fluidframework/common-utils\";\nimport { IAudience } from \"@fluidframework/container-definitions\";\nimport { Container } from \"@fluidframework/container-loader\";\nimport { IClient } from \"@fluidframework/protocol-definitions\";\nimport { IServiceAudience, IServiceAudienceEvents, IMember } from \"./types\";\n\n/**\n * Base class for providing audience information for sessions interacting with FluidContainer\n * This can be extended by different service-specific client packages to additional parameters to\n * the user and client details returned in IMember\n * @typeParam M - A service-specific member type.\n */\nexport abstract class ServiceAudience<M extends IMember = IMember>\n extends TypedEventEmitter<IServiceAudienceEvents<M>>\n implements IServiceAudience<M> {\n protected readonly audience: IAudience;\n\n /**\n * Retain the most recent member list. This is so we have more information about a member\n * leaving the audience in the removeMember event. It allows us to match the behavior of the\n * addMember event where it only fires on a change to the members this class exposes (and would\n * actually produce a change in what getMembers returns). It also allows us to provide the\n * client details in the event which makes it easier to find that client connection in a map\n * keyed on the userId and not clientId.\n * This map will always be up-to-date in a removeMember event because it is set once at\n * construction and in every addMember event.\n * It is mapped clientId to M to be better work with what the IAudience event provides\n */\n protected lastMembers: Map<string, M> = new Map();\n\n constructor(\n protected readonly container: Container,\n ) {\n super();\n this.audience = container.audience;\n\n // getMembers will assign lastMembers so the removeMember event has what it needs\n // in case it would fire before getMembers otherwise gets called the first time\n this.getMembers();\n\n this.audience.on(\"addMember\", (clientId: string, details: IClient) => {\n if (this.shouldIncludeAsMember(details)) {\n const member = this.getMember(clientId);\n this.emit(\"memberAdded\", clientId, member);\n this.emit(\"membersChanged\");\n }\n });\n\n this.audience.on(\"removeMember\", (clientId: string) => {\n if (this.lastMembers.has(clientId)) {\n this.emit(\"memberRemoved\", clientId, this.lastMembers.get(clientId));\n this.emit(\"membersChanged\");\n }\n });\n\n this.container.on(\"connected\", () => this.emit(\"membersChanged\"));\n }\n\n protected abstract createServiceMember(audienceMember: IClient): M;\n\n /**\n * {@inheritDoc IServiceAudience.getMembers}\n */\n public getMembers(): Map<string, M> {\n const users = new Map<string, M>();\n const clientMemberMap = new Map<string, M>();\n // Iterate through the members and get the user specifics.\n this.audience.getMembers().forEach((member: IClient, clientId: string) => {\n if (this.shouldIncludeAsMember(member)) {\n const userId = member.user.id;\n // Ensure we're tracking the user\n let user = users.get(userId);\n if (user === undefined) {\n user = this.createServiceMember(member);\n users.set(userId, user);\n }\n\n // Add this connection to their collection\n user.connections.push({ id: clientId, mode: member.mode });\n clientMemberMap.set(clientId, user);\n }\n });\n this.lastMembers = clientMemberMap;\n return users;\n }\n\n /**\n * {@inheritDoc IServiceAudience.getMyself}\n */\n public getMyself(): M | undefined {\n const clientId = this.container.clientId;\n if (clientId === undefined) {\n return undefined;\n }\n return this.getMember(clientId);\n }\n\n private getMember(clientId: string): M | undefined {\n // Fetch the user ID assoicated with this client ID from the runtime\n const internalAudienceMember = this.audience.getMember(clientId);\n if (internalAudienceMember === undefined) {\n return undefined;\n }\n // Return the member object with any other clients associated for this user\n const allMembers = this.getMembers();\n const member = allMembers.get(internalAudienceMember?.user.id);\n if (member === undefined) {\n throw Error(`Attempted to fetch client ${clientId} that is not part of the current member list`);\n }\n return member;\n }\n\n protected shouldIncludeAsMember(member: IClient): boolean {\n // Include only human members\n return member.details.capabilities.interactive;\n }\n}\n"]}
|
package/lib/rootDataObject.d.ts
CHANGED
|
@@ -9,7 +9,9 @@ import { ContainerSchema, LoadableObjectClass, LoadableObjectClassRecord, Loadab
|
|
|
9
9
|
export interface RootDataObjectProps {
|
|
10
10
|
initialObjects: LoadableObjectClassRecord;
|
|
11
11
|
}
|
|
12
|
-
export declare class RootDataObject extends DataObject<{
|
|
12
|
+
export declare class RootDataObject extends DataObject<{
|
|
13
|
+
InitialState: RootDataObjectProps;
|
|
14
|
+
}> {
|
|
13
15
|
private readonly initialObjectsDirKey;
|
|
14
16
|
private readonly _initialObjects;
|
|
15
17
|
private get initialObjectsDir();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rootDataObject.d.ts","sourceRoot":"","sources":["../src/rootDataObject.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EACH,2BAA2B,EAC3B,UAAU,EAGb,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEjE,OAAO,EACH,eAAe,EAEf,mBAAmB,EACnB,yBAAyB,EACzB,oBAAoB,EAEvB,MAAM,SAAS,CAAC;AAGjB,MAAM,WAAW,mBAAmB;IAChC,cAAc,EAAE,yBAAyB,CAAC;CAC7C;
|
|
1
|
+
{"version":3,"file":"rootDataObject.d.ts","sourceRoot":"","sources":["../src/rootDataObject.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EACH,2BAA2B,EAC3B,UAAU,EAGb,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEjE,OAAO,EACH,eAAe,EAEf,mBAAmB,EACnB,yBAAyB,EACzB,oBAAoB,EAEvB,MAAM,SAAS,CAAC;AAGjB,MAAM,WAAW,mBAAmB;IAChC,cAAc,EAAE,yBAAyB,CAAC;CAC7C;AAED,qBAAa,cAAe,SAAQ,UAAU,CAAC;IAAC,YAAY,EAAE,mBAAmB,CAAA;CAAC,CAAC;IAC/E,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAyB;IAC9D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA4B;IAE5D,OAAO,KAAK,iBAAiB,GAM5B;cAEe,qBAAqB,CAAC,KAAK,EAAE,mBAAmB;cAgBhD,cAAc;IAc9B,IAAW,cAAc,IAAI,oBAAoB,CAKhD;IAEY,MAAM,CAAC,CAAC,SAAS,cAAc,EACxC,WAAW,EAAE,mBAAmB,CAAC,CAAC,CAAC,GACpC,OAAO,CAAC,CAAC,CAAC;YASC,gBAAgB;IAO9B,OAAO,CAAC,kBAAkB;CAO7B;AAID;;;GAGG;AACH,qBAAa,iCAAkC,SAAQ,2BAA2B;IAC9E,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IACvC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA4B;gBAC/C,MAAM,EAAE,eAAe;cAenB,8BAA8B,CAAC,OAAO,EAAE,iBAAiB;CAO5E"}
|
package/lib/rootDataObject.js
CHANGED
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
import { BaseContainerRuntimeFactory, DataObject, DataObjectFactory, defaultRouteRequestHandler, } from "@fluidframework/aqueduct";
|
|
6
6
|
import { requestFluidObject } from "@fluidframework/runtime-utils";
|
|
7
7
|
import { isDataObjectClass, isSharedObjectClass, parseDataObjectsFromSharedObjects } from "./utils";
|
|
8
|
-
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
9
8
|
export class RootDataObject extends DataObject {
|
|
10
9
|
constructor() {
|
|
11
10
|
super(...arguments);
|
|
@@ -79,9 +78,7 @@ const rootDataStoreId = "rootDOId";
|
|
|
79
78
|
export class DOProviderContainerRuntimeFactory extends BaseContainerRuntimeFactory {
|
|
80
79
|
constructor(schema) {
|
|
81
80
|
const [registryEntries, sharedObjects] = parseDataObjectsFromSharedObjects(schema);
|
|
82
|
-
const rootDataObjectFactory =
|
|
83
|
-
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
84
|
-
new DataObjectFactory("rootDO", RootDataObject, sharedObjects, {}, registryEntries);
|
|
81
|
+
const rootDataObjectFactory = new DataObjectFactory("rootDO", RootDataObject, sharedObjects, {}, registryEntries);
|
|
85
82
|
super([rootDataObjectFactory.registryEntry], [], [defaultRouteRequestHandler(rootDataStoreId)]);
|
|
86
83
|
this.rootDataObjectFactory = rootDataObjectFactory;
|
|
87
84
|
this.initialObjects = schema.initialObjects;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rootDataObject.js","sourceRoot":"","sources":["../src/rootDataObject.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EACH,2BAA2B,EAC3B,UAAU,EACV,iBAAiB,EACjB,0BAA0B,GAC7B,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AASnE,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,iCAAiC,EAAE,MAAM,SAAS,CAAC;AAMpG,
|
|
1
|
+
{"version":3,"file":"rootDataObject.js","sourceRoot":"","sources":["../src/rootDataObject.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\nimport {\n BaseContainerRuntimeFactory,\n DataObject,\n DataObjectFactory,\n defaultRouteRequestHandler,\n} from \"@fluidframework/aqueduct\";\nimport { IContainerRuntime } from \"@fluidframework/container-runtime-definitions\";\nimport { IFluidLoadable } from \"@fluidframework/core-interfaces\";\nimport { requestFluidObject } from \"@fluidframework/runtime-utils\";\nimport {\n ContainerSchema,\n DataObjectClass,\n LoadableObjectClass,\n LoadableObjectClassRecord,\n LoadableObjectRecord,\n SharedObjectClass,\n} from \"./types\";\nimport { isDataObjectClass, isSharedObjectClass, parseDataObjectsFromSharedObjects } from \"./utils\";\n\nexport interface RootDataObjectProps {\n initialObjects: LoadableObjectClassRecord;\n}\n\nexport class RootDataObject extends DataObject<{InitialState: RootDataObjectProps}> {\n private readonly initialObjectsDirKey = \"initial-objects-key\";\n private readonly _initialObjects: LoadableObjectRecord = {};\n\n private get initialObjectsDir() {\n const dir = this.root.getSubDirectory(this.initialObjectsDirKey);\n if (dir === undefined) {\n throw new Error(\"InitialObjects sub-directory was not initialized\");\n }\n return dir;\n }\n\n protected async initializingFirstTime(props: RootDataObjectProps) {\n this.root.createSubDirectory(this.initialObjectsDirKey);\n\n // Create initial objects provided by the developer\n const initialObjectsP: Promise<void>[] = [];\n Object.entries(props.initialObjects).forEach(([id, objectClass]) => {\n const createObject = async () => {\n const obj = await this.create(objectClass);\n this.initialObjectsDir.set(id, obj.handle);\n };\n initialObjectsP.push(createObject());\n });\n\n await Promise.all(initialObjectsP);\n }\n\n protected async hasInitialized() {\n // We will always load the initial objects so they are available to the developer\n const loadInitialObjectsP: Promise<void>[] = [];\n for (const [key, value] of Array.from(this.initialObjectsDir.entries())) {\n const loadDir = async () => {\n const obj = await value.get();\n Object.assign(this._initialObjects, { [key]: obj });\n };\n loadInitialObjectsP.push(loadDir());\n }\n\n await Promise.all(loadInitialObjectsP);\n }\n\n public get initialObjects(): LoadableObjectRecord {\n if (Object.keys(this._initialObjects).length === 0) {\n throw new Error(\"Initial Objects were not correctly initialized\");\n }\n return this._initialObjects;\n }\n\n public async create<T extends IFluidLoadable>(\n objectClass: LoadableObjectClass<T>,\n ): Promise<T> {\n if (isDataObjectClass(objectClass)) {\n return this.createDataObject<T>(objectClass);\n } else if (isSharedObjectClass(objectClass)) {\n return this.createSharedObject<T>(objectClass);\n }\n throw new Error(\"Could not create new Fluid object because an unknown object was passed\");\n }\n\n private async createDataObject<T extends IFluidLoadable>(dataObjectClass: DataObjectClass<T>): Promise<T> {\n const factory = dataObjectClass.factory;\n const packagePath = [...this.context.packagePath, factory.type];\n const router = await this.context.containerRuntime.createDataStore(packagePath);\n return requestFluidObject<T>(router, \"/\");\n }\n\n private createSharedObject<T extends IFluidLoadable>(\n sharedObjectClass: SharedObjectClass<T>,\n ): T {\n const factory = sharedObjectClass.getFactory();\n const obj = this.runtime.createChannel(undefined, factory.type);\n return obj as unknown as T;\n }\n}\n\nconst rootDataStoreId = \"rootDOId\";\n\n/**\n * The DOProviderContainerRuntimeFactory is container code that provides a single RootDataObject. This data object is\n * dynamically customized (registry and initial objects) based on the schema provided to the container runtime factory.\n */\nexport class DOProviderContainerRuntimeFactory extends BaseContainerRuntimeFactory {\n private readonly rootDataObjectFactory; // type is DataObjectFactory\n private readonly initialObjects: LoadableObjectClassRecord;\n constructor(schema: ContainerSchema) {\n const [registryEntries, sharedObjects] = parseDataObjectsFromSharedObjects(schema);\n const rootDataObjectFactory =\n new DataObjectFactory(\n \"rootDO\",\n RootDataObject,\n sharedObjects,\n {},\n registryEntries,\n );\n super([rootDataObjectFactory.registryEntry], [], [defaultRouteRequestHandler(rootDataStoreId)]);\n this.rootDataObjectFactory = rootDataObjectFactory;\n this.initialObjects = schema.initialObjects;\n }\n\n protected async containerInitializingFirstTime(runtime: IContainerRuntime) {\n // The first time we create the container we create the RootDataObject\n await this.rootDataObjectFactory.createRootInstance(\n rootDataStoreId,\n runtime,\n { initialObjects: this.initialObjects });\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serviceAudience.d.ts","sourceRoot":"","sources":["../src/serviceAudience.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,uCAAuC,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAE5E;;;;;GAKG;AACH,8BAAsB,eAAe,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO,CAC/D,SAAQ,iBAAiB,CAAC,sBAAsB,CAAC,CAAC,CAAC,CACnD,YAAW,gBAAgB,CAAC,CAAC,CAAC;IAiB1B,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS;IAhB3C,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;IAEvC;;;;;;;;;;OAUG;IACH,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAa;gBAG3B,SAAS,EAAE,SAAS;
|
|
1
|
+
{"version":3,"file":"serviceAudience.d.ts","sourceRoot":"","sources":["../src/serviceAudience.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,uCAAuC,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAE5E;;;;;GAKG;AACH,8BAAsB,eAAe,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO,CAC/D,SAAQ,iBAAiB,CAAC,sBAAsB,CAAC,CAAC,CAAC,CACnD,YAAW,gBAAgB,CAAC,CAAC,CAAC;IAiB1B,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS;IAhB3C,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;IAEvC;;;;;;;;;;OAUG;IACH,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAa;gBAG3B,SAAS,EAAE,SAAS;IA2B3C,SAAS,CAAC,QAAQ,CAAC,mBAAmB,CAAC,cAAc,EAAE,OAAO,GAAG,CAAC;IAElE;;OAEG;IACI,UAAU,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IAuBnC;;OAEG;IACI,SAAS,IAAI,CAAC,GAAG,SAAS;IAQjC,OAAO,CAAC,SAAS;IAejB,SAAS,CAAC,qBAAqB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO;CAI1D"}
|
package/lib/serviceAudience.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serviceAudience.js","sourceRoot":"","sources":["../src/serviceAudience.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAMjE;;;;;GAKG;AACH,MAAM,OAAgB,eACpB,SAAQ,iBAA4C;IAiBpD,YACuB,SAAoB;QAEzC,KAAK,EAAE,CAAC;QAFa,cAAS,GAAT,SAAS,CAAW;QAd3C;;;;;;;;;;WAUG;QACO,gBAAW,GAAmB,IAAI,GAAG,EAAE,CAAC;QAMhD,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QAEnC,iFAAiF;QACjF,+EAA+E;QAC/E,IAAI,CAAC,UAAU,EAAE,CAAC;QAElB,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,QAAgB,EAAE,OAAgB,EAAE,EAAE;YACnE,IAAI,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAAE;gBACvC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;gBACxC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;gBAC3C,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;aAC7B;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,QAAgB,EAAE,EAAE;YACpD,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;gBAClC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACrE,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;aAC7B;QACH,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"serviceAudience.js","sourceRoot":"","sources":["../src/serviceAudience.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { TypedEventEmitter } from \"@fluidframework/common-utils\";\nimport { IAudience } from \"@fluidframework/container-definitions\";\nimport { Container } from \"@fluidframework/container-loader\";\nimport { IClient } from \"@fluidframework/protocol-definitions\";\nimport { IServiceAudience, IServiceAudienceEvents, IMember } from \"./types\";\n\n/**\n * Base class for providing audience information for sessions interacting with FluidContainer\n * This can be extended by different service-specific client packages to additional parameters to\n * the user and client details returned in IMember\n * @typeParam M - A service-specific member type.\n */\nexport abstract class ServiceAudience<M extends IMember = IMember>\n extends TypedEventEmitter<IServiceAudienceEvents<M>>\n implements IServiceAudience<M> {\n protected readonly audience: IAudience;\n\n /**\n * Retain the most recent member list. This is so we have more information about a member\n * leaving the audience in the removeMember event. It allows us to match the behavior of the\n * addMember event where it only fires on a change to the members this class exposes (and would\n * actually produce a change in what getMembers returns). It also allows us to provide the\n * client details in the event which makes it easier to find that client connection in a map\n * keyed on the userId and not clientId.\n * This map will always be up-to-date in a removeMember event because it is set once at\n * construction and in every addMember event.\n * It is mapped clientId to M to be better work with what the IAudience event provides\n */\n protected lastMembers: Map<string, M> = new Map();\n\n constructor(\n protected readonly container: Container,\n ) {\n super();\n this.audience = container.audience;\n\n // getMembers will assign lastMembers so the removeMember event has what it needs\n // in case it would fire before getMembers otherwise gets called the first time\n this.getMembers();\n\n this.audience.on(\"addMember\", (clientId: string, details: IClient) => {\n if (this.shouldIncludeAsMember(details)) {\n const member = this.getMember(clientId);\n this.emit(\"memberAdded\", clientId, member);\n this.emit(\"membersChanged\");\n }\n });\n\n this.audience.on(\"removeMember\", (clientId: string) => {\n if (this.lastMembers.has(clientId)) {\n this.emit(\"memberRemoved\", clientId, this.lastMembers.get(clientId));\n this.emit(\"membersChanged\");\n }\n });\n\n this.container.on(\"connected\", () => this.emit(\"membersChanged\"));\n }\n\n protected abstract createServiceMember(audienceMember: IClient): M;\n\n /**\n * {@inheritDoc IServiceAudience.getMembers}\n */\n public getMembers(): Map<string, M> {\n const users = new Map<string, M>();\n const clientMemberMap = new Map<string, M>();\n // Iterate through the members and get the user specifics.\n this.audience.getMembers().forEach((member: IClient, clientId: string) => {\n if (this.shouldIncludeAsMember(member)) {\n const userId = member.user.id;\n // Ensure we're tracking the user\n let user = users.get(userId);\n if (user === undefined) {\n user = this.createServiceMember(member);\n users.set(userId, user);\n }\n\n // Add this connection to their collection\n user.connections.push({ id: clientId, mode: member.mode });\n clientMemberMap.set(clientId, user);\n }\n });\n this.lastMembers = clientMemberMap;\n return users;\n }\n\n /**\n * {@inheritDoc IServiceAudience.getMyself}\n */\n public getMyself(): M | undefined {\n const clientId = this.container.clientId;\n if (clientId === undefined) {\n return undefined;\n }\n return this.getMember(clientId);\n }\n\n private getMember(clientId: string): M | undefined {\n // Fetch the user ID assoicated with this client ID from the runtime\n const internalAudienceMember = this.audience.getMember(clientId);\n if (internalAudienceMember === undefined) {\n return undefined;\n }\n // Return the member object with any other clients associated for this user\n const allMembers = this.getMembers();\n const member = allMembers.get(internalAudienceMember?.user.id);\n if (member === undefined) {\n throw Error(`Attempted to fetch client ${clientId} that is not part of the current member list`);\n }\n return member;\n }\n\n protected shouldIncludeAsMember(member: IClient): boolean {\n // Include only human members\n return member.details.capabilities.interactive;\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fluidframework/fluid-static",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.53.0",
|
|
4
4
|
"description": "A tool to enable consumption of Fluid Data Objects without requiring custom container code.",
|
|
5
5
|
"homepage": "https://fluidframework.com",
|
|
6
6
|
"repository": "https://github.com/microsoft/FluidFramework",
|
|
@@ -29,21 +29,21 @@
|
|
|
29
29
|
"tsfmt:fix": "tsfmt --replace"
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@fluidframework/aqueduct": "0.
|
|
32
|
+
"@fluidframework/aqueduct": "^0.53.0",
|
|
33
33
|
"@fluidframework/common-definitions": "^0.20.1",
|
|
34
34
|
"@fluidframework/common-utils": "^0.32.1",
|
|
35
|
-
"@fluidframework/container-definitions": "^0.
|
|
36
|
-
"@fluidframework/container-loader": "0.
|
|
37
|
-
"@fluidframework/container-runtime-definitions": "0.
|
|
38
|
-
"@fluidframework/core-interfaces": "^0.41.0
|
|
39
|
-
"@fluidframework/datastore-definitions": "0.
|
|
40
|
-
"@fluidframework/protocol-definitions": "^0.1026.0
|
|
41
|
-
"@fluidframework/request-handler": "0.
|
|
42
|
-
"@fluidframework/runtime-definitions": "0.
|
|
43
|
-
"@fluidframework/runtime-utils": "0.
|
|
35
|
+
"@fluidframework/container-definitions": "^0.43.0",
|
|
36
|
+
"@fluidframework/container-loader": "^0.53.0",
|
|
37
|
+
"@fluidframework/container-runtime-definitions": "^0.53.0",
|
|
38
|
+
"@fluidframework/core-interfaces": "^0.41.0",
|
|
39
|
+
"@fluidframework/datastore-definitions": "^0.53.0",
|
|
40
|
+
"@fluidframework/protocol-definitions": "^0.1026.0",
|
|
41
|
+
"@fluidframework/request-handler": "^0.53.0",
|
|
42
|
+
"@fluidframework/runtime-definitions": "^0.53.0",
|
|
43
|
+
"@fluidframework/runtime-utils": "^0.53.0"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
|
-
"@fluid-experimental/get-container": "0.
|
|
46
|
+
"@fluid-experimental/get-container": "^0.53.0",
|
|
47
47
|
"@fluidframework/build-common": "^0.23.0",
|
|
48
48
|
"@fluidframework/eslint-config-fluid": "^0.24.0",
|
|
49
49
|
"@microsoft/api-extractor": "^7.16.1",
|
package/src/rootDataObject.ts
CHANGED
|
@@ -25,8 +25,7 @@ export interface RootDataObjectProps {
|
|
|
25
25
|
initialObjects: LoadableObjectClassRecord;
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
export class RootDataObject extends DataObject<{}, RootDataObjectProps> {
|
|
28
|
+
export class RootDataObject extends DataObject<{InitialState: RootDataObjectProps}> {
|
|
30
29
|
private readonly initialObjectsDirKey = "initial-objects-key";
|
|
31
30
|
private readonly _initialObjects: LoadableObjectRecord = {};
|
|
32
31
|
|
|
@@ -114,8 +113,7 @@ export class DOProviderContainerRuntimeFactory extends BaseContainerRuntimeFacto
|
|
|
114
113
|
constructor(schema: ContainerSchema) {
|
|
115
114
|
const [registryEntries, sharedObjects] = parseDataObjectsFromSharedObjects(schema);
|
|
116
115
|
const rootDataObjectFactory =
|
|
117
|
-
|
|
118
|
-
new DataObjectFactory<RootDataObject, {}, RootDataObjectProps>(
|
|
116
|
+
new DataObjectFactory(
|
|
119
117
|
"rootDO",
|
|
120
118
|
RootDataObject,
|
|
121
119
|
sharedObjects,
|
package/src/serviceAudience.ts
CHANGED
|
@@ -57,6 +57,8 @@ export abstract class ServiceAudience<M extends IMember = IMember>
|
|
|
57
57
|
this.emit("membersChanged");
|
|
58
58
|
}
|
|
59
59
|
});
|
|
60
|
+
|
|
61
|
+
this.container.on("connected", () => this.emit("membersChanged"));
|
|
60
62
|
}
|
|
61
63
|
|
|
62
64
|
protected abstract createServiceMember(audienceMember: IClient): M;
|