@xyo-network/module-model 2.91.0 → 2.91.2

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 (180) hide show
  1. package/dist/browser/Queries/State.d.cts +5 -0
  2. package/dist/browser/Queries/State.d.cts.map +1 -0
  3. package/dist/browser/Queries/State.d.mts +5 -0
  4. package/dist/browser/Queries/State.d.mts.map +1 -0
  5. package/dist/browser/Queries/State.d.ts +5 -0
  6. package/dist/browser/Queries/State.d.ts.map +1 -0
  7. package/dist/browser/Queries/index.d.cts +3 -3
  8. package/dist/browser/Queries/index.d.cts.map +1 -1
  9. package/dist/browser/Queries/index.d.mts +3 -3
  10. package/dist/browser/Queries/index.d.mts.map +1 -1
  11. package/dist/browser/Queries/index.d.ts +3 -3
  12. package/dist/browser/Queries/index.d.ts.map +1 -1
  13. package/dist/browser/index.cjs +76 -27
  14. package/dist/browser/index.cjs.map +1 -1
  15. package/dist/browser/index.js +76 -27
  16. package/dist/browser/index.js.map +1 -1
  17. package/dist/browser/instance/Instance.d.cts +15 -0
  18. package/dist/browser/instance/Instance.d.cts.map +1 -0
  19. package/dist/browser/instance/Instance.d.mts +15 -0
  20. package/dist/browser/instance/Instance.d.mts.map +1 -0
  21. package/dist/browser/instance/Instance.d.ts +15 -0
  22. package/dist/browser/instance/Instance.d.ts.map +1 -0
  23. package/dist/browser/instance/{ModuleInstance.d.cts → ModuleFilter.d.cts} +15 -57
  24. package/dist/browser/instance/ModuleFilter.d.cts.map +1 -0
  25. package/dist/browser/instance/{ModuleInstance.d.ts → ModuleFilter.d.mts} +15 -57
  26. package/dist/browser/instance/ModuleFilter.d.mts.map +1 -0
  27. package/dist/browser/instance/{ModuleInstance.d.mts → ModuleFilter.d.ts} +15 -57
  28. package/dist/browser/instance/ModuleFilter.d.ts.map +1 -0
  29. package/dist/browser/instance/ModuleIdentifier.d.cts +42 -0
  30. package/dist/browser/instance/ModuleIdentifier.d.cts.map +1 -0
  31. package/dist/browser/instance/ModuleIdentifier.d.mts +42 -0
  32. package/dist/browser/instance/ModuleIdentifier.d.mts.map +1 -0
  33. package/dist/browser/instance/ModuleIdentifier.d.ts +42 -0
  34. package/dist/browser/instance/ModuleIdentifier.d.ts.map +1 -0
  35. package/dist/browser/instance/ModuleRepository.d.cts +6 -6
  36. package/dist/browser/instance/ModuleRepository.d.cts.map +1 -1
  37. package/dist/browser/instance/ModuleRepository.d.mts +6 -6
  38. package/dist/browser/instance/ModuleRepository.d.mts.map +1 -1
  39. package/dist/browser/instance/ModuleRepository.d.ts +6 -6
  40. package/dist/browser/instance/ModuleRepository.d.ts.map +1 -1
  41. package/dist/browser/instance/ModuleResolver.d.cts +50 -0
  42. package/dist/browser/instance/ModuleResolver.d.cts.map +1 -0
  43. package/dist/browser/instance/ModuleResolver.d.mts +50 -0
  44. package/dist/browser/instance/ModuleResolver.d.mts.map +1 -0
  45. package/dist/browser/instance/ModuleResolver.d.ts +50 -0
  46. package/dist/browser/instance/ModuleResolver.d.ts.map +1 -0
  47. package/dist/browser/instance/ObjectFilter.d.cts +26 -0
  48. package/dist/browser/instance/ObjectFilter.d.cts.map +1 -0
  49. package/dist/browser/instance/ObjectFilter.d.mts +26 -0
  50. package/dist/browser/instance/ObjectFilter.d.mts.map +1 -0
  51. package/dist/browser/instance/ObjectFilter.d.ts +26 -0
  52. package/dist/browser/instance/ObjectFilter.d.ts.map +1 -0
  53. package/dist/browser/instance/ObjectResolver.d.cts +15 -0
  54. package/dist/browser/instance/ObjectResolver.d.cts.map +1 -0
  55. package/dist/browser/instance/ObjectResolver.d.mts +15 -0
  56. package/dist/browser/instance/ObjectResolver.d.mts.map +1 -0
  57. package/dist/browser/instance/ObjectResolver.d.ts +15 -0
  58. package/dist/browser/instance/ObjectResolver.d.ts.map +1 -0
  59. package/dist/browser/instance/asModuleInstance.d.cts +2 -2
  60. package/dist/browser/instance/asModuleInstance.d.mts +2 -2
  61. package/dist/browser/instance/asModuleInstance.d.ts +2 -2
  62. package/dist/browser/instance/index.d.cts +6 -1
  63. package/dist/browser/instance/index.d.cts.map +1 -1
  64. package/dist/browser/instance/index.d.mts +6 -1
  65. package/dist/browser/instance/index.d.mts.map +1 -1
  66. package/dist/browser/instance/index.d.ts +6 -1
  67. package/dist/browser/instance/index.d.ts.map +1 -1
  68. package/dist/browser/instance/isModuleInstance.d.cts +1 -1
  69. package/dist/browser/instance/isModuleInstance.d.cts.map +1 -1
  70. package/dist/browser/instance/isModuleInstance.d.mts +1 -1
  71. package/dist/browser/instance/isModuleInstance.d.mts.map +1 -1
  72. package/dist/browser/instance/isModuleInstance.d.ts +1 -1
  73. package/dist/browser/instance/isModuleInstance.d.ts.map +1 -1
  74. package/dist/browser/module/ModuleQueryFunctions.d.cts +1 -0
  75. package/dist/browser/module/ModuleQueryFunctions.d.cts.map +1 -1
  76. package/dist/browser/module/ModuleQueryFunctions.d.mts +1 -0
  77. package/dist/browser/module/ModuleQueryFunctions.d.mts.map +1 -1
  78. package/dist/browser/module/ModuleQueryFunctions.d.ts +1 -0
  79. package/dist/browser/module/ModuleQueryFunctions.d.ts.map +1 -1
  80. package/dist/node/Queries/State.d.cts +5 -0
  81. package/dist/node/Queries/State.d.cts.map +1 -0
  82. package/dist/node/Queries/State.d.mts +5 -0
  83. package/dist/node/Queries/State.d.mts.map +1 -0
  84. package/dist/node/Queries/State.d.ts +5 -0
  85. package/dist/node/Queries/State.d.ts.map +1 -0
  86. package/dist/node/Queries/index.d.cts +3 -3
  87. package/dist/node/Queries/index.d.cts.map +1 -1
  88. package/dist/node/Queries/index.d.mts +3 -3
  89. package/dist/node/Queries/index.d.mts.map +1 -1
  90. package/dist/node/Queries/index.d.ts +3 -3
  91. package/dist/node/Queries/index.d.ts.map +1 -1
  92. package/dist/node/index.cjs +84 -28
  93. package/dist/node/index.cjs.map +1 -1
  94. package/dist/node/index.js +76 -27
  95. package/dist/node/index.js.map +1 -1
  96. package/dist/node/instance/Instance.d.cts +15 -0
  97. package/dist/node/instance/Instance.d.cts.map +1 -0
  98. package/dist/node/instance/Instance.d.mts +15 -0
  99. package/dist/node/instance/Instance.d.mts.map +1 -0
  100. package/dist/node/instance/Instance.d.ts +15 -0
  101. package/dist/node/instance/Instance.d.ts.map +1 -0
  102. package/dist/node/instance/{ModuleInstance.d.cts → ModuleFilter.d.cts} +15 -57
  103. package/dist/node/instance/ModuleFilter.d.cts.map +1 -0
  104. package/dist/node/instance/ModuleFilter.d.mts +133 -0
  105. package/dist/node/instance/ModuleFilter.d.mts.map +1 -0
  106. package/dist/node/instance/ModuleFilter.d.ts +133 -0
  107. package/dist/node/instance/ModuleFilter.d.ts.map +1 -0
  108. package/dist/node/instance/ModuleIdentifier.d.cts +42 -0
  109. package/dist/node/instance/ModuleIdentifier.d.cts.map +1 -0
  110. package/dist/node/instance/ModuleIdentifier.d.mts +42 -0
  111. package/dist/node/instance/ModuleIdentifier.d.mts.map +1 -0
  112. package/dist/node/instance/ModuleIdentifier.d.ts +42 -0
  113. package/dist/node/instance/ModuleIdentifier.d.ts.map +1 -0
  114. package/dist/node/instance/ModuleRepository.d.cts +6 -6
  115. package/dist/node/instance/ModuleRepository.d.cts.map +1 -1
  116. package/dist/node/instance/ModuleRepository.d.mts +6 -6
  117. package/dist/node/instance/ModuleRepository.d.mts.map +1 -1
  118. package/dist/node/instance/ModuleRepository.d.ts +6 -6
  119. package/dist/node/instance/ModuleRepository.d.ts.map +1 -1
  120. package/dist/node/instance/ModuleResolver.d.cts +50 -0
  121. package/dist/node/instance/ModuleResolver.d.cts.map +1 -0
  122. package/dist/node/instance/ModuleResolver.d.mts +50 -0
  123. package/dist/node/instance/ModuleResolver.d.mts.map +1 -0
  124. package/dist/node/instance/ModuleResolver.d.ts +50 -0
  125. package/dist/node/instance/ModuleResolver.d.ts.map +1 -0
  126. package/dist/node/instance/ObjectFilter.d.cts +26 -0
  127. package/dist/node/instance/ObjectFilter.d.cts.map +1 -0
  128. package/dist/node/instance/ObjectFilter.d.mts +26 -0
  129. package/dist/node/instance/ObjectFilter.d.mts.map +1 -0
  130. package/dist/node/instance/ObjectFilter.d.ts +26 -0
  131. package/dist/node/instance/ObjectFilter.d.ts.map +1 -0
  132. package/dist/node/instance/ObjectResolver.d.cts +15 -0
  133. package/dist/node/instance/ObjectResolver.d.cts.map +1 -0
  134. package/dist/node/instance/ObjectResolver.d.mts +15 -0
  135. package/dist/node/instance/ObjectResolver.d.mts.map +1 -0
  136. package/dist/node/instance/ObjectResolver.d.ts +15 -0
  137. package/dist/node/instance/ObjectResolver.d.ts.map +1 -0
  138. package/dist/node/instance/asModuleInstance.d.cts +2 -2
  139. package/dist/node/instance/asModuleInstance.d.mts +2 -2
  140. package/dist/node/instance/asModuleInstance.d.ts +2 -2
  141. package/dist/node/instance/index.d.cts +6 -1
  142. package/dist/node/instance/index.d.cts.map +1 -1
  143. package/dist/node/instance/index.d.mts +6 -1
  144. package/dist/node/instance/index.d.mts.map +1 -1
  145. package/dist/node/instance/index.d.ts +6 -1
  146. package/dist/node/instance/index.d.ts.map +1 -1
  147. package/dist/node/instance/isModuleInstance.d.cts +1 -1
  148. package/dist/node/instance/isModuleInstance.d.cts.map +1 -1
  149. package/dist/node/instance/isModuleInstance.d.mts +1 -1
  150. package/dist/node/instance/isModuleInstance.d.mts.map +1 -1
  151. package/dist/node/instance/isModuleInstance.d.ts +1 -1
  152. package/dist/node/instance/isModuleInstance.d.ts.map +1 -1
  153. package/dist/node/module/ModuleQueryFunctions.d.cts +1 -0
  154. package/dist/node/module/ModuleQueryFunctions.d.cts.map +1 -1
  155. package/dist/node/module/ModuleQueryFunctions.d.mts +1 -0
  156. package/dist/node/module/ModuleQueryFunctions.d.mts.map +1 -1
  157. package/dist/node/module/ModuleQueryFunctions.d.ts +1 -0
  158. package/dist/node/module/ModuleQueryFunctions.d.ts.map +1 -1
  159. package/package.json +14 -14
  160. package/src/Queries/State.ts +6 -0
  161. package/src/Queries/index.ts +9 -5
  162. package/src/instance/Instance.ts +26 -0
  163. package/src/instance/ModuleFilter.ts +30 -0
  164. package/src/instance/ModuleIdentifier.ts +65 -0
  165. package/src/instance/ModuleRepository.ts +6 -6
  166. package/src/instance/ModuleResolver.ts +11 -0
  167. package/src/instance/ObjectFilter.ts +41 -0
  168. package/src/instance/ObjectResolver.ts +23 -0
  169. package/src/instance/index.ts +6 -1
  170. package/src/instance/isModuleInstance.ts +1 -1
  171. package/src/module/ModuleQueryFunctions.ts +1 -0
  172. package/dist/browser/instance/ModuleInstance.d.cts.map +0 -1
  173. package/dist/browser/instance/ModuleInstance.d.mts.map +0 -1
  174. package/dist/browser/instance/ModuleInstance.d.ts.map +0 -1
  175. package/dist/node/instance/ModuleInstance.d.cts.map +0 -1
  176. package/dist/node/instance/ModuleInstance.d.mts +0 -175
  177. package/dist/node/instance/ModuleInstance.d.mts.map +0 -1
  178. package/dist/node/instance/ModuleInstance.d.ts +0 -175
  179. package/dist/node/instance/ModuleInstance.d.ts.map +0 -1
  180. package/src/instance/ModuleInstance.ts +0 -108
@@ -212,6 +212,9 @@ var AddressPreviousHashSchema = `${AddressSchema}.hash.previous`;
212
212
  // src/Queries/ModuleAddress/Query.ts
213
213
  var ModuleAddressQuerySchema = "network.xyo.query.module.address";
214
214
 
215
+ // src/Queries/State.ts
216
+ var ModuleStateQuerySchema = "network.xyo.query.module.state";
217
+
215
218
  // src/Queries/Subscribe.ts
216
219
  var ModuleSubscribeQuerySchema = "network.xyo.query.module.subscribe";
217
220
 
@@ -279,38 +282,77 @@ var isModuleInstance = factory3.create(requiredModuleInstanceFunctions, [
279
282
  // src/instance/asModuleInstance.ts
280
283
  var asModuleInstance = AsObjectFactory3.create(isModuleInstance);
281
284
 
282
- // src/instance/ModuleInstance.ts
285
+ // src/instance/Instance.ts
283
286
  import { IsObjectFactory as IsObjectFactory3 } from "@xylabs/object";
284
- var ReservedModuleIdentifierCharacters = /* @__PURE__ */ new Set([
285
- ":"
286
- ]);
287
- var isReservedModuleIdentifierCharacter = /* @__PURE__ */ __name((value) => {
288
- return typeof value === "string" && value.length === 1 && ReservedModuleIdentifierCharacters.has(value);
289
- }, "isReservedModuleIdentifierCharacter");
290
- var isModuleIdentifierPart = /* @__PURE__ */ __name((value, falseAction = "none") => {
291
- const result = typeof value === "string" && ![
292
- ...value
293
- ].some(isReservedModuleIdentifierCharacter);
294
- switch (falseAction) {
295
- case "throw": {
296
- throw new Error(`Invalid ModuleIdentifierPart: ${value}`);
297
- }
298
- default: {
299
- return result;
300
- }
301
- }
302
- }, "isModuleIdentifierPart");
303
- var isModuleResolver = /* @__PURE__ */ __name((value) => {
304
- return typeof value.resolve === "function";
305
- }, "isModuleResolver");
306
287
  var IsInstanceFactory = class extends IsObjectFactory3 {
307
288
  static {
308
289
  __name(this, "IsInstanceFactory");
309
290
  }
310
291
  };
311
- var isAddressModuleFilter = /* @__PURE__ */ __name((value) => value.address !== void 0, "isAddressModuleFilter");
312
- var isNameModuleFilter = /* @__PURE__ */ __name((value) => value.name !== void 0, "isNameModuleFilter");
313
- var isQueryModuleFilter = /* @__PURE__ */ __name((value) => value.query !== void 0, "isQueryModuleFilter");
292
+
293
+ // src/instance/ObjectFilter.ts
294
+ var isAddressObjectFilter = /* @__PURE__ */ __name((value) => value.address !== void 0, "isAddressObjectFilter");
295
+ var isNameObjectFilter = /* @__PURE__ */ __name((value) => value.name !== void 0, "isNameObjectFilter");
296
+ var isQueryObjectFilter = /* @__PURE__ */ __name((value) => value.query !== void 0, "isQueryObjectFilter");
297
+
298
+ // src/instance/ModuleFilter.ts
299
+ var isAddressModuleFilter = isAddressObjectFilter;
300
+ var isNameModuleFilter = isNameObjectFilter;
301
+ var isQueryModuleFilter = isQueryObjectFilter;
302
+
303
+ // src/instance/ModuleIdentifier.ts
304
+ import { isAddress } from "@xylabs/hex";
305
+ var DisallowedModuleIdentifierCharacters = {
306
+ " ": true,
307
+ "!": true,
308
+ '"': true,
309
+ "#": true,
310
+ $: true,
311
+ "%": true,
312
+ "&": true,
313
+ "'": true,
314
+ "(": true,
315
+ ")": true,
316
+ "*": true,
317
+ ",": true,
318
+ ".": true,
319
+ "/": true,
320
+ ":": true,
321
+ ";": true,
322
+ "<": true,
323
+ "=": true,
324
+ ">": true,
325
+ "?": true,
326
+ "@": true,
327
+ "[": true,
328
+ "]": true,
329
+ "^": true,
330
+ _: true,
331
+ "{": true,
332
+ "|": true,
333
+ "}": true,
334
+ "~": true
335
+ };
336
+ var ReservedModuleIdentifierCharacters = new Set(Object.keys(DisallowedModuleIdentifierCharacters));
337
+ var isModuleName = /* @__PURE__ */ __name((value) => {
338
+ return typeof value === "string" && !isAddress(value) && !includesReservedModuleIdentifierCharacter(value);
339
+ }, "isModuleName");
340
+ var includesReservedModuleIdentifierCharacter = /* @__PURE__ */ __name((value) => {
341
+ return typeof value === "string" && [
342
+ ...value
343
+ ].some((char) => ReservedModuleIdentifierCharacters.has(char));
344
+ }, "includesReservedModuleIdentifierCharacter");
345
+ var isModuleIdentifierPart = /* @__PURE__ */ __name((value) => {
346
+ return isModuleName(value) || isAddress(value);
347
+ }, "isModuleIdentifierPart");
348
+
349
+ // src/instance/ObjectResolver.ts
350
+ var isObjectResolver = /* @__PURE__ */ __name((value) => {
351
+ return typeof value.resolve === "function";
352
+ }, "isObjectResolver");
353
+
354
+ // src/instance/ModuleResolver.ts
355
+ var isModuleResolver = isObjectResolver;
314
356
 
315
357
  // src/lib/duplicateModules.ts
316
358
  var duplicateModules = /* @__PURE__ */ __name((value, index, array) => {
@@ -377,6 +419,7 @@ var withModule = WithFactory.create(isModule);
377
419
  var withModuleInstance = WithFactory.create(isModuleInstance);
378
420
  export {
379
421
  AddressPreviousHashSchema,
422
+ DisallowedModuleIdentifierCharacters,
380
423
  IsInstanceFactory,
381
424
  IsModuleFactory,
382
425
  ModuleAddressQuerySchema,
@@ -387,6 +430,7 @@ export {
387
430
  ModuleFactory,
388
431
  ModuleFactoryLocator,
389
432
  ModuleManifestQuerySchema,
433
+ ModuleStateQuerySchema,
390
434
  ModuleStateSchema,
391
435
  ModuleSubscribeQuerySchema,
392
436
  ReservedModuleIdentifierCharacters,
@@ -399,17 +443,22 @@ export {
399
443
  duplicateModules,
400
444
  hasAllLabels,
401
445
  hasLabels,
446
+ includesReservedModuleIdentifierCharacter,
402
447
  isAddressModuleFilter,
448
+ isAddressObjectFilter,
403
449
  isModule,
404
450
  isModuleIdentifierPart,
405
451
  isModuleInstance,
452
+ isModuleName,
406
453
  isModuleObject,
407
454
  isModuleResolver,
408
455
  isModuleState,
409
456
  isModuleStateWithMeta,
410
457
  isNameModuleFilter,
458
+ isNameObjectFilter,
459
+ isObjectResolver,
411
460
  isQueryModuleFilter,
412
- isReservedModuleIdentifierCharacter,
461
+ isQueryObjectFilter,
413
462
  requiredModuleInstanceFunctions,
414
463
  requiredModuleQueries,
415
464
  requiredModuleShape,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Config.ts","../../src/CreatableModule/CreatableModule.ts","../../src/CreatableModule/CreatableModuleRegistry.ts","../../src/CreatableModule/LabeledCreatableModuleFactory.ts","../../src/CreatableModule/ModuleFactory.ts","../../src/CreatableModule/ModuleFactoryLocator.ts","../../src/Labels/Labels.ts","../../src/instance/asModuleInstance.ts","../../src/instance/isModuleInstance.ts","../../src/module/asModule.ts","../../src/Queries/Describe/Payload.ts","../../src/Queries/Describe/Query.ts","../../src/Queries/Discover.ts","../../src/Queries/Manifest.ts","../../src/Queries/ModuleAddress/Payload.ts","../../src/Queries/ModuleAddress/Query.ts","../../src/Queries/Subscribe.ts","../../src/module/asModuleObject.ts","../../src/module/isModuleObject.ts","../../src/module/IsModuleFactory.ts","../../src/module/isModule.ts","../../src/instance/ModuleInstance.ts","../../src/lib/duplicateModules.ts","../../src/lib/serializable.ts","../../src/Payload/ModuleState.ts","../../src/withModule.ts"],"sourcesContent":["import { Address } from '@xylabs/hex'\nimport { EmptyObject, WithAdditional } from '@xylabs/object'\nimport { RetryConfig } from '@xylabs/retry'\nimport { Payload, Schema } from '@xyo-network/payload-model'\n\nimport { ModuleIdentifier, ModuleName } from './instance'\nimport { Labels } from './Labels'\n\nexport type ModuleConfigSchema = 'network.xyo.module.config'\nexport const ModuleConfigSchema: ModuleConfigSchema = 'network.xyo.module.config'\n\nexport type CosigningAddressSet = string[]\nexport type SchemaString = string\nexport type NameOrAddress = Address | ModuleName\n\nexport interface ArchivingModuleConfig {\n readonly archiving?: {\n readonly archivists?: ModuleIdentifier[]\n }\n}\n\nexport type ModuleConfig<TConfig extends EmptyObject | Payload | void = void, TSchema extends Schema | void = void> = Payload<\n WithAdditional<\n {\n /** @field The name/address of the Archivist to use for this module */\n readonly archivist?: ModuleIdentifier\n\n /**\n * @field The labels used for this module. If a label is specified, then the\n * ModuleFactoryLocator will attempt to find a ModuleFactory with the corresponding\n * labels to construct this module.\n */\n readonly labels?: Labels\n\n /** @field Friendly name of module (not collision resistent). Can be used to resolve module when registered/attached to Node. */\n readonly name?: ModuleName\n\n /** @field paging settings for queries */\n readonly paging?: Record<string, { size?: number }>\n\n readonly retry?: RetryConfig\n\n schema: TConfig extends Payload ? TConfig['schema'] : ModuleConfigSchema\n\n /** @field The query schemas and allowed/disallowed addresses which are allowed to issue them against the module. If both allowed and disallowed is specified, then disallowed takes priority. */\n readonly security?: {\n /** @field Will the module process queries that have unsigned BoundWitness in query tuples */\n readonly allowAnonymous?: boolean\n\n /** @field If schema in record, then only these address sets can access query */\n readonly allowed?: Record<SchemaString, (Address | CosigningAddressSet)[]>\n\n /** @field If schema in record, then anyone except these addresses can access query */\n readonly disallowed?: Record<SchemaString, Address[]>\n }\n\n /** @field sign every query */\n readonly sign?: boolean\n\n /** @field Store the queries made to the module in an archivist if possible */\n readonly storeQueries?: boolean\n\n /** @field add a timestamp payload to every query */\n readonly timestamp?: boolean\n } & ArchivingModuleConfig,\n TConfig\n >,\n TSchema\n>\n\nexport type AnyConfigSchema<TConfig extends Omit<ModuleConfig, 'schema'> & { schema: string } = Omit<ModuleConfig, 'schema'> & { schema: string }> =\n ModuleConfig<TConfig, string>\n\nexport type OptionalConfigSchema<TConfig extends AnyConfigSchema<ModuleConfig> = AnyConfigSchema<ModuleConfig>> = Omit<TConfig, 'schema'> & {\n schema?: TConfig['schema']\n}\n\nexport type AnyModuleConfig = AnyConfigSchema<ModuleConfig>\n","import { Logger } from '@xylabs/logger'\nimport { AccountInstance } from '@xyo-network/account-model'\n\nimport { ModuleInstance } from '../instance'\n\nexport type CreatableModuleFactory<T extends ModuleInstance = ModuleInstance> = Omit<Omit<CreatableModule<T>, 'new'>, 'create'> & {\n create<T extends ModuleInstance>(this: CreatableModuleFactory<T>, params?: T['params']): Promise<T>\n}\n\nexport interface CreatableModule<T extends ModuleInstance = ModuleInstance> {\n configSchema: string\n configSchemas: string[]\n defaultLogger?: Logger\n new (privateConstructorKey: string, params: T['params'], account: AccountInstance): T\n _noOverride(functionName: string): void\n create<T extends ModuleInstance>(this: CreatableModule<T>, params?: T['params']): Promise<T>\n factory<T extends ModuleInstance>(this: CreatableModule<T>, params?: T['params']): CreatableModuleFactory<T>\n}\n\n/**\n * Class annotation to be used to decorate Modules which support\n * an asynchronous creation pattern\n * @returns The decorated Module requiring it implement the members\n * of the CreatableModule as statics properties/methods\n */\nexport function creatableModule<TModule extends ModuleInstance = ModuleInstance>() {\n return <U extends CreatableModule<TModule>>(constructor: U) => {\n constructor\n }\n}\n","import { CreatableModuleFactory } from './CreatableModule'\nimport { CreatableModuleDictionary } from './CreatableModuleDictionary'\nimport { LabeledCreatableModuleFactory } from './LabeledCreatableModuleFactory'\n\nexport interface CreatableModuleRegistry {\n [key: string]: (CreatableModuleFactory | LabeledCreatableModuleFactory)[] | undefined\n}\n\nexport const toCreatableModuleRegistry = (dict: CreatableModuleDictionary | CreatableModuleRegistry): CreatableModuleRegistry => {\n // eslint-disable-next-line unicorn/no-array-reduce\n return Object.entries(dict).reduce((registry, [schema, factory]) => {\n registry[schema] = Array.isArray(factory) ? factory : [factory]\n return registry\n }, {} as CreatableModuleRegistry)\n}\n\nexport const assignCreatableModuleRegistry = (\n target: CreatableModuleRegistry = {},\n ...sources: CreatableModuleRegistry[]\n): CreatableModuleRegistry => {\n sources.map((source) =>\n Object.entries(source).map(([schema, factories]) => {\n if (factories) {\n const existingFactories = target[schema]\n target[schema] = existingFactories ? (target[schema] = [...existingFactories, ...factories]) : factories\n }\n }),\n )\n return target\n}\n","import { ModuleInstance } from '../instance'\nimport { WithOptionalLabels } from '../Labels'\nimport { CreatableModuleFactory } from './CreatableModule'\n\nexport type LabeledCreatableModuleFactory<T extends ModuleInstance = ModuleInstance> = CreatableModuleFactory<T> & WithOptionalLabels\n\nexport const hasLabels = (factory: CreatableModuleFactory | LabeledCreatableModuleFactory): factory is LabeledCreatableModuleFactory => {\n return (factory as LabeledCreatableModuleFactory).labels !== undefined\n}\n","import { assertEx } from '@xylabs/assert'\nimport { merge } from '@xylabs/lodash'\nimport { Logger } from '@xylabs/logger'\n\nimport { ModuleInstance } from '../instance'\nimport { Labels, WithOptionalLabels } from '../Labels'\nimport { CreatableModule, CreatableModuleFactory } from './CreatableModule'\n\nexport class ModuleFactory<TModule extends ModuleInstance> implements CreatableModuleFactory<TModule> {\n configSchemas: CreatableModuleFactory<TModule>['configSchemas']\n\n creatableModule: CreatableModule<TModule>\n\n defaultLogger?: Logger | undefined\n\n defaultParams?: Omit<TModule['params'], 'config'> & { config?: Partial<TModule['params']['config']> }\n\n labels?: Labels\n\n constructor(\n creatableModule: CreatableModule<TModule>,\n params?: Omit<TModule['params'], 'config'> & { config?: Partial<TModule['params']['config']> },\n labels: Labels = {},\n ) {\n this.creatableModule = creatableModule\n this.defaultParams = params\n this.configSchemas = creatableModule.configSchemas\n this.labels = Object.assign({}, (creatableModule as WithOptionalLabels).labels ?? {}, labels ?? {})\n }\n\n get configSchema(): string {\n return this.configSchemas[0]\n }\n\n static withParams<T extends ModuleInstance>(\n creatableModule: CreatableModule<T>,\n params?: Omit<T['params'], 'config'> & { config?: T['params']['config'] },\n labels: Labels = {},\n ) {\n return new ModuleFactory(creatableModule, params, labels)\n }\n\n _getRootFunction(funcName: string) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let anyThis = this as any\n while (anyThis.__proto__[funcName]) {\n anyThis = anyThis.__proto__\n }\n return anyThis[funcName]\n }\n\n _noOverride(functionName: string) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const thisFunc = (this as any)[functionName]\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const rootFunc = this._getRootFunction(functionName)\n assertEx(thisFunc === rootFunc, () => `Override not allowed for [${functionName}] - override ${functionName}Handler instead`)\n }\n\n create<T extends ModuleInstance>(this: CreatableModuleFactory<T>, params?: TModule['params'] | undefined): Promise<T> {\n const factory = this as ModuleFactory<T>\n const schema = factory.creatableModule.configSchema\n const mergedParams: TModule['params'] = merge({}, factory.defaultParams, params, {\n config: merge({}, factory.defaultParams?.config, params?.config, { schema }),\n })\n return factory.creatableModule.create<T>(mergedParams)\n }\n\n factory<T extends ModuleInstance>(this: CreatableModule<T>, _params?: T['params'] | undefined): CreatableModuleFactory<T> {\n throw new Error('Method not implemented.')\n }\n}\n","import { assertEx } from '@xylabs/assert'\n\nimport { ModuleInstance } from '../instance'\nimport { hasAllLabels, Labels } from '../Labels'\nimport { CreatableModuleFactory } from './CreatableModule'\nimport { CreatableModuleRegistry } from './CreatableModuleRegistry'\nimport { hasLabels, LabeledCreatableModuleFactory } from './LabeledCreatableModuleFactory'\n\n/**\n * A class which encapsulates the Service Locator Pattern for Module Factories\n */\nexport class ModuleFactoryLocator {\n constructor(protected readonly _registry: CreatableModuleRegistry = {}) {}\n\n /**\n * The current registry for the module factory\n */\n get registry(): Readonly<CreatableModuleRegistry> {\n return this._registry\n }\n\n /**\n * Locates a module factory that matches the supplied schema and labels\n * @param schema The config schema for the module\n * @param labels The labels for the module factory\n * @returns A module factory that matches the supplied schema and labels or throws if one is not found\n */\n locate(schema: string, labels?: Labels): CreatableModuleFactory | LabeledCreatableModuleFactory {\n return assertEx(this.tryLocate(schema, labels), () => {\n const configString = `config schema [${schema}]`\n const labelsString = labels ? ` & labels [${JSON.stringify(labels)}]` : ''\n return `No module factory for the supplied ${configString}${labelsString} registered`\n })\n }\n\n /**\n * Registers a single module factory (with optional tags) with the locator\n * @param additional Additional module factories to register\n */\n register<TModule extends ModuleInstance>(mod: CreatableModuleFactory<TModule>, labels?: Labels): this {\n mod.configSchemas.map((schema) => {\n const existingFactories = this._registry[schema]\n const factory: LabeledCreatableModuleFactory<TModule> = {\n // Destructure instance properties\n ...mod,\n // Copy static methods\n create: mod.create.bind(mod) as LabeledCreatableModuleFactory<TModule>['create'],\n // Merge module & supplied labels\n labels: Object.assign({}, (mod as LabeledCreatableModuleFactory).labels ?? {}, labels ?? {}),\n }\n this._registry[schema] = existingFactories ? [...existingFactories, factory] : [factory]\n })\n return this\n }\n\n /**\n * Registers multiple module factories with the locator\n * @param additional Additional module factories to register\n */\n registerMany(additional: CreatableModuleRegistry): this {\n Object.entries(additional).map(([schema, factories]) => {\n if (factories) {\n const existingFactories = this._registry[schema]\n this._registry[schema] = existingFactories ? [...existingFactories, ...factories] : factories\n }\n })\n return this\n }\n\n /**\n * Tries to locate a module factory that matches the supplied schema and labels\n * @param schema The config schema for the module\n * @param labels The labels for the module factory\n * @returns A module factory that matches the supplied schema and labels or undefined\n */\n tryLocate(schema: string, labels?: Labels): CreatableModuleFactory | LabeledCreatableModuleFactory | undefined {\n // If labels were provided\n return labels ?\n // Find the first factory that has labels and has all the labels provided\n this._registry[schema]?.filter(hasLabels).find((factory) => hasAllLabels(factory?.labels, labels))\n : // Otherwise, return the first factory\n this._registry[schema]?.[0]\n }\n}\n","/**\n * Object used to represent labels identifying a resource.\n */\nexport interface Labels {\n [key: string]: string | undefined\n}\n\n/**\n * Interface for objects that have labels.\n */\nexport interface WithLabels<T extends Labels = Labels> {\n labels: T\n}\n\n/**\n * Interface for objects that have labels.\n */\nexport interface WithOptionalLabels<T extends Labels = Labels> {\n labels?: T\n}\n\n/**\n * Returns true if the source object has all the labels from the required set\n * @param source Source object to check against\n * @param required Set of labels to check for in source\n * @returns True of the source object has all the labels from the required set\n */\nexport const hasAllLabels = (source?: Labels, required?: Labels): boolean => {\n if (!required) return true\n return Object.entries(required).every(([key, value]) => {\n // eslint-disable-next-line no-prototype-builtins\n return source?.hasOwnProperty(key as keyof typeof source) && source?.[key as keyof typeof source] === value\n })\n}\n","import { AsObjectFactory } from '@xylabs/object'\n\nimport { isModuleInstance } from './isModuleInstance'\n\nexport const asModuleInstance = AsObjectFactory.create(isModuleInstance)\n","import { IsObjectFactory, ObjectTypeShape, TypeCheck } from '@xylabs/object'\n\nimport { isModule } from '../module'\nimport { ModuleInstance } from './ModuleInstance'\n\nexport const requiredModuleInstanceFunctions: ObjectTypeShape = {\n describe: 'function',\n discover: 'function',\n manifest: 'function',\n moduleAddress: 'function',\n}\n\n//we do not use IsInstanceFactory here to prevent a cycle\nconst factory = new IsObjectFactory<ModuleInstance>()\n\nexport const isModuleInstance: TypeCheck<ModuleInstance> = factory.create(requiredModuleInstanceFunctions, [isModule])\n","import { AsObjectFactory } from '@xylabs/object'\n\nimport { isModule } from './isModule'\n\nexport const asModule = AsObjectFactory.create(isModule)\n","import { Payload } from '@xyo-network/payload-model'\n\nimport { ModuleDescription } from '../../ModuleDescription'\n\nexport const ModuleDescriptionSchema = 'network.xyo.module.description'\nexport type ModuleDescriptionSchema = typeof ModuleDescriptionSchema\n\nexport type ModuleDescriptionPayload = Payload<ModuleDescription, ModuleDescriptionSchema>\n","import { Query } from '@xyo-network/payload-model'\n\nexport type ModuleDescribeQuerySchema = 'network.xyo.query.module.describe'\nexport const ModuleDescribeQuerySchema: ModuleDescribeQuerySchema = 'network.xyo.query.module.describe'\n\nexport type ModuleDescribeQuery = Query<{\n schema: ModuleDescribeQuerySchema\n}>\n","import { Query } from '@xyo-network/payload-model'\n\nexport type ModuleDiscoverQuerySchema = 'network.xyo.query.module.discover'\nexport const ModuleDiscoverQuerySchema: ModuleDiscoverQuerySchema = 'network.xyo.query.module.discover'\n\nexport type ModuleDiscoverQuery = Query<{\n maxDepth?: number\n schema: ModuleDiscoverQuerySchema\n}>\n","import { Query } from '@xyo-network/payload-model'\n\nexport type ModuleManifestQuerySchema = 'network.xyo.query.module.manifest'\nexport const ModuleManifestQuerySchema: ModuleManifestQuerySchema = 'network.xyo.query.module.manifest'\n\nexport type ModuleManifestQuery = Query<{\n maxDepth?: number\n schema: ModuleManifestQuerySchema\n}>\n","import { Address } from '@xylabs/hex'\nimport { AddressSchema } from '@xyo-network/address-payload-plugin'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport const AddressPreviousHashSchema = `${AddressSchema}.hash.previous`\nexport type AddressPreviousHashSchema = typeof AddressPreviousHashSchema\n\nexport type AddressPreviousHashPayload = Payload<{\n address: Address\n previousHash?: string\n schema: AddressPreviousHashSchema\n}>\n","import { Query } from '@xyo-network/payload-model'\n\nexport type ModuleAddressQuerySchema = 'network.xyo.query.module.address'\nexport const ModuleAddressQuerySchema: ModuleAddressQuerySchema = 'network.xyo.query.module.address'\n\nexport type ModuleAddressQuery = Query<{\n schema: ModuleAddressQuerySchema\n}>\n","import { Address } from '@xylabs/hex'\nimport { Query } from '@xyo-network/payload-model'\n\nexport type ModuleSubscribeQuerySchema = 'network.xyo.query.module.subscribe'\nexport const ModuleSubscribeQuerySchema: ModuleSubscribeQuerySchema = 'network.xyo.query.module.subscribe'\n\nexport interface ModuleSubscribeFilter {\n /** @field if specified, at least one of the schemas must be present in the boundwtness to generate a notification */\n schema?: string[]\n}\n\n//requests notification when a boundwitness is added to the modules chain that meets the filter criteria\nexport type ModuleSubscribeQuery = Query<{\n /** @field The address that will receive notifications */\n address: Address\n /** @field A subscribe with a null for filter is an unsubscribe */\n filter?: ModuleSubscribeFilter | null\n /** @field The maximum events queued per send [may increase frequency] */\n maxQueue?: number\n schema: ModuleSubscribeQuerySchema\n}>\n","import { AsObjectFactory } from '@xylabs/object'\n\nimport { isModuleObject } from './isModuleObject'\n\nexport const asModuleObject = AsObjectFactory.create(isModuleObject)\n","import { IsObjectFactory, ObjectTypeShape } from '@xylabs/object'\n\nimport { Module } from './Module'\n\nexport const requiredModuleShape: ObjectTypeShape = {\n address: 'string',\n config: 'object',\n params: 'object',\n queries: 'array',\n query: 'function',\n queryable: 'function',\n}\n\nconst factory = new IsObjectFactory<Module>()\n\nexport const isModuleObject = factory.create(requiredModuleShape)\n","import { AnyObject, EmptyObject, TypeCheck } from '@xylabs/object'\n\nimport { asModuleObject } from './asModuleObject'\nimport { isModuleObject } from './isModuleObject'\nimport { Module } from './Module'\n\nexport type ModuleTypeCheck<T extends Module = Module> = TypeCheck<T>\n\nexport class IsModuleFactory<T extends Module = Module> {\n create(expectedQueries?: string[], additionalChecks?: TypeCheck<AnyObject | EmptyObject>[]): ModuleTypeCheck<T> {\n return (obj: unknown, config): obj is T => {\n const module = asModuleObject(obj)\n const result =\n isModuleObject(module, config) &&\n (expectedQueries?.reduce((prev, query) => prev && module.queries.includes(query), true) ?? true) &&\n //perform additional checks\n (additionalChecks?.reduce((prev, check) => prev && check(obj, config), true) ?? true)\n return result\n }\n }\n}\n","import { TypeCheck } from '@xylabs/object'\n\nimport { ModuleDiscoverQuerySchema } from '../Queries'\nimport { IsModuleFactory } from './IsModuleFactory'\nimport { isModuleObject } from './isModuleObject'\nimport { Module } from './Module'\n\nexport const requiredModuleQueries: string[] = [\n /* We need to update this once live module conform */\n //ModuleDescribeQuerySchema,\n //ModuleAddressQuerySchema,\n ModuleDiscoverQuerySchema,\n //ModuleManifestQuerySchema,\n //ModuleSubscribeQuerySchema,\n]\n\n//we do not use IsInstanceFactory here to prevent a cycle\nconst factory = new IsModuleFactory<Module>()\n\nexport const isModule: TypeCheck<Module> = factory.create(requiredModuleQueries, [isModuleObject])\n","import { Address } from '@xylabs/hex'\nimport { IsObjectFactory, TypeCheck } from '@xylabs/object'\nimport { Promisable } from '@xylabs/promise'\n\nimport { ModuleEventData } from '../EventsModels'\nimport { Module, ModuleQueryFunctions } from '../module'\nimport { ModuleParams } from '../ModuleParams'\n\nexport type ModulePipeLine = Lowercase<'one-to-one' | 'one-to-many' | 'many-to-one' | 'many-to-many'>\n\nexport type ModuleName = string //Capitalize<string>\n\nexport type ModuleIdentifier = Address | ModuleName\n\nexport type ModuleIdentifierPart = Lowercase<string>\n\nexport type ReservedModuleIdentifierCharacter = ':'\nexport const ReservedModuleIdentifierCharacters = new Set<ReservedModuleIdentifierCharacter>([':'])\n\nexport const isReservedModuleIdentifierCharacter = (value: unknown): value is ReservedModuleIdentifierCharacter => {\n return typeof value === 'string' && value.length === 1 && ReservedModuleIdentifierCharacters.has(value as ReservedModuleIdentifierCharacter)\n}\n\nexport const isModuleIdentifierPart = (value: unknown, falseAction: 'throw' | 'none' = 'none'): value is ModuleIdentifierPart => {\n const result = typeof value === 'string' && ![...value].some(isReservedModuleIdentifierCharacter)\n switch (falseAction) {\n case 'throw': {\n throw new Error(`Invalid ModuleIdentifierPart: ${value}`)\n }\n default: {\n return result\n }\n }\n}\n\nexport const isModuleResolver = (value?: unknown): value is ModuleResolver => {\n return typeof (value as Partial<ModuleResolver>).resolve === 'function'\n}\n\nexport interface ModuleResolver {\n resolve<T extends ModuleInstance = ModuleInstance>(filter?: ModuleFilter<T>, options?: ModuleFilterOptions<T>): Promisable<T[]>\n resolve<T extends ModuleInstance = ModuleInstance>(nameOrAddress: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promisable<T | undefined>\n resolve<T extends ModuleInstance = ModuleInstance>(\n nameOrAddressOrFilter?: ModuleFilter<T> | ModuleIdentifier,\n options?: ModuleFilterOptions<T>,\n ): Promisable<T | T[] | undefined>\n}\n\nexport interface ModuleResolverInstance extends ModuleResolver {\n addResolver: (resolver: ModuleResolverInstance) => this\n removeResolver: (resolver: ModuleResolverInstance) => this\n}\n\nexport interface ModuleInstance<TParams extends ModuleParams = ModuleParams, TEventData extends ModuleEventData = ModuleEventData>\n extends Module<TParams, TEventData>,\n ModuleResolver,\n ModuleQueryFunctions {\n /* 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*/\n readonly downResolver: Omit<ModuleResolverInstance, 'resolve'>\n\n readonly pipeline?: ModulePipeLine\n\n /* The resolver is a 'up' resolver. It can resolve the parent or any children of the parent*/\n /* This is set by a NodeModule when attaching to the module */\n readonly upResolver: Omit<ModuleResolverInstance, 'resolve'>\n}\n\nexport type InstanceTypeCheck<T extends ModuleInstance = ModuleInstance> = TypeCheck<T>\n\nexport class IsInstanceFactory<T extends ModuleInstance = ModuleInstance> extends IsObjectFactory<T> {}\n\nexport type Direction = 'up' | 'down' | 'all'\nexport type Visibility = 'public' | 'private' | 'all'\n\nexport interface ModuleFilterOptions<T extends ModuleInstance = ModuleInstance> {\n direction?: Direction\n identity?: InstanceTypeCheck<T>\n maxDepth?: number\n visibility?: Visibility\n}\n\nexport interface AddressModuleFilter<T extends ModuleInstance = ModuleInstance> extends ModuleFilterOptions<T> {\n address: Address[]\n}\n\nexport const isAddressModuleFilter = (value: unknown): value is AddressModuleFilter => (value as AddressModuleFilter).address !== undefined\n\nexport interface NameModuleFilter<T extends ModuleInstance = ModuleInstance> extends ModuleFilterOptions<T> {\n name: string[]\n}\n\nexport const isNameModuleFilter = (value: unknown): value is NameModuleFilter => (value as NameModuleFilter).name !== undefined\n\nexport interface QueryModuleFilter<T extends ModuleInstance = ModuleInstance> extends ModuleFilterOptions<T> {\n query: string[][]\n}\n\nexport const isQueryModuleFilter = (value: unknown): value is QueryModuleFilter => (value as QueryModuleFilter).query !== undefined\n\nexport type AnyModuleFilter<T extends ModuleInstance = ModuleInstance> = Partial<AddressModuleFilter<T>> &\n Partial<NameModuleFilter<T>> &\n Partial<QueryModuleFilter<T>>\n\nexport type ModuleFilter<T extends ModuleInstance = ModuleInstance> =\n | ModuleFilterOptions<T>\n | AddressModuleFilter<T>\n | NameModuleFilter<T>\n | QueryModuleFilter<T>\n","import { Module } from '../module'\n\n/**\n * Used to filter duplicates from an array of modules\n * @example: modulesArray.filter(duplicateModules)\n * @param value Current Module\n * @param index Current Module's index\n * @param array Module Array\n * @returns True if the Module's address is the first occurrence of\n * that address in the array, false otherwise\n */\nexport const duplicateModules = (value: Module, index: number, array: Module[]): value is Module => {\n return array.findIndex((v) => v.address === value.address) === index\n}\n","// Inspired by https://stackoverflow.com/a/49079549/2803259\n\nimport { every, isArray, isBoolean, isNull, isNumber, isPlainObject, isString, isUndefined, overSome } from '@xylabs/lodash'\n\nconst JSONPrimitiveChecks = [isUndefined, isNull, isBoolean, isNumber, isString]\nconst JSONComplexChecks = [isPlainObject, isArray]\n\nexport const serializable = (field: unknown, depth?: number): boolean | null => {\n let depthExceeded = false\n const decrementDepth = () => (depth ? depth-- : undefined)\n\n const recursiveSerializable = (field: unknown) => {\n if (depth !== undefined && depth < 1) {\n depthExceeded = true\n return false\n }\n\n // decrement during every recursion\n decrementDepth()\n\n const nestedSerializable = (field: unknown): boolean => overSome(JSONComplexChecks)(field) && every(field as object, recursiveSerializable)\n\n return overSome([...JSONPrimitiveChecks, nestedSerializable])(field)\n }\n\n const valid = recursiveSerializable(field)\n\n return depthExceeded ? null : valid\n}\n\nexport const serializableField = (field: unknown) => {\n return overSome([...JSONPrimitiveChecks, ...JSONComplexChecks])(field)\n}\n","import { isPayloadOfSchemaType, Payload, WithMeta } from '@xyo-network/payload-model'\n\nexport interface StateDictionary {\n [key: string]: string | number | undefined\n}\nexport interface State<T extends StateDictionary = StateDictionary> {\n state: T\n}\n\nexport const ModuleStateSchema = 'network.xyo.module.state' as const\nexport type ModuleStateSchema = typeof ModuleStateSchema\n\nexport type ModuleState<T extends StateDictionary = StateDictionary> = Payload<State<T>, ModuleStateSchema>\n\nexport const isModuleState = <T extends StateDictionary = StateDictionary>(payload?: Payload | null): payload is ModuleState<T> => {\n return isPayloadOfSchemaType<ModuleState<T>>(ModuleStateSchema)(payload)\n}\n\nexport const isModuleStateWithMeta = <T extends StateDictionary = StateDictionary>(payload?: Payload | null): payload is WithMeta<ModuleState<T>> => {\n return isPayloadOfSchemaType<WithMeta<ModuleState<T>>>(ModuleStateSchema)(payload)\n}\n","import { TypeCheck } from '@xylabs/object'\n\nimport { isModuleInstance } from './instance'\nimport { isModule } from './module'\n\nexport const WithFactory = {\n create: <T extends object>(typeCheck: TypeCheck<T>) => {\n return <R>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n module: any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n closure: (module: T) => R,\n ): R | undefined => {\n return typeCheck(module) ? closure(module) : undefined\n }\n },\n}\n\nexport const withModule = WithFactory.create(isModule)\nexport const withModuleInstance = WithFactory.create(isModuleInstance)\n"],"mappings":"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","names":["ModuleConfigSchema","creatableModule","constructor","toCreatableModuleRegistry","dict","Object","entries","reduce","registry","schema","factory","Array","isArray","assignCreatableModuleRegistry","target","sources","map","source","factories","existingFactories","hasLabels","factory","labels","undefined","assertEx","merge","ModuleFactory","configSchemas","creatableModule","defaultLogger","defaultParams","labels","constructor","params","Object","assign","configSchema","withParams","_getRootFunction","funcName","anyThis","__proto__","_noOverride","functionName","thisFunc","rootFunc","assertEx","create","factory","schema","mergedParams","merge","config","_params","Error","assertEx","hasAllLabels","source","required","Object","entries","every","key","value","hasOwnProperty","ModuleFactoryLocator","constructor","_registry","registry","locate","schema","labels","assertEx","tryLocate","configString","labelsString","JSON","stringify","register","mod","configSchemas","map","existingFactories","factory","create","bind","Object","assign","registerMany","additional","entries","factories","filter","hasLabels","find","hasAllLabels","AsObjectFactory","IsObjectFactory","AsObjectFactory","ModuleDescriptionSchema","ModuleDescribeQuerySchema","ModuleDiscoverQuerySchema","ModuleManifestQuerySchema","AddressSchema","AddressPreviousHashSchema","ModuleAddressQuerySchema","ModuleSubscribeQuerySchema","AsObjectFactory","IsObjectFactory","requiredModuleShape","address","config","params","queries","query","queryable","factory","isModuleObject","create","asModuleObject","AsObjectFactory","create","isModuleObject","IsModuleFactory","create","expectedQueries","additionalChecks","obj","config","module","asModuleObject","result","isModuleObject","reduce","prev","query","queries","includes","check","requiredModuleQueries","ModuleDiscoverQuerySchema","factory","IsModuleFactory","isModule","create","isModuleObject","asModule","AsObjectFactory","create","isModule","requiredModuleInstanceFunctions","describe","discover","manifest","moduleAddress","factory","IsObjectFactory","isModuleInstance","create","isModule","asModuleInstance","AsObjectFactory","create","isModuleInstance","IsObjectFactory","ReservedModuleIdentifierCharacters","Set","isReservedModuleIdentifierCharacter","value","length","has","isModuleIdentifierPart","falseAction","result","some","Error","isModuleResolver","resolve","IsInstanceFactory","IsObjectFactory","isAddressModuleFilter","address","undefined","isNameModuleFilter","name","isQueryModuleFilter","query","duplicateModules","value","index","array","findIndex","v","address","every","isArray","isBoolean","isNull","isNumber","isPlainObject","isString","isUndefined","overSome","JSONPrimitiveChecks","isUndefined","isNull","isBoolean","isNumber","isString","JSONComplexChecks","isPlainObject","isArray","serializable","field","depth","depthExceeded","decrementDepth","undefined","recursiveSerializable","nestedSerializable","overSome","every","valid","serializableField","isPayloadOfSchemaType","ModuleStateSchema","isModuleState","payload","isPayloadOfSchemaType","isModuleStateWithMeta","WithFactory","create","typeCheck","module","closure","undefined","withModule","isModule","withModuleInstance","isModuleInstance"]}
1
+ {"version":3,"sources":["../../src/Config.ts","../../src/CreatableModule/CreatableModule.ts","../../src/CreatableModule/CreatableModuleRegistry.ts","../../src/CreatableModule/LabeledCreatableModuleFactory.ts","../../src/CreatableModule/ModuleFactory.ts","../../src/CreatableModule/ModuleFactoryLocator.ts","../../src/Labels/Labels.ts","../../src/instance/asModuleInstance.ts","../../src/instance/isModuleInstance.ts","../../src/module/asModule.ts","../../src/Queries/Describe/Payload.ts","../../src/Queries/Describe/Query.ts","../../src/Queries/Discover.ts","../../src/Queries/Manifest.ts","../../src/Queries/ModuleAddress/Payload.ts","../../src/Queries/ModuleAddress/Query.ts","../../src/Queries/State.ts","../../src/Queries/Subscribe.ts","../../src/module/asModuleObject.ts","../../src/module/isModuleObject.ts","../../src/module/IsModuleFactory.ts","../../src/module/isModule.ts","../../src/instance/Instance.ts","../../src/instance/ObjectFilter.ts","../../src/instance/ModuleFilter.ts","../../src/instance/ModuleIdentifier.ts","../../src/instance/ObjectResolver.ts","../../src/instance/ModuleResolver.ts","../../src/lib/duplicateModules.ts","../../src/lib/serializable.ts","../../src/Payload/ModuleState.ts","../../src/withModule.ts"],"sourcesContent":["import { Address } from '@xylabs/hex'\nimport { EmptyObject, WithAdditional } from '@xylabs/object'\nimport { RetryConfig } from '@xylabs/retry'\nimport { Payload, Schema } from '@xyo-network/payload-model'\n\nimport { ModuleIdentifier, ModuleName } from './instance'\nimport { Labels } from './Labels'\n\nexport type ModuleConfigSchema = 'network.xyo.module.config'\nexport const ModuleConfigSchema: ModuleConfigSchema = 'network.xyo.module.config'\n\nexport type CosigningAddressSet = string[]\nexport type SchemaString = string\nexport type NameOrAddress = Address | ModuleName\n\nexport interface ArchivingModuleConfig {\n readonly archiving?: {\n readonly archivists?: ModuleIdentifier[]\n }\n}\n\nexport type ModuleConfig<TConfig extends EmptyObject | Payload | void = void, TSchema extends Schema | void = void> = Payload<\n WithAdditional<\n {\n /** @field The name/address of the Archivist to use for this module */\n readonly archivist?: ModuleIdentifier\n\n /**\n * @field The labels used for this module. If a label is specified, then the\n * ModuleFactoryLocator will attempt to find a ModuleFactory with the corresponding\n * labels to construct this module.\n */\n readonly labels?: Labels\n\n /** @field Friendly name of module (not collision resistent). Can be used to resolve module when registered/attached to Node. */\n readonly name?: ModuleName\n\n /** @field paging settings for queries */\n readonly paging?: Record<string, { size?: number }>\n\n readonly retry?: RetryConfig\n\n schema: TConfig extends Payload ? TConfig['schema'] : ModuleConfigSchema\n\n /** @field The query schemas and allowed/disallowed addresses which are allowed to issue them against the module. If both allowed and disallowed is specified, then disallowed takes priority. */\n readonly security?: {\n /** @field Will the module process queries that have unsigned BoundWitness in query tuples */\n readonly allowAnonymous?: boolean\n\n /** @field If schema in record, then only these address sets can access query */\n readonly allowed?: Record<SchemaString, (Address | CosigningAddressSet)[]>\n\n /** @field If schema in record, then anyone except these addresses can access query */\n readonly disallowed?: Record<SchemaString, Address[]>\n }\n\n /** @field sign every query */\n readonly sign?: boolean\n\n /** @field Store the queries made to the module in an archivist if possible */\n readonly storeQueries?: boolean\n\n /** @field add a timestamp payload to every query */\n readonly timestamp?: boolean\n } & ArchivingModuleConfig,\n TConfig\n >,\n TSchema\n>\n\nexport type AnyConfigSchema<TConfig extends Omit<ModuleConfig, 'schema'> & { schema: string } = Omit<ModuleConfig, 'schema'> & { schema: string }> =\n ModuleConfig<TConfig, string>\n\nexport type OptionalConfigSchema<TConfig extends AnyConfigSchema<ModuleConfig> = AnyConfigSchema<ModuleConfig>> = Omit<TConfig, 'schema'> & {\n schema?: TConfig['schema']\n}\n\nexport type AnyModuleConfig = AnyConfigSchema<ModuleConfig>\n","import { Logger } from '@xylabs/logger'\nimport { AccountInstance } from '@xyo-network/account-model'\n\nimport { ModuleInstance } from '../instance'\n\nexport type CreatableModuleFactory<T extends ModuleInstance = ModuleInstance> = Omit<Omit<CreatableModule<T>, 'new'>, 'create'> & {\n create<T extends ModuleInstance>(this: CreatableModuleFactory<T>, params?: T['params']): Promise<T>\n}\n\nexport interface CreatableModule<T extends ModuleInstance = ModuleInstance> {\n configSchema: string\n configSchemas: string[]\n defaultLogger?: Logger\n new (privateConstructorKey: string, params: T['params'], account: AccountInstance): T\n _noOverride(functionName: string): void\n create<T extends ModuleInstance>(this: CreatableModule<T>, params?: T['params']): Promise<T>\n factory<T extends ModuleInstance>(this: CreatableModule<T>, params?: T['params']): CreatableModuleFactory<T>\n}\n\n/**\n * Class annotation to be used to decorate Modules which support\n * an asynchronous creation pattern\n * @returns The decorated Module requiring it implement the members\n * of the CreatableModule as statics properties/methods\n */\nexport function creatableModule<TModule extends ModuleInstance = ModuleInstance>() {\n return <U extends CreatableModule<TModule>>(constructor: U) => {\n constructor\n }\n}\n","import { CreatableModuleFactory } from './CreatableModule'\nimport { CreatableModuleDictionary } from './CreatableModuleDictionary'\nimport { LabeledCreatableModuleFactory } from './LabeledCreatableModuleFactory'\n\nexport interface CreatableModuleRegistry {\n [key: string]: (CreatableModuleFactory | LabeledCreatableModuleFactory)[] | undefined\n}\n\nexport const toCreatableModuleRegistry = (dict: CreatableModuleDictionary | CreatableModuleRegistry): CreatableModuleRegistry => {\n // eslint-disable-next-line unicorn/no-array-reduce\n return Object.entries(dict).reduce((registry, [schema, factory]) => {\n registry[schema] = Array.isArray(factory) ? factory : [factory]\n return registry\n }, {} as CreatableModuleRegistry)\n}\n\nexport const assignCreatableModuleRegistry = (\n target: CreatableModuleRegistry = {},\n ...sources: CreatableModuleRegistry[]\n): CreatableModuleRegistry => {\n sources.map((source) =>\n Object.entries(source).map(([schema, factories]) => {\n if (factories) {\n const existingFactories = target[schema]\n target[schema] = existingFactories ? (target[schema] = [...existingFactories, ...factories]) : factories\n }\n }),\n )\n return target\n}\n","import { ModuleInstance } from '../instance'\nimport { WithOptionalLabels } from '../Labels'\nimport { CreatableModuleFactory } from './CreatableModule'\n\nexport type LabeledCreatableModuleFactory<T extends ModuleInstance = ModuleInstance> = CreatableModuleFactory<T> & WithOptionalLabels\n\nexport const hasLabels = (factory: CreatableModuleFactory | LabeledCreatableModuleFactory): factory is LabeledCreatableModuleFactory => {\n return (factory as LabeledCreatableModuleFactory).labels !== undefined\n}\n","import { assertEx } from '@xylabs/assert'\nimport { merge } from '@xylabs/lodash'\nimport { Logger } from '@xylabs/logger'\n\nimport { ModuleInstance } from '../instance'\nimport { Labels, WithOptionalLabels } from '../Labels'\nimport { CreatableModule, CreatableModuleFactory } from './CreatableModule'\n\nexport class ModuleFactory<TModule extends ModuleInstance> implements CreatableModuleFactory<TModule> {\n configSchemas: CreatableModuleFactory<TModule>['configSchemas']\n\n creatableModule: CreatableModule<TModule>\n\n defaultLogger?: Logger | undefined\n\n defaultParams?: Omit<TModule['params'], 'config'> & { config?: Partial<TModule['params']['config']> }\n\n labels?: Labels\n\n constructor(\n creatableModule: CreatableModule<TModule>,\n params?: Omit<TModule['params'], 'config'> & { config?: Partial<TModule['params']['config']> },\n labels: Labels = {},\n ) {\n this.creatableModule = creatableModule\n this.defaultParams = params\n this.configSchemas = creatableModule.configSchemas\n this.labels = Object.assign({}, (creatableModule as WithOptionalLabels).labels ?? {}, labels ?? {})\n }\n\n get configSchema(): string {\n return this.configSchemas[0]\n }\n\n static withParams<T extends ModuleInstance>(\n creatableModule: CreatableModule<T>,\n params?: Omit<T['params'], 'config'> & { config?: T['params']['config'] },\n labels: Labels = {},\n ) {\n return new ModuleFactory(creatableModule, params, labels)\n }\n\n _getRootFunction(funcName: string) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let anyThis = this as any\n while (anyThis.__proto__[funcName]) {\n anyThis = anyThis.__proto__\n }\n return anyThis[funcName]\n }\n\n _noOverride(functionName: string) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const thisFunc = (this as any)[functionName]\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const rootFunc = this._getRootFunction(functionName)\n assertEx(thisFunc === rootFunc, () => `Override not allowed for [${functionName}] - override ${functionName}Handler instead`)\n }\n\n create<T extends ModuleInstance>(this: CreatableModuleFactory<T>, params?: TModule['params'] | undefined): Promise<T> {\n const factory = this as ModuleFactory<T>\n const schema = factory.creatableModule.configSchema\n const mergedParams: TModule['params'] = merge({}, factory.defaultParams, params, {\n config: merge({}, factory.defaultParams?.config, params?.config, { schema }),\n })\n return factory.creatableModule.create<T>(mergedParams)\n }\n\n factory<T extends ModuleInstance>(this: CreatableModule<T>, _params?: T['params'] | undefined): CreatableModuleFactory<T> {\n throw new Error('Method not implemented.')\n }\n}\n","import { assertEx } from '@xylabs/assert'\n\nimport { ModuleInstance } from '../instance'\nimport { hasAllLabels, Labels } from '../Labels'\nimport { CreatableModuleFactory } from './CreatableModule'\nimport { CreatableModuleRegistry } from './CreatableModuleRegistry'\nimport { hasLabels, LabeledCreatableModuleFactory } from './LabeledCreatableModuleFactory'\n\n/**\n * A class which encapsulates the Service Locator Pattern for Module Factories\n */\nexport class ModuleFactoryLocator {\n constructor(protected readonly _registry: CreatableModuleRegistry = {}) {}\n\n /**\n * The current registry for the module factory\n */\n get registry(): Readonly<CreatableModuleRegistry> {\n return this._registry\n }\n\n /**\n * Locates a module factory that matches the supplied schema and labels\n * @param schema The config schema for the module\n * @param labels The labels for the module factory\n * @returns A module factory that matches the supplied schema and labels or throws if one is not found\n */\n locate(schema: string, labels?: Labels): CreatableModuleFactory | LabeledCreatableModuleFactory {\n return assertEx(this.tryLocate(schema, labels), () => {\n const configString = `config schema [${schema}]`\n const labelsString = labels ? ` & labels [${JSON.stringify(labels)}]` : ''\n return `No module factory for the supplied ${configString}${labelsString} registered`\n })\n }\n\n /**\n * Registers a single module factory (with optional tags) with the locator\n * @param additional Additional module factories to register\n */\n register<TModule extends ModuleInstance>(mod: CreatableModuleFactory<TModule>, labels?: Labels): this {\n mod.configSchemas.map((schema) => {\n const existingFactories = this._registry[schema]\n const factory: LabeledCreatableModuleFactory<TModule> = {\n // Destructure instance properties\n ...mod,\n // Copy static methods\n create: mod.create.bind(mod) as LabeledCreatableModuleFactory<TModule>['create'],\n // Merge module & supplied labels\n labels: Object.assign({}, (mod as LabeledCreatableModuleFactory).labels ?? {}, labels ?? {}),\n }\n this._registry[schema] = existingFactories ? [...existingFactories, factory] : [factory]\n })\n return this\n }\n\n /**\n * Registers multiple module factories with the locator\n * @param additional Additional module factories to register\n */\n registerMany(additional: CreatableModuleRegistry): this {\n Object.entries(additional).map(([schema, factories]) => {\n if (factories) {\n const existingFactories = this._registry[schema]\n this._registry[schema] = existingFactories ? [...existingFactories, ...factories] : factories\n }\n })\n return this\n }\n\n /**\n * Tries to locate a module factory that matches the supplied schema and labels\n * @param schema The config schema for the module\n * @param labels The labels for the module factory\n * @returns A module factory that matches the supplied schema and labels or undefined\n */\n tryLocate(schema: string, labels?: Labels): CreatableModuleFactory | LabeledCreatableModuleFactory | undefined {\n // If labels were provided\n return labels ?\n // Find the first factory that has labels and has all the labels provided\n this._registry[schema]?.filter(hasLabels).find((factory) => hasAllLabels(factory?.labels, labels))\n : // Otherwise, return the first factory\n this._registry[schema]?.[0]\n }\n}\n","/**\n * Object used to represent labels identifying a resource.\n */\nexport interface Labels {\n [key: string]: string | undefined\n}\n\n/**\n * Interface for objects that have labels.\n */\nexport interface WithLabels<T extends Labels = Labels> {\n labels: T\n}\n\n/**\n * Interface for objects that have labels.\n */\nexport interface WithOptionalLabels<T extends Labels = Labels> {\n labels?: T\n}\n\n/**\n * Returns true if the source object has all the labels from the required set\n * @param source Source object to check against\n * @param required Set of labels to check for in source\n * @returns True of the source object has all the labels from the required set\n */\nexport const hasAllLabels = (source?: Labels, required?: Labels): boolean => {\n if (!required) return true\n return Object.entries(required).every(([key, value]) => {\n // eslint-disable-next-line no-prototype-builtins\n return source?.hasOwnProperty(key as keyof typeof source) && source?.[key as keyof typeof source] === value\n })\n}\n","import { AsObjectFactory } from '@xylabs/object'\n\nimport { isModuleInstance } from './isModuleInstance'\n\nexport const asModuleInstance = AsObjectFactory.create(isModuleInstance)\n","import { IsObjectFactory, ObjectTypeShape, TypeCheck } from '@xylabs/object'\n\nimport { isModule } from '../module'\nimport { ModuleInstance } from './Instance'\n\nexport const requiredModuleInstanceFunctions: ObjectTypeShape = {\n describe: 'function',\n discover: 'function',\n manifest: 'function',\n moduleAddress: 'function',\n}\n\n//we do not use IsInstanceFactory here to prevent a cycle\nconst factory = new IsObjectFactory<ModuleInstance>()\n\nexport const isModuleInstance: TypeCheck<ModuleInstance> = factory.create(requiredModuleInstanceFunctions, [isModule])\n","import { AsObjectFactory } from '@xylabs/object'\n\nimport { isModule } from './isModule'\n\nexport const asModule = AsObjectFactory.create(isModule)\n","import { Payload } from '@xyo-network/payload-model'\n\nimport { ModuleDescription } from '../../ModuleDescription'\n\nexport const ModuleDescriptionSchema = 'network.xyo.module.description'\nexport type ModuleDescriptionSchema = typeof ModuleDescriptionSchema\n\nexport type ModuleDescriptionPayload = Payload<ModuleDescription, ModuleDescriptionSchema>\n","import { Query } from '@xyo-network/payload-model'\n\nexport type ModuleDescribeQuerySchema = 'network.xyo.query.module.describe'\nexport const ModuleDescribeQuerySchema: ModuleDescribeQuerySchema = 'network.xyo.query.module.describe'\n\nexport type ModuleDescribeQuery = Query<{\n schema: ModuleDescribeQuerySchema\n}>\n","import { Query } from '@xyo-network/payload-model'\n\nexport type ModuleDiscoverQuerySchema = 'network.xyo.query.module.discover'\nexport const ModuleDiscoverQuerySchema: ModuleDiscoverQuerySchema = 'network.xyo.query.module.discover'\n\nexport type ModuleDiscoverQuery = Query<{\n maxDepth?: number\n schema: ModuleDiscoverQuerySchema\n}>\n","import { Query } from '@xyo-network/payload-model'\n\nexport type ModuleManifestQuerySchema = 'network.xyo.query.module.manifest'\nexport const ModuleManifestQuerySchema: ModuleManifestQuerySchema = 'network.xyo.query.module.manifest'\n\nexport type ModuleManifestQuery = Query<{\n maxDepth?: number\n schema: ModuleManifestQuerySchema\n}>\n","import { Address } from '@xylabs/hex'\nimport { AddressSchema } from '@xyo-network/address-payload-plugin'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport const AddressPreviousHashSchema = `${AddressSchema}.hash.previous`\nexport type AddressPreviousHashSchema = typeof AddressPreviousHashSchema\n\nexport type AddressPreviousHashPayload = Payload<{\n address: Address\n previousHash?: string\n schema: AddressPreviousHashSchema\n}>\n","import { Query } from '@xyo-network/payload-model'\n\nexport type ModuleAddressQuerySchema = 'network.xyo.query.module.address'\nexport const ModuleAddressQuerySchema: ModuleAddressQuerySchema = 'network.xyo.query.module.address'\n\nexport type ModuleAddressQuery = Query<{\n schema: ModuleAddressQuerySchema\n}>\n","import { Query } from '@xyo-network/payload-model'\n\nexport const ModuleStateQuerySchema = 'network.xyo.query.module.state'\nexport type ModuleStateQuerySchema = typeof ModuleStateQuerySchema\n\nexport type ModuleStateQuery = Query<void, ModuleStateQuerySchema>\n","import { Address } from '@xylabs/hex'\nimport { Query } from '@xyo-network/payload-model'\n\nexport type ModuleSubscribeQuerySchema = 'network.xyo.query.module.subscribe'\nexport const ModuleSubscribeQuerySchema: ModuleSubscribeQuerySchema = 'network.xyo.query.module.subscribe'\n\nexport interface ModuleSubscribeFilter {\n /** @field if specified, at least one of the schemas must be present in the boundwtness to generate a notification */\n schema?: string[]\n}\n\n//requests notification when a boundwitness is added to the modules chain that meets the filter criteria\nexport type ModuleSubscribeQuery = Query<{\n /** @field The address that will receive notifications */\n address: Address\n /** @field A subscribe with a null for filter is an unsubscribe */\n filter?: ModuleSubscribeFilter | null\n /** @field The maximum events queued per send [may increase frequency] */\n maxQueue?: number\n schema: ModuleSubscribeQuerySchema\n}>\n","import { AsObjectFactory } from '@xylabs/object'\n\nimport { isModuleObject } from './isModuleObject'\n\nexport const asModuleObject = AsObjectFactory.create(isModuleObject)\n","import { IsObjectFactory, ObjectTypeShape } from '@xylabs/object'\n\nimport { Module } from './Module'\n\nexport const requiredModuleShape: ObjectTypeShape = {\n address: 'string',\n config: 'object',\n params: 'object',\n queries: 'array',\n query: 'function',\n queryable: 'function',\n}\n\nconst factory = new IsObjectFactory<Module>()\n\nexport const isModuleObject = factory.create(requiredModuleShape)\n","import { AnyObject, EmptyObject, TypeCheck } from '@xylabs/object'\n\nimport { asModuleObject } from './asModuleObject'\nimport { isModuleObject } from './isModuleObject'\nimport { Module } from './Module'\n\nexport type ModuleTypeCheck<T extends Module = Module> = TypeCheck<T>\n\nexport class IsModuleFactory<T extends Module = Module> {\n create(expectedQueries?: string[], additionalChecks?: TypeCheck<AnyObject | EmptyObject>[]): ModuleTypeCheck<T> {\n return (obj: unknown, config): obj is T => {\n const module = asModuleObject(obj)\n const result =\n isModuleObject(module, config) &&\n (expectedQueries?.reduce((prev, query) => prev && module.queries.includes(query), true) ?? true) &&\n //perform additional checks\n (additionalChecks?.reduce((prev, check) => prev && check(obj, config), true) ?? true)\n return result\n }\n }\n}\n","import { TypeCheck } from '@xylabs/object'\n\nimport { ModuleDiscoverQuerySchema } from '../Queries'\nimport { IsModuleFactory } from './IsModuleFactory'\nimport { isModuleObject } from './isModuleObject'\nimport { Module } from './Module'\n\nexport const requiredModuleQueries: string[] = [\n /* We need to update this once live module conform */\n //ModuleDescribeQuerySchema,\n //ModuleAddressQuerySchema,\n ModuleDiscoverQuerySchema,\n //ModuleManifestQuerySchema,\n //ModuleSubscribeQuerySchema,\n]\n\n//we do not use IsInstanceFactory here to prevent a cycle\nconst factory = new IsModuleFactory<Module>()\n\nexport const isModule: TypeCheck<Module> = factory.create(requiredModuleQueries, [isModuleObject])\n","import { IsObjectFactory, TypeCheck } from '@xylabs/object'\n\nimport { ModuleEventData } from '../EventsModels'\nimport { Module, ModuleQueryFunctions } from '../module'\nimport { ModuleParams } from '../ModuleParams'\nimport { ObjectResolver, ObjectResolverInstance } from './ObjectResolver'\n\nexport type ModulePipeLine = Lowercase<'one-to-one' | 'one-to-many' | 'many-to-one' | 'many-to-many'>\n\nexport interface ModuleInstance<TParams extends ModuleParams = ModuleParams, TEventData extends ModuleEventData = ModuleEventData>\n extends Module<TParams, TEventData>,\n ObjectResolver<ModuleInstance>,\n ModuleQueryFunctions {\n /* 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*/\n readonly downResolver: Omit<ObjectResolverInstance<ModuleInstance>, 'resolve'>\n\n readonly pipeline?: ModulePipeLine\n\n /* The resolver is a 'up' resolver. It can resolve the parent or any children of the parent*/\n /* This is set by a NodeModule when attaching to the module */\n readonly upResolver: Omit<ObjectResolverInstance<ModuleInstance>, 'resolve'>\n}\n\nexport type InstanceTypeCheck<T extends ModuleInstance = ModuleInstance> = TypeCheck<T>\n\nexport class IsInstanceFactory<T extends ModuleInstance = ModuleInstance> extends IsObjectFactory<T> {}\n","import { Address } from '@xylabs/hex'\nimport { AnyObject, EmptyObject, TypeCheck } from '@xylabs/object'\n\nimport { ModuleName } from './ModuleIdentifier'\n\nexport type Direction = 'up' | 'down' | 'all'\nexport type Visibility = 'public' | 'private' | 'all'\n\nexport interface ObjectFilterOptions<T extends EmptyObject = AnyObject> {\n direction?: Direction\n identity?: TypeCheck<T>\n maxDepth?: number\n visibility?: Visibility\n}\n\nexport interface AddressObjectFilter<T extends EmptyObject = AnyObject> extends ObjectFilterOptions<T> {\n address: Address[]\n}\n\nexport const isAddressObjectFilter = <T extends EmptyObject = AnyObject>(value: unknown): value is AddressObjectFilter<T> =>\n (value as AddressObjectFilter<T>).address !== undefined\n\nexport interface NameObjectFilter<T extends EmptyObject = AnyObject> extends ObjectFilterOptions<T> {\n name: ModuleName[]\n}\n\nexport const isNameObjectFilter = <T extends EmptyObject = AnyObject>(value: unknown): value is NameObjectFilter<T> =>\n (value as NameObjectFilter<T>).name !== undefined\n\nexport interface QueryObjectFilter<T extends EmptyObject = AnyObject> extends ObjectFilterOptions<T> {\n query: string[][]\n}\n\nexport const isQueryObjectFilter = <T extends EmptyObject = AnyObject>(value: unknown): value is QueryObjectFilter<T> =>\n (value as QueryObjectFilter<T>).query !== undefined\n\nexport type AnyObjectFilter<T extends EmptyObject = AnyObject> = Partial<AddressObjectFilter<T>> &\n Partial<NameObjectFilter<T>> &\n Partial<QueryObjectFilter<T>>\n\nexport type ObjectFilter<T extends EmptyObject> = ObjectFilterOptions<T> | AddressObjectFilter<T> | NameObjectFilter<T> | QueryObjectFilter<T>\n","import { ModuleInstance } from './Instance'\nimport {\n AddressObjectFilter,\n AnyObjectFilter,\n isAddressObjectFilter,\n isNameObjectFilter,\n isQueryObjectFilter,\n NameObjectFilter,\n ObjectFilter,\n ObjectFilterOptions,\n QueryObjectFilter,\n} from './ObjectFilter'\n\nexport interface ModuleFilterOptions<T extends ModuleInstance = ModuleInstance> extends ObjectFilterOptions<T> {}\n\nexport const isAddressModuleFilter = isAddressObjectFilter<ModuleInstance>\n\nexport const isNameModuleFilter = isNameObjectFilter<ModuleInstance>\n\nexport const isQueryModuleFilter = isQueryObjectFilter<ModuleInstance>\n\nexport type AnyModuleFilter<T extends ModuleInstance = ModuleInstance> = AnyObjectFilter<T>\n\nexport type AddressModuleFilter<T extends ModuleInstance = ModuleInstance> = AddressObjectFilter<T>\n\nexport type NameModuleFilter<T extends ModuleInstance = ModuleInstance> = NameObjectFilter<T>\n\nexport type QueryModuleFilter<T extends ModuleInstance = ModuleInstance> = QueryObjectFilter<T>\n\nexport type ModuleFilter<T extends ModuleInstance = ModuleInstance> = ObjectFilter<T>\n","import { Address, isAddress } from '@xylabs/hex'\n\nexport const DisallowedModuleIdentifierCharacters = {\n ' ': true,\n '!': true,\n '\"': true,\n '#': true,\n $: true,\n '%': true,\n '&': true,\n \"'\": true,\n '(': true,\n ')': true,\n '*': true,\n ',': true,\n '.': true,\n '/': true,\n ':': true,\n ';': true,\n '<': true,\n '=': true,\n '>': true,\n '?': true,\n '@': true,\n '[': true,\n ']': true,\n '^': true,\n _: true,\n '{': true,\n '|': true,\n '}': true,\n '~': true,\n}\nexport type ReservedModuleIdentifierCharacter = keyof typeof DisallowedModuleIdentifierCharacters\nexport const ReservedModuleIdentifierCharacters = new Set<ReservedModuleIdentifierCharacter>(\n Object.keys(DisallowedModuleIdentifierCharacters) as ReservedModuleIdentifierCharacter[],\n)\n\n//using Exclude to make this type not allowed to take a naked string\nexport type ModuleName = Exclude<string, 'reserved-module-name-56487634'>\n\nexport type ModuleIdentifier =\n | ColonPair<ModuleIdentifierPart>\n | ColonPair<ColonPair<ModuleIdentifierPart>>\n | ColonPair<ColonPair<ColonPair<ModuleIdentifierPart>>>\n | ColonPair<ColonPair<ColonPair<ColonPair<ModuleIdentifierPart>>>>\n | ColonPair<ColonPair<ColonPair<ColonPair<ColonPair<ModuleIdentifierPart>>>>>\n | ColonPair<ColonPair<ColonPair<ColonPair<ColonPair<ColonPair<ModuleIdentifierPart>>>>>>\n | ColonPair<ColonPair<ColonPair<ColonPair<ColonPair<ColonPair<ColonPair<ModuleIdentifierPart>>>>>>>\n\nexport type ColonPair<T extends string> = `${T}:${T}` | T\n\nexport type ModuleIdentifierPart = Address | ModuleName\n\nexport const isModuleName = (value: unknown): value is ModuleName => {\n return typeof value === 'string' && !isAddress(value) && !includesReservedModuleIdentifierCharacter(value)\n}\n\nexport const includesReservedModuleIdentifierCharacter = (value: unknown): boolean => {\n return typeof value === 'string' && [...value].some((char) => ReservedModuleIdentifierCharacters.has(char as ReservedModuleIdentifierCharacter))\n}\n\nexport const isModuleIdentifierPart = (value: unknown): value is ModuleIdentifierPart => {\n return isModuleName(value) || isAddress(value)\n}\n","import { AnyObject, EmptyObject } from '@xylabs/object'\nimport { Promisable } from '@xylabs/promise'\n\nimport { ModuleIdentifier } from './ModuleIdentifier'\nimport { ObjectFilter, ObjectFilterOptions } from './ObjectFilter'\n\nexport const isObjectResolver = <T extends EmptyObject = AnyObject>(value?: unknown): value is ObjectResolver<T> => {\n return typeof (value as Partial<ObjectResolver<T>>).resolve === 'function'\n}\n\nexport interface ObjectResolver<TResult extends EmptyObject> {\n resolve<T extends TResult = TResult>(filter?: ObjectFilter<T>, options?: ObjectFilterOptions<T>): Promisable<T[]>\n resolve<T extends TResult = TResult>(nameOrAddress: ModuleIdentifier, options?: ObjectFilterOptions<T>): Promisable<T | undefined>\n resolve<T extends TResult = TResult>(\n nameOrAddressOrFilter?: ObjectFilter<T> | ModuleIdentifier,\n options?: ObjectFilterOptions<T>,\n ): Promisable<T | T[] | undefined>\n}\n\nexport interface ObjectResolverInstance<TResult extends EmptyObject> extends ObjectResolver<TResult> {\n addResolver: (resolver: ObjectResolverInstance<TResult>) => this\n removeResolver: (resolver: ObjectResolverInstance<TResult>) => this\n}\n","import { ModuleInstance } from './Instance'\nimport { isObjectResolver, ObjectResolver } from './ObjectResolver'\n\nexport const isModuleResolver = isObjectResolver<ModuleInstance>\n\nexport interface ModuleResolver<TResult extends ModuleInstance = ModuleInstance> extends ObjectResolver<TResult> {}\n\nexport interface ModuleResolverInstance<TResult extends ModuleInstance = ModuleInstance> extends ModuleResolver<TResult> {\n addResolver: (resolver: ModuleResolverInstance<TResult>) => this\n removeResolver: (resolver: ModuleResolverInstance<TResult>) => this\n}\n","import { Module } from '../module'\n\n/**\n * Used to filter duplicates from an array of modules\n * @example: modulesArray.filter(duplicateModules)\n * @param value Current Module\n * @param index Current Module's index\n * @param array Module Array\n * @returns True if the Module's address is the first occurrence of\n * that address in the array, false otherwise\n */\nexport const duplicateModules = (value: Module, index: number, array: Module[]): value is Module => {\n return array.findIndex((v) => v.address === value.address) === index\n}\n","// Inspired by https://stackoverflow.com/a/49079549/2803259\n\nimport { every, isArray, isBoolean, isNull, isNumber, isPlainObject, isString, isUndefined, overSome } from '@xylabs/lodash'\n\nconst JSONPrimitiveChecks = [isUndefined, isNull, isBoolean, isNumber, isString]\nconst JSONComplexChecks = [isPlainObject, isArray]\n\nexport const serializable = (field: unknown, depth?: number): boolean | null => {\n let depthExceeded = false\n const decrementDepth = () => (depth ? depth-- : undefined)\n\n const recursiveSerializable = (field: unknown) => {\n if (depth !== undefined && depth < 1) {\n depthExceeded = true\n return false\n }\n\n // decrement during every recursion\n decrementDepth()\n\n const nestedSerializable = (field: unknown): boolean => overSome(JSONComplexChecks)(field) && every(field as object, recursiveSerializable)\n\n return overSome([...JSONPrimitiveChecks, nestedSerializable])(field)\n }\n\n const valid = recursiveSerializable(field)\n\n return depthExceeded ? null : valid\n}\n\nexport const serializableField = (field: unknown) => {\n return overSome([...JSONPrimitiveChecks, ...JSONComplexChecks])(field)\n}\n","import { isPayloadOfSchemaType, Payload, WithMeta } from '@xyo-network/payload-model'\n\nexport interface StateDictionary {\n [key: string]: string | number | undefined\n}\nexport interface State<T extends StateDictionary = StateDictionary> {\n state: T\n}\n\nexport const ModuleStateSchema = 'network.xyo.module.state' as const\nexport type ModuleStateSchema = typeof ModuleStateSchema\n\nexport type ModuleState<T extends StateDictionary = StateDictionary> = Payload<State<T>, ModuleStateSchema>\n\nexport const isModuleState = <T extends StateDictionary = StateDictionary>(payload?: Payload | null): payload is ModuleState<T> => {\n return isPayloadOfSchemaType<ModuleState<T>>(ModuleStateSchema)(payload)\n}\n\nexport const isModuleStateWithMeta = <T extends StateDictionary = StateDictionary>(payload?: Payload | null): payload is WithMeta<ModuleState<T>> => {\n return isPayloadOfSchemaType<WithMeta<ModuleState<T>>>(ModuleStateSchema)(payload)\n}\n","import { TypeCheck } from '@xylabs/object'\n\nimport { isModuleInstance } from './instance'\nimport { isModule } from './module'\n\nexport const WithFactory = {\n create: <T extends object>(typeCheck: TypeCheck<T>) => {\n return <R>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n module: any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n closure: (module: T) => R,\n ): R | undefined => {\n return typeCheck(module) ? closure(module) : undefined\n }\n },\n}\n\nexport const withModule = WithFactory.create(isModule)\nexport const withModuleInstance = WithFactory.create(isModuleInstance)\n"],"mappings":"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","names":["ModuleConfigSchema","creatableModule","constructor","toCreatableModuleRegistry","dict","Object","entries","reduce","registry","schema","factory","Array","isArray","assignCreatableModuleRegistry","target","sources","map","source","factories","existingFactories","hasLabels","factory","labels","undefined","assertEx","merge","ModuleFactory","configSchemas","creatableModule","defaultLogger","defaultParams","labels","constructor","params","Object","assign","configSchema","withParams","_getRootFunction","funcName","anyThis","__proto__","_noOverride","functionName","thisFunc","rootFunc","assertEx","create","factory","schema","mergedParams","merge","config","_params","Error","assertEx","hasAllLabels","source","required","Object","entries","every","key","value","hasOwnProperty","ModuleFactoryLocator","constructor","_registry","registry","locate","schema","labels","assertEx","tryLocate","configString","labelsString","JSON","stringify","register","mod","configSchemas","map","existingFactories","factory","create","bind","Object","assign","registerMany","additional","entries","factories","filter","hasLabels","find","hasAllLabels","AsObjectFactory","IsObjectFactory","AsObjectFactory","ModuleDescriptionSchema","ModuleDescribeQuerySchema","ModuleDiscoverQuerySchema","ModuleManifestQuerySchema","AddressSchema","AddressPreviousHashSchema","ModuleAddressQuerySchema","ModuleStateQuerySchema","ModuleSubscribeQuerySchema","AsObjectFactory","IsObjectFactory","requiredModuleShape","address","config","params","queries","query","queryable","factory","isModuleObject","create","asModuleObject","AsObjectFactory","create","isModuleObject","IsModuleFactory","create","expectedQueries","additionalChecks","obj","config","module","asModuleObject","result","isModuleObject","reduce","prev","query","queries","includes","check","requiredModuleQueries","ModuleDiscoverQuerySchema","factory","IsModuleFactory","isModule","create","isModuleObject","asModule","AsObjectFactory","create","isModule","requiredModuleInstanceFunctions","describe","discover","manifest","moduleAddress","factory","IsObjectFactory","isModuleInstance","create","isModule","asModuleInstance","AsObjectFactory","create","isModuleInstance","IsObjectFactory","IsInstanceFactory","IsObjectFactory","isAddressObjectFilter","value","address","undefined","isNameObjectFilter","name","isQueryObjectFilter","query","isAddressModuleFilter","isAddressObjectFilter","isNameModuleFilter","isNameObjectFilter","isQueryModuleFilter","isQueryObjectFilter","isAddress","DisallowedModuleIdentifierCharacters","$","_","ReservedModuleIdentifierCharacters","Set","Object","keys","isModuleName","value","isAddress","includesReservedModuleIdentifierCharacter","some","char","has","isModuleIdentifierPart","isObjectResolver","value","resolve","isModuleResolver","isObjectResolver","duplicateModules","value","index","array","findIndex","v","address","every","isArray","isBoolean","isNull","isNumber","isPlainObject","isString","isUndefined","overSome","JSONPrimitiveChecks","isUndefined","isNull","isBoolean","isNumber","isString","JSONComplexChecks","isPlainObject","isArray","serializable","field","depth","depthExceeded","decrementDepth","undefined","recursiveSerializable","nestedSerializable","overSome","every","valid","serializableField","isPayloadOfSchemaType","ModuleStateSchema","isModuleState","payload","isPayloadOfSchemaType","isModuleStateWithMeta","WithFactory","create","typeCheck","module","closure","undefined","withModule","isModule","withModuleInstance","isModuleInstance"]}
@@ -0,0 +1,15 @@
1
+ import { IsObjectFactory, TypeCheck } from '@xylabs/object';
2
+ import { ModuleEventData } from '../EventsModels';
3
+ import { Module, ModuleQueryFunctions } from '../module';
4
+ import { ModuleParams } from '../ModuleParams';
5
+ import { ObjectResolver, ObjectResolverInstance } from './ObjectResolver';
6
+ export type ModulePipeLine = Lowercase<'one-to-one' | 'one-to-many' | 'many-to-one' | 'many-to-many'>;
7
+ export interface ModuleInstance<TParams extends ModuleParams = ModuleParams, TEventData extends ModuleEventData = ModuleEventData> extends Module<TParams, TEventData>, ObjectResolver<ModuleInstance>, ModuleQueryFunctions {
8
+ readonly downResolver: Omit<ObjectResolverInstance<ModuleInstance>, 'resolve'>;
9
+ readonly pipeline?: ModulePipeLine;
10
+ readonly upResolver: Omit<ObjectResolverInstance<ModuleInstance>, 'resolve'>;
11
+ }
12
+ export type InstanceTypeCheck<T extends ModuleInstance = ModuleInstance> = TypeCheck<T>;
13
+ export declare class IsInstanceFactory<T extends ModuleInstance = ModuleInstance> extends IsObjectFactory<T> {
14
+ }
15
+ //# sourceMappingURL=Instance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Instance.d.ts","sourceRoot":"","sources":["../../../src/instance/Instance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE3D,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AAEzE,MAAM,MAAM,cAAc,GAAG,SAAS,CAAC,YAAY,GAAG,aAAa,GAAG,aAAa,GAAG,cAAc,CAAC,CAAA;AAErG,MAAM,WAAW,cAAc,CAAC,OAAO,SAAS,YAAY,GAAG,YAAY,EAAE,UAAU,SAAS,eAAe,GAAG,eAAe,CAC/H,SAAQ,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,EACjC,cAAc,CAAC,cAAc,CAAC,EAC9B,oBAAoB;IAEtB,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,sBAAsB,CAAC,cAAc,CAAC,EAAE,SAAS,CAAC,CAAA;IAE9E,QAAQ,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAA;IAIlC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,sBAAsB,CAAC,cAAc,CAAC,EAAE,SAAS,CAAC,CAAA;CAC7E;AAED,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,IAAI,SAAS,CAAC,CAAC,CAAC,CAAA;AAEvF,qBAAa,iBAAiB,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,CAAE,SAAQ,eAAe,CAAC,CAAC,CAAC;CAAG"}
@@ -0,0 +1,15 @@
1
+ import { IsObjectFactory, TypeCheck } from '@xylabs/object';
2
+ import { ModuleEventData } from '../EventsModels';
3
+ import { Module, ModuleQueryFunctions } from '../module';
4
+ import { ModuleParams } from '../ModuleParams';
5
+ import { ObjectResolver, ObjectResolverInstance } from './ObjectResolver';
6
+ export type ModulePipeLine = Lowercase<'one-to-one' | 'one-to-many' | 'many-to-one' | 'many-to-many'>;
7
+ export interface ModuleInstance<TParams extends ModuleParams = ModuleParams, TEventData extends ModuleEventData = ModuleEventData> extends Module<TParams, TEventData>, ObjectResolver<ModuleInstance>, ModuleQueryFunctions {
8
+ readonly downResolver: Omit<ObjectResolverInstance<ModuleInstance>, 'resolve'>;
9
+ readonly pipeline?: ModulePipeLine;
10
+ readonly upResolver: Omit<ObjectResolverInstance<ModuleInstance>, 'resolve'>;
11
+ }
12
+ export type InstanceTypeCheck<T extends ModuleInstance = ModuleInstance> = TypeCheck<T>;
13
+ export declare class IsInstanceFactory<T extends ModuleInstance = ModuleInstance> extends IsObjectFactory<T> {
14
+ }
15
+ //# sourceMappingURL=Instance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Instance.d.ts","sourceRoot":"","sources":["../../../src/instance/Instance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE3D,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AAEzE,MAAM,MAAM,cAAc,GAAG,SAAS,CAAC,YAAY,GAAG,aAAa,GAAG,aAAa,GAAG,cAAc,CAAC,CAAA;AAErG,MAAM,WAAW,cAAc,CAAC,OAAO,SAAS,YAAY,GAAG,YAAY,EAAE,UAAU,SAAS,eAAe,GAAG,eAAe,CAC/H,SAAQ,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,EACjC,cAAc,CAAC,cAAc,CAAC,EAC9B,oBAAoB;IAEtB,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,sBAAsB,CAAC,cAAc,CAAC,EAAE,SAAS,CAAC,CAAA;IAE9E,QAAQ,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAA;IAIlC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,sBAAsB,CAAC,cAAc,CAAC,EAAE,SAAS,CAAC,CAAA;CAC7E;AAED,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,IAAI,SAAS,CAAC,CAAC,CAAC,CAAA;AAEvF,qBAAa,iBAAiB,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,CAAE,SAAQ,eAAe,CAAC,CAAC,CAAC;CAAG"}
@@ -0,0 +1,15 @@
1
+ import { IsObjectFactory, TypeCheck } from '@xylabs/object';
2
+ import { ModuleEventData } from '../EventsModels';
3
+ import { Module, ModuleQueryFunctions } from '../module';
4
+ import { ModuleParams } from '../ModuleParams';
5
+ import { ObjectResolver, ObjectResolverInstance } from './ObjectResolver';
6
+ export type ModulePipeLine = Lowercase<'one-to-one' | 'one-to-many' | 'many-to-one' | 'many-to-many'>;
7
+ export interface ModuleInstance<TParams extends ModuleParams = ModuleParams, TEventData extends ModuleEventData = ModuleEventData> extends Module<TParams, TEventData>, ObjectResolver<ModuleInstance>, ModuleQueryFunctions {
8
+ readonly downResolver: Omit<ObjectResolverInstance<ModuleInstance>, 'resolve'>;
9
+ readonly pipeline?: ModulePipeLine;
10
+ readonly upResolver: Omit<ObjectResolverInstance<ModuleInstance>, 'resolve'>;
11
+ }
12
+ export type InstanceTypeCheck<T extends ModuleInstance = ModuleInstance> = TypeCheck<T>;
13
+ export declare class IsInstanceFactory<T extends ModuleInstance = ModuleInstance> extends IsObjectFactory<T> {
14
+ }
15
+ //# sourceMappingURL=Instance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Instance.d.ts","sourceRoot":"","sources":["../../../src/instance/Instance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE3D,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AAEzE,MAAM,MAAM,cAAc,GAAG,SAAS,CAAC,YAAY,GAAG,aAAa,GAAG,aAAa,GAAG,cAAc,CAAC,CAAA;AAErG,MAAM,WAAW,cAAc,CAAC,OAAO,SAAS,YAAY,GAAG,YAAY,EAAE,UAAU,SAAS,eAAe,GAAG,eAAe,CAC/H,SAAQ,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,EACjC,cAAc,CAAC,cAAc,CAAC,EAC9B,oBAAoB;IAEtB,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,sBAAsB,CAAC,cAAc,CAAC,EAAE,SAAS,CAAC,CAAA;IAE9E,QAAQ,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAA;IAIlC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,sBAAsB,CAAC,cAAc,CAAC,EAAE,SAAS,CAAC,CAAA;CAC7E;AAED,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,IAAI,SAAS,CAAC,CAAC,CAAC,CAAA;AAEvF,qBAAa,iBAAiB,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,CAAE,SAAQ,eAAe,CAAC,CAAC,CAAC;CAAG"}
@@ -1,47 +1,8 @@
1
- import { Address } from '@xylabs/hex';
2
- import { IsObjectFactory, TypeCheck } from '@xylabs/object';
3
- import { Promisable } from '@xylabs/promise';
4
- import { ModuleEventData } from '../EventsModels';
5
- import { Module, ModuleQueryFunctions } from '../module';
6
- import { ModuleParams } from '../ModuleParams';
7
- export type ModulePipeLine = Lowercase<'one-to-one' | 'one-to-many' | 'many-to-one' | 'many-to-many'>;
8
- export type ModuleName = string;
9
- export type ModuleIdentifier = Address | ModuleName;
10
- export type ModuleIdentifierPart = Lowercase<string>;
11
- export type ReservedModuleIdentifierCharacter = ':';
12
- export declare const ReservedModuleIdentifierCharacters: Set<":">;
13
- export declare const isReservedModuleIdentifierCharacter: (value: unknown) => value is ":";
14
- export declare const isModuleIdentifierPart: (value: unknown, falseAction?: 'throw' | 'none') => value is Lowercase<string>;
15
- export declare const isModuleResolver: (value?: unknown) => value is ModuleResolver;
16
- export interface ModuleResolver {
17
- resolve<T extends ModuleInstance = ModuleInstance>(filter?: ModuleFilter<T>, options?: ModuleFilterOptions<T>): Promisable<T[]>;
18
- resolve<T extends ModuleInstance = ModuleInstance>(nameOrAddress: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promisable<T | undefined>;
19
- resolve<T extends ModuleInstance = ModuleInstance>(nameOrAddressOrFilter?: ModuleFilter<T> | ModuleIdentifier, options?: ModuleFilterOptions<T>): Promisable<T | T[] | undefined>;
1
+ import { ModuleInstance } from './Instance';
2
+ import { AddressObjectFilter, AnyObjectFilter, NameObjectFilter, ObjectFilter, ObjectFilterOptions, QueryObjectFilter } from './ObjectFilter';
3
+ export interface ModuleFilterOptions<T extends ModuleInstance = ModuleInstance> extends ObjectFilterOptions<T> {
20
4
  }
21
- export interface ModuleResolverInstance extends ModuleResolver {
22
- addResolver: (resolver: ModuleResolverInstance) => this;
23
- removeResolver: (resolver: ModuleResolverInstance) => this;
24
- }
25
- export interface ModuleInstance<TParams extends ModuleParams = ModuleParams, TEventData extends ModuleEventData = ModuleEventData> extends Module<TParams, TEventData>, ModuleResolver, ModuleQueryFunctions {
26
- readonly downResolver: Omit<ModuleResolverInstance, 'resolve'>;
27
- readonly pipeline?: ModulePipeLine;
28
- readonly upResolver: Omit<ModuleResolverInstance, 'resolve'>;
29
- }
30
- export type InstanceTypeCheck<T extends ModuleInstance = ModuleInstance> = TypeCheck<T>;
31
- export declare class IsInstanceFactory<T extends ModuleInstance = ModuleInstance> extends IsObjectFactory<T> {
32
- }
33
- export type Direction = 'up' | 'down' | 'all';
34
- export type Visibility = 'public' | 'private' | 'all';
35
- export interface ModuleFilterOptions<T extends ModuleInstance = ModuleInstance> {
36
- direction?: Direction;
37
- identity?: InstanceTypeCheck<T>;
38
- maxDepth?: number;
39
- visibility?: Visibility;
40
- }
41
- export interface AddressModuleFilter<T extends ModuleInstance = ModuleInstance> extends ModuleFilterOptions<T> {
42
- address: Address[];
43
- }
44
- export declare const isAddressModuleFilter: (value: unknown) => value is AddressModuleFilter<ModuleInstance<import("@xylabs/object").BaseParamsFields & {
5
+ export declare const isAddressModuleFilter: (value: unknown) => value is AddressObjectFilter<ModuleInstance<import("@xylabs/object").BaseParamsFields & {
45
6
  account?: import("@xyo-network/account-model").AccountInstance | "random" | undefined;
46
7
  config: import("@xyo-network/payload-model").SchemaFields & object & Omit<{
47
8
  readonly archivist?: string | undefined;
@@ -81,11 +42,8 @@ export declare const isAddressModuleFilter: (value: unknown) => value is Address
81
42
  schema: string;
82
43
  };
83
44
  ephemeralQueryAccountEnabled?: boolean | undefined;
84
- }, ModuleEventData<object>>>;
85
- export interface NameModuleFilter<T extends ModuleInstance = ModuleInstance> extends ModuleFilterOptions<T> {
86
- name: string[];
87
- }
88
- export declare const isNameModuleFilter: (value: unknown) => value is NameModuleFilter<ModuleInstance<import("@xylabs/object").BaseParamsFields & {
45
+ }, import("..").ModuleEventData<object>>>;
46
+ export declare const isNameModuleFilter: (value: unknown) => value is NameObjectFilter<ModuleInstance<import("@xylabs/object").BaseParamsFields & {
89
47
  account?: import("@xyo-network/account-model").AccountInstance | "random" | undefined;
90
48
  config: import("@xyo-network/payload-model").SchemaFields & object & Omit<{
91
49
  readonly archivist?: string | undefined;
@@ -125,11 +83,8 @@ export declare const isNameModuleFilter: (value: unknown) => value is NameModule
125
83
  schema: string;
126
84
  };
127
85
  ephemeralQueryAccountEnabled?: boolean | undefined;
128
- }, ModuleEventData<object>>>;
129
- export interface QueryModuleFilter<T extends ModuleInstance = ModuleInstance> extends ModuleFilterOptions<T> {
130
- query: string[][];
131
- }
132
- export declare const isQueryModuleFilter: (value: unknown) => value is QueryModuleFilter<ModuleInstance<import("@xylabs/object").BaseParamsFields & {
86
+ }, import("..").ModuleEventData<object>>>;
87
+ export declare const isQueryModuleFilter: (value: unknown) => value is QueryObjectFilter<ModuleInstance<import("@xylabs/object").BaseParamsFields & {
133
88
  account?: import("@xyo-network/account-model").AccountInstance | "random" | undefined;
134
89
  config: import("@xyo-network/payload-model").SchemaFields & object & Omit<{
135
90
  readonly archivist?: string | undefined;
@@ -169,7 +124,10 @@ export declare const isQueryModuleFilter: (value: unknown) => value is QueryModu
169
124
  schema: string;
170
125
  };
171
126
  ephemeralQueryAccountEnabled?: boolean | undefined;
172
- }, ModuleEventData<object>>>;
173
- export type AnyModuleFilter<T extends ModuleInstance = ModuleInstance> = Partial<AddressModuleFilter<T>> & Partial<NameModuleFilter<T>> & Partial<QueryModuleFilter<T>>;
174
- export type ModuleFilter<T extends ModuleInstance = ModuleInstance> = ModuleFilterOptions<T> | AddressModuleFilter<T> | NameModuleFilter<T> | QueryModuleFilter<T>;
175
- //# sourceMappingURL=ModuleInstance.d.ts.map
127
+ }, import("..").ModuleEventData<object>>>;
128
+ export type AnyModuleFilter<T extends ModuleInstance = ModuleInstance> = AnyObjectFilter<T>;
129
+ export type AddressModuleFilter<T extends ModuleInstance = ModuleInstance> = AddressObjectFilter<T>;
130
+ export type NameModuleFilter<T extends ModuleInstance = ModuleInstance> = NameObjectFilter<T>;
131
+ export type QueryModuleFilter<T extends ModuleInstance = ModuleInstance> = QueryObjectFilter<T>;
132
+ export type ModuleFilter<T extends ModuleInstance = ModuleInstance> = ObjectFilter<T>;
133
+ //# sourceMappingURL=ModuleFilter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModuleFilter.d.ts","sourceRoot":"","sources":["../../../src/instance/ModuleFilter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,EACL,mBAAmB,EACnB,eAAe,EAIf,gBAAgB,EAChB,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,gBAAgB,CAAA;AAEvB,MAAM,WAAW,mBAAmB,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,CAAE,SAAQ,mBAAmB,CAAC,CAAC,CAAC;CAAG;AAEjH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yCAAwC,CAAA;AAE1E,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yCAAqC,CAAA;AAEpE,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yCAAsC,CAAA;AAEtE,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,IAAI,eAAe,CAAC,CAAC,CAAC,CAAA;AAE3F,MAAM,MAAM,mBAAmB,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,IAAI,mBAAmB,CAAC,CAAC,CAAC,CAAA;AAEnG,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAAA;AAE7F,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAAA;AAE/F,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,IAAI,YAAY,CAAC,CAAC,CAAC,CAAA"}