@xyo-network/module-abstract 2.64.10 → 2.65.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.
Files changed (114) hide show
  1. package/dist/cjs/AbstractIndirectModule.js +44 -18
  2. package/dist/cjs/AbstractIndirectModule.js.map +1 -1
  3. package/dist/cjs/AbstractModule.js +12 -4
  4. package/dist/cjs/AbstractModule.js.map +1 -1
  5. package/dist/cjs/Error.js +3 -3
  6. package/dist/cjs/Error.js.map +1 -1
  7. package/dist/cjs/QueryValidator/ModuleConfigQueryValidator.js +2 -2
  8. package/dist/cjs/QueryValidator/ModuleConfigQueryValidator.js.map +1 -1
  9. package/dist/cjs/QueryValidator/SupportedQueryValidator.js +2 -2
  10. package/dist/cjs/QueryValidator/SupportedQueryValidator.js.map +1 -1
  11. package/dist/cjs/Resolver/CompositeModuleResolver.js +15 -20
  12. package/dist/cjs/Resolver/CompositeModuleResolver.js.map +1 -1
  13. package/dist/cjs/Resolver/SimpleModuleResolver.js +19 -18
  14. package/dist/cjs/Resolver/SimpleModuleResolver.js.map +1 -1
  15. package/dist/cjs/index.js +1 -3
  16. package/dist/cjs/index.js.map +1 -1
  17. package/dist/docs.json +16382 -20093
  18. package/dist/esm/AbstractIndirectModule.js +39 -16
  19. package/dist/esm/AbstractIndirectModule.js.map +1 -1
  20. package/dist/esm/AbstractModule.js +12 -4
  21. package/dist/esm/AbstractModule.js.map +1 -1
  22. package/dist/esm/Error.js +1 -1
  23. package/dist/esm/Error.js.map +1 -1
  24. package/dist/esm/QueryValidator/ModuleConfigQueryValidator.js +1 -1
  25. package/dist/esm/QueryValidator/ModuleConfigQueryValidator.js.map +1 -1
  26. package/dist/esm/QueryValidator/SupportedQueryValidator.js +1 -1
  27. package/dist/esm/QueryValidator/SupportedQueryValidator.js.map +1 -1
  28. package/dist/esm/Resolver/CompositeModuleResolver.js +15 -18
  29. package/dist/esm/Resolver/CompositeModuleResolver.js.map +1 -1
  30. package/dist/esm/Resolver/SimpleModuleResolver.js +19 -18
  31. package/dist/esm/Resolver/SimpleModuleResolver.js.map +1 -1
  32. package/dist/esm/index.js +1 -3
  33. package/dist/esm/index.js.map +1 -1
  34. package/dist/types/AbstractIndirectModule.d.ts +11 -7
  35. package/dist/types/AbstractIndirectModule.d.ts.map +1 -1
  36. package/dist/types/AbstractModule.d.ts.map +1 -1
  37. package/dist/types/Error.d.ts +1 -1
  38. package/dist/types/Error.d.ts.map +1 -1
  39. package/dist/types/QueryValidator/ModuleConfigQueryValidator.d.ts.map +1 -1
  40. package/dist/types/QueryValidator/QueryValidator.d.ts +1 -1
  41. package/dist/types/QueryValidator/QueryValidator.d.ts.map +1 -1
  42. package/dist/types/QueryValidator/SupportedQueryValidator.d.ts.map +1 -1
  43. package/dist/types/Resolver/CompositeModuleResolver.d.ts +2 -2
  44. package/dist/types/Resolver/CompositeModuleResolver.d.ts.map +1 -1
  45. package/dist/types/Resolver/SimpleModuleResolver.d.ts +2 -2
  46. package/dist/types/Resolver/SimpleModuleResolver.d.ts.map +1 -1
  47. package/dist/types/index.d.ts +1 -3
  48. package/dist/types/index.d.ts.map +1 -1
  49. package/package.json +22 -24
  50. package/src/AbstractIndirectModule.ts +46 -22
  51. package/src/AbstractModule.ts +12 -4
  52. package/src/Error.ts +1 -1
  53. package/src/QueryValidator/ModuleConfigQueryValidator.ts +1 -1
  54. package/src/QueryValidator/QueryValidator.ts +1 -1
  55. package/src/QueryValidator/SupportedQueryValidator.ts +2 -2
  56. package/src/Resolver/CompositeModuleResolver.ts +22 -19
  57. package/src/Resolver/SimpleModuleResolver.ts +21 -21
  58. package/src/index.ts +1 -3
  59. package/dist/cjs/ModuleFactory.js +0 -30
  60. package/dist/cjs/ModuleFactory.js.map +0 -1
  61. package/dist/cjs/Query/QueryBoundWitnessBuilder.js +0 -31
  62. package/dist/cjs/Query/QueryBoundWitnessBuilder.js.map +0 -1
  63. package/dist/cjs/Query/QueryBoundWitnessValidator.js +0 -58
  64. package/dist/cjs/Query/QueryBoundWitnessValidator.js.map +0 -1
  65. package/dist/cjs/Query/QueryBoundWitnessWrapper.js +0 -62
  66. package/dist/cjs/Query/QueryBoundWitnessWrapper.js.map +0 -1
  67. package/dist/cjs/Query/index.js +0 -7
  68. package/dist/cjs/Query/index.js.map +0 -1
  69. package/dist/cjs/lib/duplicateModules.js +0 -17
  70. package/dist/cjs/lib/duplicateModules.js.map +0 -1
  71. package/dist/cjs/lib/index.js +0 -6
  72. package/dist/cjs/lib/index.js.map +0 -1
  73. package/dist/cjs/lib/serializable.js +0 -38
  74. package/dist/cjs/lib/serializable.js.map +0 -1
  75. package/dist/esm/ModuleFactory.js +0 -28
  76. package/dist/esm/ModuleFactory.js.map +0 -1
  77. package/dist/esm/Query/QueryBoundWitnessBuilder.js +0 -26
  78. package/dist/esm/Query/QueryBoundWitnessBuilder.js.map +0 -1
  79. package/dist/esm/Query/QueryBoundWitnessValidator.js +0 -47
  80. package/dist/esm/Query/QueryBoundWitnessValidator.js.map +0 -1
  81. package/dist/esm/Query/QueryBoundWitnessWrapper.js +0 -46
  82. package/dist/esm/Query/QueryBoundWitnessWrapper.js.map +0 -1
  83. package/dist/esm/Query/index.js +0 -4
  84. package/dist/esm/Query/index.js.map +0 -1
  85. package/dist/esm/lib/duplicateModules.js +0 -13
  86. package/dist/esm/lib/duplicateModules.js.map +0 -1
  87. package/dist/esm/lib/index.js +0 -3
  88. package/dist/esm/lib/index.js.map +0 -1
  89. package/dist/esm/lib/serializable.js +0 -32
  90. package/dist/esm/lib/serializable.js.map +0 -1
  91. package/dist/types/ModuleFactory.d.ts +0 -17
  92. package/dist/types/ModuleFactory.d.ts.map +0 -1
  93. package/dist/types/Query/QueryBoundWitnessBuilder.d.ts +0 -12
  94. package/dist/types/Query/QueryBoundWitnessBuilder.d.ts.map +0 -1
  95. package/dist/types/Query/QueryBoundWitnessValidator.d.ts +0 -10
  96. package/dist/types/Query/QueryBoundWitnessValidator.d.ts.map +0 -1
  97. package/dist/types/Query/QueryBoundWitnessWrapper.d.ts +0 -18
  98. package/dist/types/Query/QueryBoundWitnessWrapper.d.ts.map +0 -1
  99. package/dist/types/Query/index.d.ts +0 -4
  100. package/dist/types/Query/index.d.ts.map +0 -1
  101. package/dist/types/lib/duplicateModules.d.ts +0 -12
  102. package/dist/types/lib/duplicateModules.d.ts.map +0 -1
  103. package/dist/types/lib/index.d.ts +0 -3
  104. package/dist/types/lib/index.d.ts.map +0 -1
  105. package/dist/types/lib/serializable.d.ts +0 -3
  106. package/dist/types/lib/serializable.d.ts.map +0 -1
  107. package/src/ModuleFactory.ts +0 -42
  108. package/src/Query/QueryBoundWitnessBuilder.ts +0 -33
  109. package/src/Query/QueryBoundWitnessValidator.ts +0 -50
  110. package/src/Query/QueryBoundWitnessWrapper.ts +0 -65
  111. package/src/Query/index.ts +0 -3
  112. package/src/lib/duplicateModules.ts +0 -14
  113. package/src/lib/index.ts +0 -2
  114. package/src/lib/serializable.ts +0 -41
@@ -9,8 +9,8 @@ export declare class SimpleModuleResolver implements ModuleRepository {
9
9
  addResolver(_resolver: ModuleResolver): this;
10
10
  remove(address: string | string[]): this;
11
11
  removeResolver(_resolver: ModuleResolver): this;
12
- resolve<T extends IndirectModule = IndirectModule>(filter?: ModuleFilter): Promisable<T[]>;
13
- resolveOne<T extends IndirectModule = IndirectModule>(filter: string): Promisable<T | undefined>;
12
+ resolve<TModule extends IndirectModule = IndirectModule>(filter?: ModuleFilter): Promisable<TModule[]>;
13
+ resolve<TModule extends IndirectModule = IndirectModule>(nameOrAddress: string): Promisable<TModule | undefined>;
14
14
  private addSingleModule;
15
15
  private removeSingleModule;
16
16
  private resolveByAddress;
@@ -1 +1 @@
1
- {"version":3,"file":"SimpleModuleResolver.d.ts","sourceRoot":"","sources":["../../../src/Resolver/SimpleModuleResolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,cAAc,EAGf,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAKjD,qBAAa,oBAAqB,YAAW,gBAAgB;IAC3D,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,OAAO,CAAqC;IAEpD,IAAI,gBAAgB,YAEnB;IAED,GAAG,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IACjC,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI;IAUnC,WAAW,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;IAI5C,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IASxC,cAAc,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;IAI/C,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC;IAc1F,UAAU,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC,GAAG,SAAS,CAAC;IAShG,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,cAAc;CAgBvB"}
1
+ {"version":3,"file":"SimpleModuleResolver.d.ts","sourceRoot":"","sources":["../../../src/Resolver/SimpleModuleResolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,cAAc,EAGf,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAKjD,qBAAa,oBAAqB,YAAW,gBAAgB;IAC3D,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,OAAO,CAAqC;IAEpD,IAAI,gBAAgB,YAEnB;IAED,GAAG,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IACjC,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI;IAUnC,WAAW,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;IAI5C,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IASxC,cAAc,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;IAI/C,OAAO,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;IACtG,OAAO,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,EAAE,aAAa,EAAE,MAAM,GAAG,UAAU,CAAC,OAAO,GAAG,SAAS,CAAC;IAsBhH,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,cAAc;CAgBvB"}
@@ -1,9 +1,7 @@
1
+ export * from './AbstractIndirectModule';
1
2
  export * from './AbstractModule';
2
3
  export * from './BaseEmitter';
3
4
  export * from './Error';
4
- export * from './lib';
5
- export * from './ModuleFactory';
6
- export * from './Query';
7
5
  export * from './QueryValidator';
8
6
  export * from './Resolver';
9
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,eAAe,CAAA;AAC7B,cAAc,SAAS,CAAA;AACvB,cAAc,OAAO,CAAA;AACrB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,SAAS,CAAA;AACvB,cAAc,kBAAkB,CAAA;AAChC,cAAc,YAAY,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAA;AACxC,cAAc,kBAAkB,CAAA;AAChC,cAAc,eAAe,CAAA;AAC7B,cAAc,SAAS,CAAA;AACvB,cAAc,kBAAkB,CAAA;AAChC,cAAc,YAAY,CAAA"}
package/package.json CHANGED
@@ -12,32 +12,30 @@
12
12
  "dependencies": {
13
13
  "@xylabs/assert": "^2.9.3",
14
14
  "@xylabs/exists": "^2.9.3",
15
- "@xylabs/promise": "^2.9.3",
16
- "@xyo-network/account": "^2.64.10",
17
- "@xyo-network/account-model": "^2.64.10",
18
- "@xyo-network/address-payload-plugin": "^2.64.10",
19
- "@xyo-network/archivist-model": "^2.64.10",
20
- "@xyo-network/boundwitness-builder": "^2.64.10",
21
- "@xyo-network/boundwitness-model": "^2.64.10",
22
- "@xyo-network/boundwitness-validator": "^2.64.10",
23
- "@xyo-network/boundwitness-wrapper": "^2.64.10",
24
- "@xyo-network/config-payload-plugin": "^2.64.10",
25
- "@xyo-network/core": "^2.64.10",
26
- "@xyo-network/error": "^2.64.10",
27
- "@xyo-network/manifest-model": "^2.64.10",
28
- "@xyo-network/module-events": "^2.64.10",
29
- "@xyo-network/module-model": "^2.64.10",
30
- "@xyo-network/payload-builder": "^2.64.10",
31
- "@xyo-network/payload-model": "^2.64.10",
32
- "@xyo-network/payload-wrapper": "^2.64.10",
33
- "@xyo-network/promise": "^2.64.10",
34
- "@xyo-network/query-payload-plugin": "^2.64.10",
35
- "@xyo-network/shared": "^2.64.10",
15
+ "@xyo-network/account": "^2.65.1",
16
+ "@xyo-network/account-model": "^2.65.1",
17
+ "@xyo-network/address-payload-plugin": "^2.65.1",
18
+ "@xyo-network/archivist-model": "^2.65.1",
19
+ "@xyo-network/archivist-wrapper": "^2.65.1",
20
+ "@xyo-network/boundwitness-builder": "^2.65.1",
21
+ "@xyo-network/boundwitness-model": "^2.65.1",
22
+ "@xyo-network/config-payload-plugin": "^2.65.1",
23
+ "@xyo-network/core": "^2.65.1",
24
+ "@xyo-network/error": "^2.65.1",
25
+ "@xyo-network/manifest-model": "^2.65.1",
26
+ "@xyo-network/module-events": "^2.65.1",
27
+ "@xyo-network/module-model": "^2.65.1",
28
+ "@xyo-network/payload-builder": "^2.65.1",
29
+ "@xyo-network/payload-model": "^2.65.1",
30
+ "@xyo-network/payload-wrapper": "^2.65.1",
31
+ "@xyo-network/promise": "^2.65.1",
32
+ "@xyo-network/query-payload-plugin": "^2.65.1",
33
+ "@xyo-network/shared": "^2.65.1",
36
34
  "lodash": "^4.17.21"
37
35
  },
38
36
  "devDependencies": {
39
- "@xylabs/ts-scripts-yarn3": "^2.18.7",
40
- "@xylabs/tsconfig": "^2.18.7",
37
+ "@xylabs/ts-scripts-yarn3": "^2.18.10",
38
+ "@xylabs/tsconfig": "^2.18.10",
41
39
  "jest": "^29.6.1",
42
40
  "jest-mock-extended": "^3.0.4",
43
41
  "typescript": "^5.1.6"
@@ -75,5 +73,5 @@
75
73
  },
76
74
  "sideEffects": false,
77
75
  "types": "dist/types/index.d.ts",
78
- "version": "2.64.10"
76
+ "version": "2.65.1"
79
77
  }
@@ -1,10 +1,11 @@
1
1
  import { assertEx } from '@xylabs/assert'
2
2
  import { exists } from '@xylabs/exists'
3
- import { Account, HDWallet } from '@xyo-network/account'
3
+ import { HDWallet } from '@xyo-network/account'
4
4
  import { AccountInstance } from '@xyo-network/account-model'
5
5
  import { AddressPayload, AddressSchema } from '@xyo-network/address-payload-plugin'
6
- import { ArchivistModule } from '@xyo-network/archivist-model'
7
- import { BoundWitnessBuilder } from '@xyo-network/boundwitness-builder'
6
+ import { ArchivistInstance } from '@xyo-network/archivist-model'
7
+ import { IndirectArchivistWrapper } from '@xyo-network/archivist-wrapper'
8
+ import { BoundWitnessBuilder, QueryBoundWitness, QueryBoundWitnessBuilder, QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-builder'
8
9
  import { BoundWitness } from '@xyo-network/boundwitness-model'
9
10
  import { ConfigPayload, ConfigSchema } from '@xyo-network/config-payload-plugin'
10
11
  import { handleErrorAsync } from '@xyo-network/error'
@@ -15,16 +16,18 @@ import {
15
16
  AddressPreviousHashSchema,
16
17
  CreatableModule,
17
18
  CreatableModuleFactory,
19
+ duplicateModules,
18
20
  IndirectModule,
19
21
  IndividualArchivistConfig,
20
22
  ModuleAddressQuerySchema,
23
+ ModuleBusyEventArgs,
21
24
  ModuleConfig,
22
25
  ModuleDescribeQuerySchema,
23
26
  ModuleDescriptionPayload,
24
27
  ModuleDescriptionSchema,
25
28
  ModuleDiscoverQuerySchema,
26
- ModuleError,
27
29
  ModuleEventData,
30
+ ModuleFactory,
28
31
  ModuleFilter,
29
32
  ModuleParams,
30
33
  ModuleQueriedEventArgs,
@@ -32,13 +35,12 @@ import {
32
35
  ModuleQueryBase,
33
36
  ModuleQueryResult,
34
37
  ModuleSubscribeQuerySchema,
35
- Query,
36
- QueryBoundWitness,
37
38
  SchemaString,
39
+ serializableField,
38
40
  WalletModuleParams,
39
41
  } from '@xyo-network/module-model'
40
42
  import { PayloadBuilder } from '@xyo-network/payload-builder'
41
- import { Payload } from '@xyo-network/payload-model'
43
+ import { ModuleError, Payload, Query } from '@xyo-network/payload-model'
42
44
  import { PayloadWrapper } from '@xyo-network/payload-wrapper'
43
45
  import { Promisable, PromiseEx } from '@xyo-network/promise'
44
46
  import { QueryPayload, QuerySchema } from '@xyo-network/query-payload-plugin'
@@ -47,9 +49,6 @@ import compact from 'lodash/compact'
47
49
 
48
50
  import { BaseEmitter } from './BaseEmitter'
49
51
  import { ModuleErrorBuilder } from './Error'
50
- import { duplicateModules, serializableField } from './lib'
51
- import { ModuleFactory } from './ModuleFactory'
52
- import { QueryBoundWitnessBuilder, QueryBoundWitnessWrapper } from './Query'
53
52
  import { ModuleConfigQueryValidator, Queryable, SupportedQueryValidator } from './QueryValidator'
54
53
  import { CompositeModuleResolver } from './Resolver'
55
54
 
@@ -57,9 +56,10 @@ import { CompositeModuleResolver } from './Resolver'
57
56
 
58
57
  export abstract class AbstractIndirectModule<TParams extends ModuleParams = ModuleParams, TEventData extends ModuleEventData = ModuleEventData>
59
58
  extends BaseEmitter<TParams, TEventData>
60
- implements IndirectModule<TParams, TEventData>
59
+ implements IndirectModule<TParams, TEventData>, IndirectModule
61
60
  {
62
61
  static configSchemas: string[]
62
+ static enableBusy = false
63
63
 
64
64
  protected static privateConstructorKey = Date.now().toString()
65
65
 
@@ -83,6 +83,8 @@ export abstract class AbstractIndirectModule<TParams extends ModuleParams = Modu
83
83
  protected readonly moduleConfigQueryValidator: Queryable
84
84
  protected readonly supportedQueryValidator: Queryable
85
85
 
86
+ private _busyCount = 0
87
+
86
88
  constructor(privateConstructorKey: string, params: TParams) {
87
89
  assertEx(AbstractIndirectModule.privateConstructorKey === privateConstructorKey, 'Use create function instead of constructor')
88
90
  // Clone params to prevent mutation of the incoming object
@@ -159,6 +161,29 @@ export abstract class AbstractIndirectModule<TParams extends ModuleParams = Modu
159
161
  return { address: this.address, previousHash: this._account?.previousHash, schema: AddressPreviousHashSchema }
160
162
  }
161
163
 
164
+ async busy<R>(closure: () => Promise<R>) {
165
+ if (AbstractIndirectModule.enableBusy) {
166
+ if (this._busyCount <= 0) {
167
+ this._busyCount = 0
168
+ const args: ModuleBusyEventArgs = { busy: true, module: this }
169
+ await this.emit('moduleBusy', args)
170
+ }
171
+ this._busyCount++
172
+ try {
173
+ return await closure()
174
+ } finally {
175
+ this._busyCount--
176
+ if (this._busyCount <= 0) {
177
+ this._busyCount = 0
178
+ const args: ModuleBusyEventArgs = { busy: false, module: this }
179
+ await this.emit('moduleBusy', args)
180
+ }
181
+ }
182
+ } else {
183
+ return closure()
184
+ }
185
+ }
186
+
162
187
  async loadAccount() {
163
188
  if (!this._account) {
164
189
  const activeLogger = this.params.logger ?? AbstractIndirectModule.defaultLogger
@@ -214,12 +239,14 @@ export abstract class AbstractIndirectModule<TParams extends ModuleParams = Modu
214
239
  queryConfig?: TConfig,
215
240
  ): Promise<ModuleQueryResult> {
216
241
  this.started('throw')
217
- const result = await this.queryHandler(assertEx(QueryBoundWitnessWrapper.unwrap(query)), payloads, queryConfig)
242
+ return await this.busy(async () => {
243
+ const result = await this.queryHandler(assertEx(QueryBoundWitnessWrapper.unwrap(query)), payloads, queryConfig)
218
244
 
219
- const args: ModuleQueriedEventArgs = { module: this as IndirectModule, payloads, query, result }
220
- await this.emit('moduleQueried', args)
245
+ const args: ModuleQueriedEventArgs = { module: this, payloads, query, result }
246
+ await this.emit('moduleQueried', args)
221
247
 
222
- return result
248
+ return result
249
+ })
223
250
  }
224
251
 
225
252
  queryable<T extends QueryBoundWitness = QueryBoundWitness, TConfig extends ModuleConfig = ModuleConfig>(
@@ -243,10 +270,7 @@ export abstract class AbstractIndirectModule<TParams extends ModuleParams = Modu
243
270
  ): Promise<TModule | TModule[] | undefined> {
244
271
  switch (typeof nameOrAddressOrFilter) {
245
272
  case 'string': {
246
- const byAddress = Account.isAddress(nameOrAddressOrFilter)
247
- ? (await this.resolve<TModule>({ address: [nameOrAddressOrFilter] })).pop()
248
- : undefined
249
- return byAddress ?? (await this.resolve<TModule>({ name: [nameOrAddressOrFilter] })).pop()
273
+ return (await this.downResolver.resolve<TModule>(nameOrAddressOrFilter)) ?? (await this.upResolver.resolve<TModule>(nameOrAddressOrFilter))
250
274
  }
251
275
  default: {
252
276
  const filter: ModuleFilter | undefined = nameOrAddressOrFilter
@@ -485,13 +509,13 @@ export abstract class AbstractIndirectModule<TParams extends ModuleParams = Modu
485
509
 
486
510
  protected writeArchivist = () => this.getArchivist('write')
487
511
 
488
- private async getArchivist(kind: keyof IndividualArchivistConfig): Promise<ArchivistModule | undefined> {
512
+ private async getArchivist(kind: keyof IndividualArchivistConfig): Promise<ArchivistInstance | undefined> {
489
513
  if (!this.config.archivist) return undefined
490
514
  const filter =
491
515
  typeof this.config.archivist === 'string' || this.config.archivist instanceof String
492
516
  ? (this.config.archivist as string)
493
517
  : (this.config?.archivist?.[kind] as string)
494
- const resolved = await this.upResolver.resolveOne(filter)
495
- return resolved ? (resolved as ArchivistModule) : undefined
518
+ const resolved = await this.upResolver.resolve(filter)
519
+ return resolved ? IndirectArchivistWrapper.wrap(resolved, this.account) : undefined
496
520
  }
497
521
  }
@@ -19,22 +19,30 @@ export abstract class AbstractModule<TParams extends ModuleParams = ModuleParams
19
19
 
20
20
  /* make it public */
21
21
  override async addressPreviousHash(): Promise<AddressPreviousHashPayload> {
22
- return await super.addressPreviousHash()
22
+ return await this.busy(async () => {
23
+ return await super.addressPreviousHash()
24
+ })
23
25
  }
24
26
 
25
27
  /* make it public */
26
28
  override async describe(): Promise<ModuleDescriptionPayload> {
27
- return await super.describe()
29
+ return await this.busy(async () => {
30
+ return await super.describe()
31
+ })
28
32
  }
29
33
 
30
34
  /* make it public */
31
35
  override async discover(): Promise<Payload[]> {
32
- return await super.discover()
36
+ return await this.busy(async () => {
37
+ return await super.discover()
38
+ })
33
39
  }
34
40
 
35
41
  /* make it public */
36
42
  override async manifest(): Promise<ModuleManifestPayload> {
37
- return await super.manifest()
43
+ return await this.busy(async () => {
44
+ return await super.manifest()
45
+ })
38
46
  }
39
47
 
40
48
  /* make it public */
package/src/Error.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { ModuleError, ModuleErrorSchema } from '@xyo-network/module-model'
2
1
  import { PayloadBuilder } from '@xyo-network/payload-builder'
2
+ import { ModuleError, ModuleErrorSchema } from '@xyo-network/payload-model'
3
3
 
4
4
  export class ModuleErrorBuilder extends PayloadBuilder {
5
5
  _message?: string
@@ -1,6 +1,6 @@
1
+ import { QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-builder'
1
2
  import { AddressString, AnyConfigSchema, CosigningAddressSet, ModuleConfig, ModuleQuery, SchemaString } from '@xyo-network/module-model'
2
3
 
3
- import { QueryBoundWitnessWrapper } from '../Query'
4
4
  import { Queryable, QueryValidator } from './QueryValidator'
5
5
 
6
6
  export type SortedPipedAddressesString = string
@@ -1,4 +1,4 @@
1
- import { QueryBoundWitness } from '@xyo-network/module-model'
1
+ import { QueryBoundWitness } from '@xyo-network/boundwitness-builder'
2
2
  import { Payload } from '@xyo-network/payload-model'
3
3
  import { Promisable } from '@xyo-network/promise'
4
4
 
@@ -1,7 +1,7 @@
1
- import { IndirectModule, ModuleQuery, QueryBoundWitness } from '@xyo-network/module-model'
1
+ import { QueryBoundWitness, QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-builder'
2
+ import { IndirectModule, ModuleQuery } from '@xyo-network/module-model'
2
3
  import { Payload } from '@xyo-network/payload-model'
3
4
 
4
- import { QueryBoundWitnessWrapper } from '../Query'
5
5
  import { Queryable, QueryValidator } from './QueryValidator'
6
6
 
7
7
  export const isQuerySupportedByModule = async <T extends QueryBoundWitness = QueryBoundWitness>(
@@ -1,8 +1,7 @@
1
- import { fulfilled } from '@xylabs/promise'
1
+ import { exists } from '@xylabs/exists'
2
2
  import { Base, BaseParams } from '@xyo-network/core'
3
- import { IndirectModule, ModuleFilter, ModuleRepository, ModuleResolver } from '@xyo-network/module-model'
3
+ import { duplicateModules, IndirectModule, ModuleFilter, ModuleRepository, ModuleResolver } from '@xyo-network/module-model'
4
4
 
5
- import { duplicateModules } from '../lib'
6
5
  import { SimpleModuleResolver } from './SimpleModuleResolver'
7
6
 
8
7
  export class CompositeModuleResolver extends Base implements ModuleRepository, ModuleResolver {
@@ -50,23 +49,27 @@ export class CompositeModuleResolver extends Base implements ModuleRepository, M
50
49
  return this
51
50
  }
52
51
 
53
- async resolve<T extends IndirectModule = IndirectModule>(filter?: ModuleFilter): Promise<T[]> {
54
- const modules = await Promise.allSettled(this.resolvers.map((resolver) => resolver.resolve(filter)))
55
- const result = modules
56
- .filter(fulfilled)
57
- .map((r) => r.value)
58
- .flat()
59
- .filter(duplicateModules)
60
- return result as T[]
61
- }
62
-
63
- async resolveOne<T extends IndirectModule = IndirectModule>(addressOrName: string): Promise<T | undefined> {
64
- for (let i = 0; i < this.resolvers.length; i++) {
65
- const resolver = this.resolvers[i]
66
- const result = await resolver.resolveOne<T>(addressOrName)
67
- if (result) return result
52
+ async resolve<TModule extends IndirectModule = IndirectModule>(filter?: ModuleFilter): Promise<TModule[]>
53
+ async resolve<TModule extends IndirectModule = IndirectModule>(nameOrAddress: string): Promise<TModule | undefined>
54
+ async resolve<TModule extends IndirectModule = IndirectModule>(
55
+ nameOrAddressOrFilter?: ModuleFilter | string,
56
+ ): Promise<TModule | TModule[] | undefined> {
57
+ if (typeof nameOrAddressOrFilter === 'string') {
58
+ const result = await Promise.all(
59
+ this.resolvers.map(async (resolver) => {
60
+ return await resolver.resolve<TModule>(nameOrAddressOrFilter)
61
+ }),
62
+ )
63
+ return result.filter(exists).filter(duplicateModules).pop()
64
+ } else {
65
+ const result = await Promise.all(
66
+ this.resolvers.map(async (resolver) => {
67
+ return await resolver.resolve<TModule>(nameOrAddressOrFilter)
68
+ }),
69
+ )
70
+ const flatResult = result.flat()
71
+ return flatResult.filter(duplicateModules)
68
72
  }
69
- return undefined
70
73
  }
71
74
 
72
75
  private addSingleModule(module?: IndirectModule) {
@@ -48,27 +48,27 @@ export class SimpleModuleResolver implements ModuleRepository {
48
48
  throw 'Removing resolvers not supported'
49
49
  }
50
50
 
51
- resolve<T extends IndirectModule = IndirectModule>(filter?: ModuleFilter): Promisable<T[]> {
52
- const filteredByName: T[] = this.resolveByName<T>(Object.values(this.modules) as T[], (filter as NameModuleFilter)?.name)
53
-
54
- const filteredByAddress: T[] = (filter as AddressModuleFilter)?.address
55
- ? this.resolveByAddress<T>(filteredByName, (filter as AddressModuleFilter)?.address)
56
- : filteredByName
57
-
58
- const filteredByQuery: T[] = (filter as QueryModuleFilter)?.query
59
- ? this.resolveByQuery<T>(filteredByAddress, (filter as QueryModuleFilter)?.query)
60
- : filteredByAddress
61
-
62
- return filteredByQuery
63
- }
64
-
65
- resolveOne<T extends IndirectModule = IndirectModule>(filter: string): Promisable<T | undefined> {
66
- const allModules = Object.values(this.modules) as T[]
67
- for (const resolutionMethod of [this.resolveByAddress, this.resolveByName]) {
68
- const filtered: T[] = resolutionMethod(allModules, [filter])
69
- if (filtered.length === 1) return filtered[0]
51
+ resolve<TModule extends IndirectModule = IndirectModule>(filter?: ModuleFilter): Promisable<TModule[]>
52
+ resolve<TModule extends IndirectModule = IndirectModule>(nameOrAddress: string): Promisable<TModule | undefined>
53
+ resolve<TModule extends IndirectModule = IndirectModule>(
54
+ nameOrAddressOrFilter?: ModuleFilter | string,
55
+ ): Promisable<TModule | TModule[] | undefined> {
56
+ if (nameOrAddressOrFilter) {
57
+ if (typeof nameOrAddressOrFilter === 'string') {
58
+ return (
59
+ this.resolveByName(Object.values(this.modules) as TModule[], [nameOrAddressOrFilter]).pop() ??
60
+ this.resolveByAddress(Object.values(this.modules) as TModule[], [nameOrAddressOrFilter]).pop()
61
+ )
62
+ } else if ((nameOrAddressOrFilter as AddressModuleFilter).address) {
63
+ return this.resolveByAddress<TModule>(Object.values(this.modules) as TModule[], (nameOrAddressOrFilter as AddressModuleFilter).address)
64
+ } else if ((nameOrAddressOrFilter as NameModuleFilter).name) {
65
+ return this.resolveByName<TModule>(Object.values(this.modules) as TModule[], (nameOrAddressOrFilter as NameModuleFilter).name)
66
+ } else if ((nameOrAddressOrFilter as QueryModuleFilter).query) {
67
+ return this.resolveByQuery<TModule>(Object.values(this.modules) as TModule[], (nameOrAddressOrFilter as QueryModuleFilter).query)
68
+ }
69
+ } else {
70
+ return Object.values(this.modules) as TModule[]
70
71
  }
71
- return undefined
72
72
  }
73
73
 
74
74
  private addSingleModule(module?: IndirectModule) {
@@ -94,7 +94,7 @@ export class SimpleModuleResolver implements ModuleRepository {
94
94
  ? compact(
95
95
  flatten(
96
96
  address?.map((address) => {
97
- return modules.filter((modules) => modules.address === address)
97
+ return modules.filter((module) => module.address === address)
98
98
  }),
99
99
  ),
100
100
  )
package/src/index.ts CHANGED
@@ -1,8 +1,6 @@
1
+ export * from './AbstractIndirectModule'
1
2
  export * from './AbstractModule'
2
3
  export * from './BaseEmitter'
3
4
  export * from './Error'
4
- export * from './lib'
5
- export * from './ModuleFactory'
6
- export * from './Query'
7
5
  export * from './QueryValidator'
8
6
  export * from './Resolver'
@@ -1,30 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ModuleFactory = void 0;
4
- const tslib_1 = require("tslib");
5
- const merge_1 = tslib_1.__importDefault(require("lodash/merge"));
6
- class ModuleFactory {
7
- constructor(creatableModule, params) {
8
- this.creatableModule = creatableModule;
9
- this.defaultParams = params;
10
- this.configSchemas = creatableModule.configSchemas;
11
- }
12
- get configSchema() {
13
- return this.configSchemas[0];
14
- }
15
- static withParams(creatableModule, params) {
16
- return new ModuleFactory(creatableModule, params);
17
- }
18
- create(params) {
19
- var _a;
20
- const factory = this;
21
- const schema = factory.creatableModule.configSchema;
22
- const mergedParams = (0, merge_1.default)((_a = factory.defaultParams) !== null && _a !== void 0 ? _a : {}, params, { config: { schema } });
23
- return factory.creatableModule.create(mergedParams);
24
- }
25
- factory(_params) {
26
- throw new Error('Method not implemented.');
27
- }
28
- }
29
- exports.ModuleFactory = ModuleFactory;
30
- //# sourceMappingURL=ModuleFactory.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ModuleFactory.js","sourceRoot":"","sources":["../../src/ModuleFactory.ts"],"names":[],"mappings":";;;;AAEA,iEAAgC;AAMhC,MAAa,aAAa;IASxB,YAAY,eAAyC,EAAE,MAA0B;QAC/E,IAAI,CAAC,eAAe,GAAG,eAAe,CAAA;QACtC,IAAI,CAAC,aAAa,GAAG,MAAM,CAAA;QAC3B,IAAI,CAAC,aAAa,GAAG,eAAe,CAAC,aAAa,CAAA;IACpD,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAA;IAC9B,CAAC;IAED,MAAM,CAAC,UAAU,CAAmB,eAAmC,EAAE,MAAoB;QAC3F,OAAO,IAAI,aAAa,CAAC,eAAe,EAAE,MAAM,CAAC,CAAA;IACnD,CAAC;IAED,MAAM,CAAoD,MAAsC;;QAC9F,MAAM,OAAO,GAAG,IAAwB,CAAA;QACxC,MAAM,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,YAAY,CAAA;QACnD,MAAM,YAAY,GAAsB,IAAA,eAAK,EAAC,MAAA,OAAO,CAAC,aAAa,mCAAI,EAAE,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,CAAA;QAC1G,OAAO,OAAO,CAAC,eAAe,CAAC,MAAM,CAAI,YAAY,CAAC,CAAA;IACxD,CAAC;IAED,OAAO,CAA6C,OAAiC;QACnF,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAA;IAC5C,CAAC;CACF;AAjCD,sCAiCC"}
@@ -1,31 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.QueryBoundWitnessBuilder = void 0;
4
- const tslib_1 = require("tslib");
5
- const assert_1 = require("@xylabs/assert");
6
- const boundwitness_builder_1 = require("@xyo-network/boundwitness-builder");
7
- const module_model_1 = require("@xyo-network/module-model");
8
- const payload_wrapper_1 = require("@xyo-network/payload-wrapper");
9
- class QueryBoundWitnessBuilder extends boundwitness_builder_1.BoundWitnessBuilder {
10
- hashableFields() {
11
- const _super = Object.create(null, {
12
- hashableFields: { get: () => super.hashableFields }
13
- });
14
- var _a;
15
- return tslib_1.__awaiter(this, void 0, void 0, function* () {
16
- return Object.assign(Object.assign({}, (yield _super.hashableFields.call(this))), { query: (0, assert_1.assertEx)(yield ((_a = this._query) === null || _a === void 0 ? void 0 : _a.hashAsync()), 'No Query Specified'), schema: module_model_1.QueryBoundWitnessSchema });
17
- });
18
- }
19
- query(query) {
20
- this._query = payload_wrapper_1.PayloadWrapper.wrap(query);
21
- this.payload(this._query.payload());
22
- return this;
23
- }
24
- resultSet(payloadSet) {
25
- this._resultSet = payload_wrapper_1.PayloadWrapper.wrap(payloadSet);
26
- this.payload(this._resultSet.payload());
27
- return this;
28
- }
29
- }
30
- exports.QueryBoundWitnessBuilder = QueryBoundWitnessBuilder;
31
- //# sourceMappingURL=QueryBoundWitnessBuilder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"QueryBoundWitnessBuilder.js","sourceRoot":"","sources":["../../../src/Query/QueryBoundWitnessBuilder.ts"],"names":[],"mappings":";;;;AAAA,2CAAyC;AACzC,4EAAuE;AACvE,4DAA6F;AAE7F,kEAA6D;AAE7D,MAAa,wBAGX,SAAQ,0CAAkC;IAI3B,cAAc;;;;;;YAC3B,uCACK,CAAC,MAAM,OAAM,cAAc,WAAE,CAAC,KACjC,KAAK,EAAE,IAAA,iBAAQ,EAAC,MAAM,CAAA,MAAA,IAAI,CAAC,MAAM,0CAAE,SAAS,EAAE,CAAA,EAAE,oBAAoB,CAAC,EACrE,MAAM,EAAE,sCAAuB,IAChC;;KACF;IAED,KAAK,CAA4C,KAAQ;QACvD,IAAI,CAAC,MAAM,GAAG,gCAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACxC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAA;QACnC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,SAAS,CAAkE,UAAa;QACtF,IAAI,CAAC,UAAU,GAAG,gCAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACjD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAA;QACvC,OAAO,IAAI,CAAA;IACb,CAAC;CACF;AA1BD,4DA0BC"}
@@ -1,58 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.QueryBoundWitnessValidator = void 0;
4
- const tslib_1 = require("tslib");
5
- const assert_1 = require("@xylabs/assert");
6
- const boundwitness_validator_1 = require("@xyo-network/boundwitness-validator");
7
- const boundwitness_wrapper_1 = require("@xyo-network/boundwitness-wrapper");
8
- const error_1 = require("@xyo-network/error");
9
- const module_model_1 = require("@xyo-network/module-model");
10
- const payload_wrapper_1 = require("@xyo-network/payload-wrapper");
11
- class QueryBoundWitnessValidator extends boundwitness_validator_1.BoundWitnessValidator {
12
- get expectedSchema() {
13
- return module_model_1.QueryBoundWitnessSchema;
14
- }
15
- static isQueryBoundWitnessValidator(obj) {
16
- return (obj === null || obj === void 0 ? void 0 : obj.constructor) === QueryBoundWitnessValidator;
17
- }
18
- validate() {
19
- const _super = Object.create(null, {
20
- validate: { get: () => super.validate }
21
- });
22
- return tslib_1.__awaiter(this, void 0, void 0, function* () {
23
- return [
24
- ...(yield _super.validate.call(this)),
25
- // ...this.validateResultSet()
26
- ];
27
- });
28
- }
29
- validateResultSet() {
30
- return tslib_1.__awaiter(this, void 0, void 0, function* () {
31
- const errors = [];
32
- try {
33
- const resultSetHash = (0, assert_1.assertEx)(this.obj.resultSet, 'Missing ResultSet');
34
- const wrapper = boundwitness_wrapper_1.BoundWitnessWrapper.parse(this.obj);
35
- const resultSet = payload_wrapper_1.PayloadWrapper.wrap((yield wrapper.payloadMap())[resultSetHash]);
36
- const required = resultSet === null || resultSet === void 0 ? void 0 : resultSet.payload().required;
37
- if (required) {
38
- Object.entries(required).forEach(([key, value]) => {
39
- const found = wrapper.payloadSchemas.reduce((count, schema) => {
40
- return count + (schema === key ? 1 : 0);
41
- }, 0);
42
- if (found !== value) {
43
- errors.push(Error(`validateResultSet: Missing Schema [${key}:${found}:${value}]`));
44
- }
45
- });
46
- }
47
- }
48
- catch (ex) {
49
- (0, error_1.handleError)(ex, (error) => {
50
- errors.push(error);
51
- });
52
- }
53
- return errors;
54
- });
55
- }
56
- }
57
- exports.QueryBoundWitnessValidator = QueryBoundWitnessValidator;
58
- //# sourceMappingURL=QueryBoundWitnessValidator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"QueryBoundWitnessValidator.js","sourceRoot":"","sources":["../../../src/Query/QueryBoundWitnessValidator.ts"],"names":[],"mappings":";;;;AAAA,2CAAyC;AACzC,gFAA2E;AAC3E,4EAAuE;AACvE,8CAAgD;AAChD,4DAA6F;AAE7F,kEAA6D;AAC7D,MAAa,0BAAoD,SAAQ,8CAAwC;IAG/G,IAAuB,cAAc;QACnC,OAAO,sCAAuB,CAAA;IAChC,CAAC;IAED,MAAM,CAAC,4BAA4B,CAAC,GAAY;QAC9C,OAAO,CAAC,GAAkC,aAAlC,GAAG,uBAAH,GAAG,CAAiC,WAAW,MAAK,0BAA0B,CAAA;IACxF,CAAC;IAEc,QAAQ;;;;;YACrB,OAAO;gBACL,GAAG,CAAC,MAAM,OAAM,QAAQ,WAAE,CAAC;gBAC3B,8BAA8B;aAC/B,CAAA;QACH,CAAC;KAAA;IAEK,iBAAiB;;YACrB,MAAM,MAAM,GAAY,EAAE,CAAA;YAC1B,IAAI;gBACF,MAAM,aAAa,GAAG,IAAA,iBAAQ,EAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAA;gBACvE,MAAM,OAAO,GAAG,0CAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBACnD,MAAM,SAAS,GAAG,gCAAc,CAAC,IAAI,CAAoB,CAAC,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,aAAa,CAAsB,CAAC,CAAA;gBAC1H,MAAM,QAAQ,GAAG,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,OAAO,GAAG,QAAQ,CAAA;gBAC9C,IAAI,QAAQ,EAAE;oBACZ,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;wBAChD,MAAM,KAAK,GAAG,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;4BAC5D,OAAO,KAAK,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;wBACzC,CAAC,EAAE,CAAC,CAAC,CAAA;wBACL,IAAI,KAAK,KAAK,KAAK,EAAE;4BACnB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,sCAAsC,GAAG,IAAI,KAAK,IAAI,KAAK,GAAG,CAAC,CAAC,CAAA;yBACnF;oBACH,CAAC,CAAC,CAAA;iBACH;aACF;YAAC,OAAO,EAAE,EAAE;gBACX,IAAA,mBAAW,EAAC,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE;oBACxB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBACpB,CAAC,CAAC,CAAA;aACH;YACD,OAAO,MAAM,CAAA;QACf,CAAC;KAAA;CACF;AA1CD,gEA0CC"}