@xyo-network/module-abstract 2.66.2 → 2.66.4
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/cjs/AbstractIndirectModule.js +19 -15
- package/dist/cjs/AbstractIndirectModule.js.map +1 -1
- package/dist/cjs/QueryValidator/SupportedQueryValidator.js.map +1 -1
- package/dist/cjs/Resolver/CompositeModuleResolver.js.map +1 -1
- package/dist/cjs/Resolver/ResolverEventEmitter.js.map +1 -1
- package/dist/cjs/Resolver/SimpleModuleResolver.js.map +1 -1
- package/dist/docs.json +3377 -3591
- package/dist/esm/AbstractIndirectModule.js +18 -14
- package/dist/esm/AbstractIndirectModule.js.map +1 -1
- package/dist/esm/QueryValidator/SupportedQueryValidator.js.map +1 -1
- package/dist/esm/Resolver/CompositeModuleResolver.js.map +1 -1
- package/dist/esm/Resolver/ResolverEventEmitter.js.map +1 -1
- package/dist/esm/Resolver/SimpleModuleResolver.js.map +1 -1
- package/dist/types/AbstractIndirectModule.d.ts +9 -9
- package/dist/types/AbstractIndirectModule.d.ts.map +1 -1
- package/dist/types/QueryValidator/SupportedQueryValidator.d.ts +4 -4
- package/dist/types/QueryValidator/SupportedQueryValidator.d.ts.map +1 -1
- package/dist/types/Resolver/CompositeModuleResolver.d.ts +5 -5
- package/dist/types/Resolver/CompositeModuleResolver.d.ts.map +1 -1
- package/dist/types/Resolver/ResolverEventEmitter.d.ts +2 -2
- package/dist/types/Resolver/ResolverEventEmitter.d.ts.map +1 -1
- package/dist/types/Resolver/SimpleModuleResolver.d.ts +5 -5
- package/dist/types/Resolver/SimpleModuleResolver.d.ts.map +1 -1
- package/package.json +19 -20
- package/src/AbstractIndirectModule.ts +33 -31
- package/src/QueryValidator/SupportedQueryValidator.ts +3 -3
- package/src/Resolver/CompositeModuleResolver.ts +10 -12
- package/src/Resolver/ResolverEventEmitter.ts +5 -5
- package/src/Resolver/SimpleModuleResolver.ts +18 -20
|
@@ -4,8 +4,7 @@ import { exists } from '@xylabs/exists'
|
|
|
4
4
|
import { HDWallet } from '@xyo-network/account'
|
|
5
5
|
import { AccountInstance } from '@xyo-network/account-model'
|
|
6
6
|
import { AddressPayload, AddressSchema } from '@xyo-network/address-payload-plugin'
|
|
7
|
-
import { ArchivistInstance } from '@xyo-network/archivist-model'
|
|
8
|
-
import { IndirectArchivistWrapper } from '@xyo-network/archivist-wrapper'
|
|
7
|
+
import { ArchivistInstance, asArchivistInstance } from '@xyo-network/archivist-model'
|
|
9
8
|
import { BoundWitnessBuilder, QueryBoundWitness, QueryBoundWitnessBuilder, QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-builder'
|
|
10
9
|
import { BoundWitness } from '@xyo-network/boundwitness-model'
|
|
11
10
|
import { ConfigPayload, ConfigSchema } from '@xyo-network/config-payload-plugin'
|
|
@@ -18,8 +17,8 @@ import {
|
|
|
18
17
|
CreatableModule,
|
|
19
18
|
CreatableModuleFactory,
|
|
20
19
|
duplicateModules,
|
|
21
|
-
IndirectModule,
|
|
22
20
|
IndividualArchivistConfig,
|
|
21
|
+
Module,
|
|
23
22
|
ModuleAddressQuerySchema,
|
|
24
23
|
ModuleBusyEventArgs,
|
|
25
24
|
ModuleConfig,
|
|
@@ -58,11 +57,11 @@ import { CompositeModuleResolver } from './Resolver'
|
|
|
58
57
|
/** @description Abstract class for modules that allow access only through querying and not through direct calls */
|
|
59
58
|
export abstract class AbstractIndirectModule<TParams extends ModuleParams = ModuleParams, TEventData extends ModuleEventData = ModuleEventData>
|
|
60
59
|
extends BaseEmitter<TParams, TEventData>
|
|
61
|
-
implements
|
|
60
|
+
implements Module<TParams, TEventData>, Module
|
|
62
61
|
{
|
|
63
62
|
static configSchemas: string[]
|
|
64
63
|
static enableBusy = false
|
|
65
|
-
static enableLazyLoad =
|
|
64
|
+
static enableLazyLoad = false
|
|
66
65
|
|
|
67
66
|
protected static privateConstructorKey = Date.now().toString()
|
|
68
67
|
|
|
@@ -84,8 +83,8 @@ export abstract class AbstractIndirectModule<TParams extends ModuleParams = Modu
|
|
|
84
83
|
[ModuleManifestQuerySchema]: undefined,
|
|
85
84
|
[ModuleSubscribeQuerySchema]: undefined,
|
|
86
85
|
}
|
|
87
|
-
protected
|
|
88
|
-
protected
|
|
86
|
+
protected _startPromise: Promisable<boolean> | undefined = undefined
|
|
87
|
+
protected _started: Promisable<boolean> | undefined = undefined
|
|
89
88
|
protected readonly moduleConfigQueryValidator: Queryable
|
|
90
89
|
protected readonly supportedQueryValidator: Queryable
|
|
91
90
|
|
|
@@ -97,7 +96,7 @@ export abstract class AbstractIndirectModule<TParams extends ModuleParams = Modu
|
|
|
97
96
|
const mutatedParams = { ...params } as TParams
|
|
98
97
|
super(mutatedParams)
|
|
99
98
|
|
|
100
|
-
this.supportedQueryValidator = new SupportedQueryValidator(this as
|
|
99
|
+
this.supportedQueryValidator = new SupportedQueryValidator(this as Module).queryable
|
|
101
100
|
this.moduleConfigQueryValidator = new ModuleConfigQueryValidator(mutatedParams?.config).queryable
|
|
102
101
|
}
|
|
103
102
|
|
|
@@ -139,7 +138,7 @@ export abstract class AbstractIndirectModule<TParams extends ModuleParams = Modu
|
|
|
139
138
|
|
|
140
139
|
protected abstract get _queryAccountPaths(): Record<Query['schema'], string>
|
|
141
140
|
|
|
142
|
-
static async create<TModule extends
|
|
141
|
+
static async create<TModule extends Module>(this: CreatableModule<TModule>, params?: TModule['params']) {
|
|
143
142
|
if (!this.configSchemas || this.configSchemas.length === 0) {
|
|
144
143
|
throw Error(`Missing configSchema [${params?.config?.schema}][${this.name}]`)
|
|
145
144
|
}
|
|
@@ -154,14 +153,14 @@ export abstract class AbstractIndirectModule<TParams extends ModuleParams = Modu
|
|
|
154
153
|
params?.logger?.debug(`config: ${JSON.stringify(mutatedConfig, null, 2)}`)
|
|
155
154
|
const mutatedParams = { ...params, config: mutatedConfig } as TModule['params']
|
|
156
155
|
const newModule = new this(AbstractIndirectModule.privateConstructorKey, mutatedParams)
|
|
156
|
+
await newModule.loadAccount?.()
|
|
157
157
|
if (!AbstractIndirectModule.enableLazyLoad) {
|
|
158
158
|
await newModule.start?.()
|
|
159
159
|
}
|
|
160
|
-
await newModule.loadAccount?.()
|
|
161
160
|
return newModule
|
|
162
161
|
}
|
|
163
162
|
|
|
164
|
-
static factory<TModule extends
|
|
163
|
+
static factory<TModule extends Module>(this: CreatableModule<TModule>, params?: TModule['params']): CreatableModuleFactory<TModule> {
|
|
165
164
|
return ModuleFactory.withParams(this, params)
|
|
166
165
|
}
|
|
167
166
|
|
|
@@ -200,7 +199,7 @@ export abstract class AbstractIndirectModule<TParams extends ModuleParams = Modu
|
|
|
200
199
|
if (!account) console.warn(`AbstractModule.loadAccount: No account provided - Creating Random account [${this.config.schema}]`)
|
|
201
200
|
this._account = account ?? (await HDWallet.random())
|
|
202
201
|
}
|
|
203
|
-
this.downResolver.add(this as
|
|
202
|
+
this.downResolver.add(this as Module)
|
|
204
203
|
return this._account
|
|
205
204
|
}
|
|
206
205
|
|
|
@@ -238,43 +237,40 @@ export abstract class AbstractIndirectModule<TParams extends ModuleParams = Modu
|
|
|
238
237
|
return validators.every((validator) => validator(query, payloads))
|
|
239
238
|
}
|
|
240
239
|
|
|
241
|
-
async resolve
|
|
242
|
-
async resolve
|
|
243
|
-
async resolve<
|
|
244
|
-
nameOrAddressOrFilter?: ModuleFilter | string,
|
|
245
|
-
options?: ModuleFilterOptions,
|
|
246
|
-
): Promise<TModule | TModule[] | undefined> {
|
|
240
|
+
async resolve(filter?: ModuleFilter, options?: ModuleFilterOptions): Promise<Module[]>
|
|
241
|
+
async resolve(nameOrAddress: string, options?: ModuleFilterOptions): Promise<Module | undefined>
|
|
242
|
+
async resolve(nameOrAddressOrFilter?: ModuleFilter | string, options?: ModuleFilterOptions): Promise<Module | Module[] | undefined> {
|
|
247
243
|
const direction = options?.direction ?? 'all'
|
|
248
244
|
const up = direction === 'up' || direction === 'all'
|
|
249
245
|
const down = direction === 'down' || direction === 'all'
|
|
250
246
|
switch (typeof nameOrAddressOrFilter) {
|
|
251
247
|
case 'string': {
|
|
252
248
|
return (
|
|
253
|
-
(down ? await this.downResolver.resolve
|
|
254
|
-
(up ? await this.upResolver.resolve
|
|
249
|
+
(down ? await this.downResolver.resolve(nameOrAddressOrFilter) : undefined) ??
|
|
250
|
+
(up ? await this.upResolver.resolve(nameOrAddressOrFilter) : undefined)
|
|
255
251
|
)
|
|
256
252
|
}
|
|
257
253
|
default: {
|
|
258
254
|
const filter: ModuleFilter | undefined = nameOrAddressOrFilter
|
|
259
|
-
return [
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
].filter(duplicateModules)
|
|
255
|
+
return [...(down ? await this.downResolver.resolve(filter) : []), ...(up ? await this.upResolver.resolve(filter) : [])].filter(
|
|
256
|
+
duplicateModules,
|
|
257
|
+
)
|
|
263
258
|
}
|
|
264
259
|
}
|
|
265
260
|
}
|
|
266
261
|
|
|
267
|
-
start(_timeout?: number):
|
|
262
|
+
start(_timeout?: number): Promisable<boolean> {
|
|
268
263
|
//using promise as mutex
|
|
269
|
-
this.
|
|
270
|
-
return this.
|
|
264
|
+
this._startPromise = this._startPromise ?? this.startHandler()
|
|
265
|
+
return this._startPromise
|
|
271
266
|
}
|
|
272
267
|
|
|
273
268
|
async started(notStartedAction: 'error' | 'throw' | 'warn' | 'log' | 'none' = 'log', tryStart = true): Promise<boolean> {
|
|
274
|
-
|
|
269
|
+
const started = await this._started
|
|
270
|
+
if (started === true) {
|
|
275
271
|
return true
|
|
276
272
|
}
|
|
277
|
-
if (!
|
|
273
|
+
if (!started) {
|
|
278
274
|
//using promise as mutex
|
|
279
275
|
this._started = (async () => {
|
|
280
276
|
if (tryStart) {
|
|
@@ -308,12 +304,18 @@ export abstract class AbstractIndirectModule<TParams extends ModuleParams = Modu
|
|
|
308
304
|
return false
|
|
309
305
|
})()
|
|
310
306
|
}
|
|
307
|
+
if (!this._started) {
|
|
308
|
+
throw 'Failed to create start promise'
|
|
309
|
+
}
|
|
311
310
|
return await this._started
|
|
312
311
|
}
|
|
313
312
|
|
|
314
313
|
async stop(_timeout?: number): Promise<boolean> {
|
|
315
314
|
return await this.busy(async () => {
|
|
316
|
-
|
|
315
|
+
const result = await this.stopHandler()
|
|
316
|
+
this._started = undefined
|
|
317
|
+
this._startPromise = undefined
|
|
318
|
+
return result
|
|
317
319
|
})
|
|
318
320
|
}
|
|
319
321
|
|
|
@@ -567,6 +569,6 @@ export abstract class AbstractIndirectModule<TParams extends ModuleParams = Modu
|
|
|
567
569
|
? (this.config.archivist as string)
|
|
568
570
|
: (this.config?.archivist?.[kind] as string)
|
|
569
571
|
const resolved = await this.upResolver.resolve(filter)
|
|
570
|
-
return
|
|
572
|
+
return asArchivistInstance(resolved)
|
|
571
573
|
}
|
|
572
574
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { QueryBoundWitness, QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-builder'
|
|
2
|
-
import {
|
|
2
|
+
import { Module, ModuleQuery } from '@xyo-network/module-model'
|
|
3
3
|
import { Payload } from '@xyo-network/payload-model'
|
|
4
4
|
|
|
5
5
|
import { Queryable, QueryValidator } from './QueryValidator'
|
|
6
6
|
|
|
7
7
|
export const isQuerySupportedByModule = async <T extends QueryBoundWitness = QueryBoundWitness>(
|
|
8
|
-
mod:
|
|
8
|
+
mod: Module,
|
|
9
9
|
query: T,
|
|
10
10
|
payloads?: Payload[],
|
|
11
11
|
): Promise<boolean> => {
|
|
@@ -15,7 +15,7 @@ export const isQuerySupportedByModule = async <T extends QueryBoundWitness = Que
|
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
export class SupportedQueryValidator implements QueryValidator {
|
|
18
|
-
constructor(protected readonly mod:
|
|
18
|
+
constructor(protected readonly mod: Module) {}
|
|
19
19
|
queryable: Queryable = (query, payloads) => {
|
|
20
20
|
return isQuerySupportedByModule(this.mod, query, payloads)
|
|
21
21
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { exists } from '@xylabs/exists'
|
|
2
2
|
import { Base, BaseParams } from '@xyo-network/core'
|
|
3
|
-
import { duplicateModules,
|
|
3
|
+
import { duplicateModules, Module, ModuleFilter, ModuleRepository, ModuleResolver } from '@xyo-network/module-model'
|
|
4
4
|
|
|
5
5
|
import { SimpleModuleResolver } from './SimpleModuleResolver'
|
|
6
6
|
|
|
@@ -19,9 +19,9 @@ export class CompositeModuleResolver extends Base implements ModuleRepository, M
|
|
|
19
19
|
return true
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
add(module:
|
|
23
|
-
add(module:
|
|
24
|
-
add(module:
|
|
22
|
+
add(module: Module): this
|
|
23
|
+
add(module: Module[]): this
|
|
24
|
+
add(module: Module | Module[]): this {
|
|
25
25
|
if (Array.isArray(module)) {
|
|
26
26
|
module.forEach((module) => this.addSingleModule(module))
|
|
27
27
|
} else {
|
|
@@ -49,22 +49,20 @@ export class CompositeModuleResolver extends Base implements ModuleRepository, M
|
|
|
49
49
|
return this
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
-
async resolve
|
|
53
|
-
async resolve
|
|
54
|
-
async resolve<
|
|
55
|
-
nameOrAddressOrFilter?: ModuleFilter | string,
|
|
56
|
-
): Promise<TModule | TModule[] | undefined> {
|
|
52
|
+
async resolve(filter?: ModuleFilter): Promise<Module[]>
|
|
53
|
+
async resolve(nameOrAddress: string): Promise<Module | undefined>
|
|
54
|
+
async resolve(nameOrAddressOrFilter?: ModuleFilter | string): Promise<Module | Module[] | undefined> {
|
|
57
55
|
if (typeof nameOrAddressOrFilter === 'string') {
|
|
58
56
|
const result = await Promise.all(
|
|
59
57
|
this.resolvers.map(async (resolver) => {
|
|
60
|
-
return await resolver.resolve
|
|
58
|
+
return await resolver.resolve(nameOrAddressOrFilter)
|
|
61
59
|
}),
|
|
62
60
|
)
|
|
63
61
|
return result.filter(exists).filter(duplicateModules).pop()
|
|
64
62
|
} else {
|
|
65
63
|
const result = await Promise.all(
|
|
66
64
|
this.resolvers.map(async (resolver) => {
|
|
67
|
-
return await resolver.resolve
|
|
65
|
+
return await resolver.resolve(nameOrAddressOrFilter)
|
|
68
66
|
}),
|
|
69
67
|
)
|
|
70
68
|
const flatResult = result.flat()
|
|
@@ -72,7 +70,7 @@ export class CompositeModuleResolver extends Base implements ModuleRepository, M
|
|
|
72
70
|
}
|
|
73
71
|
}
|
|
74
72
|
|
|
75
|
-
private addSingleModule(module?:
|
|
73
|
+
private addSingleModule(module?: Module) {
|
|
76
74
|
if (module) {
|
|
77
75
|
this.localResolver.add(module)
|
|
78
76
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Module, ModuleFilter, ModuleResolver } from '@xyo-network/module-model'
|
|
2
2
|
|
|
3
3
|
export interface ModuleResolvedEventArgs {
|
|
4
4
|
filter?: ModuleFilter
|
|
5
|
-
module:
|
|
5
|
+
module: Module
|
|
6
6
|
}
|
|
7
7
|
|
|
8
8
|
export interface ResolverEventEmitter {
|
|
@@ -18,7 +18,7 @@ const getMixin = <T extends ModuleResolver = ModuleResolver>(resolver: T) => {
|
|
|
18
18
|
listeners.map((listener) => listener(args))
|
|
19
19
|
return true
|
|
20
20
|
}
|
|
21
|
-
const onModuleResolved = (module:
|
|
21
|
+
const onModuleResolved = (module: Module, filter?: ModuleFilter) => {
|
|
22
22
|
const args = { filter, module }
|
|
23
23
|
emit('moduleResolved', args)
|
|
24
24
|
}
|
|
@@ -31,8 +31,8 @@ const getMixin = <T extends ModuleResolver = ModuleResolver>(resolver: T) => {
|
|
|
31
31
|
on: (event: 'moduleResolved', listener: (args: ModuleResolvedEventArgs) => void) => {
|
|
32
32
|
listeners.push(listener)
|
|
33
33
|
},
|
|
34
|
-
resolve: async (filter?: ModuleFilter): Promise<
|
|
35
|
-
const modules:
|
|
34
|
+
resolve: async (filter?: ModuleFilter): Promise<Module[]> => {
|
|
35
|
+
const modules: Module[] = await originalResolve(filter)
|
|
36
36
|
await Promise.allSettled(modules.map((mod) => onModuleResolved(mod, filter)))
|
|
37
37
|
return modules
|
|
38
38
|
},
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
AddressModuleFilter,
|
|
3
|
-
|
|
3
|
+
Module,
|
|
4
4
|
ModuleFilter,
|
|
5
5
|
ModuleRepository,
|
|
6
6
|
ModuleResolver,
|
|
@@ -14,15 +14,15 @@ import flatten from 'lodash/flatten'
|
|
|
14
14
|
//This class is now package private (not exported from index.ts)
|
|
15
15
|
export class SimpleModuleResolver implements ModuleRepository {
|
|
16
16
|
private addressToName: Record<string, string> = {}
|
|
17
|
-
private modules: Record<string,
|
|
17
|
+
private modules: Record<string, Module> = {}
|
|
18
18
|
|
|
19
19
|
get isModuleResolver() {
|
|
20
20
|
return true
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
add(module:
|
|
24
|
-
add(module:
|
|
25
|
-
add(module:
|
|
23
|
+
add(module: Module): this
|
|
24
|
+
add(module: Module[]): this
|
|
25
|
+
add(module: Module | Module[]): this {
|
|
26
26
|
if (Array.isArray(module)) {
|
|
27
27
|
module.forEach((module) => this.addSingleModule(module))
|
|
28
28
|
} else {
|
|
@@ -48,30 +48,28 @@ export class SimpleModuleResolver implements ModuleRepository {
|
|
|
48
48
|
throw 'Removing resolvers not supported'
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
-
resolve
|
|
52
|
-
resolve
|
|
53
|
-
resolve<
|
|
54
|
-
nameOrAddressOrFilter?: ModuleFilter | string,
|
|
55
|
-
): Promisable<TModule | TModule[] | undefined> {
|
|
51
|
+
resolve(filter?: ModuleFilter): Promisable<Module[]>
|
|
52
|
+
resolve(nameOrAddress: string): Promisable<Module | undefined>
|
|
53
|
+
resolve(nameOrAddressOrFilter?: ModuleFilter | string): Promisable<Module | Module[] | undefined> {
|
|
56
54
|
if (nameOrAddressOrFilter) {
|
|
57
55
|
if (typeof nameOrAddressOrFilter === 'string') {
|
|
58
56
|
return (
|
|
59
|
-
this.resolveByName(Object.values(this.modules)
|
|
60
|
-
this.resolveByAddress(Object.values(this.modules)
|
|
57
|
+
this.resolveByName(Object.values(this.modules), [nameOrAddressOrFilter]).pop() ??
|
|
58
|
+
this.resolveByAddress(Object.values(this.modules), [nameOrAddressOrFilter]).pop()
|
|
61
59
|
)
|
|
62
60
|
} else if ((nameOrAddressOrFilter as AddressModuleFilter).address) {
|
|
63
|
-
return this.resolveByAddress
|
|
61
|
+
return this.resolveByAddress(Object.values(this.modules), (nameOrAddressOrFilter as AddressModuleFilter).address)
|
|
64
62
|
} else if ((nameOrAddressOrFilter as NameModuleFilter).name) {
|
|
65
|
-
return this.resolveByName
|
|
63
|
+
return this.resolveByName(Object.values(this.modules), (nameOrAddressOrFilter as NameModuleFilter).name)
|
|
66
64
|
} else if ((nameOrAddressOrFilter as QueryModuleFilter).query) {
|
|
67
|
-
return this.resolveByQuery
|
|
65
|
+
return this.resolveByQuery(Object.values(this.modules), (nameOrAddressOrFilter as QueryModuleFilter).query)
|
|
68
66
|
}
|
|
69
67
|
} else {
|
|
70
|
-
return Object.values(this.modules)
|
|
68
|
+
return Object.values(this.modules)
|
|
71
69
|
}
|
|
72
70
|
}
|
|
73
71
|
|
|
74
|
-
private addSingleModule(module?:
|
|
72
|
+
private addSingleModule(module?: Module) {
|
|
75
73
|
if (module) {
|
|
76
74
|
this.modules[module.address] = module
|
|
77
75
|
}
|
|
@@ -89,7 +87,7 @@ export class SimpleModuleResolver implements ModuleRepository {
|
|
|
89
87
|
}
|
|
90
88
|
}
|
|
91
89
|
|
|
92
|
-
private resolveByAddress<T extends
|
|
90
|
+
private resolveByAddress<T extends Module = Module>(modules: T[], address?: string[]): T[] {
|
|
93
91
|
return address
|
|
94
92
|
? compact(
|
|
95
93
|
flatten(
|
|
@@ -101,14 +99,14 @@ export class SimpleModuleResolver implements ModuleRepository {
|
|
|
101
99
|
: modules
|
|
102
100
|
}
|
|
103
101
|
|
|
104
|
-
private resolveByName<T extends
|
|
102
|
+
private resolveByName<T extends Module = Module>(modules: T[], name?: string[]): T[] {
|
|
105
103
|
if (name) {
|
|
106
104
|
return compact(name.map((name) => modules.filter((module) => module.config.name === name)).flat())
|
|
107
105
|
}
|
|
108
106
|
return modules
|
|
109
107
|
}
|
|
110
108
|
|
|
111
|
-
private resolveByQuery<T extends
|
|
109
|
+
private resolveByQuery<T extends Module = Module>(modules: T[], query?: string[][]): T[] {
|
|
112
110
|
return query
|
|
113
111
|
? compact(
|
|
114
112
|
modules.filter((module) =>
|