@xyo-network/module-model 2.94.19 → 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 (119) hide show
  1. package/dist/browser/ResolveHelper.d.cts +23 -0
  2. package/dist/browser/ResolveHelper.d.cts.map +1 -0
  3. package/dist/browser/ResolveHelper.d.mts +23 -0
  4. package/dist/browser/ResolveHelper.d.mts.map +1 -0
  5. package/dist/browser/ResolveHelper.d.ts +23 -0
  6. package/dist/browser/ResolveHelper.d.ts.map +1 -0
  7. package/dist/browser/index.cjs +149 -30
  8. package/dist/browser/index.cjs.map +1 -1
  9. package/dist/browser/index.d.cts +1 -2
  10. package/dist/browser/index.d.cts.map +1 -1
  11. package/dist/browser/index.d.mts +1 -2
  12. package/dist/browser/index.d.mts.map +1 -1
  13. package/dist/browser/index.d.ts +1 -2
  14. package/dist/browser/index.d.ts.map +1 -1
  15. package/dist/browser/index.js +149 -30
  16. package/dist/browser/index.js.map +1 -1
  17. package/dist/browser/instance/ModuleResolver.d.cts +1 -0
  18. package/dist/browser/instance/ModuleResolver.d.cts.map +1 -1
  19. package/dist/browser/instance/ModuleResolver.d.mts +1 -0
  20. package/dist/browser/instance/ModuleResolver.d.mts.map +1 -1
  21. package/dist/browser/instance/ModuleResolver.d.ts +1 -0
  22. package/dist/browser/instance/ModuleResolver.d.ts.map +1 -1
  23. package/dist/browser/instance/ObjectFilter.d.cts +0 -1
  24. package/dist/browser/instance/ObjectFilter.d.cts.map +1 -1
  25. package/dist/browser/instance/ObjectFilter.d.mts +0 -1
  26. package/dist/browser/instance/ObjectFilter.d.mts.map +1 -1
  27. package/dist/browser/instance/ObjectFilter.d.ts +0 -1
  28. package/dist/browser/instance/ObjectFilter.d.ts.map +1 -1
  29. package/dist/browser/instance/ObjectResolver.d.cts +3 -0
  30. package/dist/browser/instance/ObjectResolver.d.cts.map +1 -1
  31. package/dist/browser/instance/ObjectResolver.d.mts +3 -0
  32. package/dist/browser/instance/ObjectResolver.d.mts.map +1 -1
  33. package/dist/browser/instance/ObjectResolver.d.ts +3 -0
  34. package/dist/browser/instance/ObjectResolver.d.ts.map +1 -1
  35. package/dist/browser/instance/attachable/AttachableInstance.d.cts +1 -0
  36. package/dist/browser/instance/attachable/AttachableInstance.d.cts.map +1 -1
  37. package/dist/browser/instance/attachable/AttachableInstance.d.mts +1 -0
  38. package/dist/browser/instance/attachable/AttachableInstance.d.mts.map +1 -1
  39. package/dist/browser/instance/attachable/AttachableInstance.d.ts +1 -0
  40. package/dist/browser/instance/attachable/AttachableInstance.d.ts.map +1 -1
  41. package/dist/browser/withModule.d.cts.map +1 -1
  42. package/dist/browser/withModule.d.mts.map +1 -1
  43. package/dist/browser/withModule.d.ts.map +1 -1
  44. package/dist/node/ResolveHelper.d.cts +23 -0
  45. package/dist/node/ResolveHelper.d.cts.map +1 -0
  46. package/dist/node/ResolveHelper.d.mts +23 -0
  47. package/dist/node/ResolveHelper.d.mts.map +1 -0
  48. package/dist/node/ResolveHelper.d.ts +23 -0
  49. package/dist/node/ResolveHelper.d.ts.map +1 -0
  50. package/dist/node/index.cjs +154 -32
  51. package/dist/node/index.cjs.map +1 -1
  52. package/dist/node/index.d.cts +1 -2
  53. package/dist/node/index.d.cts.map +1 -1
  54. package/dist/node/index.d.mts +1 -2
  55. package/dist/node/index.d.mts.map +1 -1
  56. package/dist/node/index.d.ts +1 -2
  57. package/dist/node/index.d.ts.map +1 -1
  58. package/dist/node/index.js +153 -30
  59. package/dist/node/index.js.map +1 -1
  60. package/dist/node/instance/ModuleResolver.d.cts +1 -0
  61. package/dist/node/instance/ModuleResolver.d.cts.map +1 -1
  62. package/dist/node/instance/ModuleResolver.d.mts +1 -0
  63. package/dist/node/instance/ModuleResolver.d.mts.map +1 -1
  64. package/dist/node/instance/ModuleResolver.d.ts +1 -0
  65. package/dist/node/instance/ModuleResolver.d.ts.map +1 -1
  66. package/dist/node/instance/ObjectFilter.d.cts +0 -1
  67. package/dist/node/instance/ObjectFilter.d.cts.map +1 -1
  68. package/dist/node/instance/ObjectFilter.d.mts +0 -1
  69. package/dist/node/instance/ObjectFilter.d.mts.map +1 -1
  70. package/dist/node/instance/ObjectFilter.d.ts +0 -1
  71. package/dist/node/instance/ObjectFilter.d.ts.map +1 -1
  72. package/dist/node/instance/ObjectResolver.d.cts +3 -0
  73. package/dist/node/instance/ObjectResolver.d.cts.map +1 -1
  74. package/dist/node/instance/ObjectResolver.d.mts +3 -0
  75. package/dist/node/instance/ObjectResolver.d.mts.map +1 -1
  76. package/dist/node/instance/ObjectResolver.d.ts +3 -0
  77. package/dist/node/instance/ObjectResolver.d.ts.map +1 -1
  78. package/dist/node/instance/attachable/AttachableInstance.d.cts +1 -0
  79. package/dist/node/instance/attachable/AttachableInstance.d.cts.map +1 -1
  80. package/dist/node/instance/attachable/AttachableInstance.d.mts +1 -0
  81. package/dist/node/instance/attachable/AttachableInstance.d.mts.map +1 -1
  82. package/dist/node/instance/attachable/AttachableInstance.d.ts +1 -0
  83. package/dist/node/instance/attachable/AttachableInstance.d.ts.map +1 -1
  84. package/dist/node/withModule.d.cts.map +1 -1
  85. package/dist/node/withModule.d.mts.map +1 -1
  86. package/dist/node/withModule.d.ts.map +1 -1
  87. package/package.json +8 -8
  88. package/src/ResolveHelper.ts +217 -0
  89. package/src/index.ts +1 -2
  90. package/src/instance/ModuleResolver.ts +1 -0
  91. package/src/instance/ObjectFilter.ts +0 -1
  92. package/src/instance/ObjectResolver.ts +4 -0
  93. package/src/instance/attachable/AttachableInstance.ts +3 -0
  94. package/dist/browser/resolveModuleIdentifier.d.cts +0 -4
  95. package/dist/browser/resolveModuleIdentifier.d.cts.map +0 -1
  96. package/dist/browser/resolveModuleIdentifier.d.mts +0 -4
  97. package/dist/browser/resolveModuleIdentifier.d.mts.map +0 -1
  98. package/dist/browser/resolveModuleIdentifier.d.ts +0 -4
  99. package/dist/browser/resolveModuleIdentifier.d.ts.map +0 -1
  100. package/dist/browser/traceModuleIdentifier.d.cts +0 -5
  101. package/dist/browser/traceModuleIdentifier.d.cts.map +0 -1
  102. package/dist/browser/traceModuleIdentifier.d.mts +0 -5
  103. package/dist/browser/traceModuleIdentifier.d.mts.map +0 -1
  104. package/dist/browser/traceModuleIdentifier.d.ts +0 -5
  105. package/dist/browser/traceModuleIdentifier.d.ts.map +0 -1
  106. package/dist/node/resolveModuleIdentifier.d.cts +0 -4
  107. package/dist/node/resolveModuleIdentifier.d.cts.map +0 -1
  108. package/dist/node/resolveModuleIdentifier.d.mts +0 -4
  109. package/dist/node/resolveModuleIdentifier.d.mts.map +0 -1
  110. package/dist/node/resolveModuleIdentifier.d.ts +0 -4
  111. package/dist/node/resolveModuleIdentifier.d.ts.map +0 -1
  112. package/dist/node/traceModuleIdentifier.d.cts +0 -5
  113. package/dist/node/traceModuleIdentifier.d.cts.map +0 -1
  114. package/dist/node/traceModuleIdentifier.d.mts +0 -5
  115. package/dist/node/traceModuleIdentifier.d.mts.map +0 -1
  116. package/dist/node/traceModuleIdentifier.d.ts +0 -5
  117. package/dist/node/traceModuleIdentifier.d.ts.map +0 -1
  118. package/src/resolveModuleIdentifier.ts +0 -17
  119. package/src/traceModuleIdentifier.ts +0 -19
@@ -0,0 +1,217 @@
1
+ /* eslint-disable max-statements */
2
+ /* eslint-disable complexity */
3
+ import { assertEx } from '@xylabs/assert'
4
+ import { exists } from '@xylabs/exists'
5
+ import { Address, isAddress } from '@xylabs/hex'
6
+ import { IdLogger, Logger } from '@xylabs/logger'
7
+ import { toJsonString } from '@xylabs/object'
8
+
9
+ import { asModuleInstance, ModuleFilter, ModuleFilterOptions, ModuleInstance, ModuleResolver } from './instance'
10
+ import { duplicateModules } from './lib'
11
+ import { ModuleIdentifier } from './ModuleIdentifier'
12
+
13
+ /*
14
+
15
+ Resolution rules
16
+
17
+ 1. Resolution is always done from the perspective of the module whose resolve function was called.
18
+
19
+ 2. Requesting '*' will return all the modules that the resolver can see. [limited by maxDepth]
20
+
21
+ 3. Requesting a simple ModuleName (string w/o ':' separator) will return an immediate child that has that name.
22
+
23
+ 4. Requesting a complex ModuleName (string w/ ':' separator) will resolve the first part and then recursively resolve
24
+ the remaining name by calling the first part's resolved module's resolve with the remainder of the name.
25
+
26
+ 5. Requesting an Address (string) will return the module with that address, regardless of how distant it is from the module. [limited by maxDepth]
27
+
28
+ 6. Requesting a ModuleFilter will first request all the modules '*' and then filter them based on the filter settings. [Do we need this mode?]
29
+
30
+ 7. When a string is passed as the ModuleIdentifier, do the following:
31
+ Check if id is complex (contains a ':')
32
+ a) If it is complex, go to #4 above
33
+ b) Call isAddress in the id to see if it is a valid address.
34
+ i) If it is a valid address, go to #5 above
35
+ ii) If it is not a valid address, go to # 3 above
36
+
37
+ Note 1: If someone were to name a module with a valid address, that name will not be resolvable.
38
+ Note 2: If someone were to name a module with a string containing a ':', that name will not be resolvable.
39
+
40
+ 8. Modules have two resolvers, up and down.
41
+ a) Up Traversal
42
+ i) Every module's upResolver also can call it's parent's upResolver
43
+ ii) An upResolver also can see the parent's children's downResolvers
44
+ iii) This means that when traversing upResolvers, you can traverse all the way up. [limited by maxDepth]
45
+ iv) At any point of the up traversal, it can start traversing down to any immediate child, public or private.
46
+ b) Down Traversal
47
+ i) A down traversal is limited to the public children of the module. [The same as scope as calling the 'resolve' function]
48
+
49
+ 9. An up or a down traversal counts against the maxDepth
50
+
51
+ */
52
+
53
+ export interface ResolveHelperConfig {
54
+ address: Address
55
+ dead?: boolean
56
+ downResolver?: ModuleResolver
57
+ logger?: Logger
58
+ module: ModuleInstance
59
+ privateResolver?: ModuleResolver
60
+ upResolver?: ModuleResolver
61
+ }
62
+
63
+ export class ResolveHelper {
64
+ static defaultLogger?: Logger
65
+ static async resolve<T extends ModuleInstance = ModuleInstance>(
66
+ config: ResolveHelperConfig,
67
+ all: '*',
68
+ options?: ModuleFilterOptions<T>,
69
+ ): Promise<T[]>
70
+ static async resolve<T extends ModuleInstance = ModuleInstance>(
71
+ config: ResolveHelperConfig,
72
+ filter: ModuleFilter,
73
+ options?: ModuleFilterOptions<T>,
74
+ ): Promise<T[]>
75
+ static async resolve<T extends ModuleInstance = ModuleInstance>(
76
+ config: ResolveHelperConfig,
77
+ id: ModuleIdentifier,
78
+ options?: ModuleFilterOptions<T>,
79
+ ): Promise<T | undefined>
80
+ static async resolve<T extends ModuleInstance = ModuleInstance>(
81
+ config: ResolveHelperConfig,
82
+ idOrFilter: ModuleFilter<T> | ModuleIdentifier = '*',
83
+ { maxDepth = 3, required = 'log', ...options }: ModuleFilterOptions<T> = {},
84
+ ): Promise<T | T[] | 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
87
+
88
+ const downLocalOptions: ModuleFilterOptions<T> = { ...options, direction: 'down', maxDepth, required: false }
89
+ const upLocalOptions: ModuleFilterOptions<T> = { ...downLocalOptions, direction: 'up' }
90
+
91
+ const childOptions: ModuleFilterOptions<T> = { ...options, maxDepth: maxDepth - 1, required: false }
92
+
93
+ const direction = options?.direction ?? 'all'
94
+ const up = direction === 'up' || direction === 'all'
95
+ const down = direction === 'down' || direction === 'all'
96
+ let result: T | T[] | undefined
97
+ log?.debug('start', idOrFilter, maxDepth)
98
+ if (idOrFilter === '*') {
99
+ if (dead) {
100
+ log?.warn('failed [dead]', idOrFilter)
101
+ return []
102
+ }
103
+ const modules = [
104
+ ...(down ? await (downResolver as ModuleResolver).resolve<T>('*', downLocalOptions) : []),
105
+ ...(up ? await (upResolver as ModuleResolver).resolve<T>('*', upLocalOptions) : []),
106
+ ]
107
+ .filter(duplicateModules)
108
+ .filter((module) => module.address !== config.address)
109
+
110
+ if (modules.length > 0) {
111
+ log?.log('modules [count]', modules.length)
112
+ log?.debug('modules', toJsonString(modules, 4))
113
+ }
114
+
115
+ if (maxDepth === 0) {
116
+ return modules
117
+ }
118
+ const childModules = (await Promise.all(modules.map(async (module) => await module.resolve<T>('*', childOptions))))
119
+ .flat()
120
+ .filter(duplicateModules)
121
+ return [...modules, ...childModules].filter(duplicateModules)
122
+ } else {
123
+ switch (typeof idOrFilter) {
124
+ case 'string': {
125
+ if (dead) {
126
+ return undefined
127
+ }
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
+
142
+ break
143
+ }
144
+ default: {
145
+ if (dead) {
146
+ return []
147
+ }
148
+ const filter: ModuleFilter<T> | undefined = idOrFilter
149
+ result = [
150
+ ...(down ? await (downResolver as ModuleResolver).resolve<T>(filter, downLocalOptions) : []),
151
+ ...(up ? await (upResolver as ModuleResolver).resolve<T>(filter, upLocalOptions) : []),
152
+ ].filter(duplicateModules)
153
+ break
154
+ }
155
+ }
156
+ }
157
+ this.validateRequiredResolve(required, result, idOrFilter, logger)
158
+ return result
159
+ }
160
+
161
+ //resolves a complex module path to addresses
162
+ static async resolveModuleIdentifier<T extends ModuleInstance = ModuleInstance>(
163
+ resolver: ModuleResolver,
164
+ path: ModuleIdentifier,
165
+ required?: boolean,
166
+ ): Promise<T | undefined> {
167
+ const parts = path.split(':')
168
+ const first = parts.shift()
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
175
+ if (firstModule) {
176
+ return parts.length > 0 ? await this.resolveModuleIdentifier<T>(firstModule, parts.join(':')) : firstModule
177
+ }
178
+ }
179
+
180
+ //translates a complex module path to addresses
181
+ static async traceModuleIdentifier(resolver: ModuleResolver, path: ModuleIdentifier): Promise<Address[]> {
182
+ const parts = path.split(':')
183
+ const first = parts.shift()
184
+ const firstModule = asModuleInstance(
185
+ assertEx(await resolver.resolve(first, { maxDepth: 1 }), () => `Failed to resolve [${first}]`),
186
+ () => `Resolved invalid module instance [${first}]`,
187
+ )
188
+ if (firstModule) {
189
+ return parts.length > 0 ? [firstModule.address, ...(await this.traceModuleIdentifier(firstModule, parts.join(':')))] : [firstModule.address]
190
+ }
191
+ return []
192
+ }
193
+
194
+ static validateRequiredResolve(
195
+ required: boolean | 'warn' | 'log',
196
+ result: ModuleInstance[] | ModuleInstance | undefined,
197
+ idOrFilter: ModuleIdentifier | ModuleFilter,
198
+ logger = this.defaultLogger,
199
+ ) {
200
+ const log = logger ? new IdLogger(logger, () => `validateRequiredResolve [${idOrFilter}][${result}]`) : undefined
201
+ if (required && (result === undefined || (Array.isArray(result) && result.length > 0))) {
202
+ switch (required) {
203
+ case 'warn': {
204
+ log?.warn('resolve failed', idOrFilter)
205
+ break
206
+ }
207
+ case 'log': {
208
+ log?.log('resolve failed', idOrFilter)
209
+ break
210
+ }
211
+ default: {
212
+ throw new Error(`resolve failed [${idOrFilter}]`)
213
+ }
214
+ }
215
+ }
216
+ }
217
+ }
package/src/index.ts CHANGED
@@ -14,6 +14,5 @@ export * from './ModuleQueryHandlerResult'
14
14
  export * from './ModuleQueryResult'
15
15
  export * from './Payload'
16
16
  export * from './Queries'
17
- export * from './resolveModuleIdentifier'
18
- export * from './traceModuleIdentifier'
17
+ export * from './ResolveHelper'
19
18
  export * from './withModule'
@@ -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
@@ -1,4 +0,0 @@
1
- import { ModuleInstance, ModuleResolver } from './instance';
2
- import { ModuleIdentifier } from './ModuleIdentifier';
3
- export declare const resolveModuleIdentifier: (resolver: ModuleResolver, path: ModuleIdentifier) => Promise<ModuleInstance | undefined>;
4
- //# sourceMappingURL=resolveModuleIdentifier.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolveModuleIdentifier.d.ts","sourceRoot":"","sources":["../../src/resolveModuleIdentifier.ts"],"names":[],"mappings":"AAEA,OAAO,EAAoB,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAGrD,eAAO,MAAM,uBAAuB,aAAoB,cAAc,QAAQ,gBAAgB,KAAG,QAAQ,cAAc,GAAG,SAAS,CAUlI,CAAA"}
@@ -1,4 +0,0 @@
1
- import { ModuleInstance, ModuleResolver } from './instance';
2
- import { ModuleIdentifier } from './ModuleIdentifier';
3
- export declare const resolveModuleIdentifier: (resolver: ModuleResolver, path: ModuleIdentifier) => Promise<ModuleInstance | undefined>;
4
- //# sourceMappingURL=resolveModuleIdentifier.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolveModuleIdentifier.d.ts","sourceRoot":"","sources":["../../src/resolveModuleIdentifier.ts"],"names":[],"mappings":"AAEA,OAAO,EAAoB,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAGrD,eAAO,MAAM,uBAAuB,aAAoB,cAAc,QAAQ,gBAAgB,KAAG,QAAQ,cAAc,GAAG,SAAS,CAUlI,CAAA"}
@@ -1,4 +0,0 @@
1
- import { ModuleInstance, ModuleResolver } from './instance';
2
- import { ModuleIdentifier } from './ModuleIdentifier';
3
- export declare const resolveModuleIdentifier: (resolver: ModuleResolver, path: ModuleIdentifier) => Promise<ModuleInstance | undefined>;
4
- //# sourceMappingURL=resolveModuleIdentifier.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolveModuleIdentifier.d.ts","sourceRoot":"","sources":["../../src/resolveModuleIdentifier.ts"],"names":[],"mappings":"AAEA,OAAO,EAAoB,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAGrD,eAAO,MAAM,uBAAuB,aAAoB,cAAc,QAAQ,gBAAgB,KAAG,QAAQ,cAAc,GAAG,SAAS,CAUlI,CAAA"}
@@ -1,5 +0,0 @@
1
- import { Address } from '@xylabs/hex';
2
- import { ModuleResolver } from './instance';
3
- import { ModuleIdentifier } from './ModuleIdentifier';
4
- export declare const traceModuleIdentifier: (resolver: ModuleResolver, path: ModuleIdentifier) => Promise<Address[]>;
5
- //# sourceMappingURL=traceModuleIdentifier.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"traceModuleIdentifier.d.ts","sourceRoot":"","sources":["../../src/traceModuleIdentifier.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAErC,OAAO,EAAoB,cAAc,EAAE,MAAM,YAAY,CAAA;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAGrD,eAAO,MAAM,qBAAqB,aAAoB,cAAc,QAAQ,gBAAgB,KAAG,QAAQ,OAAO,EAAE,CAW/G,CAAA"}
@@ -1,5 +0,0 @@
1
- import { Address } from '@xylabs/hex';
2
- import { ModuleResolver } from './instance';
3
- import { ModuleIdentifier } from './ModuleIdentifier';
4
- export declare const traceModuleIdentifier: (resolver: ModuleResolver, path: ModuleIdentifier) => Promise<Address[]>;
5
- //# sourceMappingURL=traceModuleIdentifier.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"traceModuleIdentifier.d.ts","sourceRoot":"","sources":["../../src/traceModuleIdentifier.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAErC,OAAO,EAAoB,cAAc,EAAE,MAAM,YAAY,CAAA;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAGrD,eAAO,MAAM,qBAAqB,aAAoB,cAAc,QAAQ,gBAAgB,KAAG,QAAQ,OAAO,EAAE,CAW/G,CAAA"}
@@ -1,5 +0,0 @@
1
- import { Address } from '@xylabs/hex';
2
- import { ModuleResolver } from './instance';
3
- import { ModuleIdentifier } from './ModuleIdentifier';
4
- export declare const traceModuleIdentifier: (resolver: ModuleResolver, path: ModuleIdentifier) => Promise<Address[]>;
5
- //# sourceMappingURL=traceModuleIdentifier.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"traceModuleIdentifier.d.ts","sourceRoot":"","sources":["../../src/traceModuleIdentifier.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAErC,OAAO,EAAoB,cAAc,EAAE,MAAM,YAAY,CAAA;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAGrD,eAAO,MAAM,qBAAqB,aAAoB,cAAc,QAAQ,gBAAgB,KAAG,QAAQ,OAAO,EAAE,CAW/G,CAAA"}
@@ -1,4 +0,0 @@
1
- import { ModuleInstance, ModuleResolver } from './instance';
2
- import { ModuleIdentifier } from './ModuleIdentifier';
3
- export declare const resolveModuleIdentifier: (resolver: ModuleResolver, path: ModuleIdentifier) => Promise<ModuleInstance | undefined>;
4
- //# sourceMappingURL=resolveModuleIdentifier.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolveModuleIdentifier.d.ts","sourceRoot":"","sources":["../../src/resolveModuleIdentifier.ts"],"names":[],"mappings":"AAEA,OAAO,EAAoB,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAGrD,eAAO,MAAM,uBAAuB,aAAoB,cAAc,QAAQ,gBAAgB,KAAG,QAAQ,cAAc,GAAG,SAAS,CAUlI,CAAA"}
@@ -1,4 +0,0 @@
1
- import { ModuleInstance, ModuleResolver } from './instance';
2
- import { ModuleIdentifier } from './ModuleIdentifier';
3
- export declare const resolveModuleIdentifier: (resolver: ModuleResolver, path: ModuleIdentifier) => Promise<ModuleInstance | undefined>;
4
- //# sourceMappingURL=resolveModuleIdentifier.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolveModuleIdentifier.d.ts","sourceRoot":"","sources":["../../src/resolveModuleIdentifier.ts"],"names":[],"mappings":"AAEA,OAAO,EAAoB,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAGrD,eAAO,MAAM,uBAAuB,aAAoB,cAAc,QAAQ,gBAAgB,KAAG,QAAQ,cAAc,GAAG,SAAS,CAUlI,CAAA"}
@@ -1,4 +0,0 @@
1
- import { ModuleInstance, ModuleResolver } from './instance';
2
- import { ModuleIdentifier } from './ModuleIdentifier';
3
- export declare const resolveModuleIdentifier: (resolver: ModuleResolver, path: ModuleIdentifier) => Promise<ModuleInstance | undefined>;
4
- //# sourceMappingURL=resolveModuleIdentifier.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolveModuleIdentifier.d.ts","sourceRoot":"","sources":["../../src/resolveModuleIdentifier.ts"],"names":[],"mappings":"AAEA,OAAO,EAAoB,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAGrD,eAAO,MAAM,uBAAuB,aAAoB,cAAc,QAAQ,gBAAgB,KAAG,QAAQ,cAAc,GAAG,SAAS,CAUlI,CAAA"}
@@ -1,5 +0,0 @@
1
- import { Address } from '@xylabs/hex';
2
- import { ModuleResolver } from './instance';
3
- import { ModuleIdentifier } from './ModuleIdentifier';
4
- export declare const traceModuleIdentifier: (resolver: ModuleResolver, path: ModuleIdentifier) => Promise<Address[]>;
5
- //# sourceMappingURL=traceModuleIdentifier.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"traceModuleIdentifier.d.ts","sourceRoot":"","sources":["../../src/traceModuleIdentifier.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAErC,OAAO,EAAoB,cAAc,EAAE,MAAM,YAAY,CAAA;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAGrD,eAAO,MAAM,qBAAqB,aAAoB,cAAc,QAAQ,gBAAgB,KAAG,QAAQ,OAAO,EAAE,CAW/G,CAAA"}
@@ -1,5 +0,0 @@
1
- import { Address } from '@xylabs/hex';
2
- import { ModuleResolver } from './instance';
3
- import { ModuleIdentifier } from './ModuleIdentifier';
4
- export declare const traceModuleIdentifier: (resolver: ModuleResolver, path: ModuleIdentifier) => Promise<Address[]>;
5
- //# sourceMappingURL=traceModuleIdentifier.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"traceModuleIdentifier.d.ts","sourceRoot":"","sources":["../../src/traceModuleIdentifier.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAErC,OAAO,EAAoB,cAAc,EAAE,MAAM,YAAY,CAAA;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAGrD,eAAO,MAAM,qBAAqB,aAAoB,cAAc,QAAQ,gBAAgB,KAAG,QAAQ,OAAO,EAAE,CAW/G,CAAA"}
@@ -1,5 +0,0 @@
1
- import { Address } from '@xylabs/hex';
2
- import { ModuleResolver } from './instance';
3
- import { ModuleIdentifier } from './ModuleIdentifier';
4
- export declare const traceModuleIdentifier: (resolver: ModuleResolver, path: ModuleIdentifier) => Promise<Address[]>;
5
- //# sourceMappingURL=traceModuleIdentifier.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"traceModuleIdentifier.d.ts","sourceRoot":"","sources":["../../src/traceModuleIdentifier.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAErC,OAAO,EAAoB,cAAc,EAAE,MAAM,YAAY,CAAA;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAGrD,eAAO,MAAM,qBAAqB,aAAoB,cAAc,QAAQ,gBAAgB,KAAG,QAAQ,OAAO,EAAE,CAW/G,CAAA"}
@@ -1,17 +0,0 @@
1
- import { assertEx } from '@xylabs/assert'
2
-
3
- import { asModuleInstance, ModuleInstance, ModuleResolver } from './instance'
4
- import { ModuleIdentifier } from './ModuleIdentifier'
5
-
6
- //resolves a complex module path to addresses
7
- export const resolveModuleIdentifier = async (resolver: ModuleResolver, path: ModuleIdentifier): Promise<ModuleInstance | undefined> => {
8
- const parts = path.split(':')
9
- const first = parts.shift()
10
- const firstModule = asModuleInstance(
11
- assertEx(await resolver.resolve(first, { maxDepth: 1 }), () => `Failed to resolve [${first}]`),
12
- () => `Resolved invalid module instance [${first}]`,
13
- )
14
- if (firstModule) {
15
- return parts.length > 0 ? await resolveModuleIdentifier(firstModule, parts.join(':')) : firstModule
16
- }
17
- }
@@ -1,19 +0,0 @@
1
- import { assertEx } from '@xylabs/assert'
2
- import { Address } from '@xylabs/hex'
3
-
4
- import { asModuleInstance, ModuleResolver } from './instance'
5
- import { ModuleIdentifier } from './ModuleIdentifier'
6
-
7
- //translates a complex module path to addresses
8
- export const traceModuleIdentifier = async (resolver: ModuleResolver, path: ModuleIdentifier): Promise<Address[]> => {
9
- const parts = path.split(':')
10
- const first = parts.shift()
11
- const firstModule = asModuleInstance(
12
- assertEx(await resolver.resolve(first, { maxDepth: 1 }), () => `Failed to resolve [${first}]`),
13
- () => `Resolved invalid module instance [${first}]`,
14
- )
15
- if (firstModule) {
16
- return parts.length > 0 ? [firstModule.address, ...(await traceModuleIdentifier(firstModule, parts.join(':')))] : [firstModule.address]
17
- }
18
- return []
19
- }