@xyo-network/module-model 2.94.20 → 2.94.21

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 (80) hide show
  1. package/dist/browser/ResolveHelper.d.cts +2 -1
  2. package/dist/browser/ResolveHelper.d.cts.map +1 -1
  3. package/dist/browser/ResolveHelper.d.mts +2 -1
  4. package/dist/browser/ResolveHelper.d.mts.map +1 -1
  5. package/dist/browser/ResolveHelper.d.ts +2 -1
  6. package/dist/browser/ResolveHelper.d.ts.map +1 -1
  7. package/dist/browser/index.cjs +36 -12
  8. package/dist/browser/index.cjs.map +1 -1
  9. package/dist/browser/index.js +36 -12
  10. package/dist/browser/index.js.map +1 -1
  11. package/dist/browser/instance/ModuleResolver.d.cts +1 -0
  12. package/dist/browser/instance/ModuleResolver.d.cts.map +1 -1
  13. package/dist/browser/instance/ModuleResolver.d.mts +1 -0
  14. package/dist/browser/instance/ModuleResolver.d.mts.map +1 -1
  15. package/dist/browser/instance/ModuleResolver.d.ts +1 -0
  16. package/dist/browser/instance/ModuleResolver.d.ts.map +1 -1
  17. package/dist/browser/instance/ObjectFilter.d.cts +0 -1
  18. package/dist/browser/instance/ObjectFilter.d.cts.map +1 -1
  19. package/dist/browser/instance/ObjectFilter.d.mts +0 -1
  20. package/dist/browser/instance/ObjectFilter.d.mts.map +1 -1
  21. package/dist/browser/instance/ObjectFilter.d.ts +0 -1
  22. package/dist/browser/instance/ObjectFilter.d.ts.map +1 -1
  23. package/dist/browser/instance/ObjectResolver.d.cts +3 -0
  24. package/dist/browser/instance/ObjectResolver.d.cts.map +1 -1
  25. package/dist/browser/instance/ObjectResolver.d.mts +3 -0
  26. package/dist/browser/instance/ObjectResolver.d.mts.map +1 -1
  27. package/dist/browser/instance/ObjectResolver.d.ts +3 -0
  28. package/dist/browser/instance/ObjectResolver.d.ts.map +1 -1
  29. package/dist/browser/instance/attachable/AttachableInstance.d.cts +1 -0
  30. package/dist/browser/instance/attachable/AttachableInstance.d.cts.map +1 -1
  31. package/dist/browser/instance/attachable/AttachableInstance.d.mts +1 -0
  32. package/dist/browser/instance/attachable/AttachableInstance.d.mts.map +1 -1
  33. package/dist/browser/instance/attachable/AttachableInstance.d.ts +1 -0
  34. package/dist/browser/instance/attachable/AttachableInstance.d.ts.map +1 -1
  35. package/dist/browser/withModule.d.cts.map +1 -1
  36. package/dist/browser/withModule.d.mts.map +1 -1
  37. package/dist/browser/withModule.d.ts.map +1 -1
  38. package/dist/node/ResolveHelper.d.cts +2 -1
  39. package/dist/node/ResolveHelper.d.cts.map +1 -1
  40. package/dist/node/ResolveHelper.d.mts +2 -1
  41. package/dist/node/ResolveHelper.d.mts.map +1 -1
  42. package/dist/node/ResolveHelper.d.ts +2 -1
  43. package/dist/node/ResolveHelper.d.ts.map +1 -1
  44. package/dist/node/index.cjs +36 -12
  45. package/dist/node/index.cjs.map +1 -1
  46. package/dist/node/index.js +36 -12
  47. package/dist/node/index.js.map +1 -1
  48. package/dist/node/instance/ModuleResolver.d.cts +1 -0
  49. package/dist/node/instance/ModuleResolver.d.cts.map +1 -1
  50. package/dist/node/instance/ModuleResolver.d.mts +1 -0
  51. package/dist/node/instance/ModuleResolver.d.mts.map +1 -1
  52. package/dist/node/instance/ModuleResolver.d.ts +1 -0
  53. package/dist/node/instance/ModuleResolver.d.ts.map +1 -1
  54. package/dist/node/instance/ObjectFilter.d.cts +0 -1
  55. package/dist/node/instance/ObjectFilter.d.cts.map +1 -1
  56. package/dist/node/instance/ObjectFilter.d.mts +0 -1
  57. package/dist/node/instance/ObjectFilter.d.mts.map +1 -1
  58. package/dist/node/instance/ObjectFilter.d.ts +0 -1
  59. package/dist/node/instance/ObjectFilter.d.ts.map +1 -1
  60. package/dist/node/instance/ObjectResolver.d.cts +3 -0
  61. package/dist/node/instance/ObjectResolver.d.cts.map +1 -1
  62. package/dist/node/instance/ObjectResolver.d.mts +3 -0
  63. package/dist/node/instance/ObjectResolver.d.mts.map +1 -1
  64. package/dist/node/instance/ObjectResolver.d.ts +3 -0
  65. package/dist/node/instance/ObjectResolver.d.ts.map +1 -1
  66. package/dist/node/instance/attachable/AttachableInstance.d.cts +1 -0
  67. package/dist/node/instance/attachable/AttachableInstance.d.cts.map +1 -1
  68. package/dist/node/instance/attachable/AttachableInstance.d.mts +1 -0
  69. package/dist/node/instance/attachable/AttachableInstance.d.mts.map +1 -1
  70. package/dist/node/instance/attachable/AttachableInstance.d.ts +1 -0
  71. package/dist/node/instance/attachable/AttachableInstance.d.ts.map +1 -1
  72. package/dist/node/withModule.d.cts.map +1 -1
  73. package/dist/node/withModule.d.mts.map +1 -1
  74. package/dist/node/withModule.d.ts.map +1 -1
  75. package/package.json +8 -8
  76. package/src/ResolveHelper.ts +33 -15
  77. package/src/instance/ModuleResolver.ts +1 -0
  78. package/src/instance/ObjectFilter.ts +0 -1
  79. package/src/instance/ObjectResolver.ts +4 -0
  80. package/src/instance/attachable/AttachableInstance.ts +3 -0
package/package.json CHANGED
@@ -17,17 +17,17 @@
17
17
  "@xylabs/object": "^3.0.25",
18
18
  "@xylabs/promise": "^3.0.25",
19
19
  "@xylabs/retry": "^3.0.25",
20
- "@xyo-network/account-model": "~2.94.20",
21
- "@xyo-network/address-payload-plugin": "~2.94.20",
22
- "@xyo-network/boundwitness-model": "~2.94.20",
23
- "@xyo-network/manifest-model": "~2.94.20",
24
- "@xyo-network/module-events": "~2.94.20",
25
- "@xyo-network/payload-model": "~2.94.20"
20
+ "@xyo-network/account-model": "~2.94.21",
21
+ "@xyo-network/address-payload-plugin": "~2.94.21",
22
+ "@xyo-network/boundwitness-model": "~2.94.21",
23
+ "@xyo-network/manifest-model": "~2.94.21",
24
+ "@xyo-network/module-events": "~2.94.21",
25
+ "@xyo-network/payload-model": "~2.94.21"
26
26
  },
27
27
  "devDependencies": {
28
28
  "@xylabs/ts-scripts-yarn3": "^3.9.0",
29
29
  "@xylabs/tsconfig": "^3.9.0",
30
- "typescript": "^5.4.3"
30
+ "typescript": "^5.4.4"
31
31
  },
32
32
  "description": "Primary SDK for using XYO Protocol 2.0",
33
33
  "types": "dist/node/index.d.ts",
@@ -68,6 +68,6 @@
68
68
  "url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js.git"
69
69
  },
70
70
  "sideEffects": false,
71
- "version": "2.94.20",
71
+ "version": "2.94.21",
72
72
  "type": "module"
73
73
  }
@@ -1,7 +1,8 @@
1
1
  /* eslint-disable max-statements */
2
2
  /* eslint-disable complexity */
3
3
  import { assertEx } from '@xylabs/assert'
4
- import { Address } from '@xylabs/hex'
4
+ import { exists } from '@xylabs/exists'
5
+ import { Address, isAddress } from '@xylabs/hex'
5
6
  import { IdLogger, Logger } from '@xylabs/logger'
6
7
  import { toJsonString } from '@xylabs/object'
7
8
 
@@ -15,7 +16,7 @@ Resolution rules
15
16
 
16
17
  1. Resolution is always done from the perspective of the module whose resolve function was called.
17
18
 
18
- 2. Requesting '*' will return all the modules that the resolver can see.
19
+ 2. Requesting '*' will return all the modules that the resolver can see. [limited by maxDepth]
19
20
 
20
21
  3. Requesting a simple ModuleName (string w/o ':' separator) will return an immediate child that has that name.
21
22
 
@@ -40,11 +41,13 @@ Resolution rules
40
41
  a) Up Traversal
41
42
  i) Every module's upResolver also can call it's parent's upResolver
42
43
  ii) An upResolver also can see the parent's children's downResolvers
43
- iii) This means that when traversing upResolvers, you can traverse all the way up.
44
+ iii) This means that when traversing upResolvers, you can traverse all the way up. [limited by maxDepth]
44
45
  iv) At any point of the up traversal, it can start traversing down to any immediate child, public or private.
45
46
  b) Down Traversal
46
47
  i) A down traversal is limited to the public children of the module. [The same as scope as calling the 'resolve' function]
47
48
 
49
+ 9. An up or a down traversal counts against the maxDepth
50
+
48
51
  */
49
52
 
50
53
  export interface ResolveHelperConfig {
@@ -53,6 +56,7 @@ export interface ResolveHelperConfig {
53
56
  downResolver?: ModuleResolver
54
57
  logger?: Logger
55
58
  module: ModuleInstance
59
+ privateResolver?: ModuleResolver
56
60
  upResolver?: ModuleResolver
57
61
  }
58
62
 
@@ -76,15 +80,15 @@ export class ResolveHelper {
76
80
  static async resolve<T extends ModuleInstance = ModuleInstance>(
77
81
  config: ResolveHelperConfig,
78
82
  idOrFilter: ModuleFilter<T> | ModuleIdentifier = '*',
79
- { visibility, maxDepth = 3, required = 'log', ...options }: ModuleFilterOptions<T> = {},
83
+ { maxDepth = 3, required = 'log', ...options }: ModuleFilterOptions<T> = {},
80
84
  ): Promise<T | T[] | undefined> {
81
- const { module, logger = this.defaultLogger, dead = false, upResolver, downResolver } = config
82
- const log = logger ? new IdLogger(logger, () => `ResolveHelper [${module.id}][${idOrFilter}][${visibility}]`) : undefined
85
+ const { module, logger = this.defaultLogger, dead = false, upResolver, downResolver, privateResolver } = config
86
+ const log = logger ? new IdLogger(logger, () => `ResolveHelper [${module.id}][${idOrFilter}]`) : undefined
83
87
 
84
- const downLocalOptions: ModuleFilterOptions<T> = { ...options, direction: 'down', maxDepth, required: false, visibility }
88
+ const downLocalOptions: ModuleFilterOptions<T> = { ...options, direction: 'down', maxDepth, required: false }
85
89
  const upLocalOptions: ModuleFilterOptions<T> = { ...downLocalOptions, direction: 'up' }
86
90
 
87
- const childOptions: ModuleFilterOptions<T> = { ...options, maxDepth: maxDepth - 1, required: false, visibility }
91
+ const childOptions: ModuleFilterOptions<T> = { ...options, maxDepth: maxDepth - 1, required: false }
88
92
 
89
93
  const direction = options?.direction ?? 'all'
90
94
  const up = direction === 'up' || direction === 'all'
@@ -121,9 +125,20 @@ export class ResolveHelper {
121
125
  if (dead) {
122
126
  return undefined
123
127
  }
124
- result =
125
- (down && downResolver ? await this.resolveModuleIdentifier<T>(downResolver, idOrFilter) : undefined) ??
126
- (up && upResolver ? await this.resolveModuleIdentifier<T>(upResolver, idOrFilter) : undefined)
128
+
129
+ const resolvers = [
130
+ [downResolver, downLocalOptions],
131
+ [up ? upResolver : undefined, upLocalOptions],
132
+ [up ? privateResolver : undefined, upLocalOptions],
133
+ ].filter(([resolver]) => exists(resolver)) as [ModuleResolver, ModuleFilterOptions<T>][]
134
+
135
+ for (const resolver of resolvers) {
136
+ const [resolverInstance] = resolver
137
+ if (!result) {
138
+ result = await this.resolveModuleIdentifier<T>(resolverInstance, idOrFilter)
139
+ }
140
+ }
141
+
127
142
  break
128
143
  }
129
144
  default: {
@@ -147,13 +162,16 @@ export class ResolveHelper {
147
162
  static async resolveModuleIdentifier<T extends ModuleInstance = ModuleInstance>(
148
163
  resolver: ModuleResolver,
149
164
  path: ModuleIdentifier,
165
+ required?: boolean,
150
166
  ): Promise<T | undefined> {
151
167
  const parts = path.split(':')
152
168
  const first = parts.shift()
153
- const firstModule = asModuleInstance(
154
- assertEx(await resolver.resolve(first, { maxDepth: 1 }), () => `Failed to resolve [${first}]`),
155
- () => `Resolved invalid module instance [${first}]`,
156
- ) as T
169
+ const firstIsAddress = isAddress(first)
170
+ const resolvedModule =
171
+ (await resolver.resolve(first, { maxDepth: firstIsAddress ? 10 : 1 })) ??
172
+ (first ? await resolver.resolvePrivate(first, { maxDepth: firstIsAddress ? 10 : 1 }) : undefined)
173
+ const finalModule = required ? assertEx(resolvedModule, () => `Failed to resolve [${first}] [${firstIsAddress}]`) : resolvedModule
174
+ const firstModule = asModuleInstance(finalModule, () => `Resolved invalid module instance [${first}]`) as T
157
175
  if (firstModule) {
158
176
  return parts.length > 0 ? await this.resolveModuleIdentifier<T>(firstModule, parts.join(':')) : firstModule
159
177
  }
@@ -11,6 +11,7 @@ export const isModuleResolver = isObjectResolver<ModuleInstance>
11
11
  export interface ModuleResolver<TResult extends ModuleInstance = ModuleInstance> extends ObjectResolver<TResult> {}
12
12
 
13
13
  export interface ModuleNameResolver {
14
+ readonly root: ModuleInstance
14
15
  resolveIdentifier(id: ModuleIdentifier, options?: ObjectFilterOptions): Promisable<Address | undefined>
15
16
  }
16
17
 
@@ -16,7 +16,6 @@ export interface ResolveStrategy {
16
16
  export interface ObjectFilterOptions<T extends EmptyObject = AnyObject> extends ResolveStrategy {
17
17
  direction?: Direction
18
18
  identity?: TypeCheck<T>
19
- visibility?: Visibility
20
19
  }
21
20
 
22
21
  export interface AddressObjectFilter<T extends EmptyObject = AnyObject> extends ObjectFilterOptions<T> {
@@ -30,6 +30,10 @@ export interface ObjectResolver<TResult extends EmptyObject> {
30
30
  idOrFilter?: ObjectFilter<T> | ModuleIdentifier,
31
31
  options?: ObjectFilterOptions<T>,
32
32
  ): Promisable<T | T[] | undefined>
33
+
34
+ resolvePrivate<T extends TResult = TResult>(all: '*', options?: ObjectFilterOptions<T>): Promise<T[]>
35
+ resolvePrivate<T extends TResult = TResult>(id: ModuleIdentifier, options?: ObjectFilterOptions<T>): Promise<T | undefined>
36
+ resolvePrivate<T extends TResult = TResult>(id: ModuleIdentifier, options?: ObjectFilterOptions<T>): Promise<T | T[] | undefined>
33
37
  }
34
38
 
35
39
  export interface ObjectResolverInstance<TResult extends EmptyObject> extends ObjectResolver<TResult> {
@@ -10,6 +10,9 @@ export interface AttachableModuleInstance<TParams extends ModuleParams = ModuleP
10
10
  /* 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*/
11
11
  readonly downResolver: ModuleResolverInstance
12
12
 
13
+ // The resolver that gets called by children (usually only Nodes have this)
14
+ readonly privateResolver: ModuleResolverInstance
15
+
13
16
  /* The resolver is a 'up' resolver. It can resolve the parent or any children of the parent*/
14
17
  /* This is set by a NodeModule when attaching to the module */
15
18
  readonly upResolver: ModuleResolverInstance