@xyo-network/module-abstract 2.92.11 → 2.93.0-rc.1
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/browser/AbstractModule.d.cts +1 -2
- package/dist/browser/AbstractModule.d.cts.map +1 -1
- package/dist/browser/AbstractModule.d.mts +1 -2
- package/dist/browser/AbstractModule.d.mts.map +1 -1
- package/dist/browser/AbstractModule.d.ts +1 -2
- package/dist/browser/AbstractModule.d.ts.map +1 -1
- package/dist/browser/ResolveHelper.d.cts +14 -0
- package/dist/browser/ResolveHelper.d.cts.map +1 -0
- package/dist/browser/ResolveHelper.d.mts +14 -0
- package/dist/browser/ResolveHelper.d.mts.map +1 -0
- package/dist/browser/ResolveHelper.d.ts +14 -0
- package/dist/browser/ResolveHelper.d.ts.map +1 -0
- package/dist/browser/index.cjs +140 -94
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.d.cts +1 -0
- package/dist/browser/index.d.cts.map +1 -1
- package/dist/browser/index.d.mts +1 -0
- package/dist/browser/index.d.mts.map +1 -1
- package/dist/browser/index.d.ts +1 -0
- package/dist/browser/index.d.ts.map +1 -1
- package/dist/browser/index.js +108 -62
- package/dist/browser/index.js.map +1 -1
- package/dist/node/AbstractModule.d.cts +1 -2
- package/dist/node/AbstractModule.d.cts.map +1 -1
- package/dist/node/AbstractModule.d.mts +1 -2
- package/dist/node/AbstractModule.d.mts.map +1 -1
- package/dist/node/AbstractModule.d.ts +1 -2
- package/dist/node/AbstractModule.d.ts.map +1 -1
- package/dist/node/ResolveHelper.d.cts +14 -0
- package/dist/node/ResolveHelper.d.cts.map +1 -0
- package/dist/node/ResolveHelper.d.mts +14 -0
- package/dist/node/ResolveHelper.d.mts.map +1 -0
- package/dist/node/ResolveHelper.d.ts +14 -0
- package/dist/node/ResolveHelper.d.ts.map +1 -0
- package/dist/node/index.cjs +140 -94
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.d.cts +1 -0
- package/dist/node/index.d.cts.map +1 -1
- package/dist/node/index.d.mts +1 -0
- package/dist/node/index.d.mts.map +1 -1
- package/dist/node/index.d.ts +1 -0
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/index.js +107 -62
- package/dist/node/index.js.map +1 -1
- package/package.json +28 -27
- package/src/AbstractModule.ts +27 -66
- package/src/ResolveHelper.ts +96 -0
- package/src/index.ts +1 -0
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { Logger } from '@xylabs/logger'
|
|
2
|
+
import { duplicateModules, ModuleFilter, ModuleFilterOptions, ModuleIdentifier, ModuleInstance, ModuleResolver } from '@xyo-network/module-model'
|
|
3
|
+
|
|
4
|
+
export interface ResolveHelperConfig {
|
|
5
|
+
dead?: boolean
|
|
6
|
+
downResolver?: ModuleResolver
|
|
7
|
+
upResolver?: ModuleResolver
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export class ResolveHelper {
|
|
11
|
+
static async resolve<T extends ModuleInstance = ModuleInstance>(
|
|
12
|
+
config: ResolveHelperConfig,
|
|
13
|
+
all: '*',
|
|
14
|
+
options?: ModuleFilterOptions<T>,
|
|
15
|
+
): Promise<T[]>
|
|
16
|
+
static async resolve<T extends ModuleInstance = ModuleInstance>(
|
|
17
|
+
config: ResolveHelperConfig,
|
|
18
|
+
filter: ModuleFilter,
|
|
19
|
+
options?: ModuleFilterOptions<T>,
|
|
20
|
+
): Promise<T[]>
|
|
21
|
+
static async resolve<T extends ModuleInstance = ModuleInstance>(
|
|
22
|
+
config: ResolveHelperConfig,
|
|
23
|
+
id: ModuleIdentifier,
|
|
24
|
+
options?: ModuleFilterOptions<T>,
|
|
25
|
+
): Promise<T | undefined>
|
|
26
|
+
static async resolve<T extends ModuleInstance = ModuleInstance>(
|
|
27
|
+
config: ResolveHelperConfig,
|
|
28
|
+
idOrFilter: ModuleFilter<T> | ModuleIdentifier = '*',
|
|
29
|
+
{ required = 'log', ...options }: ModuleFilterOptions<T> = {},
|
|
30
|
+
): Promise<T | T[] | undefined> {
|
|
31
|
+
const { dead = false, upResolver, downResolver } = config
|
|
32
|
+
const childOptions = { ...options, required: false }
|
|
33
|
+
const direction = options?.direction ?? 'all'
|
|
34
|
+
const up = direction === 'up' || direction === 'all'
|
|
35
|
+
const down = direction === 'down' || direction === 'all'
|
|
36
|
+
let result: T | T[] | undefined
|
|
37
|
+
if (idOrFilter === '*') {
|
|
38
|
+
if (dead) {
|
|
39
|
+
return []
|
|
40
|
+
}
|
|
41
|
+
return [
|
|
42
|
+
...(down ? await (downResolver as ModuleResolver).resolve<T>('*', childOptions) : []),
|
|
43
|
+
...(up ? await (upResolver as ModuleResolver).resolve<T>('*', childOptions) : []),
|
|
44
|
+
].filter(duplicateModules)
|
|
45
|
+
} else {
|
|
46
|
+
switch (typeof idOrFilter) {
|
|
47
|
+
case 'string': {
|
|
48
|
+
if (dead) {
|
|
49
|
+
return undefined
|
|
50
|
+
}
|
|
51
|
+
result =
|
|
52
|
+
(down ? await (downResolver as ModuleResolver).resolve<T>(idOrFilter, childOptions) : undefined) ??
|
|
53
|
+
(up ? await (upResolver as ModuleResolver).resolve<T>(idOrFilter, childOptions) : undefined)
|
|
54
|
+
break
|
|
55
|
+
}
|
|
56
|
+
default: {
|
|
57
|
+
if (dead) {
|
|
58
|
+
return []
|
|
59
|
+
}
|
|
60
|
+
const filter: ModuleFilter<T> | undefined = idOrFilter
|
|
61
|
+
result = [
|
|
62
|
+
...(down ? await (downResolver as ModuleResolver).resolve<T>(filter, childOptions) : []),
|
|
63
|
+
...(up ? await (upResolver as ModuleResolver).resolve<T>(filter, childOptions) : []),
|
|
64
|
+
].filter(duplicateModules)
|
|
65
|
+
break
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
this.validateRequiredResolve(required, result, idOrFilter)
|
|
70
|
+
return result
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
static validateRequiredResolve(
|
|
74
|
+
required: boolean | 'warn' | 'log',
|
|
75
|
+
result: ModuleInstance[] | ModuleInstance | undefined,
|
|
76
|
+
idOrFilter: ModuleIdentifier | ModuleFilter,
|
|
77
|
+
logger?: Logger,
|
|
78
|
+
) {
|
|
79
|
+
if (required && (result === undefined || (Array.isArray(result) && result.length > 0))) {
|
|
80
|
+
switch (required) {
|
|
81
|
+
case 'warn': {
|
|
82
|
+
logger?.warn('resolve failed', idOrFilter)
|
|
83
|
+
break
|
|
84
|
+
}
|
|
85
|
+
case 'log': {
|
|
86
|
+
logger?.log('resolve failed', idOrFilter)
|
|
87
|
+
break
|
|
88
|
+
}
|
|
89
|
+
default: {
|
|
90
|
+
logger?.error('resolve failed', idOrFilter)
|
|
91
|
+
break
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
package/src/index.ts
CHANGED