@xyo-network/module-abstract 2.70.3 → 2.70.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/dist/cjs/AbstractModule.js +3 -3
  2. package/dist/cjs/AbstractModule.js.map +1 -1
  3. package/dist/cjs/index.js +0 -1
  4. package/dist/cjs/index.js.map +1 -1
  5. package/dist/docs.json +360 -3287
  6. package/dist/esm/AbstractModule.js +1 -1
  7. package/dist/esm/AbstractModule.js.map +1 -1
  8. package/dist/esm/index.js +0 -1
  9. package/dist/esm/index.js.map +1 -1
  10. package/dist/types/AbstractModule.d.ts +1 -1
  11. package/dist/types/AbstractModule.d.ts.map +1 -1
  12. package/dist/types/index.d.ts +0 -1
  13. package/dist/types/index.d.ts.map +1 -1
  14. package/package.json +19 -18
  15. package/src/AbstractModule.ts +1 -1
  16. package/src/index.ts +0 -1
  17. package/dist/cjs/Resolver/CompositeModuleResolver.js +0 -85
  18. package/dist/cjs/Resolver/CompositeModuleResolver.js.map +0 -1
  19. package/dist/cjs/Resolver/ResolverEventEmitter.js +0 -38
  20. package/dist/cjs/Resolver/ResolverEventEmitter.js.map +0 -1
  21. package/dist/cjs/Resolver/SimpleModuleResolver.js +0 -104
  22. package/dist/cjs/Resolver/SimpleModuleResolver.js.map +0 -1
  23. package/dist/cjs/Resolver/index.js +0 -7
  24. package/dist/cjs/Resolver/index.js.map +0 -1
  25. package/dist/esm/Resolver/CompositeModuleResolver.js +0 -78
  26. package/dist/esm/Resolver/CompositeModuleResolver.js.map +0 -1
  27. package/dist/esm/Resolver/ResolverEventEmitter.js +0 -33
  28. package/dist/esm/Resolver/ResolverEventEmitter.js.map +0 -1
  29. package/dist/esm/Resolver/SimpleModuleResolver.js +0 -97
  30. package/dist/esm/Resolver/SimpleModuleResolver.js.map +0 -1
  31. package/dist/esm/Resolver/index.js +0 -4
  32. package/dist/esm/Resolver/index.js.map +0 -1
  33. package/dist/types/Resolver/CompositeModuleResolver.d.ts +0 -19
  34. package/dist/types/Resolver/CompositeModuleResolver.d.ts.map +0 -1
  35. package/dist/types/Resolver/ResolverEventEmitter.d.ts +0 -10
  36. package/dist/types/Resolver/ResolverEventEmitter.d.ts.map +0 -1
  37. package/dist/types/Resolver/SimpleModuleResolver.d.ts +0 -20
  38. package/dist/types/Resolver/SimpleModuleResolver.d.ts.map +0 -1
  39. package/dist/types/Resolver/index.d.ts +0 -4
  40. package/dist/types/Resolver/index.d.ts.map +0 -1
  41. package/src/Resolver/CompositeModuleResolver.ts +0 -95
  42. package/src/Resolver/ResolverEventEmitter.ts +0 -46
  43. package/src/Resolver/SimpleModuleResolver.ts +0 -128
  44. package/src/Resolver/index.ts +0 -3
@@ -1,97 +0,0 @@
1
- import compact from 'lodash/compact';
2
- import flatten from 'lodash/flatten';
3
- //This class is now package private (not exported from index.ts)
4
- export class SimpleModuleResolver {
5
- addressToName = {};
6
- modules = {};
7
- get isModuleResolver() {
8
- return true;
9
- }
10
- add(module) {
11
- if (Array.isArray(module)) {
12
- module.forEach((module) => this.addSingleModule(module));
13
- }
14
- else {
15
- this.addSingleModule(module);
16
- }
17
- return this;
18
- }
19
- addResolver(_resolver) {
20
- throw 'Adding resolvers not supported';
21
- }
22
- remove(address) {
23
- if (Array.isArray(address)) {
24
- address.forEach((address) => this.removeSingleModule(address));
25
- }
26
- else {
27
- this.removeSingleModule(address);
28
- }
29
- return this;
30
- }
31
- removeResolver(_resolver) {
32
- throw 'Removing resolvers not supported';
33
- }
34
- resolve(nameOrAddressOrFilter) {
35
- if (nameOrAddressOrFilter) {
36
- if (typeof nameOrAddressOrFilter === 'string') {
37
- const result = this.resolveByName(Object.values(this.modules), [nameOrAddressOrFilter]).pop() ??
38
- this.resolveByAddress(Object.values(this.modules), [nameOrAddressOrFilter]).pop();
39
- return result;
40
- }
41
- else if (nameOrAddressOrFilter.address) {
42
- const result = this.resolveByAddress(Object.values(this.modules), nameOrAddressOrFilter.address);
43
- return result;
44
- }
45
- else if (nameOrAddressOrFilter.name) {
46
- const result = this.resolveByName(Object.values(this.modules), nameOrAddressOrFilter.name);
47
- return result;
48
- }
49
- else if (nameOrAddressOrFilter.query) {
50
- return this.resolveByQuery(Object.values(this.modules), nameOrAddressOrFilter.query);
51
- }
52
- }
53
- else {
54
- return Object.values(this.modules);
55
- }
56
- }
57
- addSingleModule(module) {
58
- if (module) {
59
- this.modules[module.address] = module;
60
- }
61
- }
62
- removeSingleModule(address) {
63
- if (address) {
64
- if (this.modules[address]) {
65
- delete this.modules[address];
66
- const name = this.addressToName[address];
67
- if (name) {
68
- delete this.addressToName[address];
69
- }
70
- }
71
- }
72
- }
73
- resolveByAddress(modules, address) {
74
- return address
75
- ? compact(flatten(address?.map((address) => {
76
- return modules.filter((module) => module.address === address);
77
- })))
78
- : modules;
79
- }
80
- resolveByName(modules, name) {
81
- if (name) {
82
- return compact(name.map((name) => modules.filter((module) => module.config?.name === name)).flat());
83
- }
84
- return modules;
85
- }
86
- resolveByQuery(modules, query) {
87
- return query
88
- ? compact(modules.filter((module) => query?.reduce((supported, queryList) => {
89
- return (queryList.reduce((supported, query) => {
90
- const queryable = module.queries.includes(query);
91
- return supported && queryable;
92
- }, true) || supported);
93
- }, false)))
94
- : modules;
95
- }
96
- }
97
- //# sourceMappingURL=SimpleModuleResolver.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SimpleModuleResolver.js","sourceRoot":"","sources":["../../../src/Resolver/SimpleModuleResolver.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- export * from './CompositeModuleResolver';
2
- export * from './ResolverEventEmitter';
3
- export * from './SimpleModuleResolver';
4
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Resolver/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAA;AACzC,cAAc,wBAAwB,CAAA;AACtC,cAAc,wBAAwB,CAAA"}
@@ -1,19 +0,0 @@
1
- import { Base, BaseParams } from '@xyo-network/core';
2
- import { ModuleFilter, ModuleFilterOptions, ModuleInstance, ModuleRepository, ModuleResolver } from '@xyo-network/module-model';
3
- export declare class CompositeModuleResolver extends Base implements ModuleRepository, ModuleResolver {
4
- static defaultMaxDepth: number;
5
- protected resolvers: ModuleResolver[];
6
- private localResolver;
7
- constructor(params?: BaseParams);
8
- get isModuleResolver(): boolean;
9
- add(module: ModuleInstance): this;
10
- add(module: ModuleInstance[]): this;
11
- addResolver(resolver: ModuleResolver): this;
12
- remove(addressOrName: string | string[]): this;
13
- removeResolver(resolver: ModuleResolver): this;
14
- resolve<T extends ModuleInstance = ModuleInstance>(filter?: ModuleFilter<T>, options?: ModuleFilterOptions<T>): Promise<T[]>;
15
- resolve<T extends ModuleInstance = ModuleInstance>(nameOrAddress: string, options?: ModuleFilterOptions<T>): Promise<T | undefined>;
16
- private addSingleModule;
17
- private removeSingleModule;
18
- }
19
- //# sourceMappingURL=CompositeModuleResolver.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CompositeModuleResolver.d.ts","sourceRoot":"","sources":["../../../src/Resolver/CompositeModuleResolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EAAoB,YAAY,EAAE,mBAAmB,EAAE,cAAc,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAIjJ,qBAAa,uBAAwB,SAAQ,IAAK,YAAW,gBAAgB,EAAE,cAAc;IAC3F,MAAM,CAAC,eAAe,SAAI;IAC1B,SAAS,CAAC,SAAS,EAAE,cAAc,EAAE,CAAK;IAC1C,OAAO,CAAC,aAAa,CAAsB;gBAE/B,MAAM,GAAE,UAAe;IAOnC,IAAI,gBAAgB,YAEnB;IAED,GAAG,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IACjC,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI;IAUnC,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAK3C,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAS9C,cAAc,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAKxC,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAC5H,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAiCzI,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,kBAAkB;CAG3B"}
@@ -1,10 +0,0 @@
1
- import { Module, ModuleFilter, ModuleResolver } from '@xyo-network/module-model';
2
- export interface ModuleResolvedEventArgs {
3
- filter?: ModuleFilter;
4
- module: Module;
5
- }
6
- export interface ResolverEventEmitter {
7
- on(event: 'moduleResolved', listener: (args: ModuleResolvedEventArgs) => void): void;
8
- }
9
- export declare const mixinResolverEventEmitter: <T extends ModuleResolver = ModuleResolver>(resolver: T) => T & ResolverEventEmitter;
10
- //# sourceMappingURL=ResolverEventEmitter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ResolverEventEmitter.d.ts","sourceRoot":"","sources":["../../../src/Resolver/ResolverEventEmitter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAEhF,MAAM,WAAW,uBAAuB;IACtC,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,CAAC,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,uBAAuB,KAAK,IAAI,GAAG,IAAI,CAAA;CACrF;AAgCD,eAAO,MAAM,yBAAyB,sFAIrC,CAAA"}
@@ -1,20 +0,0 @@
1
- import { ModuleFilter, ModuleInstance, ModuleRepository, ModuleResolver } from '@xyo-network/module-model';
2
- import { Promisable } from '@xyo-network/promise';
3
- export declare class SimpleModuleResolver implements ModuleRepository {
4
- private addressToName;
5
- private modules;
6
- get isModuleResolver(): boolean;
7
- add(module: ModuleInstance): this;
8
- add(module: ModuleInstance[]): this;
9
- addResolver(_resolver: ModuleResolver): this;
10
- remove(address: string | string[]): this;
11
- removeResolver(_resolver: ModuleResolver): this;
12
- resolve(filter?: ModuleFilter): Promisable<ModuleInstance[]>;
13
- resolve(nameOrAddress: string): Promisable<ModuleInstance | undefined>;
14
- private addSingleModule;
15
- private removeSingleModule;
16
- private resolveByAddress;
17
- private resolveByName;
18
- private resolveByQuery;
19
- }
20
- //# sourceMappingURL=SimpleModuleResolver.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SimpleModuleResolver.d.ts","sourceRoot":"","sources":["../../../src/Resolver/SimpleModuleResolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,cAAc,EAGf,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAKjD,qBAAa,oBAAqB,YAAW,gBAAgB;IAC3D,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,OAAO,CAAqC;IAEpD,IAAI,gBAAgB,YAEnB;IAED,GAAG,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IACjC,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI;IAUnC,WAAW,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;IAI5C,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IASxC,cAAc,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;IAI/C,OAAO,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC,cAAc,EAAE,CAAC;IAC5D,OAAO,CAAC,aAAa,EAAE,MAAM,GAAG,UAAU,CAAC,cAAc,GAAG,SAAS,CAAC;IAsBtE,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,cAAc;CAiBvB"}
@@ -1,4 +0,0 @@
1
- export * from './CompositeModuleResolver';
2
- export * from './ResolverEventEmitter';
3
- export * from './SimpleModuleResolver';
4
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/Resolver/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAA;AACzC,cAAc,wBAAwB,CAAA;AACtC,cAAc,wBAAwB,CAAA"}
@@ -1,95 +0,0 @@
1
- import { exists } from '@xylabs/exists'
2
- import { Base, BaseParams } from '@xyo-network/core'
3
- import { duplicateModules, ModuleFilter, ModuleFilterOptions, ModuleInstance, ModuleRepository, ModuleResolver } from '@xyo-network/module-model'
4
-
5
- import { SimpleModuleResolver } from './SimpleModuleResolver'
6
-
7
- export class CompositeModuleResolver extends Base implements ModuleRepository, ModuleResolver {
8
- static defaultMaxDepth = 4
9
- protected resolvers: ModuleResolver[] = []
10
- private localResolver: SimpleModuleResolver
11
-
12
- constructor(params: BaseParams = {}) {
13
- super(params)
14
- const localResolver = new SimpleModuleResolver()
15
- this.addResolver(localResolver)
16
- this.localResolver = localResolver
17
- }
18
-
19
- get isModuleResolver() {
20
- return true
21
- }
22
-
23
- add(module: ModuleInstance): this
24
- add(module: ModuleInstance[]): this
25
- add(module: ModuleInstance | ModuleInstance[]): this {
26
- if (Array.isArray(module)) {
27
- module.forEach((module) => this.addSingleModule(module))
28
- } else {
29
- this.addSingleModule(module)
30
- }
31
- return this
32
- }
33
-
34
- addResolver(resolver: ModuleResolver): this {
35
- this.resolvers.push(resolver)
36
- return this
37
- }
38
-
39
- remove(addressOrName: string | string[]): this {
40
- if (Array.isArray(addressOrName)) {
41
- addressOrName.forEach((address) => this.removeSingleModule(address))
42
- } else {
43
- this.removeSingleModule(addressOrName)
44
- }
45
- return this
46
- }
47
-
48
- removeResolver(resolver: ModuleResolver): this {
49
- this.resolvers = this.resolvers.filter((item) => item !== resolver)
50
- return this
51
- }
52
-
53
- async resolve<T extends ModuleInstance = ModuleInstance>(filter?: ModuleFilter<T>, options?: ModuleFilterOptions<T>): Promise<T[]>
54
- async resolve<T extends ModuleInstance = ModuleInstance>(nameOrAddress: string, options?: ModuleFilterOptions<T>): Promise<T | undefined>
55
- async resolve<T extends ModuleInstance = ModuleInstance>(
56
- nameOrAddressOrFilter?: ModuleFilter<T> | string,
57
- options?: ModuleFilterOptions<T>,
58
- ): Promise<T | T[] | undefined> {
59
- const mutatedOptions = { ...options, maxDepth: (options?.maxDepth ?? CompositeModuleResolver.defaultMaxDepth) - 1 }
60
- if (typeof nameOrAddressOrFilter === 'string') {
61
- if (mutatedOptions.maxDepth < 0) {
62
- return undefined
63
- }
64
- const results = await Promise.all(
65
- this.resolvers.map(async (resolver) => {
66
- const result: T | undefined = await resolver.resolve<T>(nameOrAddressOrFilter, mutatedOptions)
67
- return result
68
- }),
69
- )
70
- const result: T | undefined = results.filter(exists).filter(duplicateModules).pop()
71
- return result
72
- } else {
73
- if (mutatedOptions.maxDepth < 0) {
74
- return []
75
- }
76
- const result = await Promise.all(
77
- this.resolvers.map(async (resolver) => {
78
- const result: T[] = await resolver.resolve<T>(nameOrAddressOrFilter, mutatedOptions)
79
- return result
80
- }),
81
- )
82
- const flatResult: T[] = result.flat()
83
- return flatResult.filter(duplicateModules)
84
- }
85
- }
86
-
87
- private addSingleModule(module?: ModuleInstance) {
88
- if (module) {
89
- this.localResolver.add(module)
90
- }
91
- }
92
- private removeSingleModule(addressOrName: string) {
93
- this.localResolver.remove(addressOrName)
94
- }
95
- }
@@ -1,46 +0,0 @@
1
- import { Module, ModuleFilter, ModuleResolver } from '@xyo-network/module-model'
2
-
3
- export interface ModuleResolvedEventArgs {
4
- filter?: ModuleFilter
5
- module: Module
6
- }
7
-
8
- export interface ResolverEventEmitter {
9
- on(event: 'moduleResolved', listener: (args: ModuleResolvedEventArgs) => void): void
10
- }
11
-
12
- type ListenerFunction = (args: ModuleResolvedEventArgs) => void
13
-
14
- const getMixin = <T extends ModuleResolver = ModuleResolver>(resolver: T) => {
15
- const listeners: ListenerFunction[] = []
16
- const emit = (event: 'moduleResolved', args: ModuleResolvedEventArgs): boolean => {
17
- if (listeners.length < 1) return false
18
- listeners.map((listener) => listener(args))
19
- return true
20
- }
21
- const onModuleResolved = (module: Module, filter?: ModuleFilter) => {
22
- const args = { filter, module }
23
- emit('moduleResolved', args)
24
- }
25
- const { resolve } = resolver
26
- function originalResolve(filter?: ModuleFilter) {
27
- return resolve.bind(resolver)(filter)
28
- }
29
-
30
- return {
31
- on: (event: 'moduleResolved', listener: (args: ModuleResolvedEventArgs) => void) => {
32
- listeners.push(listener)
33
- },
34
- resolve: async (filter?: ModuleFilter): Promise<Module[]> => {
35
- const modules: Module[] = await originalResolve(filter)
36
- await Promise.allSettled(modules.map((mod) => onModuleResolved(mod, filter)))
37
- return modules
38
- },
39
- }
40
- }
41
-
42
- export const mixinResolverEventEmitter = <T extends ModuleResolver = ModuleResolver>(resolver: T): T & ResolverEventEmitter => {
43
- const mixin = getMixin(resolver)
44
- const ret = Object.assign(resolver, mixin)
45
- return ret
46
- }
@@ -1,128 +0,0 @@
1
- import {
2
- AddressModuleFilter,
3
- ModuleFilter,
4
- ModuleInstance,
5
- ModuleRepository,
6
- ModuleResolver,
7
- NameModuleFilter,
8
- QueryModuleFilter,
9
- } from '@xyo-network/module-model'
10
- import { Promisable } from '@xyo-network/promise'
11
- import compact from 'lodash/compact'
12
- import flatten from 'lodash/flatten'
13
-
14
- //This class is now package private (not exported from index.ts)
15
- export class SimpleModuleResolver implements ModuleRepository {
16
- private addressToName: Record<string, string> = {}
17
- private modules: Record<string, ModuleInstance> = {}
18
-
19
- get isModuleResolver() {
20
- return true
21
- }
22
-
23
- add(module: ModuleInstance): this
24
- add(module: ModuleInstance[]): this
25
- add(module: ModuleInstance | ModuleInstance[]): this {
26
- if (Array.isArray(module)) {
27
- module.forEach((module) => this.addSingleModule(module))
28
- } else {
29
- this.addSingleModule(module)
30
- }
31
- return this
32
- }
33
-
34
- addResolver(_resolver: ModuleResolver): this {
35
- throw 'Adding resolvers not supported'
36
- }
37
-
38
- remove(address: string | string[]): this {
39
- if (Array.isArray(address)) {
40
- address.forEach((address) => this.removeSingleModule(address))
41
- } else {
42
- this.removeSingleModule(address)
43
- }
44
- return this
45
- }
46
-
47
- removeResolver(_resolver: ModuleResolver): this {
48
- throw 'Removing resolvers not supported'
49
- }
50
-
51
- resolve(filter?: ModuleFilter): Promisable<ModuleInstance[]>
52
- resolve(nameOrAddress: string): Promisable<ModuleInstance | undefined>
53
- resolve(nameOrAddressOrFilter?: ModuleFilter | string): Promisable<ModuleInstance[] | ModuleInstance | undefined> {
54
- if (nameOrAddressOrFilter) {
55
- if (typeof nameOrAddressOrFilter === 'string') {
56
- const result: ModuleInstance | undefined =
57
- this.resolveByName(Object.values(this.modules), [nameOrAddressOrFilter]).pop() ??
58
- this.resolveByAddress(Object.values(this.modules), [nameOrAddressOrFilter]).pop()
59
- return result
60
- } else if ((nameOrAddressOrFilter as AddressModuleFilter).address) {
61
- const result: ModuleInstance[] = this.resolveByAddress(Object.values(this.modules), (nameOrAddressOrFilter as AddressModuleFilter).address)
62
- return result
63
- } else if ((nameOrAddressOrFilter as NameModuleFilter).name) {
64
- const result: ModuleInstance[] = this.resolveByName(Object.values(this.modules), (nameOrAddressOrFilter as NameModuleFilter).name)
65
- return result
66
- } else if ((nameOrAddressOrFilter as QueryModuleFilter).query) {
67
- return this.resolveByQuery(Object.values(this.modules), (nameOrAddressOrFilter as QueryModuleFilter).query)
68
- }
69
- } else {
70
- return Object.values(this.modules)
71
- }
72
- }
73
-
74
- private addSingleModule(module?: ModuleInstance) {
75
- if (module) {
76
- this.modules[module.address] = module
77
- }
78
- }
79
-
80
- private removeSingleModule(address: string) {
81
- if (address) {
82
- if (this.modules[address]) {
83
- delete this.modules[address]
84
- const name = this.addressToName[address]
85
- if (name) {
86
- delete this.addressToName[address]
87
- }
88
- }
89
- }
90
- }
91
-
92
- private resolveByAddress<T extends ModuleInstance = ModuleInstance>(modules: T[], address?: string[]): T[] {
93
- return address
94
- ? compact(
95
- flatten(
96
- address?.map((address) => {
97
- return modules.filter((module) => module.address === address)
98
- }),
99
- ),
100
- )
101
- : modules
102
- }
103
-
104
- private resolveByName<T extends ModuleInstance = ModuleInstance>(modules: T[], name?: string[]): T[] {
105
- if (name) {
106
- return compact(name.map((name) => modules.filter((module) => module.config?.name === name)).flat())
107
- }
108
- return modules
109
- }
110
-
111
- private resolveByQuery<T extends ModuleInstance = ModuleInstance>(modules: T[], query?: string[][]): T[] {
112
- return query
113
- ? compact(
114
- modules.filter(
115
- (module) =>
116
- query?.reduce((supported, queryList) => {
117
- return (
118
- queryList.reduce((supported, query) => {
119
- const queryable = module.queries.includes(query)
120
- return supported && queryable
121
- }, true) || supported
122
- )
123
- }, false),
124
- ),
125
- )
126
- : modules
127
- }
128
- }
@@ -1,3 +0,0 @@
1
- export * from './CompositeModuleResolver'
2
- export * from './ResolverEventEmitter'
3
- export * from './SimpleModuleResolver'