@xyo-network/module-model 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/Events/ModuleError.js +3 -0
- package/dist/cjs/Events/ModuleError.js.map +1 -0
- package/dist/cjs/Events/index.js +1 -0
- package/dist/cjs/Events/index.js.map +1 -1
- package/dist/cjs/ModuleFactory.js.map +1 -1
- package/dist/cjs/isModule.js +10 -27
- package/dist/cjs/isModule.js.map +1 -1
- package/dist/cjs/lib/duplicateModules.js.map +1 -1
- package/dist/docs.json +18994 -30557
- package/dist/esm/Events/ModuleError.js +2 -0
- package/dist/esm/Events/ModuleError.js.map +1 -0
- package/dist/esm/Events/index.js +1 -0
- package/dist/esm/Events/index.js.map +1 -1
- package/dist/esm/ModuleFactory.js.map +1 -1
- package/dist/esm/isModule.js +8 -22
- package/dist/esm/isModule.js.map +1 -1
- package/dist/esm/lib/duplicateModules.js.map +1 -1
- package/dist/types/CreatableModule.d.ts +7 -7
- package/dist/types/CreatableModule.d.ts.map +1 -1
- package/dist/types/Events/ModuleBusy.d.ts +2 -2
- package/dist/types/Events/ModuleBusy.d.ts.map +1 -1
- package/dist/types/Events/ModuleError.d.ts +9 -0
- package/dist/types/Events/ModuleError.d.ts.map +1 -0
- package/dist/types/Events/ModuleQueried.d.ts +2 -2
- package/dist/types/Events/ModuleQueried.d.ts.map +1 -1
- package/dist/types/Events/index.d.ts +1 -0
- package/dist/types/Events/index.d.ts.map +1 -1
- package/dist/types/Module.d.ts +10 -12
- package/dist/types/Module.d.ts.map +1 -1
- package/dist/types/ModuleFactory.d.ts +5 -5
- package/dist/types/ModuleFactory.d.ts.map +1 -1
- package/dist/types/ModuleFilter.d.ts +9 -6
- package/dist/types/ModuleFilter.d.ts.map +1 -1
- package/dist/types/ModuleRepository.d.ts +4 -4
- package/dist/types/ModuleRepository.d.ts.map +1 -1
- package/dist/types/asModule.d.ts +2 -2
- package/dist/types/isModule.d.ts +3 -10
- package/dist/types/isModule.d.ts.map +1 -1
- package/dist/types/lib/duplicateModules.d.ts +2 -2
- package/dist/types/lib/duplicateModules.d.ts.map +1 -1
- package/dist/types/withModule.d.ts +1 -1
- package/package.json +11 -11
- package/src/CreatableModule.ts +7 -7
- package/src/Events/ModuleBusy.ts +2 -2
- package/src/Events/ModuleError.ts +9 -0
- package/src/Events/ModuleQueried.ts +2 -2
- package/src/Events/index.ts +1 -0
- package/src/Module.ts +18 -25
- package/src/ModuleFactory.ts +5 -5
- package/src/ModuleFilter.ts +16 -6
- package/src/ModuleRepository.ts +4 -4
- package/src/isModule.ts +10 -41
- package/src/lib/duplicateModules.ts +2 -2
package/src/Module.ts
CHANGED
|
@@ -6,7 +6,7 @@ import { Payload } from '@xyo-network/payload-model'
|
|
|
6
6
|
import { Promisable } from '@xyo-network/promise'
|
|
7
7
|
|
|
8
8
|
import { AnyConfigSchema, ModuleConfig } from './Config'
|
|
9
|
-
import { ModuleBusyEventData, ModuleQueriedEventData } from './Events'
|
|
9
|
+
import { ModuleBusyEventData, ModuleErrorEventData, ModuleQueriedEventData } from './Events'
|
|
10
10
|
import { ModuleDescription } from './ModuleDescription'
|
|
11
11
|
import { ModuleFilter, ModuleFilterOptions } from './ModuleFilter'
|
|
12
12
|
import { ModuleParams } from './ModuleParams'
|
|
@@ -14,12 +14,18 @@ import { ModuleQueryResult } from './ModuleQueryResult'
|
|
|
14
14
|
import { AddressPreviousHashPayload } from './Queries'
|
|
15
15
|
|
|
16
16
|
export interface ResolveFunctions {
|
|
17
|
-
resolve<
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
resolve<TModuleInstance extends ModuleInstance>(
|
|
18
|
+
filter?: ModuleFilter,
|
|
19
|
+
options?: ModuleFilterOptions<TModuleInstance>,
|
|
20
|
+
): Promisable<TModuleInstance[]>
|
|
21
|
+
resolve<TModuleInstance extends ModuleInstance>(
|
|
22
|
+
nameOrAddress: string,
|
|
23
|
+
options?: ModuleFilterOptions<TModuleInstance>,
|
|
24
|
+
): Promisable<TModuleInstance | undefined>
|
|
25
|
+
resolve<TModuleInstance extends ModuleInstance>(
|
|
20
26
|
nameOrAddressOrFilter?: ModuleFilter | string,
|
|
21
|
-
options?: ModuleFilterOptions
|
|
22
|
-
): Promisable<
|
|
27
|
+
options?: ModuleFilterOptions<TModuleInstance>,
|
|
28
|
+
): Promisable<TModuleInstance | TModuleInstance[] | undefined>
|
|
23
29
|
}
|
|
24
30
|
|
|
25
31
|
export interface ModuleResolver extends ResolveFunctions {
|
|
@@ -28,10 +34,7 @@ export interface ModuleResolver extends ResolveFunctions {
|
|
|
28
34
|
removeResolver: (resolver: ModuleResolver) => this
|
|
29
35
|
}
|
|
30
36
|
|
|
31
|
-
export type ModuleEventArgs<
|
|
32
|
-
TModule extends IndirectModule = IndirectModule,
|
|
33
|
-
TArgs extends EventArgs | undefined = undefined,
|
|
34
|
-
> = TArgs extends EventArgs
|
|
37
|
+
export type ModuleEventArgs<TModule extends Module = Module, TArgs extends EventArgs | undefined = undefined> = TArgs extends EventArgs
|
|
35
38
|
? {
|
|
36
39
|
module: TModule
|
|
37
40
|
} & TArgs
|
|
@@ -39,7 +42,7 @@ export type ModuleEventArgs<
|
|
|
39
42
|
module: TModule
|
|
40
43
|
}
|
|
41
44
|
|
|
42
|
-
export interface ModuleEventData extends ModuleQueriedEventData, ModuleBusyEventData {}
|
|
45
|
+
export interface ModuleEventData extends ModuleQueriedEventData, ModuleBusyEventData, ModuleErrorEventData {}
|
|
43
46
|
|
|
44
47
|
export type ModuleQueryFunctions = {
|
|
45
48
|
describe: () => Promise<ModuleDescription>
|
|
@@ -53,7 +56,7 @@ export type ModuleFields<TParams extends ModuleParams<AnyConfigSchema<ModuleConf
|
|
|
53
56
|
config: TParams['config']
|
|
54
57
|
|
|
55
58
|
/* The resolver is a 'down' resolver. It can resolve the module or any children (if it is a node for example), that are in the module*/
|
|
56
|
-
readonly downResolver: ModuleResolver
|
|
59
|
+
readonly downResolver: Omit<ModuleResolver, 'resolve'>
|
|
57
60
|
|
|
58
61
|
loadAccount?: () => Promisable<AccountInstance>
|
|
59
62
|
|
|
@@ -78,25 +81,15 @@ export type ModuleFields<TParams extends ModuleParams<AnyConfigSchema<ModuleConf
|
|
|
78
81
|
|
|
79
82
|
/* The resolver is a 'up' resolver. It can resolve the parent or any children of the parent*/
|
|
80
83
|
/* This is set by a NodeModule when attaching to the module */
|
|
81
|
-
readonly upResolver: ModuleResolver
|
|
84
|
+
readonly upResolver: Omit<ModuleResolver, 'resolve'>
|
|
82
85
|
}
|
|
83
86
|
|
|
84
|
-
export type
|
|
87
|
+
export type Module<
|
|
85
88
|
TParams extends ModuleParams<AnyConfigSchema<ModuleConfig>> = ModuleParams<AnyConfigSchema<ModuleConfig>>,
|
|
86
89
|
TEventData extends ModuleEventData = ModuleEventData,
|
|
87
90
|
> = ModuleFields<TParams> & EventFunctions<TEventData> & ResolveFunctions
|
|
88
91
|
|
|
89
|
-
export type DirectModule<
|
|
90
|
-
TParams extends ModuleParams<AnyConfigSchema<ModuleConfig>> = ModuleParams<AnyConfigSchema<ModuleConfig>>,
|
|
91
|
-
TEventData extends ModuleEventData = ModuleEventData,
|
|
92
|
-
> = IndirectModule<TParams, TEventData> & ModuleQueryFunctions
|
|
93
|
-
|
|
94
92
|
export type ModuleInstance<
|
|
95
93
|
TParams extends ModuleParams<AnyConfigSchema<ModuleConfig>> = ModuleParams<AnyConfigSchema<ModuleConfig>>,
|
|
96
94
|
TEventData extends ModuleEventData = ModuleEventData,
|
|
97
|
-
> =
|
|
98
|
-
|
|
99
|
-
export type Module<
|
|
100
|
-
TParams extends ModuleParams<AnyConfigSchema<ModuleConfig>> = ModuleParams<AnyConfigSchema<ModuleConfig>>,
|
|
101
|
-
TEventData extends ModuleEventData = ModuleEventData,
|
|
102
|
-
> = IndirectModule<TParams, TEventData>
|
|
95
|
+
> = Module<TParams, TEventData> & ModuleQueryFunctions
|
package/src/ModuleFactory.ts
CHANGED
|
@@ -2,9 +2,9 @@ import { Logger } from '@xyo-network/core'
|
|
|
2
2
|
import merge from 'lodash/merge'
|
|
3
3
|
|
|
4
4
|
import { CreatableModule, CreatableModuleFactory } from './CreatableModule'
|
|
5
|
-
import {
|
|
5
|
+
import { Module } from './Module'
|
|
6
6
|
|
|
7
|
-
export class ModuleFactory<TModule extends
|
|
7
|
+
export class ModuleFactory<TModule extends Module> implements CreatableModuleFactory<TModule> {
|
|
8
8
|
configSchemas: CreatableModuleFactory<TModule>['configSchemas']
|
|
9
9
|
|
|
10
10
|
creatableModule: CreatableModule<TModule>
|
|
@@ -23,18 +23,18 @@ export class ModuleFactory<TModule extends IndirectModule> implements CreatableM
|
|
|
23
23
|
return this.configSchemas[0]
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
static withParams<T extends
|
|
26
|
+
static withParams<T extends Module>(creatableModule: CreatableModule<T>, params?: T['params']) {
|
|
27
27
|
return new ModuleFactory(creatableModule, params)
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
create<T extends
|
|
30
|
+
create<T extends Module>(this: CreatableModuleFactory<T>, params?: TModule['params'] | undefined): Promise<T> {
|
|
31
31
|
const factory = this as ModuleFactory<T>
|
|
32
32
|
const schema = factory.creatableModule.configSchema
|
|
33
33
|
const mergedParams: TModule['params'] = merge(factory.defaultParams ?? {}, params, { config: { schema } })
|
|
34
34
|
return factory.creatableModule.create<T>(mergedParams)
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
-
factory<T extends
|
|
37
|
+
factory<T extends Module>(this: CreatableModule<T>, _params?: T['params'] | undefined): CreatableModuleFactory<T> {
|
|
38
38
|
throw new Error('Method not implemented.')
|
|
39
39
|
}
|
|
40
40
|
}
|
package/src/ModuleFilter.ts
CHANGED
|
@@ -1,19 +1,29 @@
|
|
|
1
|
-
|
|
1
|
+
import { InstanceTypeCheck } from './isModule'
|
|
2
|
+
import { ModuleInstance } from './Module'
|
|
3
|
+
|
|
4
|
+
export interface ModuleFilterOptions<TInstance extends ModuleInstance = ModuleInstance> {
|
|
2
5
|
direction?: 'up' | 'down' | 'all'
|
|
6
|
+
identity?: InstanceTypeCheck<TInstance>
|
|
3
7
|
visibility?: 'public' | 'private' | 'all'
|
|
4
8
|
}
|
|
5
9
|
|
|
6
|
-
export interface AddressModuleFilter extends ModuleFilterOptions {
|
|
10
|
+
export interface AddressModuleFilter<TInstance extends ModuleInstance = ModuleInstance> extends ModuleFilterOptions<TInstance> {
|
|
7
11
|
address: string[]
|
|
8
12
|
}
|
|
9
13
|
|
|
10
|
-
export interface NameModuleFilter extends ModuleFilterOptions {
|
|
14
|
+
export interface NameModuleFilter<TInstance extends ModuleInstance = ModuleInstance> extends ModuleFilterOptions<TInstance> {
|
|
11
15
|
name: string[]
|
|
12
16
|
}
|
|
13
17
|
|
|
14
|
-
export interface QueryModuleFilter extends ModuleFilterOptions {
|
|
18
|
+
export interface QueryModuleFilter<TInstance extends ModuleInstance = ModuleInstance> extends ModuleFilterOptions<TInstance> {
|
|
15
19
|
query: string[][]
|
|
16
20
|
}
|
|
17
21
|
|
|
18
|
-
export type AnyModuleFilter = Partial<AddressModuleFilter
|
|
19
|
-
|
|
22
|
+
export type AnyModuleFilter = Partial<AddressModuleFilter<ModuleInstance>> &
|
|
23
|
+
Partial<NameModuleFilter<ModuleInstance>> &
|
|
24
|
+
Partial<QueryModuleFilter<ModuleInstance>>
|
|
25
|
+
export type ModuleFilter<TInstance extends ModuleInstance = ModuleInstance> =
|
|
26
|
+
| ModuleFilterOptions<TInstance>
|
|
27
|
+
| AddressModuleFilter<TInstance>
|
|
28
|
+
| NameModuleFilter<TInstance>
|
|
29
|
+
| QueryModuleFilter<TInstance>
|
package/src/ModuleRepository.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Module, ModuleResolver } from './Module'
|
|
2
2
|
|
|
3
3
|
export interface ModuleRepository extends ModuleResolver {
|
|
4
|
-
add(module:
|
|
5
|
-
add(module:
|
|
6
|
-
add(module:
|
|
4
|
+
add(module: Module): this
|
|
5
|
+
add(module: Module[]): this
|
|
6
|
+
add(module: Module | Module[]): this
|
|
7
7
|
|
|
8
8
|
remove(address: string | string[]): this
|
|
9
9
|
}
|
package/src/isModule.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
-
import {
|
|
2
|
+
import { Module, ModuleInstance } from './Module'
|
|
3
3
|
|
|
4
4
|
export type InstanceTypeCheck<T extends object = object> = (module: object) => module is T
|
|
5
5
|
|
|
@@ -24,24 +24,23 @@ export const IsInstanceFactory = {
|
|
|
24
24
|
return (module: any = {}, log = false): module is T => {
|
|
25
25
|
return (
|
|
26
26
|
(additionalCheck?.(module) ?? true) &&
|
|
27
|
-
|
|
27
|
+
Object.entries(shape ?? {}).reduce((prev, [key, type]) => {
|
|
28
28
|
const result = isType(module[key], type)
|
|
29
29
|
if (!result && log) {
|
|
30
30
|
console.warn(`isType Failed: ${key}: ${type}`)
|
|
31
31
|
}
|
|
32
|
-
return result
|
|
33
|
-
}, true)
|
|
34
|
-
true)
|
|
32
|
+
return prev && result
|
|
33
|
+
}, true)
|
|
35
34
|
)
|
|
36
35
|
}
|
|
37
36
|
},
|
|
38
37
|
}
|
|
39
38
|
|
|
40
|
-
export const
|
|
41
|
-
create: <T extends
|
|
39
|
+
export const IsModuleFactory = {
|
|
40
|
+
create: <T extends Module = Module>(expectedQueries?: string[], additionalCheck?: (module: any) => boolean): ModuleTypeCheck<T> => {
|
|
42
41
|
return (module: any = {}): module is T => {
|
|
43
42
|
return (
|
|
44
|
-
|
|
43
|
+
isModule(module) &&
|
|
45
44
|
(additionalCheck?.(module) ?? true) &&
|
|
46
45
|
(expectedQueries?.reduce((prev, query) => prev && module.queries.includes(query), true) ?? true)
|
|
47
46
|
)
|
|
@@ -49,9 +48,7 @@ export const IsIndirectModuleFactory = {
|
|
|
49
48
|
},
|
|
50
49
|
}
|
|
51
50
|
|
|
52
|
-
export const
|
|
53
|
-
|
|
54
|
-
export const isIndirectModuleInstance: InstanceTypeCheck<ModuleInstance> = IsInstanceFactory.create<ModuleInstance>({
|
|
51
|
+
export const isModule: InstanceTypeCheck<ModuleInstance> = IsInstanceFactory.create<ModuleInstance>({
|
|
55
52
|
address: 'string',
|
|
56
53
|
config: 'object',
|
|
57
54
|
downResolver: 'object',
|
|
@@ -61,39 +58,11 @@ export const isIndirectModuleInstance: InstanceTypeCheck<ModuleInstance> = IsIns
|
|
|
61
58
|
queryable: 'function',
|
|
62
59
|
})
|
|
63
60
|
|
|
64
|
-
export const
|
|
61
|
+
export const isModuleInstance: InstanceTypeCheck<ModuleInstance> = IsInstanceFactory.create<ModuleInstance>(
|
|
65
62
|
{
|
|
66
63
|
describe: 'function',
|
|
67
64
|
discover: 'function',
|
|
68
65
|
manifest: 'function',
|
|
69
66
|
},
|
|
70
|
-
|
|
67
|
+
isModule,
|
|
71
68
|
)
|
|
72
|
-
|
|
73
|
-
export const isModuleInstance = isDirectModuleInstance
|
|
74
|
-
|
|
75
|
-
export const isDirectModule = <T extends DirectModule = DirectModule>(
|
|
76
|
-
module: any = {},
|
|
77
|
-
expectedQueries?: string[],
|
|
78
|
-
additionalCheck?: (module: any) => boolean,
|
|
79
|
-
): module is T => {
|
|
80
|
-
return (
|
|
81
|
-
isDirectModuleInstance(module) &&
|
|
82
|
-
(additionalCheck?.(module) ?? true) &&
|
|
83
|
-
(expectedQueries?.reduce((prev, query) => prev && module.queries.includes(query), true) ?? true)
|
|
84
|
-
)
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
export const isIndirectModule = <T extends IndirectModule = IndirectModule>(
|
|
88
|
-
module: any = {},
|
|
89
|
-
expectedQueries?: string[],
|
|
90
|
-
additionalCheck?: (module: any) => boolean,
|
|
91
|
-
): module is T => {
|
|
92
|
-
return (
|
|
93
|
-
isIndirectModuleInstance(module) &&
|
|
94
|
-
(additionalCheck?.(module) ?? true) &&
|
|
95
|
-
(expectedQueries?.reduce((prev, query) => prev && module.queries.includes(query), true) ?? true)
|
|
96
|
-
)
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
export const isModule = isIndirectModule
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Module } from '../Module'
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Used to filter duplicates from an array of modules
|
|
@@ -9,6 +9,6 @@ import { IndirectModule } from '../Module'
|
|
|
9
9
|
* @returns True if the Module's address is the first occurrence of
|
|
10
10
|
* that address in the array, false otherwise
|
|
11
11
|
*/
|
|
12
|
-
export const duplicateModules = (value:
|
|
12
|
+
export const duplicateModules = (value: Module, index: number, array: Module[]): value is Module => {
|
|
13
13
|
return array.findIndex((v) => v.address === value.address) === index
|
|
14
14
|
}
|