@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.
Files changed (53) hide show
  1. package/dist/cjs/Events/ModuleError.js +3 -0
  2. package/dist/cjs/Events/ModuleError.js.map +1 -0
  3. package/dist/cjs/Events/index.js +1 -0
  4. package/dist/cjs/Events/index.js.map +1 -1
  5. package/dist/cjs/ModuleFactory.js.map +1 -1
  6. package/dist/cjs/isModule.js +10 -27
  7. package/dist/cjs/isModule.js.map +1 -1
  8. package/dist/cjs/lib/duplicateModules.js.map +1 -1
  9. package/dist/docs.json +18994 -30557
  10. package/dist/esm/Events/ModuleError.js +2 -0
  11. package/dist/esm/Events/ModuleError.js.map +1 -0
  12. package/dist/esm/Events/index.js +1 -0
  13. package/dist/esm/Events/index.js.map +1 -1
  14. package/dist/esm/ModuleFactory.js.map +1 -1
  15. package/dist/esm/isModule.js +8 -22
  16. package/dist/esm/isModule.js.map +1 -1
  17. package/dist/esm/lib/duplicateModules.js.map +1 -1
  18. package/dist/types/CreatableModule.d.ts +7 -7
  19. package/dist/types/CreatableModule.d.ts.map +1 -1
  20. package/dist/types/Events/ModuleBusy.d.ts +2 -2
  21. package/dist/types/Events/ModuleBusy.d.ts.map +1 -1
  22. package/dist/types/Events/ModuleError.d.ts +9 -0
  23. package/dist/types/Events/ModuleError.d.ts.map +1 -0
  24. package/dist/types/Events/ModuleQueried.d.ts +2 -2
  25. package/dist/types/Events/ModuleQueried.d.ts.map +1 -1
  26. package/dist/types/Events/index.d.ts +1 -0
  27. package/dist/types/Events/index.d.ts.map +1 -1
  28. package/dist/types/Module.d.ts +10 -12
  29. package/dist/types/Module.d.ts.map +1 -1
  30. package/dist/types/ModuleFactory.d.ts +5 -5
  31. package/dist/types/ModuleFactory.d.ts.map +1 -1
  32. package/dist/types/ModuleFilter.d.ts +9 -6
  33. package/dist/types/ModuleFilter.d.ts.map +1 -1
  34. package/dist/types/ModuleRepository.d.ts +4 -4
  35. package/dist/types/ModuleRepository.d.ts.map +1 -1
  36. package/dist/types/asModule.d.ts +2 -2
  37. package/dist/types/isModule.d.ts +3 -10
  38. package/dist/types/isModule.d.ts.map +1 -1
  39. package/dist/types/lib/duplicateModules.d.ts +2 -2
  40. package/dist/types/lib/duplicateModules.d.ts.map +1 -1
  41. package/dist/types/withModule.d.ts +1 -1
  42. package/package.json +11 -11
  43. package/src/CreatableModule.ts +7 -7
  44. package/src/Events/ModuleBusy.ts +2 -2
  45. package/src/Events/ModuleError.ts +9 -0
  46. package/src/Events/ModuleQueried.ts +2 -2
  47. package/src/Events/index.ts +1 -0
  48. package/src/Module.ts +18 -25
  49. package/src/ModuleFactory.ts +5 -5
  50. package/src/ModuleFilter.ts +16 -6
  51. package/src/ModuleRepository.ts +4 -4
  52. package/src/isModule.ts +10 -41
  53. 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<TModule extends Module = Module>(filter?: ModuleFilter, options?: ModuleFilterOptions): Promisable<TModule[]>
18
- resolve<TModule extends Module = Module>(nameOrAddress: string, options?: ModuleFilterOptions): Promisable<TModule | undefined>
19
- resolve<TModule extends Module = Module>(
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<TModule | TModule[] | undefined>
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 IndirectModule<
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
- > = DirectModule<TParams, TEventData>
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
@@ -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 { IndirectModule } from './Module'
5
+ import { Module } from './Module'
6
6
 
7
- export class ModuleFactory<TModule extends IndirectModule> implements CreatableModuleFactory<TModule> {
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 IndirectModule>(creatableModule: CreatableModule<T>, params?: T['params']) {
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 IndirectModule>(this: CreatableModuleFactory<T>, params?: TModule['params'] | undefined): Promise<T> {
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 IndirectModule>(this: CreatableModule<T>, _params?: T['params'] | undefined): CreatableModuleFactory<T> {
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
  }
@@ -1,19 +1,29 @@
1
- export interface ModuleFilterOptions {
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> & Partial<NameModuleFilter> & Partial<QueryModuleFilter>
19
- export type ModuleFilter = ModuleFilterOptions | AddressModuleFilter | NameModuleFilter | QueryModuleFilter
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>
@@ -1,9 +1,9 @@
1
- import { IndirectModule, ModuleResolver } from './Module'
1
+ import { Module, ModuleResolver } from './Module'
2
2
 
3
3
  export interface ModuleRepository extends ModuleResolver {
4
- add(module: IndirectModule): this
5
- add(module: IndirectModule[]): this
6
- add(module: IndirectModule | IndirectModule[]): this
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 { DirectModule, IndirectModule, Module, ModuleInstance } from './Module'
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
- (Object.entries(shape ?? {}).reduce((prev, [key, type]) => {
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 IsIndirectModuleFactory = {
41
- create: <T extends IndirectModule = IndirectModule>(expectedQueries?: string[], additionalCheck?: (module: any) => boolean): ModuleTypeCheck<T> => {
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
- isIndirectModuleInstance(module) &&
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 IsModuleFactory = IsIndirectModuleFactory
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 isDirectModuleInstance: InstanceTypeCheck<ModuleInstance> = IsInstanceFactory.create<ModuleInstance>(
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
- isIndirectModuleInstance,
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 { IndirectModule } from '../Module'
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: IndirectModule, index: number, array: IndirectModule[]): value is IndirectModule => {
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
  }