@fluidframework/synthesize 0.58.0-55561 → 0.58.1001
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/dependencyContainer.d.ts.map +1 -1
- package/dist/dependencyContainer.js +7 -4
- package/dist/dependencyContainer.js.map +1 -1
- package/dist/test/dependencyContainer.spec.js +32 -0
- package/dist/test/dependencyContainer.spec.js.map +1 -1
- package/dist/test/tsconfig.tsbuildinfo +43 -109
- package/lib/dependencyContainer.js +7 -4
- package/lib/dependencyContainer.js.map +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependencyContainer.d.ts","sourceRoot":"","sources":["../src/dependencyContainer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACH,wBAAwB,EACxB,yBAAyB,EACzB,mBAAmB,EAGtB,MAAM,SAAS,CAAC;AACjB,OAAO,EACH,2BAA2B,EAC9B,MAAM,+BAA+B,CAAC;AAEvC;;;GAGG;AACH,qBAAa,mBAAmB,CAAC,IAAI,CAAE,YAAW,2BAA2B;IACzE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmD;IAC7E,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgC;IACxD,IAAW,2BAA2B,SAAmB;gBAEtC,GAAI,OAAO,EAAE,CAAC,2BAA2B,GAAG,SAAS,CAAC,EAAE;IAI3E;;;;;OAKG;IACI,QAAQ,CAAC,CAAC,SAAS,MAAM,IAAI,GAAG,MAAM,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI;IAQ/G;;;OAGG;IACI,UAAU,CAAC,IAAI,EAAE,MAAM,IAAI,GAAG,IAAI;IAMzC;;OAEG;IACI,UAAU,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EACtD,aAAa,EAAE,yBAAyB,CAAC,CAAC,CAAC,EAC3C,aAAa,EAAE,QAAQ,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,GACtD,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAAC;IAQjC;;;OAGG;IACI,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,OAAO,GAAG,OAAO;IAS3D;;OAEG;IACH,OAAO,CAAC,WAAW;
|
|
1
|
+
{"version":3,"file":"dependencyContainer.d.ts","sourceRoot":"","sources":["../src/dependencyContainer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACH,wBAAwB,EACxB,yBAAyB,EACzB,mBAAmB,EAGtB,MAAM,SAAS,CAAC;AACjB,OAAO,EACH,2BAA2B,EAC9B,MAAM,+BAA+B,CAAC;AAEvC;;;GAGG;AACH,qBAAa,mBAAmB,CAAC,IAAI,CAAE,YAAW,2BAA2B;IACzE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmD;IAC7E,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgC;IACxD,IAAW,2BAA2B,SAAmB;gBAEtC,GAAI,OAAO,EAAE,CAAC,2BAA2B,GAAG,SAAS,CAAC,EAAE;IAI3E;;;;;OAKG;IACI,QAAQ,CAAC,CAAC,SAAS,MAAM,IAAI,GAAG,MAAM,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI;IAQ/G;;;OAGG;IACI,UAAU,CAAC,IAAI,EAAE,MAAM,IAAI,GAAG,IAAI;IAMzC;;OAEG;IACI,UAAU,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EACtD,aAAa,EAAE,yBAAyB,CAAC,CAAC,CAAC,EAC3C,aAAa,EAAE,QAAQ,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,GACtD,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAAC;IAQjC;;;OAGG;IACI,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,OAAO,GAAG,OAAO;IAS3D;;OAEG;IACH,OAAO,CAAC,WAAW;IAsBnB,OAAO,CAAC,gBAAgB;IAkBxB,OAAO,CAAC,gBAAgB;IAkBxB,OAAO,CAAC,eAAe;CA0C1B"}
|
|
@@ -64,6 +64,9 @@ class DependencyContainer {
|
|
|
64
64
|
* @deprecated - Needed for back compat
|
|
65
65
|
*/
|
|
66
66
|
getProvider(provider) {
|
|
67
|
+
// this was removed, but some partners have trouble with back compat where they
|
|
68
|
+
// use invalid patterns with IFluidObject and IFluidDependencySynthesizer
|
|
69
|
+
// this is just for back compat until those are removed
|
|
67
70
|
if (this.has(provider)) {
|
|
68
71
|
if (this.providers.has(provider)) {
|
|
69
72
|
return this.providers.get(provider);
|
|
@@ -73,10 +76,10 @@ class DependencyContainer {
|
|
|
73
76
|
return parent.getProvider(provider);
|
|
74
77
|
}
|
|
75
78
|
else {
|
|
76
|
-
//
|
|
77
|
-
const maybeGetProvider = parent
|
|
78
|
-
if (
|
|
79
|
-
return maybeGetProvider(provider);
|
|
79
|
+
// older implementations of the IFluidDependencySynthesizer exposed getProvider
|
|
80
|
+
const maybeGetProvider = parent;
|
|
81
|
+
if ((maybeGetProvider === null || maybeGetProvider === void 0 ? void 0 : maybeGetProvider.getProvider) !== undefined) {
|
|
82
|
+
return maybeGetProvider.getProvider(provider);
|
|
80
83
|
}
|
|
81
84
|
}
|
|
82
85
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependencyContainer.js","sourceRoot":"","sources":["../src/dependencyContainer.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AASH,+EAEuC;AAEvC;;;GAGG;AACH,MAAa,mBAAmB;IAK5B,YAAmB,GAAI,OAAoD;QAJ1D,cAAS,GAAG,IAAI,GAAG,EAAwC,CAAC;QAKzE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAoC,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;IAC5F,CAAC;IAJD,IAAW,2BAA2B,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;IAMzD;;;;;OAKG;IACI,QAAQ,CAAoC,IAAO,EAAE,QAA4C;QACpG,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YAC1B,MAAM,IAAI,KAAK,CAAC,6CAA6C,IAAI,sBAAsB,CAAC,CAAC;SAC5F;QAED,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACvC,CAAC;IAED;;;OAGG;IACI,UAAU,CAAC,IAAgB;QAC9B,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YAC1B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SAC/B;IACL,CAAC;IAED;;OAEG;IACI,UAAU,CACb,aAA2C,EAC3C,aAAqD;QAErD,MAAM,IAAI,GAAmC,EAAS,CAAC;QACvD,IAAI,CAAC,gBAAgB,CAAI,IAAI,EAAE,aAAa,CAAC,CAAC;QAC9C,IAAI,CAAC,gBAAgB,CAAI,IAAI,EAAE,aAAa,CAAC,CAAC;QAC9C,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,yDAA2B,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9E,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;OAGG;IACI,GAAG,CAAC,IAAY,EAAE,cAAwB;QAC7C,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAkB,CAAC,EAAE;YACxC,OAAO,IAAI,CAAC;SACf;QACD,IAAI,cAAc,KAAK,IAAI,EAAE;YACzB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAA8B,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;SAC7E;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IACD;;OAEG;IACK,WAAW,CAAC,QAA6B;QAC7C,IAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YACnB,IAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;gBAC7B,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;aACvC;YACD,KAAI,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;gBAC9B,IAAG,MAAM,YAAY,mBAAmB,EAAE;oBACtC,OAAO,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;iBACvC;qBAAI;oBACD,2DAA2D;oBAC3D,MAAM,gBAAgB,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;oBAC/C,IAAG,OAAO,gBAAgB,KAAK,UAAU,EAAE;wBACvC,OAAO,gBAAgB,CAAC,QAAQ,CAAC,CAAC;qBACrC;iBACJ;aACJ;SACJ;IACL,CAAC;IAEO,gBAAgB,CACpB,IAAyC,EACzC,KAA6C;QAE7C,IAAI,KAAK,KAAK,SAAS,EAAE;YAAE,OAAO;SAAE;QACpC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAA8B,EAAE;YAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;YAC3C,IAAG,QAAQ,KAAK,SAAS,EAAE;gBACvB,MAAM,IAAI,KAAK,CAAC,uEAAuE,GAAG,EAAE,CAAC,CAAC;aACjG;YACD,MAAM,CAAC,cAAc,CACjB,IAAI,EACJ,GAAG,EACH,QAAQ,CACX,CAAC;SACL;IACL,CAAC;IAEO,gBAAgB,CACpB,IAAyC,EACzC,KAAmC;;QAEnC,IAAI,KAAK,KAAK,SAAS,EAAE;YAAE,OAAO;SAAE;QACpC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAA8B,EAAE;YAC/D,6EAA6E;YAC7E,wFAAwF;YACxF,wEAAwE;YACxE,MAAM,QAAQ,SAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,mCAAI,EAAE,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,SAAS,EAAE,CAAC;YAC7E,MAAM,CAAC,cAAc,CACjB,IAAI,EACJ,GAAG,EACH,QAAQ,CACX,CAAC;SACL;IACL,CAAC;IAEO,eAAe,CAAuB,CAAI;QAC9C,oCAAoC;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACvC,IAAI,QAAQ,KAAK,SAAS,EAAE;YACxB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;gBAC/B,yEAAyE;gBACzE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAA8C,CAAC;gBAClE,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CACzB,EAAE,EACF,EAAE,CAAC,CAAC;gBACR,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBAC3D,IAAI,UAAU,KAAK,SAAS,EAAE;oBAC1B,OAAO,UAAU,CAAC;iBACrB;aACJ;YACD,OAAO,SAAS,CAAC;SACpB;QAED,+EAA+E;QAC/E,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;YAChC,OAAO;gBACH,GAAG;oBACC,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;wBAC5C,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,yDAA2B,CAAC,CAAC;6BACpD,IAAI,CAAC,KAAK,EAAE,GAAG,EAAgB,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;6BAChD,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAG,CAAC,CAAC,CAAC,CAAC;qBAC5B;gBACL,CAAC;aACJ,CAAC;SACL;QACD,OAAO;YACC,GAAG;gBACC,IAAI,QAAQ,EAAE;oBACV,OAAO,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;wBACxC,IAAI,CAAC,EAAE;4BACH,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;yBACf;oBACL,CAAC,CAAC,CAAC;iBACN;YACL,CAAC;SACJ,CAAC;IACV,CAAC;CACJ;AAhKD,kDAgKC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n AsyncFluidObjectProvider,\n FluidObjectSymbolProvider,\n FluidObjectProvider,\n AsyncOptionalFluidObjectProvider,\n AsyncRequiredFluidObjectProvider,\n} from \"./types\";\nimport {\n IFluidDependencySynthesizer,\n} from \"./IFluidDependencySynthesizer\";\n\n/**\n * DependencyContainer is similar to a IoC Container. It takes providers and will\n * synthesize an object based on them when requested.\n */\nexport class DependencyContainer<TMap> implements IFluidDependencySynthesizer {\n private readonly providers = new Map<keyof TMap, FluidObjectProvider<any>>();\n private readonly parents: IFluidDependencySynthesizer[];\n public get IFluidDependencySynthesizer() { return this; }\n\n public constructor(... parents: (IFluidDependencySynthesizer | undefined)[]) {\n this.parents = parents.filter((v): v is IFluidDependencySynthesizer => v !== undefined);\n }\n\n /**\n * Add a new provider\n * @param type - Name of the Type T being provided\n * @param provider - A provider that will resolve the T correctly when asked\n * @throws - If passing a type that's already registered\n */\n public register<T extends keyof TMap = keyof TMap>(type: T, provider: FluidObjectProvider<Pick<TMap, T>>): void {\n if (this.providers.has(type)) {\n throw new Error(`Attempting to register a provider of type ${type} that already exists`);\n }\n\n this.providers.set(type, provider);\n }\n\n /**\n * Remove a provider\n * @param type - Name of the provider to remove\n */\n public unregister(type: keyof TMap): void {\n if (this.providers.has(type)) {\n this.providers.delete(type);\n }\n }\n\n /**\n * {@inheritDoc (IFluidDependencySynthesizer:interface).synthesize}\n */\n public synthesize<O, R = undefined | Record<string, never>>(\n optionalTypes: FluidObjectSymbolProvider<O>,\n requiredTypes: Required<FluidObjectSymbolProvider<R>>,\n ): AsyncFluidObjectProvider<O, R> {\n const base: AsyncFluidObjectProvider<O, R> = {} as any;\n this.generateRequired<R>(base, requiredTypes);\n this.generateOptional<O>(base, optionalTypes);\n Object.defineProperty(base, IFluidDependencySynthesizer, { get: () => this });\n return base;\n }\n\n /**\n * {@inheritDoc (IFluidDependencySynthesizer:interface).has}\n * @param excludeParents - If true, exclude checking parent registries\n */\n public has(type: string, excludeParents?: boolean): boolean {\n if (this.providers.has(type as keyof TMap)) {\n return true;\n }\n if (excludeParents !== true) {\n return this.parents.some((p: IFluidDependencySynthesizer) => p.has(type));\n }\n return false;\n }\n /**\n * @deprecated - Needed for back compat\n */\n private getProvider(provider: string & keyof TMap) {\n if(this.has(provider)) {\n if(this.providers.has(provider)) {\n return this.providers.get(provider);\n }\n for(const parent of this.parents) {\n if(parent instanceof DependencyContainer) {\n return parent.getProvider(provider);\n }else{\n // eslint-disable-next-line @typescript-eslint/dot-notation\n const maybeGetProvider = parent[\"getProvider\"];\n if(typeof maybeGetProvider === \"function\") {\n return maybeGetProvider(provider);\n }\n }\n }\n }\n }\n\n private generateRequired<T>(\n base: AsyncRequiredFluidObjectProvider<T>,\n types: Required<FluidObjectSymbolProvider<T>>,\n ) {\n if (types === undefined) { return; }\n for (const key of Object.keys(types) as unknown as (keyof TMap)[]) {\n const provider = this.resolveProvider(key);\n if(provider === undefined) {\n throw new Error(`Object attempted to be created without registered required provider ${key}`);\n }\n Object.defineProperty(\n base,\n key,\n provider,\n );\n }\n }\n\n private generateOptional<T>(\n base: AsyncOptionalFluidObjectProvider<T>,\n types: FluidObjectSymbolProvider<T>,\n ) {\n if (types === undefined) { return; }\n for (const key of Object.keys(types) as unknown as (keyof TMap)[]) {\n // back-compat: in 0.56 we allow undefined in the types, but we didn't before\n // this will keep runtime back compat, eventually we should support undefined properties\n // rather than properties that return promises that resolve to undefined\n const provider = this.resolveProvider(key) ?? { get: async () => undefined };\n Object.defineProperty(\n base,\n key,\n provider,\n );\n }\n }\n\n private resolveProvider<T extends keyof TMap>(t: T): PropertyDescriptor | undefined {\n // If we have the provider return it\n const provider = this.providers.get(t);\n if (provider === undefined) {\n for (const parent of this.parents) {\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n const sp = { [t]: t } as FluidObjectSymbolProvider<Pick<TMap, T>>;\n const syn = parent.synthesize<Pick<TMap, T>,{}>(\n sp,\n {});\n const descriptor = Object.getOwnPropertyDescriptor(syn, t);\n if (descriptor !== undefined) {\n return descriptor;\n }\n }\n return undefined;\n }\n\n // The double nested gets are required for lazy loading the provider resolution\n if (typeof provider === \"function\") {\n return {\n get() {\n if (provider && typeof provider === \"function\") {\n return Promise.resolve(this[IFluidDependencySynthesizer])\n .then(async (fds): Promise<any> => provider(fds))\n .then((p) => p?.[t]);\n }\n },\n };\n }\n return {\n get() {\n if (provider) {\n return Promise.resolve(provider).then((p) => {\n if (p) {\n return p[t];\n }\n });\n }\n },\n };\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"dependencyContainer.js","sourceRoot":"","sources":["../src/dependencyContainer.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 {\n AsyncFluidObjectProvider,\n FluidObjectSymbolProvider,\n FluidObjectProvider,\n AsyncOptionalFluidObjectProvider,\n AsyncRequiredFluidObjectProvider,\n} from \"./types\";\nimport {\n IFluidDependencySynthesizer,\n} from \"./IFluidDependencySynthesizer\";\n\n/**\n * DependencyContainer is similar to a IoC Container. It takes providers and will\n * synthesize an object based on them when requested.\n */\nexport class DependencyContainer<TMap> implements IFluidDependencySynthesizer {\n private readonly providers = new Map<keyof TMap, FluidObjectProvider<any>>();\n private readonly parents: IFluidDependencySynthesizer[];\n public get IFluidDependencySynthesizer() { return this; }\n\n public constructor(... parents: (IFluidDependencySynthesizer | undefined)[]) {\n this.parents = parents.filter((v): v is IFluidDependencySynthesizer => v !== undefined);\n }\n\n /**\n * Add a new provider\n * @param type - Name of the Type T being provided\n * @param provider - A provider that will resolve the T correctly when asked\n * @throws - If passing a type that's already registered\n */\n public register<T extends keyof TMap = keyof TMap>(type: T, provider: FluidObjectProvider<Pick<TMap, T>>): void {\n if (this.providers.has(type)) {\n throw new Error(`Attempting to register a provider of type ${type} that already exists`);\n }\n\n this.providers.set(type, provider);\n }\n\n /**\n * Remove a provider\n * @param type - Name of the provider to remove\n */\n public unregister(type: keyof TMap): void {\n if (this.providers.has(type)) {\n this.providers.delete(type);\n }\n }\n\n /**\n * {@inheritDoc (IFluidDependencySynthesizer:interface).synthesize}\n */\n public synthesize<O, R = undefined | Record<string, never>>(\n optionalTypes: FluidObjectSymbolProvider<O>,\n requiredTypes: Required<FluidObjectSymbolProvider<R>>,\n ): AsyncFluidObjectProvider<O, R> {\n const base: AsyncFluidObjectProvider<O, R> = {} as any;\n this.generateRequired<R>(base, requiredTypes);\n this.generateOptional<O>(base, optionalTypes);\n Object.defineProperty(base, IFluidDependencySynthesizer, { get: () => this });\n return base;\n }\n\n /**\n * {@inheritDoc (IFluidDependencySynthesizer:interface).has}\n * @param excludeParents - If true, exclude checking parent registries\n */\n public has(type: string, excludeParents?: boolean): boolean {\n if (this.providers.has(type as keyof TMap)) {\n return true;\n }\n if (excludeParents !== true) {\n return this.parents.some((p: IFluidDependencySynthesizer) => p.has(type));\n }\n return false;\n }\n /**\n * @deprecated - Needed for back compat\n */\n private getProvider(provider: string & keyof TMap) {\n // this was removed, but some partners have trouble with back compat where they\n // use invalid patterns with IFluidObject and IFluidDependencySynthesizer\n // this is just for back compat until those are removed\n if(this.has(provider)) {\n if(this.providers.has(provider)) {\n return this.providers.get(provider);\n }\n for(const parent of this.parents) {\n if(parent instanceof DependencyContainer) {\n return parent.getProvider(provider);\n }else{\n // older implementations of the IFluidDependencySynthesizer exposed getProvider\n const maybeGetProvider: {getProvider?(provider: string & keyof TMap)} = parent as any;\n if(maybeGetProvider?.getProvider !== undefined) {\n return maybeGetProvider.getProvider(provider);\n }\n }\n }\n }\n }\n\n private generateRequired<T>(\n base: AsyncRequiredFluidObjectProvider<T>,\n types: Required<FluidObjectSymbolProvider<T>>,\n ) {\n if (types === undefined) { return; }\n for (const key of Object.keys(types) as unknown as (keyof TMap)[]) {\n const provider = this.resolveProvider(key);\n if(provider === undefined) {\n throw new Error(`Object attempted to be created without registered required provider ${key}`);\n }\n Object.defineProperty(\n base,\n key,\n provider,\n );\n }\n }\n\n private generateOptional<T>(\n base: AsyncOptionalFluidObjectProvider<T>,\n types: FluidObjectSymbolProvider<T>,\n ) {\n if (types === undefined) { return; }\n for (const key of Object.keys(types) as unknown as (keyof TMap)[]) {\n // back-compat: in 0.56 we allow undefined in the types, but we didn't before\n // this will keep runtime back compat, eventually we should support undefined properties\n // rather than properties that return promises that resolve to undefined\n const provider = this.resolveProvider(key) ?? { get: async () => undefined };\n Object.defineProperty(\n base,\n key,\n provider,\n );\n }\n }\n\n private resolveProvider<T extends keyof TMap>(t: T): PropertyDescriptor | undefined {\n // If we have the provider return it\n const provider = this.providers.get(t);\n if (provider === undefined) {\n for (const parent of this.parents) {\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n const sp = { [t]: t } as FluidObjectSymbolProvider<Pick<TMap, T>>;\n const syn = parent.synthesize<Pick<TMap, T>,{}>(\n sp,\n {});\n const descriptor = Object.getOwnPropertyDescriptor(syn, t);\n if (descriptor !== undefined) {\n return descriptor;\n }\n }\n return undefined;\n }\n\n // The double nested gets are required for lazy loading the provider resolution\n if (typeof provider === \"function\") {\n return {\n get() {\n if (provider && typeof provider === \"function\") {\n return Promise.resolve(this[IFluidDependencySynthesizer])\n .then(async (fds): Promise<any> => provider(fds))\n .then((p) => p?.[t]);\n }\n },\n };\n }\n return {\n get() {\n if (provider) {\n return Promise.resolve(provider).then((p) => {\n if (p) {\n return p[t];\n }\n });\n }\n },\n };\n }\n}\n"]}
|
|
@@ -307,7 +307,39 @@ describe("Routerlicious", () => {
|
|
|
307
307
|
assert_1.strict(deps.IFluidLoadable !== undefined, "handle undefined");
|
|
308
308
|
assert_1.strict(await deps.IFluidLoadable === undefined, "handle undefined");
|
|
309
309
|
});
|
|
310
|
+
it(`test getProvider backcompat`, async () => {
|
|
311
|
+
const dc = new __1.DependencyContainer();
|
|
312
|
+
const loadableMock = new MockLoadable();
|
|
313
|
+
dc.register(core_interfaces_1.IFluidLoadable, loadableMock);
|
|
314
|
+
const testGetProvider = (deps, scenario) => {
|
|
315
|
+
const old = deps;
|
|
316
|
+
const provider = old.getProvider("IFluidLoadable");
|
|
317
|
+
assert_1.strict.equal(provider, loadableMock, scenario);
|
|
318
|
+
};
|
|
319
|
+
testGetProvider(dc, "direct");
|
|
320
|
+
testGetProvider(new __1.DependencyContainer(dc), "parent");
|
|
321
|
+
testGetProvider(new PassThru(dc), "pass thru");
|
|
322
|
+
testGetProvider(new __1.DependencyContainer(new PassThru(dc)), "pass thru as child");
|
|
323
|
+
});
|
|
310
324
|
});
|
|
311
325
|
});
|
|
312
326
|
});
|
|
327
|
+
class PassThru {
|
|
328
|
+
constructor(parent) {
|
|
329
|
+
this.parent = parent;
|
|
330
|
+
this.IFluidDependencySynthesizer = this;
|
|
331
|
+
}
|
|
332
|
+
synthesize(optionalTypes, requiredTypes) {
|
|
333
|
+
return this.parent.synthesize(optionalTypes, requiredTypes);
|
|
334
|
+
}
|
|
335
|
+
has(type) {
|
|
336
|
+
return this.parent.has(type);
|
|
337
|
+
}
|
|
338
|
+
getProvider(key) {
|
|
339
|
+
const maybe = this.parent;
|
|
340
|
+
if (maybe.getProvider) {
|
|
341
|
+
return maybe.getProvider(key);
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
}
|
|
313
345
|
//# sourceMappingURL=dependencyContainer.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependencyContainer.spec.js","sourceRoot":"","sources":["../../src/test/dependencyContainer.spec.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 { strict as assert } from \"assert\";\n\nimport {\n IFluidLoadable,\n IFluidHandleContext,\n IFluidHandle,\n IProvideFluidLoadable,\n IProvideFluidRouter,\n IProvideFluidHandle,\n FluidObject,\n IFluidRouter,\n} from \"@fluidframework/core-interfaces\";\nimport { FluidObjectHandle } from \"@fluidframework/datastore\";\n\nimport { DependencyContainer } from \"..\";\nimport { IFluidDependencySynthesizer } from \"../IFluidDependencySynthesizer\";\nimport { FluidObjectProvider } from \"../types\";\n\nconst mockHandleContext: IFluidHandleContext = {\n absolutePath: \"\",\n isAttached: false,\n IFluidHandleContext: undefined as any,\n\n attachGraph: () => {\n throw new Error(\"Method not implemented.\");\n },\n resolveHandle: () => {\n throw new Error(\"Method not implemented.\");\n },\n};\n\nclass MockLoadable implements IFluidLoadable {\n public get IFluidLoadable() { return this; }\n public get handle() { return new FluidObjectHandle(this, \"\", mockHandleContext); }\n}\n\nclass MockFluidRouter implements IFluidRouter {\n public get IFluidRouter() { return this; }\n public async request() {\n return {\n mimeType: \"\",\n status: 200,\n value: \"\",\n };\n }\n}\n\ndescribe(\"Routerlicious\", () => {\n describe(\"Aqueduct\", () => {\n describe(\"DependencyContainer\", () => {\n it(`One Optional Provider registered via value`, async () => {\n const dc = new DependencyContainer<FluidObject<IFluidLoadable>>();\n const mock = new MockLoadable();\n dc.register(IFluidLoadable, mock);\n\n const s = dc.synthesize<IFluidLoadable>({ IFluidLoadable }, undefined);\n const loadable = await s.IFluidLoadable;\n assert(loadable, \"Optional IFluidLoadable was registered\");\n assert(loadable === mock, \"IFluidLoadable is expected\");\n assert(loadable?.handle.absolutePath === mock.handle.absolutePath, \"IFluidLoadable is valid\");\n });\n\n it(`One Optional Provider registered via Promise value`, async () => {\n const dc = new DependencyContainer<FluidObject<IFluidLoadable>>();\n const mock = new MockLoadable();\n dc.register(IFluidLoadable, Promise.resolve(mock));\n\n const s = dc.synthesize<IFluidLoadable>({ IFluidLoadable }, undefined);\n const loadable = await s.IFluidLoadable;\n assert(loadable, \"Optional IFluidLoadable was registered\");\n assert(loadable === mock, \"IFluidLoadable is expected\");\n assert(loadable?.handle.absolutePath === mock.handle.absolutePath, \"IFluidLoadable is valid\");\n });\n\n it(`One Optional Provider registered via factory`, async () => {\n const dc = new DependencyContainer<FluidObject<IFluidLoadable>>();\n const mock = new MockLoadable();\n const factory = () => mock;\n dc.register(IFluidLoadable, factory);\n\n const s = dc.synthesize<IFluidLoadable>({ IFluidLoadable }, undefined);\n const loadable = await s.IFluidLoadable;\n assert(loadable, \"Optional IFluidLoadable was registered\");\n assert(loadable === mock, \"IFluidLoadable is expected\");\n assert(loadable?.handle.absolutePath === mock.handle.absolutePath, \"IFluidLoadable is valid\");\n });\n\n it(`One Optional Provider registered via Promise factory`, async () => {\n const dc = new DependencyContainer<FluidObject<IFluidLoadable>>();\n const mock = new MockLoadable();\n const factory = async () => mock;\n dc.register(IFluidLoadable, factory);\n\n const s = dc.synthesize<IFluidLoadable>({ IFluidLoadable }, undefined);\n const loadable = await s.IFluidLoadable;\n assert(loadable, \"Optional IFluidLoadable was registered\");\n assert(loadable === mock, \"IFluidLoadable is expected\");\n assert(loadable?.handle.absolutePath === mock.handle.absolutePath, \"IFluidLoadable is valid\");\n });\n\n it(`One Required Provider registered via value`, async () => {\n const dc = new DependencyContainer<FluidObject<IFluidLoadable>>();\n const mock = new MockLoadable();\n dc.register(IFluidLoadable, mock);\n\n const s = dc.synthesize<undefined, IProvideFluidLoadable>(undefined, { IFluidLoadable });\n const loadable = await s.IFluidLoadable;\n assert(loadable, \"Required IFluidLoadable was registered\");\n assert(loadable === mock, \"IFluidLoadable is expected\");\n assert(loadable?.handle.absolutePath === mock.handle.absolutePath, \"IFluidLoadable is valid\");\n });\n\n it(`One Required Provider registered via Promise value`, async () => {\n const dc = new DependencyContainer<FluidObject<IFluidLoadable>>();\n const mock = new MockLoadable();\n dc.register(IFluidLoadable, Promise.resolve(mock));\n\n const s = dc.synthesize<undefined, IProvideFluidLoadable>(undefined, { IFluidLoadable });\n const loadable = await s.IFluidLoadable;\n assert(loadable, \"Required IFluidLoadable was registered\");\n assert(loadable === mock, \"IFluidLoadable is expected\");\n assert(loadable?.handle.absolutePath === mock.handle.absolutePath, \"IFluidLoadable is valid\");\n });\n\n it(`One Required Provider registered via factory`, async () => {\n const dc = new DependencyContainer<FluidObject<IFluidLoadable>>();\n const mock = new MockLoadable();\n const factory = () => mock;\n dc.register(IFluidLoadable, factory);\n\n const s = dc.synthesize<undefined, IProvideFluidLoadable>(undefined, { IFluidLoadable });\n const loadable = await s.IFluidLoadable;\n assert(loadable, \"Required IFluidLoadable was registered\");\n assert(loadable === mock, \"IFluidLoadable is expected\");\n assert(loadable?.handle.absolutePath === mock.handle.absolutePath, \"IFluidLoadable is valid\");\n });\n\n it(`One Required Provider registered via Promise factory`, async () => {\n const dc = new DependencyContainer<FluidObject<IFluidLoadable>>();\n const mock = new MockLoadable();\n const factory = async () => mock;\n dc.register(IFluidLoadable, factory);\n\n const s = dc.synthesize<undefined, IProvideFluidLoadable>(undefined, { IFluidLoadable });\n const loadable = await s.IFluidLoadable;\n assert(loadable, \"Required IFluidLoadable was registered\");\n assert(loadable === mock, \"IFluidLoadable is expected\");\n assert(loadable?.handle.absolutePath === mock.handle.absolutePath, \"IFluidLoadable is valid\");\n });\n\n it(`Two Optional Modules all registered`, async () => {\n const dc = new DependencyContainer<FluidObject<IFluidLoadable & IFluidRouter>>();\n const loadableMock = new MockLoadable();\n dc.register(IFluidLoadable, loadableMock);\n const routerMock = new MockFluidRouter();\n dc.register(IFluidRouter, routerMock);\n\n const s = dc.synthesize<IFluidLoadable & IFluidRouter>(\n { IFluidLoadable, IFluidRouter }, undefined);\n const loadable = await s.IFluidLoadable;\n assert(loadable, \"Optional IFluidLoadable was registered\");\n assert(loadable === loadableMock, \"IFluidLoadable is expected\");\n\n const router = await s.IFluidRouter;\n assert(router, \"Optional IFluidRouter was registered\");\n assert(router === routerMock, \"IFluidRouter is expected\");\n });\n\n it(`Two Optional Modules one registered`, async () => {\n const dc = new DependencyContainer<FluidObject<IFluidLoadable & IFluidRouter>>();\n const loadableMock = new MockLoadable();\n dc.register(IFluidLoadable, loadableMock);\n\n const s = dc.synthesize<IFluidLoadable & IFluidRouter>(\n { IFluidLoadable, IFluidRouter }, undefined);\n const loadable = await s.IFluidLoadable;\n assert(loadable, \"Optional IFluidLoadable was registered\");\n assert(loadable === loadableMock, \"IFluidLoadable is expected\");\n\n const router = await s.IFluidRouter;\n assert(!router, \"Optional IFluidRouter was not registered\");\n });\n\n it(`Two Optional Modules none registered`, async () => {\n const dc = new DependencyContainer<FluidObject<IFluidLoadable & IFluidRouter>>();\n\n const s = dc.synthesize<IFluidLoadable & IFluidRouter>(\n { IFluidLoadable, IFluidRouter }, undefined);\n const loadable = await s.IFluidLoadable;\n assert(!loadable, \"Optional IFluidLoadable was not registered\");\n const router = await s.IFluidRouter;\n assert(!router, \"Optional IFluidRouter was not registered\");\n });\n\n it(`Two Required Modules all registered`, async () => {\n const dc = new DependencyContainer<FluidObject<IFluidLoadable & IFluidRouter>>();\n const loadableMock = new MockLoadable();\n dc.register(IFluidLoadable, loadableMock);\n const routerMock = new MockFluidRouter();\n dc.register(IFluidRouter, routerMock);\n\n const s = dc.synthesize<undefined, IProvideFluidLoadable & IProvideFluidRouter>(\n undefined, { IFluidLoadable, IFluidRouter });\n const loadable = await s.IFluidLoadable;\n assert(loadable, \"Required IFluidLoadable was registered\");\n assert(loadable === loadableMock, \"IFluidLoadable is expected\");\n\n const router = await s.IFluidRouter;\n assert(router, \"Required IFluidRouter was registered\");\n assert(router === routerMock, \"IFluidRouter is expected\");\n });\n\n it(`Required Provider not registered should throw`, async () => {\n const dc = new DependencyContainer<FluidObject<IFluidLoadable>>();\n\n assert.throws(() => dc.synthesize<undefined, IProvideFluidLoadable>(\n undefined,\n { IFluidLoadable },\n ), Error);\n });\n\n it(`Optional Provider found in Parent`, async () => {\n const parentDc = new DependencyContainer<FluidObject<IFluidLoadable>>();\n const mock = new MockLoadable();\n parentDc.register(IFluidLoadable, mock);\n const dc = new DependencyContainer(parentDc);\n\n const s = dc.synthesize<IFluidLoadable>({ IFluidLoadable }, undefined);\n const loadable = await s.IFluidLoadable;\n assert(loadable, \"Optional IFluidLoadable was registered\");\n assert(loadable === mock, \"IFluidLoadable is expected\");\n assert(loadable?.handle.absolutePath === mock.handle.absolutePath, \"IFluidLoadable is valid\");\n });\n\n it(`Optional Modules found in Parent and Child`, async () => {\n const parentDc = new DependencyContainer<FluidObject<IFluidLoadable>>();\n const loadableMock = new MockLoadable();\n parentDc.register(IFluidLoadable, loadableMock);\n const dc = new DependencyContainer<FluidObject<IFluidRouter>>(parentDc);\n const routerMock = new MockFluidRouter();\n dc.register(IFluidRouter, routerMock);\n\n const s = dc.synthesize<IFluidLoadable & IFluidRouter>(\n { IFluidLoadable, IFluidRouter }, undefined);\n const loadable = await s.IFluidLoadable;\n assert(loadable, \"Optional IFluidLoadable was registered\");\n assert(loadable === loadableMock, \"IFluidLoadable is expected\");\n\n const router = await s.IFluidRouter;\n assert(router, \"Optional IFluidRouter was registered\");\n assert(router === routerMock, \"IFluidRouter is expected\");\n });\n\n it(`Optional Provider found in Parent and Child resolves Child`, async () => {\n const parentDc = new DependencyContainer<FluidObject<IFluidLoadable>>();\n parentDc.register(IFluidLoadable, new MockLoadable());\n const dc = new DependencyContainer<FluidObject<IFluidLoadable>>(parentDc);\n const loadableMock = new MockLoadable();\n dc.register(IFluidLoadable, loadableMock);\n\n const s = dc.synthesize<IFluidLoadable>({ IFluidLoadable }, undefined);\n const loadable = await s.IFluidLoadable;\n assert(loadable, \"Optional IFluidLoadable was registered\");\n assert(loadable === loadableMock, \"IFluidLoadable is expected\");\n });\n\n it(`Required Provider found in Parent`, async () => {\n const parentDc = new DependencyContainer<FluidObject<IFluidLoadable>>();\n const mock = new MockLoadable();\n parentDc.register(IFluidLoadable, mock);\n const dc = new DependencyContainer(parentDc);\n\n const s = dc.synthesize<undefined, IProvideFluidLoadable>(undefined, { IFluidLoadable });\n const loadable = await s.IFluidLoadable;\n assert(loadable, \"Required IFluidLoadable was registered\");\n assert(loadable === mock, \"IFluidLoadable is expected\");\n assert(loadable?.handle.absolutePath === mock.handle.absolutePath, \"IFluidLoadable is valid\");\n });\n\n it(`Required Modules found in Parent and Child`, async () => {\n const parentDc = new DependencyContainer<FluidObject<IFluidLoadable>>();\n const loadableMock = new MockLoadable();\n parentDc.register(IFluidLoadable, loadableMock);\n const dc = new DependencyContainer<FluidObject<IFluidRouter>>(parentDc);\n const routerMock = new MockFluidRouter();\n dc.register(IFluidRouter, routerMock);\n\n const s = dc.synthesize<undefined, IProvideFluidLoadable & IProvideFluidRouter>(\n undefined, { IFluidLoadable, IFluidRouter });\n const loadable = await s.IFluidLoadable;\n assert(loadable, \"Required IFluidLoadable was registered\");\n assert(loadable === loadableMock, \"IFluidLoadable is expected\");\n\n const router = await s.IFluidRouter;\n assert(router, \"Required IFluidRouter was registered\");\n assert(router === routerMock, \"IFluidRouter is expected\");\n });\n\n it(`Required Provider found in Parent and Child resolves Child`, async () => {\n const parentDc = new DependencyContainer<FluidObject<IFluidLoadable>>();\n parentDc.register(IFluidLoadable, new MockLoadable());\n const dc = new DependencyContainer<FluidObject<IFluidLoadable>>(parentDc);\n const loadableMock = new MockLoadable();\n dc.register(IFluidLoadable, loadableMock);\n\n const s = dc.synthesize<undefined, IProvideFluidLoadable>(undefined, { IFluidLoadable });\n const loadable = await s.IFluidLoadable;\n assert(loadable, \"Required IFluidLoadable was registered\");\n assert(loadable === loadableMock, \"IFluidLoadable is expected\");\n });\n\n it(`Registering`, async () => {\n const dc = new DependencyContainer<FluidObject<IFluidLoadable>>();\n dc.register(IFluidLoadable, new MockLoadable());\n assert(dc.has(IFluidLoadable), \"DependencyContainer has IFluidLoadable\");\n });\n\n it(`Registering the same type twice throws`, async () => {\n const dc = new DependencyContainer<FluidObject<IFluidLoadable>>();\n dc.register(IFluidLoadable, new MockLoadable());\n assert.throws(() => dc.register(IFluidLoadable, new MockLoadable()), Error);\n });\n\n it(`Registering then Unregistering`, async () => {\n const dc = new DependencyContainer<FluidObject<IFluidLoadable>>();\n dc.register(IFluidLoadable, new MockLoadable());\n dc.unregister(IFluidLoadable);\n assert(!dc.has(IFluidLoadable), \"DependencyContainer doesn't have IFluidLoadable\");\n });\n\n it(`Registering then Unregistering then Registering`, async () => {\n const dc = new DependencyContainer<FluidObject<IFluidLoadable>>();\n dc.register(IFluidLoadable, new MockLoadable());\n dc.unregister(IFluidLoadable);\n dc.register(IFluidLoadable, new MockLoadable());\n assert(dc.has(IFluidLoadable), \"DependencyContainer has IFluidLoadable\");\n });\n\n it(`has() resolves correctly in all variations`, async () => {\n const dc = new DependencyContainer<FluidObject<IFluidLoadable & IFluidRouter>>();\n dc.register(IFluidLoadable, new MockLoadable());\n dc.register(IFluidRouter, new MockFluidRouter());\n assert(dc.has(IFluidLoadable), \"Manager has IFluidLoadable\");\n assert(dc.has(IFluidRouter), \"Manager has IFluidRouter\");\n assert(\n dc.has(IFluidLoadable) && dc.has(IFluidRouter),\n \"Manager has IFluidLoadable & IFluidRouter\");\n });\n\n it(`Child has Parent modules`, async () => {\n const parentDc = new DependencyContainer<FluidObject<IFluidLoadable>>();\n const loadableMock = new MockLoadable();\n parentDc.register(IFluidLoadable, loadableMock);\n const dc = new DependencyContainer<FluidObject<IFluidRouter>>(parentDc);\n const routerMock = new MockFluidRouter();\n dc.register(IFluidRouter, routerMock);\n\n assert(dc.has(IFluidLoadable), \"has includes parent registered\");\n assert(!dc.has(IFluidLoadable, true),\"has does not include excluded parent registered\");\n assert(dc.has(IFluidRouter),\"has includes registered\");\n assert(!dc.has(IFluidHandle),\"does not include not registered\");\n });\n\n it(`Parent Resolved from Child`, async () => {\n const parentDc = new DependencyContainer<FluidObject<IFluidHandle>>();\n const loadableToHandle: FluidObjectProvider<IProvideFluidHandle> =\n async (fds: IFluidDependencySynthesizer) => {\n const loadable = fds.synthesize<undefined, IProvideFluidLoadable>(undefined,{IFluidLoadable});\n return (await loadable.IFluidLoadable).handle;\n };\n parentDc.register(IFluidHandle, loadableToHandle);\n\n const dc = new DependencyContainer<FluidObject<IFluidLoadable>>(parentDc);\n const loadableMock = new MockLoadable();\n dc.register(IFluidLoadable, loadableMock);\n\n const deps = dc.synthesize<IFluidHandle>({IFluidHandle}, undefined);\n assert(await deps.IFluidHandle !== undefined, \"handle undefined\");\n });\n\n it(`Undefined Provider is not Undefined`, async () => {\n const dc = new DependencyContainer();\n const deps = dc.synthesize<IFluidLoadable>({IFluidLoadable}, {});\n assert(deps.IFluidLoadable !== undefined, \"handle undefined\");\n assert(await deps.IFluidLoadable === undefined, \"handle undefined\");\n });\n });\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"dependencyContainer.spec.js","sourceRoot":"","sources":["../../src/test/dependencyContainer.spec.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 { strict as assert } from \"assert\";\n\nimport {\n IFluidLoadable,\n IFluidHandleContext,\n IFluidHandle,\n IProvideFluidLoadable,\n IProvideFluidRouter,\n IProvideFluidHandle,\n FluidObject,\n IFluidRouter,\n} from \"@fluidframework/core-interfaces\";\nimport { FluidObjectHandle } from \"@fluidframework/datastore\";\n\nimport { DependencyContainer } from \"..\";\nimport { IFluidDependencySynthesizer } from \"../IFluidDependencySynthesizer\";\nimport { AsyncFluidObjectProvider, FluidObjectProvider, FluidObjectSymbolProvider } from \"../types\";\n\nconst mockHandleContext: IFluidHandleContext = {\n absolutePath: \"\",\n isAttached: false,\n IFluidHandleContext: undefined as any,\n\n attachGraph: () => {\n throw new Error(\"Method not implemented.\");\n },\n resolveHandle: () => {\n throw new Error(\"Method not implemented.\");\n },\n};\n\nclass MockLoadable implements IFluidLoadable {\n public get IFluidLoadable() { return this; }\n public get handle() { return new FluidObjectHandle(this, \"\", mockHandleContext); }\n}\n\nclass MockFluidRouter implements IFluidRouter {\n public get IFluidRouter() { return this; }\n public async request() {\n return {\n mimeType: \"\",\n status: 200,\n value: \"\",\n };\n }\n}\n\ndescribe(\"Routerlicious\", () => {\n describe(\"Aqueduct\", () => {\n describe(\"DependencyContainer\", () => {\n it(`One Optional Provider registered via value`, async () => {\n const dc = new DependencyContainer<FluidObject<IFluidLoadable>>();\n const mock = new MockLoadable();\n dc.register(IFluidLoadable, mock);\n\n const s = dc.synthesize<IFluidLoadable>({ IFluidLoadable }, undefined);\n const loadable = await s.IFluidLoadable;\n assert(loadable, \"Optional IFluidLoadable was registered\");\n assert(loadable === mock, \"IFluidLoadable is expected\");\n assert(loadable?.handle.absolutePath === mock.handle.absolutePath, \"IFluidLoadable is valid\");\n });\n\n it(`One Optional Provider registered via Promise value`, async () => {\n const dc = new DependencyContainer<FluidObject<IFluidLoadable>>();\n const mock = new MockLoadable();\n dc.register(IFluidLoadable, Promise.resolve(mock));\n\n const s = dc.synthesize<IFluidLoadable>({ IFluidLoadable }, undefined);\n const loadable = await s.IFluidLoadable;\n assert(loadable, \"Optional IFluidLoadable was registered\");\n assert(loadable === mock, \"IFluidLoadable is expected\");\n assert(loadable?.handle.absolutePath === mock.handle.absolutePath, \"IFluidLoadable is valid\");\n });\n\n it(`One Optional Provider registered via factory`, async () => {\n const dc = new DependencyContainer<FluidObject<IFluidLoadable>>();\n const mock = new MockLoadable();\n const factory = () => mock;\n dc.register(IFluidLoadable, factory);\n\n const s = dc.synthesize<IFluidLoadable>({ IFluidLoadable }, undefined);\n const loadable = await s.IFluidLoadable;\n assert(loadable, \"Optional IFluidLoadable was registered\");\n assert(loadable === mock, \"IFluidLoadable is expected\");\n assert(loadable?.handle.absolutePath === mock.handle.absolutePath, \"IFluidLoadable is valid\");\n });\n\n it(`One Optional Provider registered via Promise factory`, async () => {\n const dc = new DependencyContainer<FluidObject<IFluidLoadable>>();\n const mock = new MockLoadable();\n const factory = async () => mock;\n dc.register(IFluidLoadable, factory);\n\n const s = dc.synthesize<IFluidLoadable>({ IFluidLoadable }, undefined);\n const loadable = await s.IFluidLoadable;\n assert(loadable, \"Optional IFluidLoadable was registered\");\n assert(loadable === mock, \"IFluidLoadable is expected\");\n assert(loadable?.handle.absolutePath === mock.handle.absolutePath, \"IFluidLoadable is valid\");\n });\n\n it(`One Required Provider registered via value`, async () => {\n const dc = new DependencyContainer<FluidObject<IFluidLoadable>>();\n const mock = new MockLoadable();\n dc.register(IFluidLoadable, mock);\n\n const s = dc.synthesize<undefined, IProvideFluidLoadable>(undefined, { IFluidLoadable });\n const loadable = await s.IFluidLoadable;\n assert(loadable, \"Required IFluidLoadable was registered\");\n assert(loadable === mock, \"IFluidLoadable is expected\");\n assert(loadable?.handle.absolutePath === mock.handle.absolutePath, \"IFluidLoadable is valid\");\n });\n\n it(`One Required Provider registered via Promise value`, async () => {\n const dc = new DependencyContainer<FluidObject<IFluidLoadable>>();\n const mock = new MockLoadable();\n dc.register(IFluidLoadable, Promise.resolve(mock));\n\n const s = dc.synthesize<undefined, IProvideFluidLoadable>(undefined, { IFluidLoadable });\n const loadable = await s.IFluidLoadable;\n assert(loadable, \"Required IFluidLoadable was registered\");\n assert(loadable === mock, \"IFluidLoadable is expected\");\n assert(loadable?.handle.absolutePath === mock.handle.absolutePath, \"IFluidLoadable is valid\");\n });\n\n it(`One Required Provider registered via factory`, async () => {\n const dc = new DependencyContainer<FluidObject<IFluidLoadable>>();\n const mock = new MockLoadable();\n const factory = () => mock;\n dc.register(IFluidLoadable, factory);\n\n const s = dc.synthesize<undefined, IProvideFluidLoadable>(undefined, { IFluidLoadable });\n const loadable = await s.IFluidLoadable;\n assert(loadable, \"Required IFluidLoadable was registered\");\n assert(loadable === mock, \"IFluidLoadable is expected\");\n assert(loadable?.handle.absolutePath === mock.handle.absolutePath, \"IFluidLoadable is valid\");\n });\n\n it(`One Required Provider registered via Promise factory`, async () => {\n const dc = new DependencyContainer<FluidObject<IFluidLoadable>>();\n const mock = new MockLoadable();\n const factory = async () => mock;\n dc.register(IFluidLoadable, factory);\n\n const s = dc.synthesize<undefined, IProvideFluidLoadable>(undefined, { IFluidLoadable });\n const loadable = await s.IFluidLoadable;\n assert(loadable, \"Required IFluidLoadable was registered\");\n assert(loadable === mock, \"IFluidLoadable is expected\");\n assert(loadable?.handle.absolutePath === mock.handle.absolutePath, \"IFluidLoadable is valid\");\n });\n\n it(`Two Optional Modules all registered`, async () => {\n const dc = new DependencyContainer<FluidObject<IFluidLoadable & IFluidRouter>>();\n const loadableMock = new MockLoadable();\n dc.register(IFluidLoadable, loadableMock);\n const routerMock = new MockFluidRouter();\n dc.register(IFluidRouter, routerMock);\n\n const s = dc.synthesize<IFluidLoadable & IFluidRouter>(\n { IFluidLoadable, IFluidRouter }, undefined);\n const loadable = await s.IFluidLoadable;\n assert(loadable, \"Optional IFluidLoadable was registered\");\n assert(loadable === loadableMock, \"IFluidLoadable is expected\");\n\n const router = await s.IFluidRouter;\n assert(router, \"Optional IFluidRouter was registered\");\n assert(router === routerMock, \"IFluidRouter is expected\");\n });\n\n it(`Two Optional Modules one registered`, async () => {\n const dc = new DependencyContainer<FluidObject<IFluidLoadable & IFluidRouter>>();\n const loadableMock = new MockLoadable();\n dc.register(IFluidLoadable, loadableMock);\n\n const s = dc.synthesize<IFluidLoadable & IFluidRouter>(\n { IFluidLoadable, IFluidRouter }, undefined);\n const loadable = await s.IFluidLoadable;\n assert(loadable, \"Optional IFluidLoadable was registered\");\n assert(loadable === loadableMock, \"IFluidLoadable is expected\");\n\n const router = await s.IFluidRouter;\n assert(!router, \"Optional IFluidRouter was not registered\");\n });\n\n it(`Two Optional Modules none registered`, async () => {\n const dc = new DependencyContainer<FluidObject<IFluidLoadable & IFluidRouter>>();\n\n const s = dc.synthesize<IFluidLoadable & IFluidRouter>(\n { IFluidLoadable, IFluidRouter }, undefined);\n const loadable = await s.IFluidLoadable;\n assert(!loadable, \"Optional IFluidLoadable was not registered\");\n const router = await s.IFluidRouter;\n assert(!router, \"Optional IFluidRouter was not registered\");\n });\n\n it(`Two Required Modules all registered`, async () => {\n const dc = new DependencyContainer<FluidObject<IFluidLoadable & IFluidRouter>>();\n const loadableMock = new MockLoadable();\n dc.register(IFluidLoadable, loadableMock);\n const routerMock = new MockFluidRouter();\n dc.register(IFluidRouter, routerMock);\n\n const s = dc.synthesize<undefined, IProvideFluidLoadable & IProvideFluidRouter>(\n undefined, { IFluidLoadable, IFluidRouter });\n const loadable = await s.IFluidLoadable;\n assert(loadable, \"Required IFluidLoadable was registered\");\n assert(loadable === loadableMock, \"IFluidLoadable is expected\");\n\n const router = await s.IFluidRouter;\n assert(router, \"Required IFluidRouter was registered\");\n assert(router === routerMock, \"IFluidRouter is expected\");\n });\n\n it(`Required Provider not registered should throw`, async () => {\n const dc = new DependencyContainer<FluidObject<IFluidLoadable>>();\n\n assert.throws(() => dc.synthesize<undefined, IProvideFluidLoadable>(\n undefined,\n { IFluidLoadable },\n ), Error);\n });\n\n it(`Optional Provider found in Parent`, async () => {\n const parentDc = new DependencyContainer<FluidObject<IFluidLoadable>>();\n const mock = new MockLoadable();\n parentDc.register(IFluidLoadable, mock);\n const dc = new DependencyContainer(parentDc);\n\n const s = dc.synthesize<IFluidLoadable>({ IFluidLoadable }, undefined);\n const loadable = await s.IFluidLoadable;\n assert(loadable, \"Optional IFluidLoadable was registered\");\n assert(loadable === mock, \"IFluidLoadable is expected\");\n assert(loadable?.handle.absolutePath === mock.handle.absolutePath, \"IFluidLoadable is valid\");\n });\n\n it(`Optional Modules found in Parent and Child`, async () => {\n const parentDc = new DependencyContainer<FluidObject<IFluidLoadable>>();\n const loadableMock = new MockLoadable();\n parentDc.register(IFluidLoadable, loadableMock);\n const dc = new DependencyContainer<FluidObject<IFluidRouter>>(parentDc);\n const routerMock = new MockFluidRouter();\n dc.register(IFluidRouter, routerMock);\n\n const s = dc.synthesize<IFluidLoadable & IFluidRouter>(\n { IFluidLoadable, IFluidRouter }, undefined);\n const loadable = await s.IFluidLoadable;\n assert(loadable, \"Optional IFluidLoadable was registered\");\n assert(loadable === loadableMock, \"IFluidLoadable is expected\");\n\n const router = await s.IFluidRouter;\n assert(router, \"Optional IFluidRouter was registered\");\n assert(router === routerMock, \"IFluidRouter is expected\");\n });\n\n it(`Optional Provider found in Parent and Child resolves Child`, async () => {\n const parentDc = new DependencyContainer<FluidObject<IFluidLoadable>>();\n parentDc.register(IFluidLoadable, new MockLoadable());\n const dc = new DependencyContainer<FluidObject<IFluidLoadable>>(parentDc);\n const loadableMock = new MockLoadable();\n dc.register(IFluidLoadable, loadableMock);\n\n const s = dc.synthesize<IFluidLoadable>({ IFluidLoadable }, undefined);\n const loadable = await s.IFluidLoadable;\n assert(loadable, \"Optional IFluidLoadable was registered\");\n assert(loadable === loadableMock, \"IFluidLoadable is expected\");\n });\n\n it(`Required Provider found in Parent`, async () => {\n const parentDc = new DependencyContainer<FluidObject<IFluidLoadable>>();\n const mock = new MockLoadable();\n parentDc.register(IFluidLoadable, mock);\n const dc = new DependencyContainer(parentDc);\n\n const s = dc.synthesize<undefined, IProvideFluidLoadable>(undefined, { IFluidLoadable });\n const loadable = await s.IFluidLoadable;\n assert(loadable, \"Required IFluidLoadable was registered\");\n assert(loadable === mock, \"IFluidLoadable is expected\");\n assert(loadable?.handle.absolutePath === mock.handle.absolutePath, \"IFluidLoadable is valid\");\n });\n\n it(`Required Modules found in Parent and Child`, async () => {\n const parentDc = new DependencyContainer<FluidObject<IFluidLoadable>>();\n const loadableMock = new MockLoadable();\n parentDc.register(IFluidLoadable, loadableMock);\n const dc = new DependencyContainer<FluidObject<IFluidRouter>>(parentDc);\n const routerMock = new MockFluidRouter();\n dc.register(IFluidRouter, routerMock);\n\n const s = dc.synthesize<undefined, IProvideFluidLoadable & IProvideFluidRouter>(\n undefined, { IFluidLoadable, IFluidRouter });\n const loadable = await s.IFluidLoadable;\n assert(loadable, \"Required IFluidLoadable was registered\");\n assert(loadable === loadableMock, \"IFluidLoadable is expected\");\n\n const router = await s.IFluidRouter;\n assert(router, \"Required IFluidRouter was registered\");\n assert(router === routerMock, \"IFluidRouter is expected\");\n });\n\n it(`Required Provider found in Parent and Child resolves Child`, async () => {\n const parentDc = new DependencyContainer<FluidObject<IFluidLoadable>>();\n parentDc.register(IFluidLoadable, new MockLoadable());\n const dc = new DependencyContainer<FluidObject<IFluidLoadable>>(parentDc);\n const loadableMock = new MockLoadable();\n dc.register(IFluidLoadable, loadableMock);\n\n const s = dc.synthesize<undefined, IProvideFluidLoadable>(undefined, { IFluidLoadable });\n const loadable = await s.IFluidLoadable;\n assert(loadable, \"Required IFluidLoadable was registered\");\n assert(loadable === loadableMock, \"IFluidLoadable is expected\");\n });\n\n it(`Registering`, async () => {\n const dc = new DependencyContainer<FluidObject<IFluidLoadable>>();\n dc.register(IFluidLoadable, new MockLoadable());\n assert(dc.has(IFluidLoadable), \"DependencyContainer has IFluidLoadable\");\n });\n\n it(`Registering the same type twice throws`, async () => {\n const dc = new DependencyContainer<FluidObject<IFluidLoadable>>();\n dc.register(IFluidLoadable, new MockLoadable());\n assert.throws(() => dc.register(IFluidLoadable, new MockLoadable()), Error);\n });\n\n it(`Registering then Unregistering`, async () => {\n const dc = new DependencyContainer<FluidObject<IFluidLoadable>>();\n dc.register(IFluidLoadable, new MockLoadable());\n dc.unregister(IFluidLoadable);\n assert(!dc.has(IFluidLoadable), \"DependencyContainer doesn't have IFluidLoadable\");\n });\n\n it(`Registering then Unregistering then Registering`, async () => {\n const dc = new DependencyContainer<FluidObject<IFluidLoadable>>();\n dc.register(IFluidLoadable, new MockLoadable());\n dc.unregister(IFluidLoadable);\n dc.register(IFluidLoadable, new MockLoadable());\n assert(dc.has(IFluidLoadable), \"DependencyContainer has IFluidLoadable\");\n });\n\n it(`has() resolves correctly in all variations`, async () => {\n const dc = new DependencyContainer<FluidObject<IFluidLoadable & IFluidRouter>>();\n dc.register(IFluidLoadable, new MockLoadable());\n dc.register(IFluidRouter, new MockFluidRouter());\n assert(dc.has(IFluidLoadable), \"Manager has IFluidLoadable\");\n assert(dc.has(IFluidRouter), \"Manager has IFluidRouter\");\n assert(\n dc.has(IFluidLoadable) && dc.has(IFluidRouter),\n \"Manager has IFluidLoadable & IFluidRouter\");\n });\n\n it(`Child has Parent modules`, async () => {\n const parentDc = new DependencyContainer<FluidObject<IFluidLoadable>>();\n const loadableMock = new MockLoadable();\n parentDc.register(IFluidLoadable, loadableMock);\n const dc = new DependencyContainer<FluidObject<IFluidRouter>>(parentDc);\n const routerMock = new MockFluidRouter();\n dc.register(IFluidRouter, routerMock);\n\n assert(dc.has(IFluidLoadable), \"has includes parent registered\");\n assert(!dc.has(IFluidLoadable, true),\"has does not include excluded parent registered\");\n assert(dc.has(IFluidRouter),\"has includes registered\");\n assert(!dc.has(IFluidHandle),\"does not include not registered\");\n });\n\n it(`Parent Resolved from Child`, async () => {\n const parentDc = new DependencyContainer<FluidObject<IFluidHandle>>();\n const loadableToHandle: FluidObjectProvider<IProvideFluidHandle> =\n async (fds: IFluidDependencySynthesizer) => {\n const loadable = fds.synthesize<undefined, IProvideFluidLoadable>(undefined,{IFluidLoadable});\n return (await loadable.IFluidLoadable).handle;\n };\n parentDc.register(IFluidHandle, loadableToHandle);\n\n const dc = new DependencyContainer<FluidObject<IFluidLoadable>>(parentDc);\n const loadableMock = new MockLoadable();\n dc.register(IFluidLoadable, loadableMock);\n\n const deps = dc.synthesize<IFluidHandle>({IFluidHandle}, undefined);\n assert(await deps.IFluidHandle !== undefined, \"handle undefined\");\n });\n\n it(`Undefined Provider is not Undefined`, async () => {\n const dc = new DependencyContainer();\n const deps = dc.synthesize<IFluidLoadable>({IFluidLoadable}, {});\n assert(deps.IFluidLoadable !== undefined, \"handle undefined\");\n assert(await deps.IFluidLoadable === undefined, \"handle undefined\");\n });\n\n it(`test getProvider backcompat`, async () => {\n const dc = new DependencyContainer<FluidObject<IFluidLoadable>>();\n const loadableMock = new MockLoadable();\n dc.register(IFluidLoadable, loadableMock);\n const testGetProvider = (deps: IFluidDependencySynthesizer, scenario: string)=>{\n const old = deps as any as {\n getProvider(key: \"IFluidLoadable\"): FluidObjectProvider<FluidObject<IFluidLoadable>>\n };\n const provider = old.getProvider(\"IFluidLoadable\");\n assert.equal(provider,loadableMock, scenario);\n };\n testGetProvider(dc, \"direct\");\n testGetProvider(new DependencyContainer(dc), \"parent\");\n testGetProvider(new PassThru<FluidObject<IFluidLoadable>>(dc), \"pass thru\");\n testGetProvider(new DependencyContainer(new PassThru<FluidObject<IFluidLoadable>>(dc)),\n \"pass thru as child\");\n });\n });\n });\n});\n\nclass PassThru<TMap> implements IFluidDependencySynthesizer {\n constructor(private readonly parent: IFluidDependencySynthesizer) {}\n synthesize<O, R = Record<string, never> | undefined>(\n optionalTypes: FluidObjectSymbolProvider<O>, requiredTypes: Required<FluidObjectSymbolProvider<R>>,\n ): AsyncFluidObjectProvider<O, R> {\n return this.parent.synthesize(optionalTypes, requiredTypes);\n }\n has(type: string): boolean {\n return this.parent.has(type);\n }\n readonly IFluidDependencySynthesizer = this;\n\n getProvider<K extends keyof TMap>(key: K): FluidObjectProvider<TMap[K]> | undefined {\n const maybe = this.parent as any as Partial<this>;\n if(maybe.getProvider) {\n return maybe.getProvider(key);\n }\n }\n}\n"]}
|
|
@@ -442,8 +442,8 @@
|
|
|
442
442
|
"affectsGlobalScope": false
|
|
443
443
|
},
|
|
444
444
|
"../../../../../node_modules/@fluidframework/protocol-definitions/dist/consensus.d.ts": {
|
|
445
|
-
"version": "
|
|
446
|
-
"signature": "
|
|
445
|
+
"version": "486e1128ffae98c512912ff444e45f17ea4d2bdefb5654372bdfebd0e7b181ea",
|
|
446
|
+
"signature": "486e1128ffae98c512912ff444e45f17ea4d2bdefb5654372bdfebd0e7b181ea",
|
|
447
447
|
"affectsGlobalScope": false
|
|
448
448
|
},
|
|
449
449
|
"../../../../../node_modules/@fluidframework/protocol-definitions/dist/config.d.ts": {
|
|
@@ -452,13 +452,13 @@
|
|
|
452
452
|
"affectsGlobalScope": false
|
|
453
453
|
},
|
|
454
454
|
"../../../../../node_modules/@fluidframework/protocol-definitions/dist/protocol.d.ts": {
|
|
455
|
-
"version": "
|
|
456
|
-
"signature": "
|
|
455
|
+
"version": "9826f63640e20d73ba1fa48424f574ff5dd312b1ede0465a1c1c8df144ccc204",
|
|
456
|
+
"signature": "9826f63640e20d73ba1fa48424f574ff5dd312b1ede0465a1c1c8df144ccc204",
|
|
457
457
|
"affectsGlobalScope": false
|
|
458
458
|
},
|
|
459
459
|
"../../../../../node_modules/@fluidframework/protocol-definitions/dist/storage.d.ts": {
|
|
460
|
-
"version": "
|
|
461
|
-
"signature": "
|
|
460
|
+
"version": "efcdf8d3587b6d332ee9e4098822b5421100849eabf5efbdf8c2736ae6975c8d",
|
|
461
|
+
"signature": "efcdf8d3587b6d332ee9e4098822b5421100849eabf5efbdf8c2736ae6975c8d",
|
|
462
462
|
"affectsGlobalScope": false
|
|
463
463
|
},
|
|
464
464
|
"../../../../../node_modules/@fluidframework/protocol-definitions/dist/summary.d.ts": {
|
|
@@ -496,22 +496,22 @@
|
|
|
496
496
|
"signature": "3eaa82d284d2ecf646a9f84e79269ec4505c0491876a9fd07f0cd7b5827f7df9",
|
|
497
497
|
"affectsGlobalScope": false
|
|
498
498
|
},
|
|
499
|
-
"../../../../../node_modules/@fluidframework/
|
|
500
|
-
"version": "
|
|
501
|
-
"signature": "
|
|
499
|
+
"../../../../../node_modules/@fluidframework/driver-definitions/dist/driverError.d.ts": {
|
|
500
|
+
"version": "9c35bf4f305ed653f657ebe97ced739b0778fab04b76268d4adcac72f279b242",
|
|
501
|
+
"signature": "9c35bf4f305ed653f657ebe97ced739b0778fab04b76268d4adcac72f279b242",
|
|
502
502
|
"affectsGlobalScope": false
|
|
503
503
|
},
|
|
504
|
-
"../../../../../node_modules/@fluidframework/
|
|
505
|
-
"version": "
|
|
506
|
-
"signature": "
|
|
504
|
+
"../../../../../node_modules/@fluidframework/driver-definitions/dist/urlResolver.d.ts": {
|
|
505
|
+
"version": "fb75519ad714b609817f371b9e3fca4f02e2302d50bb84a3e8e9ba6ba233ce3d",
|
|
506
|
+
"signature": "fb75519ad714b609817f371b9e3fca4f02e2302d50bb84a3e8e9ba6ba233ce3d",
|
|
507
507
|
"affectsGlobalScope": false
|
|
508
508
|
},
|
|
509
|
-
"../../../../../node_modules/@fluidframework/
|
|
509
|
+
"../../../../../node_modules/@fluidframework/driver-definitions/dist/storage.d.ts": {
|
|
510
510
|
"version": "dc51da03872a900f82db416a294523a0d37f4be324e1fd9d69c20856f01604e8",
|
|
511
511
|
"signature": "dc51da03872a900f82db416a294523a0d37f4be324e1fd9d69c20856f01604e8",
|
|
512
512
|
"affectsGlobalScope": false
|
|
513
513
|
},
|
|
514
|
-
"../../../../../node_modules/@fluidframework/
|
|
514
|
+
"../../../../../node_modules/@fluidframework/driver-definitions/dist/index.d.ts": {
|
|
515
515
|
"version": "db393dd65f2c615ff4ad4078bc1a2660b53f18ac0b27dbee9e11a00c129feab1",
|
|
516
516
|
"signature": "db393dd65f2c615ff4ad4078bc1a2660b53f18ac0b27dbee9e11a00c129feab1",
|
|
517
517
|
"affectsGlobalScope": false
|
|
@@ -522,8 +522,8 @@
|
|
|
522
522
|
"affectsGlobalScope": false
|
|
523
523
|
},
|
|
524
524
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/error.d.ts": {
|
|
525
|
-
"version": "
|
|
526
|
-
"signature": "
|
|
525
|
+
"version": "9217b29cd8c092fd796ab5309d0dc3cb4e63c9d32aff49e3137ab74e20d6caa2",
|
|
526
|
+
"signature": "9217b29cd8c092fd796ab5309d0dc3cb4e63c9d32aff49e3137ab74e20d6caa2",
|
|
527
527
|
"affectsGlobalScope": false
|
|
528
528
|
},
|
|
529
529
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/fluidModule.d.ts": {
|
|
@@ -532,18 +532,18 @@
|
|
|
532
532
|
"affectsGlobalScope": false
|
|
533
533
|
},
|
|
534
534
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/loader.d.ts": {
|
|
535
|
-
"version": "
|
|
536
|
-
"signature": "
|
|
535
|
+
"version": "34c3d5cfa7f01c2c116a0db84b92c0b3bc598cb282bb230b1df4a9a525519207",
|
|
536
|
+
"signature": "34c3d5cfa7f01c2c116a0db84b92c0b3bc598cb282bb230b1df4a9a525519207",
|
|
537
537
|
"affectsGlobalScope": false
|
|
538
538
|
},
|
|
539
539
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/runtime.d.ts": {
|
|
540
|
-
"version": "
|
|
541
|
-
"signature": "
|
|
540
|
+
"version": "d354a98d9977074408d68db0d291fe988584eeddc8cc6a211f45a4c1a245e944",
|
|
541
|
+
"signature": "d354a98d9977074408d68db0d291fe988584eeddc8cc6a211f45a4c1a245e944",
|
|
542
542
|
"affectsGlobalScope": false
|
|
543
543
|
},
|
|
544
|
-
"../../../../../node_modules/@fluidframework/container-definitions/dist/legacy/
|
|
545
|
-
"version": "
|
|
546
|
-
"signature": "
|
|
544
|
+
"../../../../../node_modules/@fluidframework/container-definitions/dist/legacy/index.d.ts": {
|
|
545
|
+
"version": "419d3554e67aed44fbad75878a168ec530032ea11a2572c769e98d15b91cad81",
|
|
546
|
+
"signature": "419d3554e67aed44fbad75878a168ec530032ea11a2572c769e98d15b91cad81",
|
|
547
547
|
"affectsGlobalScope": false
|
|
548
548
|
},
|
|
549
549
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/fluidPackage.d.ts": {
|
|
@@ -557,8 +557,8 @@
|
|
|
557
557
|
"affectsGlobalScope": false
|
|
558
558
|
},
|
|
559
559
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/index.d.ts": {
|
|
560
|
-
"version": "
|
|
561
|
-
"signature": "
|
|
560
|
+
"version": "4e651c414c5ad235f54cff3a4aca867edaafdec42f563fff5debf416e8132723",
|
|
561
|
+
"signature": "4e651c414c5ad235f54cff3a4aca867edaafdec42f563fff5debf416e8132723",
|
|
562
562
|
"affectsGlobalScope": false
|
|
563
563
|
},
|
|
564
564
|
"../../../../../node_modules/@fluidframework/common-utils/dist/assert.d.ts": {
|
|
@@ -686,26 +686,6 @@
|
|
|
686
686
|
"signature": "f8eb054ed71a693219fa8c4ecd08272a72dadf73ab82ec9a73b365662f16775c",
|
|
687
687
|
"affectsGlobalScope": false
|
|
688
688
|
},
|
|
689
|
-
"../../../../../node_modules/@fluidframework/driver-definitions/dist/driverError.d.ts": {
|
|
690
|
-
"version": "a17ae466a76b61bb0cfdec83a0255a0e9f6fb1129c1e30982a3ae264a9c5bc66",
|
|
691
|
-
"signature": "a17ae466a76b61bb0cfdec83a0255a0e9f6fb1129c1e30982a3ae264a9c5bc66",
|
|
692
|
-
"affectsGlobalScope": false
|
|
693
|
-
},
|
|
694
|
-
"../../../../../node_modules/@fluidframework/driver-definitions/dist/urlResolver.d.ts": {
|
|
695
|
-
"version": "fb75519ad714b609817f371b9e3fca4f02e2302d50bb84a3e8e9ba6ba233ce3d",
|
|
696
|
-
"signature": "fb75519ad714b609817f371b9e3fca4f02e2302d50bb84a3e8e9ba6ba233ce3d",
|
|
697
|
-
"affectsGlobalScope": false
|
|
698
|
-
},
|
|
699
|
-
"../../../../../node_modules/@fluidframework/driver-definitions/dist/storage.d.ts": {
|
|
700
|
-
"version": "dc51da03872a900f82db416a294523a0d37f4be324e1fd9d69c20856f01604e8",
|
|
701
|
-
"signature": "dc51da03872a900f82db416a294523a0d37f4be324e1fd9d69c20856f01604e8",
|
|
702
|
-
"affectsGlobalScope": false
|
|
703
|
-
},
|
|
704
|
-
"../../../../../node_modules/@fluidframework/driver-definitions/dist/index.d.ts": {
|
|
705
|
-
"version": "db393dd65f2c615ff4ad4078bc1a2660b53f18ac0b27dbee9e11a00c129feab1",
|
|
706
|
-
"signature": "db393dd65f2c615ff4ad4078bc1a2660b53f18ac0b27dbee9e11a00c129feab1",
|
|
707
|
-
"affectsGlobalScope": false
|
|
708
|
-
},
|
|
709
689
|
"../../../../runtime/runtime-definitions/dist/dataStoreRegistry.d.ts": {
|
|
710
690
|
"version": "eff90c8fb7521204ef889ea0684748a7ff8a1b62a7e0cc23ace822a96d1bff44",
|
|
711
691
|
"signature": "eff90c8fb7521204ef889ea0684748a7ff8a1b62a7e0cc23ace822a96d1bff44",
|
|
@@ -807,7 +787,7 @@
|
|
|
807
787
|
"affectsGlobalScope": false
|
|
808
788
|
},
|
|
809
789
|
"../../src/test/dependencyContainer.spec.ts": {
|
|
810
|
-
"version": "
|
|
790
|
+
"version": "50b797adddd85b26fe9abe577d5af26bf5fc1a5f7abd220abe8023b657e543df",
|
|
811
791
|
"signature": "abc949a48872f03572ff3108a999c28e5e394296186194fa9e4ad357fa3cfcd7",
|
|
812
792
|
"affectsGlobalScope": false
|
|
813
793
|
},
|
|
@@ -911,9 +891,8 @@
|
|
|
911
891
|
],
|
|
912
892
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/deltas.d.ts": [
|
|
913
893
|
"../../../../../node_modules/@fluidframework/common-definitions/dist/index.d.ts",
|
|
914
|
-
"../../../../../node_modules/@fluidframework/container-definitions/dist/legacy/
|
|
894
|
+
"../../../../../node_modules/@fluidframework/container-definitions/dist/legacy/index.d.ts",
|
|
915
895
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/loader.d.ts",
|
|
916
|
-
"../../../../../node_modules/@fluidframework/container-definitions/node_modules/@fluidframework/driver-definitions/dist/urlResolver.d.ts",
|
|
917
896
|
"../../../../../node_modules/@fluidframework/core-interfaces/dist/index.d.ts",
|
|
918
897
|
"../../../../../node_modules/@fluidframework/driver-definitions/dist/urlResolver.d.ts",
|
|
919
898
|
"../../../../../node_modules/@fluidframework/protocol-definitions/dist/index.d.ts"
|
|
@@ -932,16 +911,15 @@
|
|
|
932
911
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/error.d.ts",
|
|
933
912
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/fluidModule.d.ts",
|
|
934
913
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/fluidPackage.d.ts",
|
|
935
|
-
"../../../../../node_modules/@fluidframework/container-definitions/dist/legacy/
|
|
914
|
+
"../../../../../node_modules/@fluidframework/container-definitions/dist/legacy/index.d.ts",
|
|
936
915
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/loader.d.ts",
|
|
937
916
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/proxyLoader.d.ts",
|
|
938
917
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/runtime.d.ts"
|
|
939
918
|
],
|
|
940
|
-
"../../../../../node_modules/@fluidframework/container-definitions/dist/legacy/
|
|
919
|
+
"../../../../../node_modules/@fluidframework/container-definitions/dist/legacy/index.d.ts": [
|
|
941
920
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/deltas.d.ts",
|
|
942
921
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/loader.d.ts",
|
|
943
922
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/runtime.d.ts",
|
|
944
|
-
"../../../../../node_modules/@fluidframework/container-definitions/node_modules/@fluidframework/driver-definitions/dist/urlResolver.d.ts",
|
|
945
923
|
"../../../../../node_modules/@fluidframework/core-interfaces/dist/index.d.ts",
|
|
946
924
|
"../../../../../node_modules/@fluidframework/driver-definitions/dist/urlResolver.d.ts"
|
|
947
925
|
],
|
|
@@ -951,17 +929,16 @@
|
|
|
951
929
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/deltas.d.ts",
|
|
952
930
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/error.d.ts",
|
|
953
931
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/fluidModule.d.ts",
|
|
954
|
-
"../../../../../node_modules/@fluidframework/container-definitions/dist/legacy/
|
|
932
|
+
"../../../../../node_modules/@fluidframework/container-definitions/dist/legacy/index.d.ts",
|
|
955
933
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/runtime.d.ts",
|
|
956
|
-
"../../../../../node_modules/@fluidframework/container-definitions/node_modules/@fluidframework/driver-definitions/dist/index.d.ts",
|
|
957
|
-
"../../../../../node_modules/@fluidframework/container-definitions/node_modules/@fluidframework/driver-definitions/dist/urlResolver.d.ts",
|
|
958
934
|
"../../../../../node_modules/@fluidframework/core-interfaces/dist/index.d.ts",
|
|
935
|
+
"../../../../../node_modules/@fluidframework/driver-definitions/dist/index.d.ts",
|
|
959
936
|
"../../../../../node_modules/@fluidframework/driver-definitions/dist/urlResolver.d.ts",
|
|
960
937
|
"../../../../../node_modules/@fluidframework/protocol-definitions/dist/index.d.ts"
|
|
961
938
|
],
|
|
962
939
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/proxyLoader.d.ts": [
|
|
963
940
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/loader.d.ts",
|
|
964
|
-
"../../../../../node_modules/@fluidframework/
|
|
941
|
+
"../../../../../node_modules/@fluidframework/driver-definitions/dist/index.d.ts"
|
|
965
942
|
],
|
|
966
943
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/runtime.d.ts": [
|
|
967
944
|
"../../../../../node_modules/@fluidframework/common-definitions/dist/index.d.ts",
|
|
@@ -969,27 +946,10 @@
|
|
|
969
946
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/deltas.d.ts",
|
|
970
947
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/error.d.ts",
|
|
971
948
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/loader.d.ts",
|
|
972
|
-
"../../../../../node_modules/@fluidframework/container-definitions/node_modules/@fluidframework/driver-definitions/dist/index.d.ts",
|
|
973
949
|
"../../../../../node_modules/@fluidframework/core-interfaces/dist/index.d.ts",
|
|
950
|
+
"../../../../../node_modules/@fluidframework/driver-definitions/dist/index.d.ts",
|
|
974
951
|
"../../../../../node_modules/@fluidframework/protocol-definitions/dist/index.d.ts"
|
|
975
952
|
],
|
|
976
|
-
"../../../../../node_modules/@fluidframework/container-definitions/node_modules/@fluidframework/driver-definitions/dist/index.d.ts": [
|
|
977
|
-
"../../../../../node_modules/@fluidframework/container-definitions/node_modules/@fluidframework/driver-definitions/dist/driverError.d.ts",
|
|
978
|
-
"../../../../../node_modules/@fluidframework/container-definitions/node_modules/@fluidframework/driver-definitions/dist/storage.d.ts",
|
|
979
|
-
"../../../../../node_modules/@fluidframework/container-definitions/node_modules/@fluidframework/driver-definitions/dist/urlResolver.d.ts"
|
|
980
|
-
],
|
|
981
|
-
"../../../../../node_modules/@fluidframework/container-definitions/node_modules/@fluidframework/driver-definitions/dist/storage.d.ts": [
|
|
982
|
-
"../../../../../node_modules/@fluidframework/common-definitions/dist/index.d.ts",
|
|
983
|
-
"../../../../../node_modules/@fluidframework/container-definitions/node_modules/@fluidframework/driver-definitions/dist/urlResolver.d.ts",
|
|
984
|
-
"../../../../../node_modules/@fluidframework/protocol-definitions/dist/index.d.ts"
|
|
985
|
-
],
|
|
986
|
-
"../../../../../node_modules/@fluidframework/container-definitions/node_modules/@fluidframework/driver-definitions/dist/urlResolver.d.ts": [
|
|
987
|
-
"../../../../../node_modules/@fluidframework/container-definitions/dist/deltas.d.ts",
|
|
988
|
-
"../../../../../node_modules/@fluidframework/container-definitions/dist/legacy/chaincode.d.ts",
|
|
989
|
-
"../../../../../node_modules/@fluidframework/container-definitions/dist/loader.d.ts",
|
|
990
|
-
"../../../../../node_modules/@fluidframework/core-interfaces/dist/index.d.ts",
|
|
991
|
-
"../../../../../node_modules/@fluidframework/driver-definitions/dist/urlResolver.d.ts"
|
|
992
|
-
],
|
|
993
953
|
"../../../../../node_modules/@fluidframework/core-interfaces/dist/fluidLoadable.d.ts": [
|
|
994
954
|
"../../../../../node_modules/@fluidframework/core-interfaces/dist/handles.d.ts"
|
|
995
955
|
],
|
|
@@ -1029,9 +989,8 @@
|
|
|
1029
989
|
],
|
|
1030
990
|
"../../../../../node_modules/@fluidframework/driver-definitions/dist/urlResolver.d.ts": [
|
|
1031
991
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/deltas.d.ts",
|
|
1032
|
-
"../../../../../node_modules/@fluidframework/container-definitions/dist/legacy/
|
|
992
|
+
"../../../../../node_modules/@fluidframework/container-definitions/dist/legacy/index.d.ts",
|
|
1033
993
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/loader.d.ts",
|
|
1034
|
-
"../../../../../node_modules/@fluidframework/container-definitions/node_modules/@fluidframework/driver-definitions/dist/urlResolver.d.ts",
|
|
1035
994
|
"../../../../../node_modules/@fluidframework/core-interfaces/dist/index.d.ts"
|
|
1036
995
|
],
|
|
1037
996
|
"../../../../../node_modules/@fluidframework/protocol-definitions/dist/clients.d.ts": [
|
|
@@ -1451,9 +1410,8 @@
|
|
|
1451
1410
|
],
|
|
1452
1411
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/deltas.d.ts": [
|
|
1453
1412
|
"../../../../../node_modules/@fluidframework/common-definitions/dist/index.d.ts",
|
|
1454
|
-
"../../../../../node_modules/@fluidframework/container-definitions/dist/legacy/
|
|
1413
|
+
"../../../../../node_modules/@fluidframework/container-definitions/dist/legacy/index.d.ts",
|
|
1455
1414
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/loader.d.ts",
|
|
1456
|
-
"../../../../../node_modules/@fluidframework/container-definitions/node_modules/@fluidframework/driver-definitions/dist/urlResolver.d.ts",
|
|
1457
1415
|
"../../../../../node_modules/@fluidframework/core-interfaces/dist/index.d.ts",
|
|
1458
1416
|
"../../../../../node_modules/@fluidframework/driver-definitions/dist/urlResolver.d.ts",
|
|
1459
1417
|
"../../../../../node_modules/@fluidframework/protocol-definitions/dist/index.d.ts"
|
|
@@ -1472,16 +1430,15 @@
|
|
|
1472
1430
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/error.d.ts",
|
|
1473
1431
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/fluidModule.d.ts",
|
|
1474
1432
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/fluidPackage.d.ts",
|
|
1475
|
-
"../../../../../node_modules/@fluidframework/container-definitions/dist/legacy/
|
|
1433
|
+
"../../../../../node_modules/@fluidframework/container-definitions/dist/legacy/index.d.ts",
|
|
1476
1434
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/loader.d.ts",
|
|
1477
1435
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/proxyLoader.d.ts",
|
|
1478
1436
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/runtime.d.ts"
|
|
1479
1437
|
],
|
|
1480
|
-
"../../../../../node_modules/@fluidframework/container-definitions/dist/legacy/
|
|
1438
|
+
"../../../../../node_modules/@fluidframework/container-definitions/dist/legacy/index.d.ts": [
|
|
1481
1439
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/deltas.d.ts",
|
|
1482
1440
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/loader.d.ts",
|
|
1483
1441
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/runtime.d.ts",
|
|
1484
|
-
"../../../../../node_modules/@fluidframework/container-definitions/node_modules/@fluidframework/driver-definitions/dist/urlResolver.d.ts",
|
|
1485
1442
|
"../../../../../node_modules/@fluidframework/core-interfaces/dist/index.d.ts",
|
|
1486
1443
|
"../../../../../node_modules/@fluidframework/driver-definitions/dist/urlResolver.d.ts"
|
|
1487
1444
|
],
|
|
@@ -1491,17 +1448,16 @@
|
|
|
1491
1448
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/deltas.d.ts",
|
|
1492
1449
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/error.d.ts",
|
|
1493
1450
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/fluidModule.d.ts",
|
|
1494
|
-
"../../../../../node_modules/@fluidframework/container-definitions/dist/legacy/
|
|
1451
|
+
"../../../../../node_modules/@fluidframework/container-definitions/dist/legacy/index.d.ts",
|
|
1495
1452
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/runtime.d.ts",
|
|
1496
|
-
"../../../../../node_modules/@fluidframework/container-definitions/node_modules/@fluidframework/driver-definitions/dist/index.d.ts",
|
|
1497
|
-
"../../../../../node_modules/@fluidframework/container-definitions/node_modules/@fluidframework/driver-definitions/dist/urlResolver.d.ts",
|
|
1498
1453
|
"../../../../../node_modules/@fluidframework/core-interfaces/dist/index.d.ts",
|
|
1454
|
+
"../../../../../node_modules/@fluidframework/driver-definitions/dist/index.d.ts",
|
|
1499
1455
|
"../../../../../node_modules/@fluidframework/driver-definitions/dist/urlResolver.d.ts",
|
|
1500
1456
|
"../../../../../node_modules/@fluidframework/protocol-definitions/dist/index.d.ts"
|
|
1501
1457
|
],
|
|
1502
1458
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/proxyLoader.d.ts": [
|
|
1503
1459
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/loader.d.ts",
|
|
1504
|
-
"../../../../../node_modules/@fluidframework/
|
|
1460
|
+
"../../../../../node_modules/@fluidframework/driver-definitions/dist/index.d.ts"
|
|
1505
1461
|
],
|
|
1506
1462
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/runtime.d.ts": [
|
|
1507
1463
|
"../../../../../node_modules/@fluidframework/common-definitions/dist/index.d.ts",
|
|
@@ -1509,27 +1465,10 @@
|
|
|
1509
1465
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/deltas.d.ts",
|
|
1510
1466
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/error.d.ts",
|
|
1511
1467
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/loader.d.ts",
|
|
1512
|
-
"../../../../../node_modules/@fluidframework/container-definitions/node_modules/@fluidframework/driver-definitions/dist/index.d.ts",
|
|
1513
1468
|
"../../../../../node_modules/@fluidframework/core-interfaces/dist/index.d.ts",
|
|
1469
|
+
"../../../../../node_modules/@fluidframework/driver-definitions/dist/index.d.ts",
|
|
1514
1470
|
"../../../../../node_modules/@fluidframework/protocol-definitions/dist/index.d.ts"
|
|
1515
1471
|
],
|
|
1516
|
-
"../../../../../node_modules/@fluidframework/container-definitions/node_modules/@fluidframework/driver-definitions/dist/index.d.ts": [
|
|
1517
|
-
"../../../../../node_modules/@fluidframework/container-definitions/node_modules/@fluidframework/driver-definitions/dist/driverError.d.ts",
|
|
1518
|
-
"../../../../../node_modules/@fluidframework/container-definitions/node_modules/@fluidframework/driver-definitions/dist/storage.d.ts",
|
|
1519
|
-
"../../../../../node_modules/@fluidframework/container-definitions/node_modules/@fluidframework/driver-definitions/dist/urlResolver.d.ts"
|
|
1520
|
-
],
|
|
1521
|
-
"../../../../../node_modules/@fluidframework/container-definitions/node_modules/@fluidframework/driver-definitions/dist/storage.d.ts": [
|
|
1522
|
-
"../../../../../node_modules/@fluidframework/common-definitions/dist/index.d.ts",
|
|
1523
|
-
"../../../../../node_modules/@fluidframework/container-definitions/node_modules/@fluidframework/driver-definitions/dist/urlResolver.d.ts",
|
|
1524
|
-
"../../../../../node_modules/@fluidframework/protocol-definitions/dist/index.d.ts"
|
|
1525
|
-
],
|
|
1526
|
-
"../../../../../node_modules/@fluidframework/container-definitions/node_modules/@fluidframework/driver-definitions/dist/urlResolver.d.ts": [
|
|
1527
|
-
"../../../../../node_modules/@fluidframework/container-definitions/dist/deltas.d.ts",
|
|
1528
|
-
"../../../../../node_modules/@fluidframework/container-definitions/dist/legacy/chaincode.d.ts",
|
|
1529
|
-
"../../../../../node_modules/@fluidframework/container-definitions/dist/loader.d.ts",
|
|
1530
|
-
"../../../../../node_modules/@fluidframework/core-interfaces/dist/index.d.ts",
|
|
1531
|
-
"../../../../../node_modules/@fluidframework/driver-definitions/dist/urlResolver.d.ts"
|
|
1532
|
-
],
|
|
1533
1472
|
"../../../../../node_modules/@fluidframework/core-interfaces/dist/fluidLoadable.d.ts": [
|
|
1534
1473
|
"../../../../../node_modules/@fluidframework/core-interfaces/dist/handles.d.ts"
|
|
1535
1474
|
],
|
|
@@ -1569,9 +1508,8 @@
|
|
|
1569
1508
|
],
|
|
1570
1509
|
"../../../../../node_modules/@fluidframework/driver-definitions/dist/urlResolver.d.ts": [
|
|
1571
1510
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/deltas.d.ts",
|
|
1572
|
-
"../../../../../node_modules/@fluidframework/container-definitions/dist/legacy/
|
|
1511
|
+
"../../../../../node_modules/@fluidframework/container-definitions/dist/legacy/index.d.ts",
|
|
1573
1512
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/loader.d.ts",
|
|
1574
|
-
"../../../../../node_modules/@fluidframework/container-definitions/node_modules/@fluidframework/driver-definitions/dist/urlResolver.d.ts",
|
|
1575
1513
|
"../../../../../node_modules/@fluidframework/core-interfaces/dist/index.d.ts"
|
|
1576
1514
|
],
|
|
1577
1515
|
"../../../../../node_modules/@fluidframework/protocol-definitions/dist/clients.d.ts": [
|
|
@@ -1955,14 +1893,10 @@
|
|
|
1955
1893
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/fluidModule.d.ts",
|
|
1956
1894
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/fluidPackage.d.ts",
|
|
1957
1895
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/index.d.ts",
|
|
1958
|
-
"../../../../../node_modules/@fluidframework/container-definitions/dist/legacy/
|
|
1896
|
+
"../../../../../node_modules/@fluidframework/container-definitions/dist/legacy/index.d.ts",
|
|
1959
1897
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/loader.d.ts",
|
|
1960
1898
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/proxyLoader.d.ts",
|
|
1961
1899
|
"../../../../../node_modules/@fluidframework/container-definitions/dist/runtime.d.ts",
|
|
1962
|
-
"../../../../../node_modules/@fluidframework/container-definitions/node_modules/@fluidframework/driver-definitions/dist/driverError.d.ts",
|
|
1963
|
-
"../../../../../node_modules/@fluidframework/container-definitions/node_modules/@fluidframework/driver-definitions/dist/index.d.ts",
|
|
1964
|
-
"../../../../../node_modules/@fluidframework/container-definitions/node_modules/@fluidframework/driver-definitions/dist/storage.d.ts",
|
|
1965
|
-
"../../../../../node_modules/@fluidframework/container-definitions/node_modules/@fluidframework/driver-definitions/dist/urlResolver.d.ts",
|
|
1966
1900
|
"../../../../../node_modules/@fluidframework/core-interfaces/dist/fluidLoadable.d.ts",
|
|
1967
1901
|
"../../../../../node_modules/@fluidframework/core-interfaces/dist/fluidObject.d.ts",
|
|
1968
1902
|
"../../../../../node_modules/@fluidframework/core-interfaces/dist/fluidPackage.d.ts",
|
|
@@ -61,6 +61,9 @@ export class DependencyContainer {
|
|
|
61
61
|
* @deprecated - Needed for back compat
|
|
62
62
|
*/
|
|
63
63
|
getProvider(provider) {
|
|
64
|
+
// this was removed, but some partners have trouble with back compat where they
|
|
65
|
+
// use invalid patterns with IFluidObject and IFluidDependencySynthesizer
|
|
66
|
+
// this is just for back compat until those are removed
|
|
64
67
|
if (this.has(provider)) {
|
|
65
68
|
if (this.providers.has(provider)) {
|
|
66
69
|
return this.providers.get(provider);
|
|
@@ -70,10 +73,10 @@ export class DependencyContainer {
|
|
|
70
73
|
return parent.getProvider(provider);
|
|
71
74
|
}
|
|
72
75
|
else {
|
|
73
|
-
//
|
|
74
|
-
const maybeGetProvider = parent
|
|
75
|
-
if (
|
|
76
|
-
return maybeGetProvider(provider);
|
|
76
|
+
// older implementations of the IFluidDependencySynthesizer exposed getProvider
|
|
77
|
+
const maybeGetProvider = parent;
|
|
78
|
+
if ((maybeGetProvider === null || maybeGetProvider === void 0 ? void 0 : maybeGetProvider.getProvider) !== undefined) {
|
|
79
|
+
return maybeGetProvider.getProvider(provider);
|
|
77
80
|
}
|
|
78
81
|
}
|
|
79
82
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependencyContainer.js","sourceRoot":"","sources":["../src/dependencyContainer.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 {\n AsyncFluidObjectProvider,\n FluidObjectSymbolProvider,\n FluidObjectProvider,\n AsyncOptionalFluidObjectProvider,\n AsyncRequiredFluidObjectProvider,\n} from \"./types\";\nimport {\n IFluidDependencySynthesizer,\n} from \"./IFluidDependencySynthesizer\";\n\n/**\n * DependencyContainer is similar to a IoC Container. It takes providers and will\n * synthesize an object based on them when requested.\n */\nexport class DependencyContainer<TMap> implements IFluidDependencySynthesizer {\n private readonly providers = new Map<keyof TMap, FluidObjectProvider<any>>();\n private readonly parents: IFluidDependencySynthesizer[];\n public get IFluidDependencySynthesizer() { return this; }\n\n public constructor(... parents: (IFluidDependencySynthesizer | undefined)[]) {\n this.parents = parents.filter((v): v is IFluidDependencySynthesizer => v !== undefined);\n }\n\n /**\n * Add a new provider\n * @param type - Name of the Type T being provided\n * @param provider - A provider that will resolve the T correctly when asked\n * @throws - If passing a type that's already registered\n */\n public register<T extends keyof TMap = keyof TMap>(type: T, provider: FluidObjectProvider<Pick<TMap, T>>): void {\n if (this.providers.has(type)) {\n throw new Error(`Attempting to register a provider of type ${type} that already exists`);\n }\n\n this.providers.set(type, provider);\n }\n\n /**\n * Remove a provider\n * @param type - Name of the provider to remove\n */\n public unregister(type: keyof TMap): void {\n if (this.providers.has(type)) {\n this.providers.delete(type);\n }\n }\n\n /**\n * {@inheritDoc (IFluidDependencySynthesizer:interface).synthesize}\n */\n public synthesize<O, R = undefined | Record<string, never>>(\n optionalTypes: FluidObjectSymbolProvider<O>,\n requiredTypes: Required<FluidObjectSymbolProvider<R>>,\n ): AsyncFluidObjectProvider<O, R> {\n const base: AsyncFluidObjectProvider<O, R> = {} as any;\n this.generateRequired<R>(base, requiredTypes);\n this.generateOptional<O>(base, optionalTypes);\n Object.defineProperty(base, IFluidDependencySynthesizer, { get: () => this });\n return base;\n }\n\n /**\n * {@inheritDoc (IFluidDependencySynthesizer:interface).has}\n * @param excludeParents - If true, exclude checking parent registries\n */\n public has(type: string, excludeParents?: boolean): boolean {\n if (this.providers.has(type as keyof TMap)) {\n return true;\n }\n if (excludeParents !== true) {\n return this.parents.some((p: IFluidDependencySynthesizer) => p.has(type));\n }\n return false;\n }\n /**\n * @deprecated - Needed for back compat\n */\n private getProvider(provider: string & keyof TMap) {\n if(this.has(provider)) {\n if(this.providers.has(provider)) {\n return this.providers.get(provider);\n }\n for(const parent of this.parents) {\n if(parent instanceof DependencyContainer) {\n return parent.getProvider(provider);\n }else{\n // eslint-disable-next-line @typescript-eslint/dot-notation\n const maybeGetProvider = parent[\"getProvider\"];\n if(typeof maybeGetProvider === \"function\") {\n return maybeGetProvider(provider);\n }\n }\n }\n }\n }\n\n private generateRequired<T>(\n base: AsyncRequiredFluidObjectProvider<T>,\n types: Required<FluidObjectSymbolProvider<T>>,\n ) {\n if (types === undefined) { return; }\n for (const key of Object.keys(types) as unknown as (keyof TMap)[]) {\n const provider = this.resolveProvider(key);\n if(provider === undefined) {\n throw new Error(`Object attempted to be created without registered required provider ${key}`);\n }\n Object.defineProperty(\n base,\n key,\n provider,\n );\n }\n }\n\n private generateOptional<T>(\n base: AsyncOptionalFluidObjectProvider<T>,\n types: FluidObjectSymbolProvider<T>,\n ) {\n if (types === undefined) { return; }\n for (const key of Object.keys(types) as unknown as (keyof TMap)[]) {\n // back-compat: in 0.56 we allow undefined in the types, but we didn't before\n // this will keep runtime back compat, eventually we should support undefined properties\n // rather than properties that return promises that resolve to undefined\n const provider = this.resolveProvider(key) ?? { get: async () => undefined };\n Object.defineProperty(\n base,\n key,\n provider,\n );\n }\n }\n\n private resolveProvider<T extends keyof TMap>(t: T): PropertyDescriptor | undefined {\n // If we have the provider return it\n const provider = this.providers.get(t);\n if (provider === undefined) {\n for (const parent of this.parents) {\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n const sp = { [t]: t } as FluidObjectSymbolProvider<Pick<TMap, T>>;\n const syn = parent.synthesize<Pick<TMap, T>,{}>(\n sp,\n {});\n const descriptor = Object.getOwnPropertyDescriptor(syn, t);\n if (descriptor !== undefined) {\n return descriptor;\n }\n }\n return undefined;\n }\n\n // The double nested gets are required for lazy loading the provider resolution\n if (typeof provider === \"function\") {\n return {\n get() {\n if (provider && typeof provider === \"function\") {\n return Promise.resolve(this[IFluidDependencySynthesizer])\n .then(async (fds): Promise<any> => provider(fds))\n .then((p) => p?.[t]);\n }\n },\n };\n }\n return {\n get() {\n if (provider) {\n return Promise.resolve(provider).then((p) => {\n if (p) {\n return p[t];\n }\n });\n }\n },\n };\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"dependencyContainer.js","sourceRoot":"","sources":["../src/dependencyContainer.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 {\n AsyncFluidObjectProvider,\n FluidObjectSymbolProvider,\n FluidObjectProvider,\n AsyncOptionalFluidObjectProvider,\n AsyncRequiredFluidObjectProvider,\n} from \"./types\";\nimport {\n IFluidDependencySynthesizer,\n} from \"./IFluidDependencySynthesizer\";\n\n/**\n * DependencyContainer is similar to a IoC Container. It takes providers and will\n * synthesize an object based on them when requested.\n */\nexport class DependencyContainer<TMap> implements IFluidDependencySynthesizer {\n private readonly providers = new Map<keyof TMap, FluidObjectProvider<any>>();\n private readonly parents: IFluidDependencySynthesizer[];\n public get IFluidDependencySynthesizer() { return this; }\n\n public constructor(... parents: (IFluidDependencySynthesizer | undefined)[]) {\n this.parents = parents.filter((v): v is IFluidDependencySynthesizer => v !== undefined);\n }\n\n /**\n * Add a new provider\n * @param type - Name of the Type T being provided\n * @param provider - A provider that will resolve the T correctly when asked\n * @throws - If passing a type that's already registered\n */\n public register<T extends keyof TMap = keyof TMap>(type: T, provider: FluidObjectProvider<Pick<TMap, T>>): void {\n if (this.providers.has(type)) {\n throw new Error(`Attempting to register a provider of type ${type} that already exists`);\n }\n\n this.providers.set(type, provider);\n }\n\n /**\n * Remove a provider\n * @param type - Name of the provider to remove\n */\n public unregister(type: keyof TMap): void {\n if (this.providers.has(type)) {\n this.providers.delete(type);\n }\n }\n\n /**\n * {@inheritDoc (IFluidDependencySynthesizer:interface).synthesize}\n */\n public synthesize<O, R = undefined | Record<string, never>>(\n optionalTypes: FluidObjectSymbolProvider<O>,\n requiredTypes: Required<FluidObjectSymbolProvider<R>>,\n ): AsyncFluidObjectProvider<O, R> {\n const base: AsyncFluidObjectProvider<O, R> = {} as any;\n this.generateRequired<R>(base, requiredTypes);\n this.generateOptional<O>(base, optionalTypes);\n Object.defineProperty(base, IFluidDependencySynthesizer, { get: () => this });\n return base;\n }\n\n /**\n * {@inheritDoc (IFluidDependencySynthesizer:interface).has}\n * @param excludeParents - If true, exclude checking parent registries\n */\n public has(type: string, excludeParents?: boolean): boolean {\n if (this.providers.has(type as keyof TMap)) {\n return true;\n }\n if (excludeParents !== true) {\n return this.parents.some((p: IFluidDependencySynthesizer) => p.has(type));\n }\n return false;\n }\n /**\n * @deprecated - Needed for back compat\n */\n private getProvider(provider: string & keyof TMap) {\n // this was removed, but some partners have trouble with back compat where they\n // use invalid patterns with IFluidObject and IFluidDependencySynthesizer\n // this is just for back compat until those are removed\n if(this.has(provider)) {\n if(this.providers.has(provider)) {\n return this.providers.get(provider);\n }\n for(const parent of this.parents) {\n if(parent instanceof DependencyContainer) {\n return parent.getProvider(provider);\n }else{\n // older implementations of the IFluidDependencySynthesizer exposed getProvider\n const maybeGetProvider: {getProvider?(provider: string & keyof TMap)} = parent as any;\n if(maybeGetProvider?.getProvider !== undefined) {\n return maybeGetProvider.getProvider(provider);\n }\n }\n }\n }\n }\n\n private generateRequired<T>(\n base: AsyncRequiredFluidObjectProvider<T>,\n types: Required<FluidObjectSymbolProvider<T>>,\n ) {\n if (types === undefined) { return; }\n for (const key of Object.keys(types) as unknown as (keyof TMap)[]) {\n const provider = this.resolveProvider(key);\n if(provider === undefined) {\n throw new Error(`Object attempted to be created without registered required provider ${key}`);\n }\n Object.defineProperty(\n base,\n key,\n provider,\n );\n }\n }\n\n private generateOptional<T>(\n base: AsyncOptionalFluidObjectProvider<T>,\n types: FluidObjectSymbolProvider<T>,\n ) {\n if (types === undefined) { return; }\n for (const key of Object.keys(types) as unknown as (keyof TMap)[]) {\n // back-compat: in 0.56 we allow undefined in the types, but we didn't before\n // this will keep runtime back compat, eventually we should support undefined properties\n // rather than properties that return promises that resolve to undefined\n const provider = this.resolveProvider(key) ?? { get: async () => undefined };\n Object.defineProperty(\n base,\n key,\n provider,\n );\n }\n }\n\n private resolveProvider<T extends keyof TMap>(t: T): PropertyDescriptor | undefined {\n // If we have the provider return it\n const provider = this.providers.get(t);\n if (provider === undefined) {\n for (const parent of this.parents) {\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n const sp = { [t]: t } as FluidObjectSymbolProvider<Pick<TMap, T>>;\n const syn = parent.synthesize<Pick<TMap, T>,{}>(\n sp,\n {});\n const descriptor = Object.getOwnPropertyDescriptor(syn, t);\n if (descriptor !== undefined) {\n return descriptor;\n }\n }\n return undefined;\n }\n\n // The double nested gets are required for lazy loading the provider resolution\n if (typeof provider === \"function\") {\n return {\n get() {\n if (provider && typeof provider === \"function\") {\n return Promise.resolve(this[IFluidDependencySynthesizer])\n .then(async (fds): Promise<any> => provider(fds))\n .then((p) => p?.[t]);\n }\n },\n };\n }\n return {\n get() {\n if (provider) {\n return Promise.resolve(provider).then((p) => {\n if (p) {\n return p[t];\n }\n });\n }\n },\n };\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fluidframework/synthesize",
|
|
3
|
-
"version": "0.58.
|
|
3
|
+
"version": "0.58.1001",
|
|
4
4
|
"description": "A library for synthesizing scope objects.",
|
|
5
5
|
"homepage": "https://fluidframework.com",
|
|
6
6
|
"repository": "https://github.com/microsoft/FluidFramework",
|
|
@@ -60,9 +60,9 @@
|
|
|
60
60
|
"devDependencies": {
|
|
61
61
|
"@fluidframework/build-common": "^0.23.0",
|
|
62
62
|
"@fluidframework/core-interfaces": "^0.42.0",
|
|
63
|
-
"@fluidframework/datastore": "0.58.
|
|
64
|
-
"@fluidframework/eslint-config-fluid": "^0.26.0
|
|
65
|
-
"@fluidframework/mocha-test-setup": "0.58.
|
|
63
|
+
"@fluidframework/datastore": "^0.58.1001",
|
|
64
|
+
"@fluidframework/eslint-config-fluid": "^0.26.0",
|
|
65
|
+
"@fluidframework/mocha-test-setup": "^0.58.1001",
|
|
66
66
|
"@microsoft/api-extractor": "^7.16.1",
|
|
67
67
|
"@rushstack/eslint-config": "^2.5.1",
|
|
68
68
|
"@types/mocha": "^8.2.2",
|