@xyo-network/module-model 2.72.9 → 2.73.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (269) hide show
  1. package/dist/docs.json +1751 -1751
  2. package/dist/index.d.mts +330 -0
  3. package/dist/index.d.ts +330 -0
  4. package/dist/index.js +270 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/index.mjs +217 -0
  7. package/dist/index.mjs.map +1 -0
  8. package/package.json +42 -29
  9. package/src/ModuleFactory.ts +1 -1
  10. package/src/lib/serializable.ts +1 -9
  11. package/tsup.config.ts +16 -0
  12. package/dist/cjs/Config.js +0 -5
  13. package/dist/cjs/Config.js.map +0 -1
  14. package/dist/cjs/CreatableModule.js +0 -16
  15. package/dist/cjs/CreatableModule.js.map +0 -1
  16. package/dist/cjs/CreatableModuleDictionary.js +0 -3
  17. package/dist/cjs/CreatableModuleDictionary.js.map +0 -1
  18. package/dist/cjs/Events/ModuleBusy.js +0 -3
  19. package/dist/cjs/Events/ModuleBusy.js.map +0 -1
  20. package/dist/cjs/Events/ModuleError.js +0 -3
  21. package/dist/cjs/Events/ModuleError.js.map +0 -1
  22. package/dist/cjs/Events/ModuleEventArgs.js +0 -3
  23. package/dist/cjs/Events/ModuleEventArgs.js.map +0 -1
  24. package/dist/cjs/Events/ModuleEventData.js +0 -3
  25. package/dist/cjs/Events/ModuleEventData.js.map +0 -1
  26. package/dist/cjs/Events/ModuleQueried.js +0 -3
  27. package/dist/cjs/Events/ModuleQueried.js.map +0 -1
  28. package/dist/cjs/Events/index.js +0 -9
  29. package/dist/cjs/Events/index.js.map +0 -1
  30. package/dist/cjs/ModuleDescription.js +0 -3
  31. package/dist/cjs/ModuleDescription.js.map +0 -1
  32. package/dist/cjs/ModuleFactory.js +0 -48
  33. package/dist/cjs/ModuleFactory.js.map +0 -1
  34. package/dist/cjs/ModuleParams.js +0 -3
  35. package/dist/cjs/ModuleParams.js.map +0 -1
  36. package/dist/cjs/ModuleQueryHandlerResult.js +0 -3
  37. package/dist/cjs/ModuleQueryHandlerResult.js.map +0 -1
  38. package/dist/cjs/ModuleQueryResult.js +0 -3
  39. package/dist/cjs/ModuleQueryResult.js.map +0 -1
  40. package/dist/cjs/Queries/Describe/Payload.js +0 -5
  41. package/dist/cjs/Queries/Describe/Payload.js.map +0 -1
  42. package/dist/cjs/Queries/Describe/Query.js +0 -5
  43. package/dist/cjs/Queries/Describe/Query.js.map +0 -1
  44. package/dist/cjs/Queries/Describe/index.js +0 -6
  45. package/dist/cjs/Queries/Describe/index.js.map +0 -1
  46. package/dist/cjs/Queries/Discover.js +0 -5
  47. package/dist/cjs/Queries/Discover.js.map +0 -1
  48. package/dist/cjs/Queries/Manifest.js +0 -5
  49. package/dist/cjs/Queries/Manifest.js.map +0 -1
  50. package/dist/cjs/Queries/ModuleAddress/Payload.js +0 -6
  51. package/dist/cjs/Queries/ModuleAddress/Payload.js.map +0 -1
  52. package/dist/cjs/Queries/ModuleAddress/Query.js +0 -5
  53. package/dist/cjs/Queries/ModuleAddress/Query.js.map +0 -1
  54. package/dist/cjs/Queries/ModuleAddress/index.js +0 -6
  55. package/dist/cjs/Queries/ModuleAddress/index.js.map +0 -1
  56. package/dist/cjs/Queries/Subscribe.js +0 -5
  57. package/dist/cjs/Queries/Subscribe.js.map +0 -1
  58. package/dist/cjs/Queries/index.js +0 -9
  59. package/dist/cjs/Queries/index.js.map +0 -1
  60. package/dist/cjs/index.js +0 -18
  61. package/dist/cjs/index.js.map +0 -1
  62. package/dist/cjs/instance/ModuleInstance.js +0 -8
  63. package/dist/cjs/instance/ModuleInstance.js.map +0 -1
  64. package/dist/cjs/instance/ModuleRepository.js +0 -3
  65. package/dist/cjs/instance/ModuleRepository.js.map +0 -1
  66. package/dist/cjs/instance/asModuleInstance.js +0 -7
  67. package/dist/cjs/instance/asModuleInstance.js.map +0 -1
  68. package/dist/cjs/instance/index.js +0 -8
  69. package/dist/cjs/instance/index.js.map +0 -1
  70. package/dist/cjs/instance/isModuleInstance.js +0 -15
  71. package/dist/cjs/instance/isModuleInstance.js.map +0 -1
  72. package/dist/cjs/lib/duplicateModules.js +0 -17
  73. package/dist/cjs/lib/duplicateModules.js.map +0 -1
  74. package/dist/cjs/lib/index.js +0 -6
  75. package/dist/cjs/lib/index.js.map +0 -1
  76. package/dist/cjs/lib/serializable.js +0 -38
  77. package/dist/cjs/lib/serializable.js.map +0 -1
  78. package/dist/cjs/module/IsModuleFactory.js +0 -20
  79. package/dist/cjs/module/IsModuleFactory.js.map +0 -1
  80. package/dist/cjs/module/Module.js +0 -3
  81. package/dist/cjs/module/Module.js.map +0 -1
  82. package/dist/cjs/module/ModuleFields.js +0 -3
  83. package/dist/cjs/module/ModuleFields.js.map +0 -1
  84. package/dist/cjs/module/ModuleQueryFunctions.js +0 -3
  85. package/dist/cjs/module/ModuleQueryFunctions.js.map +0 -1
  86. package/dist/cjs/module/asModule.js +0 -7
  87. package/dist/cjs/module/asModule.js.map +0 -1
  88. package/dist/cjs/module/asModuleObject.js +0 -7
  89. package/dist/cjs/module/asModuleObject.js.map +0 -1
  90. package/dist/cjs/module/index.js +0 -12
  91. package/dist/cjs/module/index.js.map +0 -1
  92. package/dist/cjs/module/isModule.js +0 -18
  93. package/dist/cjs/module/isModule.js.map +0 -1
  94. package/dist/cjs/module/isModuleObject.js +0 -15
  95. package/dist/cjs/module/isModuleObject.js.map +0 -1
  96. package/dist/cjs/withModule.js +0 -19
  97. package/dist/cjs/withModule.js.map +0 -1
  98. package/dist/esm/Config.js +0 -2
  99. package/dist/esm/Config.js.map +0 -1
  100. package/dist/esm/CreatableModule.js +0 -12
  101. package/dist/esm/CreatableModule.js.map +0 -1
  102. package/dist/esm/CreatableModuleDictionary.js +0 -2
  103. package/dist/esm/CreatableModuleDictionary.js.map +0 -1
  104. package/dist/esm/Events/ModuleBusy.js +0 -2
  105. package/dist/esm/Events/ModuleBusy.js.map +0 -1
  106. package/dist/esm/Events/ModuleError.js +0 -2
  107. package/dist/esm/Events/ModuleError.js.map +0 -1
  108. package/dist/esm/Events/ModuleEventArgs.js +0 -2
  109. package/dist/esm/Events/ModuleEventArgs.js.map +0 -1
  110. package/dist/esm/Events/ModuleEventData.js +0 -2
  111. package/dist/esm/Events/ModuleEventData.js.map +0 -1
  112. package/dist/esm/Events/ModuleQueried.js +0 -2
  113. package/dist/esm/Events/ModuleQueried.js.map +0 -1
  114. package/dist/esm/Events/index.js +0 -6
  115. package/dist/esm/Events/index.js.map +0 -1
  116. package/dist/esm/ModuleDescription.js +0 -2
  117. package/dist/esm/ModuleDescription.js.map +0 -1
  118. package/dist/esm/ModuleFactory.js +0 -46
  119. package/dist/esm/ModuleFactory.js.map +0 -1
  120. package/dist/esm/ModuleParams.js +0 -2
  121. package/dist/esm/ModuleParams.js.map +0 -1
  122. package/dist/esm/ModuleQueryHandlerResult.js +0 -2
  123. package/dist/esm/ModuleQueryHandlerResult.js.map +0 -1
  124. package/dist/esm/ModuleQueryResult.js +0 -2
  125. package/dist/esm/ModuleQueryResult.js.map +0 -1
  126. package/dist/esm/Queries/Describe/Payload.js +0 -2
  127. package/dist/esm/Queries/Describe/Payload.js.map +0 -1
  128. package/dist/esm/Queries/Describe/Query.js +0 -2
  129. package/dist/esm/Queries/Describe/Query.js.map +0 -1
  130. package/dist/esm/Queries/Describe/index.js +0 -3
  131. package/dist/esm/Queries/Describe/index.js.map +0 -1
  132. package/dist/esm/Queries/Discover.js +0 -2
  133. package/dist/esm/Queries/Discover.js.map +0 -1
  134. package/dist/esm/Queries/Manifest.js +0 -2
  135. package/dist/esm/Queries/Manifest.js.map +0 -1
  136. package/dist/esm/Queries/ModuleAddress/Payload.js +0 -3
  137. package/dist/esm/Queries/ModuleAddress/Payload.js.map +0 -1
  138. package/dist/esm/Queries/ModuleAddress/Query.js +0 -2
  139. package/dist/esm/Queries/ModuleAddress/Query.js.map +0 -1
  140. package/dist/esm/Queries/ModuleAddress/index.js +0 -3
  141. package/dist/esm/Queries/ModuleAddress/index.js.map +0 -1
  142. package/dist/esm/Queries/Subscribe.js +0 -2
  143. package/dist/esm/Queries/Subscribe.js.map +0 -1
  144. package/dist/esm/Queries/index.js +0 -6
  145. package/dist/esm/Queries/index.js.map +0 -1
  146. package/dist/esm/index.js +0 -15
  147. package/dist/esm/index.js.map +0 -1
  148. package/dist/esm/instance/ModuleInstance.js +0 -4
  149. package/dist/esm/instance/ModuleInstance.js.map +0 -1
  150. package/dist/esm/instance/ModuleRepository.js +0 -2
  151. package/dist/esm/instance/ModuleRepository.js.map +0 -1
  152. package/dist/esm/instance/asModuleInstance.js +0 -4
  153. package/dist/esm/instance/asModuleInstance.js.map +0 -1
  154. package/dist/esm/instance/index.js +0 -5
  155. package/dist/esm/instance/index.js.map +0 -1
  156. package/dist/esm/instance/isModuleInstance.js +0 -12
  157. package/dist/esm/instance/isModuleInstance.js.map +0 -1
  158. package/dist/esm/lib/duplicateModules.js +0 -13
  159. package/dist/esm/lib/duplicateModules.js.map +0 -1
  160. package/dist/esm/lib/index.js +0 -3
  161. package/dist/esm/lib/index.js.map +0 -1
  162. package/dist/esm/lib/serializable.js +0 -32
  163. package/dist/esm/lib/serializable.js.map +0 -1
  164. package/dist/esm/module/IsModuleFactory.js +0 -15
  165. package/dist/esm/module/IsModuleFactory.js.map +0 -1
  166. package/dist/esm/module/Module.js +0 -2
  167. package/dist/esm/module/Module.js.map +0 -1
  168. package/dist/esm/module/ModuleFields.js +0 -2
  169. package/dist/esm/module/ModuleFields.js.map +0 -1
  170. package/dist/esm/module/ModuleQueryFunctions.js +0 -2
  171. package/dist/esm/module/ModuleQueryFunctions.js.map +0 -1
  172. package/dist/esm/module/asModule.js +0 -4
  173. package/dist/esm/module/asModule.js.map +0 -1
  174. package/dist/esm/module/asModuleObject.js +0 -4
  175. package/dist/esm/module/asModuleObject.js.map +0 -1
  176. package/dist/esm/module/index.js +0 -9
  177. package/dist/esm/module/index.js.map +0 -1
  178. package/dist/esm/module/isModule.js +0 -15
  179. package/dist/esm/module/isModule.js.map +0 -1
  180. package/dist/esm/module/isModuleObject.js +0 -12
  181. package/dist/esm/module/isModuleObject.js.map +0 -1
  182. package/dist/esm/withModule.js +0 -16
  183. package/dist/esm/withModule.js.map +0 -1
  184. package/dist/types/Config.d.ts +0 -56
  185. package/dist/types/Config.d.ts.map +0 -1
  186. package/dist/types/CreatableModule.d.ts +0 -23
  187. package/dist/types/CreatableModule.d.ts.map +0 -1
  188. package/dist/types/CreatableModuleDictionary.d.ts +0 -5
  189. package/dist/types/CreatableModuleDictionary.d.ts.map +0 -1
  190. package/dist/types/Events/ModuleBusy.d.ts +0 -9
  191. package/dist/types/Events/ModuleBusy.d.ts.map +0 -1
  192. package/dist/types/Events/ModuleError.d.ts +0 -9
  193. package/dist/types/Events/ModuleError.d.ts.map +0 -1
  194. package/dist/types/Events/ModuleEventArgs.d.ts +0 -7
  195. package/dist/types/Events/ModuleEventArgs.d.ts.map +0 -1
  196. package/dist/types/Events/ModuleEventData.d.ts +0 -6
  197. package/dist/types/Events/ModuleEventData.d.ts.map +0 -1
  198. package/dist/types/Events/ModuleQueried.d.ts +0 -14
  199. package/dist/types/Events/ModuleQueried.d.ts.map +0 -1
  200. package/dist/types/Events/index.d.ts +0 -6
  201. package/dist/types/Events/index.d.ts.map +0 -1
  202. package/dist/types/ModuleDescription.d.ts +0 -7
  203. package/dist/types/ModuleDescription.d.ts.map +0 -1
  204. package/dist/types/ModuleFactory.d.ts +0 -23
  205. package/dist/types/ModuleFactory.d.ts.map +0 -1
  206. package/dist/types/ModuleParams.d.ts +0 -12
  207. package/dist/types/ModuleParams.d.ts.map +0 -1
  208. package/dist/types/ModuleQueryHandlerResult.d.ts +0 -3
  209. package/dist/types/ModuleQueryHandlerResult.d.ts.map +0 -1
  210. package/dist/types/ModuleQueryResult.d.ts +0 -4
  211. package/dist/types/ModuleQueryResult.d.ts.map +0 -1
  212. package/dist/types/Queries/Describe/Payload.d.ts +0 -6
  213. package/dist/types/Queries/Describe/Payload.d.ts.map +0 -1
  214. package/dist/types/Queries/Describe/Query.d.ts +0 -7
  215. package/dist/types/Queries/Describe/Query.d.ts.map +0 -1
  216. package/dist/types/Queries/Describe/index.d.ts +0 -3
  217. package/dist/types/Queries/Describe/index.d.ts.map +0 -1
  218. package/dist/types/Queries/Discover.d.ts +0 -7
  219. package/dist/types/Queries/Discover.d.ts.map +0 -1
  220. package/dist/types/Queries/Manifest.d.ts +0 -7
  221. package/dist/types/Queries/Manifest.d.ts.map +0 -1
  222. package/dist/types/Queries/ModuleAddress/Payload.d.ts +0 -9
  223. package/dist/types/Queries/ModuleAddress/Payload.d.ts.map +0 -1
  224. package/dist/types/Queries/ModuleAddress/Query.d.ts +0 -7
  225. package/dist/types/Queries/ModuleAddress/Query.d.ts.map +0 -1
  226. package/dist/types/Queries/ModuleAddress/index.d.ts +0 -3
  227. package/dist/types/Queries/ModuleAddress/index.d.ts.map +0 -1
  228. package/dist/types/Queries/Subscribe.d.ts +0 -17
  229. package/dist/types/Queries/Subscribe.d.ts.map +0 -1
  230. package/dist/types/Queries/index.d.ts +0 -14
  231. package/dist/types/Queries/index.d.ts.map +0 -1
  232. package/dist/types/index.d.ts +0 -15
  233. package/dist/types/index.d.ts.map +0 -1
  234. package/dist/types/instance/ModuleInstance.d.ts +0 -41
  235. package/dist/types/instance/ModuleInstance.d.ts.map +0 -1
  236. package/dist/types/instance/ModuleRepository.d.ts +0 -9
  237. package/dist/types/instance/ModuleRepository.d.ts.map +0 -1
  238. package/dist/types/instance/asModuleInstance.d.ts +0 -5
  239. package/dist/types/instance/asModuleInstance.d.ts.map +0 -1
  240. package/dist/types/instance/index.d.ts +0 -5
  241. package/dist/types/instance/index.d.ts.map +0 -1
  242. package/dist/types/instance/isModuleInstance.d.ts +0 -5
  243. package/dist/types/instance/isModuleInstance.d.ts.map +0 -1
  244. package/dist/types/lib/duplicateModules.d.ts +0 -12
  245. package/dist/types/lib/duplicateModules.d.ts.map +0 -1
  246. package/dist/types/lib/index.d.ts +0 -3
  247. package/dist/types/lib/index.d.ts.map +0 -1
  248. package/dist/types/lib/serializable.d.ts +0 -3
  249. package/dist/types/lib/serializable.d.ts.map +0 -1
  250. package/dist/types/module/IsModuleFactory.d.ts +0 -7
  251. package/dist/types/module/IsModuleFactory.d.ts.map +0 -1
  252. package/dist/types/module/Module.d.ts +0 -7
  253. package/dist/types/module/Module.d.ts.map +0 -1
  254. package/dist/types/module/ModuleFields.d.ts +0 -18
  255. package/dist/types/module/ModuleFields.d.ts.map +0 -1
  256. package/dist/types/module/ModuleQueryFunctions.d.ts +0 -12
  257. package/dist/types/module/ModuleQueryFunctions.d.ts.map +0 -1
  258. package/dist/types/module/asModule.d.ts +0 -5
  259. package/dist/types/module/asModule.d.ts.map +0 -1
  260. package/dist/types/module/asModuleObject.d.ts +0 -5
  261. package/dist/types/module/asModuleObject.d.ts.map +0 -1
  262. package/dist/types/module/index.d.ts +0 -9
  263. package/dist/types/module/index.d.ts.map +0 -1
  264. package/dist/types/module/isModule.d.ts +0 -5
  265. package/dist/types/module/isModule.d.ts.map +0 -1
  266. package/dist/types/module/isModuleObject.d.ts +0 -5
  267. package/dist/types/module/isModuleObject.d.ts.map +0 -1
  268. package/dist/types/withModule.d.ts +0 -7
  269. package/dist/types/withModule.d.ts.map +0 -1
package/dist/index.js ADDED
@@ -0,0 +1,270 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.ts
21
+ var src_exports = {};
22
+ __export(src_exports, {
23
+ AddressPreviousHashSchema: () => AddressPreviousHashSchema,
24
+ IsInstanceFactory: () => IsInstanceFactory,
25
+ IsModuleFactory: () => IsModuleFactory,
26
+ ModuleAddressQuerySchema: () => ModuleAddressQuerySchema,
27
+ ModuleConfigSchema: () => ModuleConfigSchema,
28
+ ModuleDescribeQuerySchema: () => ModuleDescribeQuerySchema,
29
+ ModuleDescriptionSchema: () => ModuleDescriptionSchema,
30
+ ModuleDiscoverQuerySchema: () => ModuleDiscoverQuerySchema,
31
+ ModuleFactory: () => ModuleFactory,
32
+ ModuleManifestQuerySchema: () => ModuleManifestQuerySchema,
33
+ ModuleSubscribeQuerySchema: () => ModuleSubscribeQuerySchema,
34
+ WithFactory: () => WithFactory,
35
+ asModule: () => asModule,
36
+ asModuleInstance: () => asModuleInstance,
37
+ asModuleObject: () => asModuleObject,
38
+ creatableModule: () => creatableModule,
39
+ duplicateModules: () => duplicateModules,
40
+ isModule: () => isModule,
41
+ isModuleInstance: () => isModuleInstance,
42
+ isModuleObject: () => isModuleObject,
43
+ requiredModuleFunctions: () => requiredModuleFunctions,
44
+ requiredModuleInstanceFunctions: () => requiredModuleInstanceFunctions,
45
+ requiredModuleQueries: () => requiredModuleQueries,
46
+ serializable: () => serializable,
47
+ serializableField: () => serializableField,
48
+ withModule: () => withModule,
49
+ withModuleInstance: () => withModuleInstance
50
+ });
51
+ module.exports = __toCommonJS(src_exports);
52
+
53
+ // src/Config.ts
54
+ var ModuleConfigSchema = "network.xyo.module.config";
55
+
56
+ // src/CreatableModule.ts
57
+ function creatableModule() {
58
+ return (constructor) => {
59
+ constructor;
60
+ };
61
+ }
62
+
63
+ // src/instance/asModuleInstance.ts
64
+ var import_object_identity5 = require("@xyo-network/object-identity");
65
+
66
+ // src/instance/isModuleInstance.ts
67
+ var import_object_identity4 = require("@xyo-network/object-identity");
68
+
69
+ // src/module/asModule.ts
70
+ var import_object_identity3 = require("@xyo-network/object-identity");
71
+
72
+ // src/Queries/Describe/Payload.ts
73
+ var ModuleDescriptionSchema = "network.xyo.module.description";
74
+
75
+ // src/Queries/Describe/Query.ts
76
+ var ModuleDescribeQuerySchema = "network.xyo.query.module.describe";
77
+
78
+ // src/Queries/Discover.ts
79
+ var ModuleDiscoverQuerySchema = "network.xyo.query.module.discover";
80
+
81
+ // src/Queries/Manifest.ts
82
+ var ModuleManifestQuerySchema = "network.xyo.query.module.manifest";
83
+
84
+ // src/Queries/ModuleAddress/Payload.ts
85
+ var import_address_payload_plugin = require("@xyo-network/address-payload-plugin");
86
+ var AddressPreviousHashSchema = `${import_address_payload_plugin.AddressSchema}.hash.previous`;
87
+
88
+ // src/Queries/ModuleAddress/Query.ts
89
+ var ModuleAddressQuerySchema = "network.xyo.query.module.address";
90
+
91
+ // src/Queries/Subscribe.ts
92
+ var ModuleSubscribeQuerySchema = "network.xyo.query.module.subscribe";
93
+
94
+ // src/module/asModuleObject.ts
95
+ var import_object_identity2 = require("@xyo-network/object-identity");
96
+
97
+ // src/module/isModuleObject.ts
98
+ var import_object_identity = require("@xyo-network/object-identity");
99
+ var requiredModuleFunctions = {
100
+ address: "string",
101
+ config: "object",
102
+ params: "object",
103
+ queries: "array",
104
+ query: "function",
105
+ queryable: "function"
106
+ };
107
+ var factory = new import_object_identity.IsObjectFactory();
108
+ var isModuleObject = factory.create(requiredModuleFunctions);
109
+
110
+ // src/module/asModuleObject.ts
111
+ var asModuleObject = import_object_identity2.AsObjectFactory.create(isModuleObject);
112
+
113
+ // src/module/IsModuleFactory.ts
114
+ var IsModuleFactory = class {
115
+ create(expectedQueries, additionalChecks) {
116
+ return (obj, config) => {
117
+ const module2 = asModuleObject(obj);
118
+ const result = isModuleObject(module2, config) && (expectedQueries?.reduce((prev, query) => prev && obj.queries.includes(query), true) ?? true) && //perform additional checks
119
+ (additionalChecks?.reduce((prev, check) => prev && check(obj, config), true) ?? true);
120
+ return result;
121
+ };
122
+ }
123
+ };
124
+
125
+ // src/module/isModule.ts
126
+ var requiredModuleQueries = [
127
+ /* We need to update this once live module conform */
128
+ //ModuleDescribeQuerySchema,
129
+ //ModuleAddressQuerySchema,
130
+ ModuleDiscoverQuerySchema
131
+ //ModuleManifestQuerySchema,
132
+ //ModuleSubscribeQuerySchema,
133
+ ];
134
+ var factory2 = new IsModuleFactory();
135
+ var isModule = factory2.create(requiredModuleQueries, [isModuleObject]);
136
+
137
+ // src/module/asModule.ts
138
+ var asModule = import_object_identity3.AsObjectFactory.create(isModule);
139
+
140
+ // src/instance/isModuleInstance.ts
141
+ var requiredModuleInstanceFunctions = {
142
+ describe: "function",
143
+ discover: "function",
144
+ manifest: "function",
145
+ moduleAddress: "function"
146
+ };
147
+ var factory3 = new import_object_identity4.IsObjectFactory();
148
+ var isModuleInstance = factory3.create(requiredModuleInstanceFunctions, [isModule]);
149
+
150
+ // src/instance/asModuleInstance.ts
151
+ var asModuleInstance = import_object_identity5.AsObjectFactory.create(isModuleInstance);
152
+
153
+ // src/instance/ModuleInstance.ts
154
+ var import_object_identity6 = require("@xyo-network/object-identity");
155
+ var IsInstanceFactory = class extends import_object_identity6.IsObjectFactory {
156
+ };
157
+
158
+ // src/lib/duplicateModules.ts
159
+ var duplicateModules = (value, index, array) => {
160
+ return array.findIndex((v) => v.address === value.address) === index;
161
+ };
162
+
163
+ // src/lib/serializable.ts
164
+ var import_lodash = require("@xylabs/lodash");
165
+ var JSONPrimitiveChecks = [import_lodash.isUndefined, import_lodash.isNull, import_lodash.isBoolean, import_lodash.isNumber, import_lodash.isString];
166
+ var JSONComplexChecks = [import_lodash.isPlainObject, import_lodash.isArray];
167
+ var serializable = (field, depth) => {
168
+ let depthExceeded = false;
169
+ const decrementDepth = () => depth ? depth-- : void 0;
170
+ const recursiveSerializable = (field2) => {
171
+ if (depth !== void 0 && depth < 1) {
172
+ depthExceeded = true;
173
+ return false;
174
+ }
175
+ decrementDepth();
176
+ const nestedSerializable = (field3) => (0, import_lodash.overSome)(JSONComplexChecks)(field3) && (0, import_lodash.every)(field3, recursiveSerializable);
177
+ return (0, import_lodash.overSome)([...JSONPrimitiveChecks, nestedSerializable])(field2);
178
+ };
179
+ const valid = recursiveSerializable(field);
180
+ return depthExceeded ? null : valid;
181
+ };
182
+ var serializableField = (field) => {
183
+ return (0, import_lodash.overSome)([...JSONPrimitiveChecks, ...JSONComplexChecks])(field);
184
+ };
185
+
186
+ // src/ModuleFactory.ts
187
+ var import_assert = require("@xylabs/assert");
188
+ var import_lodash2 = require("@xylabs/lodash");
189
+ var ModuleFactory = class _ModuleFactory {
190
+ configSchemas;
191
+ creatableModule;
192
+ defaultLogger;
193
+ defaultParams;
194
+ constructor(creatableModule2, params) {
195
+ this.creatableModule = creatableModule2;
196
+ this.defaultParams = params;
197
+ this.configSchemas = creatableModule2.configSchemas;
198
+ }
199
+ get configSchema() {
200
+ return this.configSchemas[0];
201
+ }
202
+ static withParams(creatableModule2, params) {
203
+ return new _ModuleFactory(creatableModule2, params);
204
+ }
205
+ _getRootFunction(funcName) {
206
+ let anyThis = this;
207
+ while (anyThis.__proto__[funcName]) {
208
+ anyThis = anyThis.__proto__;
209
+ }
210
+ return anyThis[funcName];
211
+ }
212
+ _noOverride(functionName) {
213
+ const thisFunc = this[functionName];
214
+ const rootFunc = this._getRootFunction(functionName);
215
+ (0, import_assert.assertEx)(thisFunc === rootFunc, `Override not allowed for [${functionName}] - override ${functionName}Handler instead`);
216
+ }
217
+ create(params) {
218
+ const factory4 = this;
219
+ const schema = factory4.creatableModule.configSchema;
220
+ const mergedParams = (0, import_lodash2.merge)({}, factory4.defaultParams, params, {
221
+ config: (0, import_lodash2.merge)({}, factory4.defaultParams?.config, params?.config, { schema })
222
+ });
223
+ return factory4.creatableModule.create(mergedParams);
224
+ }
225
+ factory(_params) {
226
+ throw new Error("Method not implemented.");
227
+ }
228
+ };
229
+
230
+ // src/withModule.ts
231
+ var WithFactory = {
232
+ create: (typeCheck) => {
233
+ return (module2, closure) => {
234
+ return typeCheck(module2) ? closure(module2) : void 0;
235
+ };
236
+ }
237
+ };
238
+ var withModule = WithFactory.create(isModule);
239
+ var withModuleInstance = WithFactory.create(isModuleInstance);
240
+ // Annotate the CommonJS export names for ESM import in node:
241
+ 0 && (module.exports = {
242
+ AddressPreviousHashSchema,
243
+ IsInstanceFactory,
244
+ IsModuleFactory,
245
+ ModuleAddressQuerySchema,
246
+ ModuleConfigSchema,
247
+ ModuleDescribeQuerySchema,
248
+ ModuleDescriptionSchema,
249
+ ModuleDiscoverQuerySchema,
250
+ ModuleFactory,
251
+ ModuleManifestQuerySchema,
252
+ ModuleSubscribeQuerySchema,
253
+ WithFactory,
254
+ asModule,
255
+ asModuleInstance,
256
+ asModuleObject,
257
+ creatableModule,
258
+ duplicateModules,
259
+ isModule,
260
+ isModuleInstance,
261
+ isModuleObject,
262
+ requiredModuleFunctions,
263
+ requiredModuleInstanceFunctions,
264
+ requiredModuleQueries,
265
+ serializable,
266
+ serializableField,
267
+ withModule,
268
+ withModuleInstance
269
+ });
270
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/Config.ts","../src/CreatableModule.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/ModuleFactory.ts","../src/withModule.ts"],"sourcesContent":["export * from './Config'\nexport * from './CreatableModule'\nexport * from './CreatableModuleDictionary'\nexport * from './Events'\nexport * from './instance'\nexport * from './lib'\nexport * from './module'\nexport * from './ModuleDescription'\nexport * from './ModuleFactory'\nexport * from './ModuleParams'\nexport * from './ModuleQueryHandlerResult'\nexport * from './ModuleQueryResult'\nexport * from './Queries'\nexport * from './withModule'\n","import { WithAdditional } from '@xyo-network/core'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport type ModuleConfigSchema = 'network.xyo.module.config'\nexport const ModuleConfigSchema: ModuleConfigSchema = 'network.xyo.module.config'\n\nexport type AddressString = string\nexport type CosigningAddressSet = string[]\nexport type SchemaString = string\n\nexport type NameOrAddress = string\n\nexport interface IndividualArchivistConfig {\n readonly commit?: NameOrAddress\n readonly read?: NameOrAddress\n readonly write?: NameOrAddress\n}\n\nexport type ArchivistModuleConfig = NameOrAddress | IndividualArchivistConfig\n\nexport type ModuleConfigBase<TConfig extends Payload | undefined = undefined> = Payload<\n WithAdditional<\n {\n /** @field The path to use when creating the account */\n accountDerivationPath?: string\n\n /** @field The name/address of the Archivist to use for this module */\n readonly archivist?: ArchivistModuleConfig\n\n /** @field Friendly name of module (not collision resistent). Can be used to resolve module when registered/attached to Node. */\n readonly name?: string\n\n /** @field paging settings for queries */\n readonly paging?: Record<string, { size?: number }>\n\n /** @field The config schema for the module */\n readonly 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, (AddressString | CosigningAddressSet)[]>\n\n /** @field If schema in record, then anyone except these addresses can access query */\n readonly disallowed?: Record<SchemaString, AddressString[]>\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 },\n Omit<TConfig, 'schema'>\n >\n>\n\nexport type ModuleConfig<TConfig extends Payload | undefined = undefined> = ModuleConfigBase<TConfig>\n\nexport type AnyConfigSchema<TConfig extends Omit<ModuleConfig, 'schema'> & { schema: string } = Omit<ModuleConfig, 'schema'> & { schema: string }> =\n ModuleConfig<\n WithAdditional<\n Omit<TConfig, 'schema'>,\n {\n schema: string\n }\n >\n >\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 { AccountInstance } from '@xyo-network/account-model'\nimport { Logger } from '@xyo-network/logger'\n\nimport { ModuleInstance } from './instance'\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\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\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 { AsObjectFactory } from '@xyo-network/object-identity'\n\nimport { isModuleInstance } from './isModuleInstance'\n\nexport const asModuleInstance = AsObjectFactory.create(isModuleInstance)\n","import { IsObjectFactory, ObjectTypeCheck, ObjectTypeShape } from '@xyo-network/object-identity'\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: ObjectTypeCheck<ModuleInstance> = factory.create(requiredModuleInstanceFunctions, [isModule])\n","import { AsObjectFactory } from '@xyo-network/object-identity'\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 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 schema: ModuleManifestQuerySchema\n}>\n","import { 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: string\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 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: string\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 '@xyo-network/object-identity'\n\nimport { isModuleObject } from './isModuleObject'\n\nexport const asModuleObject = AsObjectFactory.create(isModuleObject)\n","import { IsObjectFactory, ObjectTypeCheck, ObjectTypeShape } from '@xyo-network/object-identity'\n\nimport { Module } from './Module'\n\nexport const requiredModuleFunctions: 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: ObjectTypeCheck<Module> = factory.create(requiredModuleFunctions)\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ObjectTypeCheck } from '@xyo-network/object-identity'\n\nimport { asModuleObject } from './asModuleObject'\nimport { isModuleObject } from './isModuleObject'\nimport { Module } from './Module'\n\nexport type ModuleTypeCheck<T extends Module = Module> = ObjectTypeCheck<T>\n\nexport class IsModuleFactory<T extends Module = Module> {\n create(expectedQueries?: string[], additionalChecks?: ObjectTypeCheck[]): ModuleTypeCheck<T> {\n return (obj: any, config): obj is T => {\n const module = asModuleObject(obj)\n const result =\n isModuleObject(module, config) &&\n (expectedQueries?.reduce((prev, query) => prev && obj.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 { ObjectTypeCheck } from '@xyo-network/object-identity'\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: ObjectTypeCheck<Module> = factory.create(requiredModuleQueries, [isModuleObject])\n","import { IsObjectFactory, ObjectTypeCheck } from '@xyo-network/object-identity'\nimport { Promisable } from '@xyo-network/promise'\n\nimport { AnyConfigSchema, ModuleConfig } from '../Config'\nimport { ModuleEventData } from '../Events'\nimport { Module, ModuleQueryFunctions } from '../module'\nimport { ModuleParams } from '../ModuleParams'\n\nexport interface ResolveFunctions {\n resolve<T extends ModuleInstance = ModuleInstance>(filter?: ModuleFilter<T>, options?: ModuleFilterOptions<T>): Promisable<T[]>\n resolve<T extends ModuleInstance = ModuleInstance>(nameOrAddress: string, options?: ModuleFilterOptions<T>): Promisable<T | undefined>\n resolve<T extends ModuleInstance = ModuleInstance>(\n nameOrAddressOrFilter?: ModuleFilter<T> | string,\n options?: ModuleFilterOptions<T>,\n ): Promisable<T | T[] | undefined>\n}\n\nexport interface ModuleResolver extends ResolveFunctions {\n addResolver: (resolver: ModuleResolver) => this\n isModuleResolver: boolean\n removeResolver: (resolver: ModuleResolver) => this\n}\n\nexport type ModuleInstance<\n TParams extends ModuleParams<AnyConfigSchema<ModuleConfig>> = ModuleParams<AnyConfigSchema<ModuleConfig>>,\n TEventData extends ModuleEventData = ModuleEventData,\n> = Module<TParams, TEventData> &\n ResolveFunctions &\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<ModuleResolver, 'resolve'>\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<ModuleResolver, 'resolve'>\n }\n\nexport type InstanceTypeCheck<T extends ModuleInstance = ModuleInstance> = ObjectTypeCheck<T>\n\nexport class IsInstanceFactory<T extends ModuleInstance = ModuleInstance> extends IsObjectFactory<T> {}\n\nexport interface ModuleFilterOptions<T extends ModuleInstance = ModuleInstance> {\n direction?: 'up' | 'down' | 'all'\n identity?: InstanceTypeCheck<T>\n maxDepth?: number\n visibility?: 'public' | 'private' | 'all'\n}\n\nexport interface AddressModuleFilter<T extends ModuleInstance = ModuleInstance> extends ModuleFilterOptions<T> {\n address: string[]\n}\n\nexport interface NameModuleFilter<T extends ModuleInstance = ModuleInstance> extends ModuleFilterOptions<T> {\n name: string[]\n}\n\nexport interface QueryModuleFilter<T extends ModuleInstance = ModuleInstance> extends ModuleFilterOptions<T> {\n query: string[][]\n}\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 { assertEx } from '@xylabs/assert'\nimport { merge } from '@xylabs/lodash'\nimport { Logger } from '@xyo-network/logger'\n\nimport { CreatableModule, CreatableModuleFactory } from './CreatableModule'\nimport { ModuleInstance } from './instance'\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?: TModule['params']['config'] }\n\n constructor(creatableModule: CreatableModule<TModule>, params?: Omit<TModule['params'], 'config'> & { config?: TModule['params']['config'] }) {\n this.creatableModule = creatableModule\n this.defaultParams = params\n this.configSchemas = creatableModule.configSchemas\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 ) {\n return new ModuleFactory(creatableModule, params)\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 { ObjectTypeCheck } from '@xyo-network/object-identity'\n\nimport { isModuleInstance } from './instance'\nimport { isModule } from './module'\n\nexport const WithFactory = {\n create: <T extends object>(typeCheck: ObjectTypeCheck<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":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACIO,IAAM,qBAAyC;;;ACqB/C,SAAS,kBAAmE;AACjF,SAAO,CAAqC,gBAAmB;AAC7D;AAAA,EACF;AACF;;;AC7BA,IAAAA,0BAAgC;;;ACAhC,IAAAC,0BAAkE;;;ACAlE,IAAAC,0BAAgC;;;ACIzB,IAAM,0BAA0B;;;ACDhC,IAAM,4BAAuD;;;ACA7D,IAAM,4BAAuD;;;ACA7D,IAAM,4BAAuD;;;ACHpE,oCAA8B;AAGvB,IAAM,4BAA4B,GAAG,2CAAa;;;ACAlD,IAAM,2BAAqD;;;ACA3D,IAAM,6BAAyD;;;ACHtE,IAAAC,0BAAgC;;;ACAhC,6BAAkE;AAI3D,IAAM,0BAA2C;AAAA,EACtD,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,OAAO;AAAA,EACP,WAAW;AACb;AAEA,IAAM,UAAU,IAAI,uCAAwB;AAErC,IAAM,iBAA0C,QAAQ,OAAO,uBAAuB;;;ADXtF,IAAM,iBAAiB,wCAAgB,OAAO,cAAc;;;AEK5D,IAAM,kBAAN,MAAiD;AAAA,EACtD,OAAO,iBAA4B,kBAA0D;AAC3F,WAAO,CAAC,KAAU,WAAqB;AACrC,YAAMC,UAAS,eAAe,GAAG;AACjC,YAAM,SACJ,eAAeA,SAAQ,MAAM,MAC5B,iBAAiB,OAAO,CAAC,MAAM,UAAU,QAAQ,IAAI,QAAQ,SAAS,KAAK,GAAG,IAAI,KAAK;AAAA,OAEvF,kBAAkB,OAAO,CAAC,MAAM,UAAU,QAAQ,MAAM,KAAK,MAAM,GAAG,IAAI,KAAK;AAClF,aAAO;AAAA,IACT;AAAA,EACF;AACF;;;ACdO,IAAM,wBAAkC;AAAA;AAAA;AAAA;AAAA,EAI7C;AAAA;AAAA;AAGF;AAGA,IAAMC,WAAU,IAAI,gBAAwB;AAErC,IAAM,WAAoCA,SAAQ,OAAO,uBAAuB,CAAC,cAAc,CAAC;;;AXfhG,IAAM,WAAW,wCAAgB,OAAO,QAAQ;;;ADChD,IAAM,kCAAmD;AAAA,EAC9D,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AAAA,EACV,eAAe;AACjB;AAGA,IAAMC,WAAU,IAAI,wCAAgC;AAE7C,IAAM,mBAAoDA,SAAQ,OAAO,iCAAiC,CAAC,QAAQ,CAAC;;;ADXpH,IAAM,mBAAmB,wCAAgB,OAAO,gBAAgB;;;AcJvE,IAAAC,0BAAiD;AAuC1C,IAAM,oBAAN,cAA2E,wCAAmB;AAAC;;;AC5B/F,IAAM,mBAAmB,CAAC,OAAe,OAAe,UAAqC;AAClG,SAAO,MAAM,UAAU,CAAC,MAAM,EAAE,YAAY,MAAM,OAAO,MAAM;AACjE;;;ACXA,oBAA4G;AAE5G,IAAM,sBAAsB,CAAC,2BAAa,sBAAQ,yBAAW,wBAAU,sBAAQ;AAC/E,IAAM,oBAAoB,CAAC,6BAAe,qBAAO;AAE1C,IAAM,eAAe,CAAC,OAAgB,UAAmC;AAC9E,MAAI,gBAAgB;AACpB,QAAM,iBAAiB,MAAO,QAAQ,UAAU;AAEhD,QAAM,wBAAwB,CAACC,WAAmB;AAChD,QAAI,UAAU,UAAa,QAAQ,GAAG;AACpC,sBAAgB;AAChB,aAAO;AAAA,IACT;AAGA,mBAAe;AAEf,UAAM,qBAAqB,CAACA,eAA4B,wBAAS,iBAAiB,EAAEA,MAAK,SAAK,qBAAMA,QAAiB,qBAAqB;AAE1I,eAAO,wBAAS,CAAC,GAAG,qBAAqB,kBAAkB,CAAC,EAAEA,MAAK;AAAA,EACrE;AAEA,QAAM,QAAQ,sBAAsB,KAAK;AAEzC,SAAO,gBAAgB,OAAO;AAChC;AAEO,IAAM,oBAAoB,CAAC,UAAmB;AACnD,aAAO,wBAAS,CAAC,GAAG,qBAAqB,GAAG,iBAAiB,CAAC,EAAE,KAAK;AACvE;;;AChCA,oBAAyB;AACzB,IAAAC,iBAAsB;AAMf,IAAM,gBAAN,MAAM,eAAyF;AAAA,EACpG;AAAA,EAEA;AAAA,EAEA;AAAA,EAEA;AAAA,EAEA,YAAYC,kBAA2C,QAAuF;AAC5I,SAAK,kBAAkBA;AACvB,SAAK,gBAAgB;AACrB,SAAK,gBAAgBA,iBAAgB;AAAA,EACvC;AAAA,EAEA,IAAI,eAAuB;AACzB,WAAO,KAAK,cAAc,CAAC;AAAA,EAC7B;AAAA,EAEA,OAAO,WACLA,kBACA,QACA;AACA,WAAO,IAAI,eAAcA,kBAAiB,MAAM;AAAA,EAClD;AAAA,EAEA,iBAAiB,UAAkB;AAEjC,QAAI,UAAU;AACd,WAAO,QAAQ,UAAU,QAAQ,GAAG;AAClC,gBAAU,QAAQ;AAAA,IACpB;AACA,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EAEA,YAAY,cAAsB;AAEhC,UAAM,WAAY,KAAa,YAAY;AAE3C,UAAM,WAAW,KAAK,iBAAiB,YAAY;AACnD,gCAAS,aAAa,UAAU,6BAA6B,YAAY,gBAAgB,YAAY,iBAAiB;AAAA,EACxH;AAAA,EAEA,OAAkE,QAAoD;AACpH,UAAMC,WAAU;AAChB,UAAM,SAASA,SAAQ,gBAAgB;AACvC,UAAM,mBAAkC,sBAAM,CAAC,GAAGA,SAAQ,eAAe,QAAQ;AAAA,MAC/E,YAAQ,sBAAM,CAAC,GAAGA,SAAQ,eAAe,QAAQ,QAAQ,QAAQ,EAAE,OAAO,CAAC;AAAA,IAC7E,CAAC;AACD,WAAOA,SAAQ,gBAAgB,OAAU,YAAY;AAAA,EACvD;AAAA,EAEA,QAA4D,SAA8D;AACxH,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AACF;;;ACzDO,IAAM,cAAc;AAAA,EACzB,QAAQ,CAAmB,cAAkC;AAC3D,WAAO,CAELC,SAEA,YACkB;AAClB,aAAO,UAAUA,OAAM,IAAI,QAAQA,OAAM,IAAI;AAAA,IAC/C;AAAA,EACF;AACF;AAEO,IAAM,aAAa,YAAY,OAAO,QAAQ;AAC9C,IAAM,qBAAqB,YAAY,OAAO,gBAAgB;","names":["import_object_identity","import_object_identity","import_object_identity","import_object_identity","module","factory","factory","import_object_identity","field","import_lodash","creatableModule","factory","module"]}
package/dist/index.mjs ADDED
@@ -0,0 +1,217 @@
1
+ // src/Config.ts
2
+ var ModuleConfigSchema = "network.xyo.module.config";
3
+
4
+ // src/CreatableModule.ts
5
+ function creatableModule() {
6
+ return (constructor) => {
7
+ constructor;
8
+ };
9
+ }
10
+
11
+ // src/instance/asModuleInstance.ts
12
+ import { AsObjectFactory as AsObjectFactory3 } from "@xyo-network/object-identity";
13
+
14
+ // src/instance/isModuleInstance.ts
15
+ import { IsObjectFactory as IsObjectFactory2 } from "@xyo-network/object-identity";
16
+
17
+ // src/module/asModule.ts
18
+ import { AsObjectFactory as AsObjectFactory2 } from "@xyo-network/object-identity";
19
+
20
+ // src/Queries/Describe/Payload.ts
21
+ var ModuleDescriptionSchema = "network.xyo.module.description";
22
+
23
+ // src/Queries/Describe/Query.ts
24
+ var ModuleDescribeQuerySchema = "network.xyo.query.module.describe";
25
+
26
+ // src/Queries/Discover.ts
27
+ var ModuleDiscoverQuerySchema = "network.xyo.query.module.discover";
28
+
29
+ // src/Queries/Manifest.ts
30
+ var ModuleManifestQuerySchema = "network.xyo.query.module.manifest";
31
+
32
+ // src/Queries/ModuleAddress/Payload.ts
33
+ import { AddressSchema } from "@xyo-network/address-payload-plugin";
34
+ var AddressPreviousHashSchema = `${AddressSchema}.hash.previous`;
35
+
36
+ // src/Queries/ModuleAddress/Query.ts
37
+ var ModuleAddressQuerySchema = "network.xyo.query.module.address";
38
+
39
+ // src/Queries/Subscribe.ts
40
+ var ModuleSubscribeQuerySchema = "network.xyo.query.module.subscribe";
41
+
42
+ // src/module/asModuleObject.ts
43
+ import { AsObjectFactory } from "@xyo-network/object-identity";
44
+
45
+ // src/module/isModuleObject.ts
46
+ import { IsObjectFactory } from "@xyo-network/object-identity";
47
+ var requiredModuleFunctions = {
48
+ address: "string",
49
+ config: "object",
50
+ params: "object",
51
+ queries: "array",
52
+ query: "function",
53
+ queryable: "function"
54
+ };
55
+ var factory = new IsObjectFactory();
56
+ var isModuleObject = factory.create(requiredModuleFunctions);
57
+
58
+ // src/module/asModuleObject.ts
59
+ var asModuleObject = AsObjectFactory.create(isModuleObject);
60
+
61
+ // src/module/IsModuleFactory.ts
62
+ var IsModuleFactory = class {
63
+ create(expectedQueries, additionalChecks) {
64
+ return (obj, config) => {
65
+ const module = asModuleObject(obj);
66
+ const result = isModuleObject(module, config) && (expectedQueries?.reduce((prev, query) => prev && obj.queries.includes(query), true) ?? true) && //perform additional checks
67
+ (additionalChecks?.reduce((prev, check) => prev && check(obj, config), true) ?? true);
68
+ return result;
69
+ };
70
+ }
71
+ };
72
+
73
+ // src/module/isModule.ts
74
+ var requiredModuleQueries = [
75
+ /* We need to update this once live module conform */
76
+ //ModuleDescribeQuerySchema,
77
+ //ModuleAddressQuerySchema,
78
+ ModuleDiscoverQuerySchema
79
+ //ModuleManifestQuerySchema,
80
+ //ModuleSubscribeQuerySchema,
81
+ ];
82
+ var factory2 = new IsModuleFactory();
83
+ var isModule = factory2.create(requiredModuleQueries, [isModuleObject]);
84
+
85
+ // src/module/asModule.ts
86
+ var asModule = AsObjectFactory2.create(isModule);
87
+
88
+ // src/instance/isModuleInstance.ts
89
+ var requiredModuleInstanceFunctions = {
90
+ describe: "function",
91
+ discover: "function",
92
+ manifest: "function",
93
+ moduleAddress: "function"
94
+ };
95
+ var factory3 = new IsObjectFactory2();
96
+ var isModuleInstance = factory3.create(requiredModuleInstanceFunctions, [isModule]);
97
+
98
+ // src/instance/asModuleInstance.ts
99
+ var asModuleInstance = AsObjectFactory3.create(isModuleInstance);
100
+
101
+ // src/instance/ModuleInstance.ts
102
+ import { IsObjectFactory as IsObjectFactory3 } from "@xyo-network/object-identity";
103
+ var IsInstanceFactory = class extends IsObjectFactory3 {
104
+ };
105
+
106
+ // src/lib/duplicateModules.ts
107
+ var duplicateModules = (value, index, array) => {
108
+ return array.findIndex((v) => v.address === value.address) === index;
109
+ };
110
+
111
+ // src/lib/serializable.ts
112
+ import { every, isArray, isBoolean, isNull, isNumber, isPlainObject, isString, isUndefined, overSome } from "@xylabs/lodash";
113
+ var JSONPrimitiveChecks = [isUndefined, isNull, isBoolean, isNumber, isString];
114
+ var JSONComplexChecks = [isPlainObject, isArray];
115
+ var serializable = (field, depth) => {
116
+ let depthExceeded = false;
117
+ const decrementDepth = () => depth ? depth-- : void 0;
118
+ const recursiveSerializable = (field2) => {
119
+ if (depth !== void 0 && depth < 1) {
120
+ depthExceeded = true;
121
+ return false;
122
+ }
123
+ decrementDepth();
124
+ const nestedSerializable = (field3) => overSome(JSONComplexChecks)(field3) && every(field3, recursiveSerializable);
125
+ return overSome([...JSONPrimitiveChecks, nestedSerializable])(field2);
126
+ };
127
+ const valid = recursiveSerializable(field);
128
+ return depthExceeded ? null : valid;
129
+ };
130
+ var serializableField = (field) => {
131
+ return overSome([...JSONPrimitiveChecks, ...JSONComplexChecks])(field);
132
+ };
133
+
134
+ // src/ModuleFactory.ts
135
+ import { assertEx } from "@xylabs/assert";
136
+ import { merge } from "@xylabs/lodash";
137
+ var ModuleFactory = class _ModuleFactory {
138
+ configSchemas;
139
+ creatableModule;
140
+ defaultLogger;
141
+ defaultParams;
142
+ constructor(creatableModule2, params) {
143
+ this.creatableModule = creatableModule2;
144
+ this.defaultParams = params;
145
+ this.configSchemas = creatableModule2.configSchemas;
146
+ }
147
+ get configSchema() {
148
+ return this.configSchemas[0];
149
+ }
150
+ static withParams(creatableModule2, params) {
151
+ return new _ModuleFactory(creatableModule2, params);
152
+ }
153
+ _getRootFunction(funcName) {
154
+ let anyThis = this;
155
+ while (anyThis.__proto__[funcName]) {
156
+ anyThis = anyThis.__proto__;
157
+ }
158
+ return anyThis[funcName];
159
+ }
160
+ _noOverride(functionName) {
161
+ const thisFunc = this[functionName];
162
+ const rootFunc = this._getRootFunction(functionName);
163
+ assertEx(thisFunc === rootFunc, `Override not allowed for [${functionName}] - override ${functionName}Handler instead`);
164
+ }
165
+ create(params) {
166
+ const factory4 = this;
167
+ const schema = factory4.creatableModule.configSchema;
168
+ const mergedParams = merge({}, factory4.defaultParams, params, {
169
+ config: merge({}, factory4.defaultParams?.config, params?.config, { schema })
170
+ });
171
+ return factory4.creatableModule.create(mergedParams);
172
+ }
173
+ factory(_params) {
174
+ throw new Error("Method not implemented.");
175
+ }
176
+ };
177
+
178
+ // src/withModule.ts
179
+ var WithFactory = {
180
+ create: (typeCheck) => {
181
+ return (module, closure) => {
182
+ return typeCheck(module) ? closure(module) : void 0;
183
+ };
184
+ }
185
+ };
186
+ var withModule = WithFactory.create(isModule);
187
+ var withModuleInstance = WithFactory.create(isModuleInstance);
188
+ export {
189
+ AddressPreviousHashSchema,
190
+ IsInstanceFactory,
191
+ IsModuleFactory,
192
+ ModuleAddressQuerySchema,
193
+ ModuleConfigSchema,
194
+ ModuleDescribeQuerySchema,
195
+ ModuleDescriptionSchema,
196
+ ModuleDiscoverQuerySchema,
197
+ ModuleFactory,
198
+ ModuleManifestQuerySchema,
199
+ ModuleSubscribeQuerySchema,
200
+ WithFactory,
201
+ asModule,
202
+ asModuleInstance,
203
+ asModuleObject,
204
+ creatableModule,
205
+ duplicateModules,
206
+ isModule,
207
+ isModuleInstance,
208
+ isModuleObject,
209
+ requiredModuleFunctions,
210
+ requiredModuleInstanceFunctions,
211
+ requiredModuleQueries,
212
+ serializable,
213
+ serializableField,
214
+ withModule,
215
+ withModuleInstance
216
+ };
217
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/Config.ts","../src/CreatableModule.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/ModuleFactory.ts","../src/withModule.ts"],"sourcesContent":["import { WithAdditional } from '@xyo-network/core'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport type ModuleConfigSchema = 'network.xyo.module.config'\nexport const ModuleConfigSchema: ModuleConfigSchema = 'network.xyo.module.config'\n\nexport type AddressString = string\nexport type CosigningAddressSet = string[]\nexport type SchemaString = string\n\nexport type NameOrAddress = string\n\nexport interface IndividualArchivistConfig {\n readonly commit?: NameOrAddress\n readonly read?: NameOrAddress\n readonly write?: NameOrAddress\n}\n\nexport type ArchivistModuleConfig = NameOrAddress | IndividualArchivistConfig\n\nexport type ModuleConfigBase<TConfig extends Payload | undefined = undefined> = Payload<\n WithAdditional<\n {\n /** @field The path to use when creating the account */\n accountDerivationPath?: string\n\n /** @field The name/address of the Archivist to use for this module */\n readonly archivist?: ArchivistModuleConfig\n\n /** @field Friendly name of module (not collision resistent). Can be used to resolve module when registered/attached to Node. */\n readonly name?: string\n\n /** @field paging settings for queries */\n readonly paging?: Record<string, { size?: number }>\n\n /** @field The config schema for the module */\n readonly 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, (AddressString | CosigningAddressSet)[]>\n\n /** @field If schema in record, then anyone except these addresses can access query */\n readonly disallowed?: Record<SchemaString, AddressString[]>\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 },\n Omit<TConfig, 'schema'>\n >\n>\n\nexport type ModuleConfig<TConfig extends Payload | undefined = undefined> = ModuleConfigBase<TConfig>\n\nexport type AnyConfigSchema<TConfig extends Omit<ModuleConfig, 'schema'> & { schema: string } = Omit<ModuleConfig, 'schema'> & { schema: string }> =\n ModuleConfig<\n WithAdditional<\n Omit<TConfig, 'schema'>,\n {\n schema: string\n }\n >\n >\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 { AccountInstance } from '@xyo-network/account-model'\nimport { Logger } from '@xyo-network/logger'\n\nimport { ModuleInstance } from './instance'\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\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\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 { AsObjectFactory } from '@xyo-network/object-identity'\n\nimport { isModuleInstance } from './isModuleInstance'\n\nexport const asModuleInstance = AsObjectFactory.create(isModuleInstance)\n","import { IsObjectFactory, ObjectTypeCheck, ObjectTypeShape } from '@xyo-network/object-identity'\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: ObjectTypeCheck<ModuleInstance> = factory.create(requiredModuleInstanceFunctions, [isModule])\n","import { AsObjectFactory } from '@xyo-network/object-identity'\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 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 schema: ModuleManifestQuerySchema\n}>\n","import { 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: string\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 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: string\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 '@xyo-network/object-identity'\n\nimport { isModuleObject } from './isModuleObject'\n\nexport const asModuleObject = AsObjectFactory.create(isModuleObject)\n","import { IsObjectFactory, ObjectTypeCheck, ObjectTypeShape } from '@xyo-network/object-identity'\n\nimport { Module } from './Module'\n\nexport const requiredModuleFunctions: 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: ObjectTypeCheck<Module> = factory.create(requiredModuleFunctions)\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ObjectTypeCheck } from '@xyo-network/object-identity'\n\nimport { asModuleObject } from './asModuleObject'\nimport { isModuleObject } from './isModuleObject'\nimport { Module } from './Module'\n\nexport type ModuleTypeCheck<T extends Module = Module> = ObjectTypeCheck<T>\n\nexport class IsModuleFactory<T extends Module = Module> {\n create(expectedQueries?: string[], additionalChecks?: ObjectTypeCheck[]): ModuleTypeCheck<T> {\n return (obj: any, config): obj is T => {\n const module = asModuleObject(obj)\n const result =\n isModuleObject(module, config) &&\n (expectedQueries?.reduce((prev, query) => prev && obj.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 { ObjectTypeCheck } from '@xyo-network/object-identity'\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: ObjectTypeCheck<Module> = factory.create(requiredModuleQueries, [isModuleObject])\n","import { IsObjectFactory, ObjectTypeCheck } from '@xyo-network/object-identity'\nimport { Promisable } from '@xyo-network/promise'\n\nimport { AnyConfigSchema, ModuleConfig } from '../Config'\nimport { ModuleEventData } from '../Events'\nimport { Module, ModuleQueryFunctions } from '../module'\nimport { ModuleParams } from '../ModuleParams'\n\nexport interface ResolveFunctions {\n resolve<T extends ModuleInstance = ModuleInstance>(filter?: ModuleFilter<T>, options?: ModuleFilterOptions<T>): Promisable<T[]>\n resolve<T extends ModuleInstance = ModuleInstance>(nameOrAddress: string, options?: ModuleFilterOptions<T>): Promisable<T | undefined>\n resolve<T extends ModuleInstance = ModuleInstance>(\n nameOrAddressOrFilter?: ModuleFilter<T> | string,\n options?: ModuleFilterOptions<T>,\n ): Promisable<T | T[] | undefined>\n}\n\nexport interface ModuleResolver extends ResolveFunctions {\n addResolver: (resolver: ModuleResolver) => this\n isModuleResolver: boolean\n removeResolver: (resolver: ModuleResolver) => this\n}\n\nexport type ModuleInstance<\n TParams extends ModuleParams<AnyConfigSchema<ModuleConfig>> = ModuleParams<AnyConfigSchema<ModuleConfig>>,\n TEventData extends ModuleEventData = ModuleEventData,\n> = Module<TParams, TEventData> &\n ResolveFunctions &\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<ModuleResolver, 'resolve'>\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<ModuleResolver, 'resolve'>\n }\n\nexport type InstanceTypeCheck<T extends ModuleInstance = ModuleInstance> = ObjectTypeCheck<T>\n\nexport class IsInstanceFactory<T extends ModuleInstance = ModuleInstance> extends IsObjectFactory<T> {}\n\nexport interface ModuleFilterOptions<T extends ModuleInstance = ModuleInstance> {\n direction?: 'up' | 'down' | 'all'\n identity?: InstanceTypeCheck<T>\n maxDepth?: number\n visibility?: 'public' | 'private' | 'all'\n}\n\nexport interface AddressModuleFilter<T extends ModuleInstance = ModuleInstance> extends ModuleFilterOptions<T> {\n address: string[]\n}\n\nexport interface NameModuleFilter<T extends ModuleInstance = ModuleInstance> extends ModuleFilterOptions<T> {\n name: string[]\n}\n\nexport interface QueryModuleFilter<T extends ModuleInstance = ModuleInstance> extends ModuleFilterOptions<T> {\n query: string[][]\n}\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 { assertEx } from '@xylabs/assert'\nimport { merge } from '@xylabs/lodash'\nimport { Logger } from '@xyo-network/logger'\n\nimport { CreatableModule, CreatableModuleFactory } from './CreatableModule'\nimport { ModuleInstance } from './instance'\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?: TModule['params']['config'] }\n\n constructor(creatableModule: CreatableModule<TModule>, params?: Omit<TModule['params'], 'config'> & { config?: TModule['params']['config'] }) {\n this.creatableModule = creatableModule\n this.defaultParams = params\n this.configSchemas = creatableModule.configSchemas\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 ) {\n return new ModuleFactory(creatableModule, params)\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 { ObjectTypeCheck } from '@xyo-network/object-identity'\n\nimport { isModuleInstance } from './instance'\nimport { isModule } from './module'\n\nexport const WithFactory = {\n create: <T extends object>(typeCheck: ObjectTypeCheck<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":["AsObjectFactory","IsObjectFactory","AsObjectFactory","factory","AsObjectFactory","factory","IsObjectFactory","AsObjectFactory","IsObjectFactory","field","creatableModule","factory"]}