@xyo-network/module-model 2.75.0 → 2.75.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 (436) hide show
  1. package/dist/browser/Config.d.cts +60 -0
  2. package/dist/browser/Config.d.cts.map +1 -0
  3. package/dist/browser/Config.js +1 -2
  4. package/dist/browser/Config.js.map +1 -1
  5. package/dist/browser/CreatableModule/CreatableModule.d.cts +23 -0
  6. package/dist/browser/CreatableModule/CreatableModule.d.cts.map +1 -0
  7. package/dist/browser/CreatableModule/CreatableModule.js +0 -1
  8. package/dist/browser/CreatableModule/CreatableModule.js.map +1 -1
  9. package/dist/browser/CreatableModule/CreatableModuleDictionary.d.cts +5 -0
  10. package/dist/browser/CreatableModule/CreatableModuleDictionary.d.cts.map +1 -0
  11. package/dist/browser/CreatableModule/CreatableModuleRegistry.d.cts +9 -0
  12. package/dist/browser/CreatableModule/CreatableModuleRegistry.d.cts.map +1 -0
  13. package/dist/browser/CreatableModule/CreatableModuleRegistry.js +2 -3
  14. package/dist/browser/CreatableModule/CreatableModuleRegistry.js.map +1 -1
  15. package/dist/browser/CreatableModule/LabeledCreatableModuleFactory.d.cts +6 -0
  16. package/dist/browser/CreatableModule/LabeledCreatableModuleFactory.d.cts.map +1 -0
  17. package/dist/browser/CreatableModule/LabeledCreatableModuleFactory.js +1 -2
  18. package/dist/browser/CreatableModule/LabeledCreatableModuleFactory.js.map +1 -1
  19. package/dist/browser/CreatableModule/ModuleFactory.d.cts +25 -0
  20. package/dist/browser/CreatableModule/ModuleFactory.d.cts.map +1 -0
  21. package/dist/browser/CreatableModule/ModuleFactory.js +3 -4
  22. package/dist/browser/CreatableModule/ModuleFactory.js.map +1 -1
  23. package/dist/browser/CreatableModule/ModuleFactoryLocator.d.cts +41 -0
  24. package/dist/browser/CreatableModule/ModuleFactoryLocator.d.cts.map +1 -0
  25. package/dist/browser/CreatableModule/ModuleFactoryLocator.js +4 -19
  26. package/dist/browser/CreatableModule/ModuleFactoryLocator.js.map +1 -1
  27. package/dist/browser/CreatableModule/index.d.cts +7 -0
  28. package/dist/browser/CreatableModule/index.d.cts.map +1 -0
  29. package/dist/browser/CreatableModule/index.js +6 -169
  30. package/dist/browser/CreatableModule/index.js.map +1 -1
  31. package/dist/browser/EventsModels/ModuleBusy.d.cts +9 -0
  32. package/dist/browser/EventsModels/ModuleBusy.d.cts.map +1 -0
  33. package/dist/browser/EventsModels/ModuleError.d.cts +9 -0
  34. package/dist/browser/EventsModels/ModuleError.d.cts.map +1 -0
  35. package/dist/browser/EventsModels/ModuleEventArgs.d.cts +7 -0
  36. package/dist/browser/EventsModels/ModuleEventArgs.d.cts.map +1 -0
  37. package/dist/browser/EventsModels/ModuleEventData.d.cts +6 -0
  38. package/dist/browser/EventsModels/ModuleEventData.d.cts.map +1 -0
  39. package/dist/browser/EventsModels/ModuleQueried.d.cts +14 -0
  40. package/dist/browser/EventsModels/ModuleQueried.d.cts.map +1 -0
  41. package/dist/browser/EventsModels/index.d.cts +6 -0
  42. package/dist/browser/EventsModels/index.d.cts.map +1 -0
  43. package/dist/browser/EventsModels/index.js +5 -0
  44. package/dist/browser/EventsModels/index.js.map +1 -1
  45. package/dist/browser/Labels/Labels.d.cts +26 -0
  46. package/dist/browser/Labels/Labels.d.cts.map +1 -0
  47. package/dist/browser/Labels/Labels.js +1 -2
  48. package/dist/browser/Labels/Labels.js.map +1 -1
  49. package/dist/browser/Labels/index.d.cts +2 -0
  50. package/dist/browser/Labels/index.d.cts.map +1 -0
  51. package/dist/browser/Labels/index.js +1 -11
  52. package/dist/browser/Labels/index.js.map +1 -1
  53. package/dist/browser/ModuleDescription.d.cts +7 -0
  54. package/dist/browser/ModuleDescription.d.cts.map +1 -0
  55. package/dist/browser/ModuleParams.d.cts +11 -0
  56. package/dist/browser/ModuleParams.d.cts.map +1 -0
  57. package/dist/browser/ModuleQueryHandlerResult.d.cts +3 -0
  58. package/dist/browser/ModuleQueryHandlerResult.d.cts.map +1 -0
  59. package/dist/browser/ModuleQueryResult.d.cts +4 -0
  60. package/dist/browser/ModuleQueryResult.d.cts.map +1 -0
  61. package/dist/browser/Queries/Describe/Payload.d.cts +6 -0
  62. package/dist/browser/Queries/Describe/Payload.d.cts.map +1 -0
  63. package/dist/browser/Queries/Describe/Payload.js +1 -2
  64. package/dist/browser/Queries/Describe/Payload.js.map +1 -1
  65. package/dist/browser/Queries/Describe/Query.d.cts +7 -0
  66. package/dist/browser/Queries/Describe/Query.d.cts.map +1 -0
  67. package/dist/browser/Queries/Describe/Query.js +1 -2
  68. package/dist/browser/Queries/Describe/Query.js.map +1 -1
  69. package/dist/browser/Queries/Describe/index.d.cts +3 -0
  70. package/dist/browser/Queries/Describe/index.d.cts.map +1 -0
  71. package/dist/browser/Queries/Describe/index.js +2 -9
  72. package/dist/browser/Queries/Describe/index.js.map +1 -1
  73. package/dist/browser/Queries/Discover.d.cts +7 -0
  74. package/dist/browser/Queries/Discover.d.cts.map +1 -0
  75. package/dist/browser/Queries/Discover.js +1 -2
  76. package/dist/browser/Queries/Discover.js.map +1 -1
  77. package/dist/browser/Queries/Manifest.d.cts +7 -0
  78. package/dist/browser/Queries/Manifest.d.cts.map +1 -0
  79. package/dist/browser/Queries/Manifest.js +1 -2
  80. package/dist/browser/Queries/Manifest.js.map +1 -1
  81. package/dist/browser/Queries/ModuleAddress/Payload.d.cts +9 -0
  82. package/dist/browser/Queries/ModuleAddress/Payload.d.cts.map +1 -0
  83. package/dist/browser/Queries/ModuleAddress/Payload.js +1 -2
  84. package/dist/browser/Queries/ModuleAddress/Payload.js.map +1 -1
  85. package/dist/browser/Queries/ModuleAddress/Query.d.cts +7 -0
  86. package/dist/browser/Queries/ModuleAddress/Query.d.cts.map +1 -0
  87. package/dist/browser/Queries/ModuleAddress/Query.js +1 -2
  88. package/dist/browser/Queries/ModuleAddress/Query.js.map +1 -1
  89. package/dist/browser/Queries/ModuleAddress/index.d.cts +3 -0
  90. package/dist/browser/Queries/ModuleAddress/index.d.cts.map +1 -0
  91. package/dist/browser/Queries/ModuleAddress/index.js +2 -10
  92. package/dist/browser/Queries/ModuleAddress/index.js.map +1 -1
  93. package/dist/browser/Queries/Subscribe.d.cts +17 -0
  94. package/dist/browser/Queries/Subscribe.d.cts.map +1 -0
  95. package/dist/browser/Queries/Subscribe.js +1 -2
  96. package/dist/browser/Queries/Subscribe.js.map +1 -1
  97. package/dist/browser/Queries/index.d.cts +14 -0
  98. package/dist/browser/Queries/index.d.cts.map +1 -0
  99. package/dist/browser/Queries/index.js +5 -30
  100. package/dist/browser/Queries/index.js.map +1 -1
  101. package/dist/browser/index.d.cts +14 -0
  102. package/dist/browser/index.d.cts.map +1 -0
  103. package/dist/browser/index.js +13 -332
  104. package/dist/browser/index.js.map +1 -1
  105. package/dist/browser/instance/ModuleInstance.d.cts +41 -0
  106. package/dist/browser/instance/ModuleInstance.d.cts.map +1 -0
  107. package/dist/browser/instance/ModuleInstance.js +2 -3
  108. package/dist/browser/instance/ModuleInstance.js.map +1 -1
  109. package/dist/browser/instance/ModuleRepository.d.cts +9 -0
  110. package/dist/browser/instance/ModuleRepository.d.cts.map +1 -0
  111. package/dist/browser/instance/asModuleInstance.d.cts +5 -0
  112. package/dist/browser/instance/asModuleInstance.d.cts.map +1 -0
  113. package/dist/browser/instance/asModuleInstance.js +2 -63
  114. package/dist/browser/instance/asModuleInstance.js.map +1 -1
  115. package/dist/browser/instance/index.d.cts +5 -0
  116. package/dist/browser/instance/index.d.cts.map +1 -0
  117. package/dist/browser/instance/index.js +4 -75
  118. package/dist/browser/instance/index.js.map +1 -1
  119. package/dist/browser/instance/isModuleInstance.d.cts +5 -0
  120. package/dist/browser/instance/isModuleInstance.d.cts.map +1 -0
  121. package/dist/browser/instance/isModuleInstance.js +4 -52
  122. package/dist/browser/instance/isModuleInstance.js.map +1 -1
  123. package/dist/browser/lib/duplicateModules.d.cts +12 -0
  124. package/dist/browser/lib/duplicateModules.d.cts.map +1 -0
  125. package/dist/browser/lib/duplicateModules.js +1 -2
  126. package/dist/browser/lib/duplicateModules.js.map +1 -1
  127. package/dist/browser/lib/index.d.cts +3 -0
  128. package/dist/browser/lib/index.d.cts.map +1 -0
  129. package/dist/browser/lib/index.js +2 -32
  130. package/dist/browser/lib/index.js.map +1 -1
  131. package/dist/browser/lib/serializable.d.cts +3 -0
  132. package/dist/browser/lib/serializable.d.cts.map +1 -0
  133. package/dist/browser/lib/serializable.js +4 -5
  134. package/dist/browser/lib/serializable.js.map +1 -1
  135. package/dist/browser/module/IsModuleFactory.d.cts +7 -0
  136. package/dist/browser/module/IsModuleFactory.d.cts.map +1 -0
  137. package/dist/browser/module/IsModuleFactory.js +4 -22
  138. package/dist/browser/module/IsModuleFactory.js.map +1 -1
  139. package/dist/browser/module/Module.d.cts +6 -0
  140. package/dist/browser/module/Module.d.cts.map +1 -0
  141. package/dist/browser/module/ModuleFields.d.cts +18 -0
  142. package/dist/browser/module/ModuleFields.d.cts.map +1 -0
  143. package/dist/browser/module/ModuleQueryFunctions.d.cts +12 -0
  144. package/dist/browser/module/ModuleQueryFunctions.d.cts.map +1 -0
  145. package/dist/browser/module/asModule.d.cts +5 -0
  146. package/dist/browser/module/asModule.d.cts.map +1 -0
  147. package/dist/browser/module/asModule.js +2 -50
  148. package/dist/browser/module/asModule.js.map +1 -1
  149. package/dist/browser/module/asModuleObject.d.cts +5 -0
  150. package/dist/browser/module/asModuleObject.d.cts.map +1 -0
  151. package/dist/browser/module/asModuleObject.js +2 -17
  152. package/dist/browser/module/asModuleObject.js.map +1 -1
  153. package/dist/browser/module/index.d.cts +9 -0
  154. package/dist/browser/module/index.d.cts.map +1 -0
  155. package/dist/browser/module/index.js +8 -60
  156. package/dist/browser/module/index.js.map +1 -1
  157. package/dist/browser/module/isModule.d.cts +5 -0
  158. package/dist/browser/module/isModule.d.cts.map +1 -0
  159. package/dist/browser/module/isModule.js +6 -38
  160. package/dist/browser/module/isModule.js.map +1 -1
  161. package/dist/browser/module/isModuleObject.d.cts +5 -0
  162. package/dist/browser/module/isModuleObject.d.cts.map +1 -0
  163. package/dist/browser/module/isModuleObject.js +3 -4
  164. package/dist/browser/module/isModuleObject.js.map +1 -1
  165. package/dist/browser/withModule.d.cts +7 -0
  166. package/dist/browser/withModule.d.cts.map +1 -0
  167. package/dist/browser/withModule.js +5 -63
  168. package/dist/browser/withModule.js.map +1 -1
  169. package/dist/docs.json +52596 -0
  170. package/dist/node/Config.d.cts +60 -0
  171. package/dist/node/Config.d.cts.map +1 -0
  172. package/dist/node/Config.js +3 -1
  173. package/dist/node/Config.js.map +1 -1
  174. package/dist/node/Config.mjs +2 -1
  175. package/dist/node/Config.mjs.map +1 -1
  176. package/dist/node/CreatableModule/CreatableModule.d.cts +23 -0
  177. package/dist/node/CreatableModule/CreatableModule.d.cts.map +1 -0
  178. package/dist/node/CreatableModule/CreatableModule.js +2 -0
  179. package/dist/node/CreatableModule/CreatableModule.js.map +1 -1
  180. package/dist/node/CreatableModule/CreatableModule.mjs +1 -0
  181. package/dist/node/CreatableModule/CreatableModule.mjs.map +1 -1
  182. package/dist/node/CreatableModule/CreatableModuleDictionary.d.cts +5 -0
  183. package/dist/node/CreatableModule/CreatableModuleDictionary.d.cts.map +1 -0
  184. package/dist/node/CreatableModule/CreatableModuleDictionary.js +2 -0
  185. package/dist/node/CreatableModule/CreatableModuleDictionary.js.map +1 -1
  186. package/dist/node/CreatableModule/CreatableModuleRegistry.d.cts +9 -0
  187. package/dist/node/CreatableModule/CreatableModuleRegistry.d.cts.map +1 -0
  188. package/dist/node/CreatableModule/CreatableModuleRegistry.js +4 -2
  189. package/dist/node/CreatableModule/CreatableModuleRegistry.js.map +1 -1
  190. package/dist/node/CreatableModule/CreatableModuleRegistry.mjs +3 -2
  191. package/dist/node/CreatableModule/CreatableModuleRegistry.mjs.map +1 -1
  192. package/dist/node/CreatableModule/LabeledCreatableModuleFactory.d.cts +6 -0
  193. package/dist/node/CreatableModule/LabeledCreatableModuleFactory.d.cts.map +1 -0
  194. package/dist/node/CreatableModule/LabeledCreatableModuleFactory.js +3 -1
  195. package/dist/node/CreatableModule/LabeledCreatableModuleFactory.js.map +1 -1
  196. package/dist/node/CreatableModule/LabeledCreatableModuleFactory.mjs +2 -1
  197. package/dist/node/CreatableModule/LabeledCreatableModuleFactory.mjs.map +1 -1
  198. package/dist/node/CreatableModule/ModuleFactory.d.cts +25 -0
  199. package/dist/node/CreatableModule/ModuleFactory.d.cts.map +1 -0
  200. package/dist/node/CreatableModule/ModuleFactory.js +7 -4
  201. package/dist/node/CreatableModule/ModuleFactory.js.map +1 -1
  202. package/dist/node/CreatableModule/ModuleFactory.mjs +6 -4
  203. package/dist/node/CreatableModule/ModuleFactory.mjs.map +1 -1
  204. package/dist/node/CreatableModule/ModuleFactoryLocator.d.cts +41 -0
  205. package/dist/node/CreatableModule/ModuleFactoryLocator.d.cts.map +1 -0
  206. package/dist/node/CreatableModule/ModuleFactoryLocator.js +23 -6
  207. package/dist/node/CreatableModule/ModuleFactoryLocator.js.map +1 -1
  208. package/dist/node/CreatableModule/ModuleFactoryLocator.mjs +22 -6
  209. package/dist/node/CreatableModule/ModuleFactoryLocator.mjs.map +1 -1
  210. package/dist/node/CreatableModule/index.d.cts +7 -0
  211. package/dist/node/CreatableModule/index.d.cts.map +1 -0
  212. package/dist/node/CreatableModule/index.js +184 -13
  213. package/dist/node/CreatableModule/index.js.map +1 -1
  214. package/dist/node/CreatableModule/index.mjs +171 -6
  215. package/dist/node/CreatableModule/index.mjs.map +1 -1
  216. package/dist/node/EventsModels/ModuleBusy.d.cts +9 -0
  217. package/dist/node/EventsModels/ModuleBusy.d.cts.map +1 -0
  218. package/dist/node/EventsModels/ModuleBusy.js +2 -0
  219. package/dist/node/EventsModels/ModuleBusy.js.map +1 -1
  220. package/dist/node/EventsModels/ModuleError.d.cts +9 -0
  221. package/dist/node/EventsModels/ModuleError.d.cts.map +1 -0
  222. package/dist/node/EventsModels/ModuleError.js +2 -0
  223. package/dist/node/EventsModels/ModuleError.js.map +1 -1
  224. package/dist/node/EventsModels/ModuleEventArgs.d.cts +7 -0
  225. package/dist/node/EventsModels/ModuleEventArgs.d.cts.map +1 -0
  226. package/dist/node/EventsModels/ModuleEventArgs.js +2 -0
  227. package/dist/node/EventsModels/ModuleEventArgs.js.map +1 -1
  228. package/dist/node/EventsModels/ModuleEventData.d.cts +6 -0
  229. package/dist/node/EventsModels/ModuleEventData.d.cts.map +1 -0
  230. package/dist/node/EventsModels/ModuleEventData.js +2 -0
  231. package/dist/node/EventsModels/ModuleEventData.js.map +1 -1
  232. package/dist/node/EventsModels/ModuleQueried.d.cts +14 -0
  233. package/dist/node/EventsModels/ModuleQueried.d.cts.map +1 -0
  234. package/dist/node/EventsModels/ModuleQueried.js +2 -0
  235. package/dist/node/EventsModels/ModuleQueried.js.map +1 -1
  236. package/dist/node/EventsModels/index.d.cts +6 -0
  237. package/dist/node/EventsModels/index.d.cts.map +1 -0
  238. package/dist/node/EventsModels/index.js +2 -14
  239. package/dist/node/EventsModels/index.js.map +1 -1
  240. package/dist/node/EventsModels/index.mjs +0 -5
  241. package/dist/node/EventsModels/index.mjs.map +1 -1
  242. package/dist/node/Labels/Labels.d.cts +26 -0
  243. package/dist/node/Labels/Labels.d.cts.map +1 -0
  244. package/dist/node/Labels/Labels.js +4 -2
  245. package/dist/node/Labels/Labels.js.map +1 -1
  246. package/dist/node/Labels/Labels.mjs +3 -2
  247. package/dist/node/Labels/Labels.mjs.map +1 -1
  248. package/dist/node/Labels/index.d.cts +2 -0
  249. package/dist/node/Labels/index.d.cts.map +1 -0
  250. package/dist/node/Labels/index.js +19 -3
  251. package/dist/node/Labels/index.js.map +1 -1
  252. package/dist/node/Labels/index.mjs +11 -1
  253. package/dist/node/Labels/index.mjs.map +1 -1
  254. package/dist/node/ModuleDescription.d.cts +7 -0
  255. package/dist/node/ModuleDescription.d.cts.map +1 -0
  256. package/dist/node/ModuleDescription.js +2 -0
  257. package/dist/node/ModuleDescription.js.map +1 -1
  258. package/dist/node/ModuleParams.d.cts +11 -0
  259. package/dist/node/ModuleParams.d.cts.map +1 -0
  260. package/dist/node/ModuleParams.js +2 -0
  261. package/dist/node/ModuleParams.js.map +1 -1
  262. package/dist/node/ModuleQueryHandlerResult.d.cts +3 -0
  263. package/dist/node/ModuleQueryHandlerResult.d.cts.map +1 -0
  264. package/dist/node/ModuleQueryHandlerResult.js +2 -0
  265. package/dist/node/ModuleQueryHandlerResult.js.map +1 -1
  266. package/dist/node/ModuleQueryResult.d.cts +4 -0
  267. package/dist/node/ModuleQueryResult.d.cts.map +1 -0
  268. package/dist/node/ModuleQueryResult.js +2 -0
  269. package/dist/node/ModuleQueryResult.js.map +1 -1
  270. package/dist/node/Queries/Describe/Payload.d.cts +6 -0
  271. package/dist/node/Queries/Describe/Payload.d.cts.map +1 -0
  272. package/dist/node/Queries/Describe/Payload.js +3 -1
  273. package/dist/node/Queries/Describe/Payload.js.map +1 -1
  274. package/dist/node/Queries/Describe/Payload.mjs +2 -1
  275. package/dist/node/Queries/Describe/Payload.mjs.map +1 -1
  276. package/dist/node/Queries/Describe/Query.d.cts +7 -0
  277. package/dist/node/Queries/Describe/Query.d.cts.map +1 -0
  278. package/dist/node/Queries/Describe/Query.js +3 -1
  279. package/dist/node/Queries/Describe/Query.js.map +1 -1
  280. package/dist/node/Queries/Describe/Query.mjs +2 -1
  281. package/dist/node/Queries/Describe/Query.mjs.map +1 -1
  282. package/dist/node/Queries/Describe/index.d.cts +3 -0
  283. package/dist/node/Queries/Describe/index.d.cts.map +1 -0
  284. package/dist/node/Queries/Describe/index.js +18 -5
  285. package/dist/node/Queries/Describe/index.js.map +1 -1
  286. package/dist/node/Queries/Describe/index.mjs +9 -2
  287. package/dist/node/Queries/Describe/index.mjs.map +1 -1
  288. package/dist/node/Queries/Discover.d.cts +7 -0
  289. package/dist/node/Queries/Discover.d.cts.map +1 -0
  290. package/dist/node/Queries/Discover.js +3 -1
  291. package/dist/node/Queries/Discover.js.map +1 -1
  292. package/dist/node/Queries/Discover.mjs +2 -1
  293. package/dist/node/Queries/Discover.mjs.map +1 -1
  294. package/dist/node/Queries/Manifest.d.cts +7 -0
  295. package/dist/node/Queries/Manifest.d.cts.map +1 -0
  296. package/dist/node/Queries/Manifest.js +3 -1
  297. package/dist/node/Queries/Manifest.js.map +1 -1
  298. package/dist/node/Queries/Manifest.mjs +2 -1
  299. package/dist/node/Queries/Manifest.mjs.map +1 -1
  300. package/dist/node/Queries/ModuleAddress/Payload.d.cts +9 -0
  301. package/dist/node/Queries/ModuleAddress/Payload.d.cts.map +1 -0
  302. package/dist/node/Queries/ModuleAddress/Payload.js +3 -1
  303. package/dist/node/Queries/ModuleAddress/Payload.js.map +1 -1
  304. package/dist/node/Queries/ModuleAddress/Payload.mjs +2 -1
  305. package/dist/node/Queries/ModuleAddress/Payload.mjs.map +1 -1
  306. package/dist/node/Queries/ModuleAddress/Query.d.cts +7 -0
  307. package/dist/node/Queries/ModuleAddress/Query.d.cts.map +1 -0
  308. package/dist/node/Queries/ModuleAddress/Query.js +3 -1
  309. package/dist/node/Queries/ModuleAddress/Query.js.map +1 -1
  310. package/dist/node/Queries/ModuleAddress/Query.mjs +2 -1
  311. package/dist/node/Queries/ModuleAddress/Query.mjs.map +1 -1
  312. package/dist/node/Queries/ModuleAddress/index.d.cts +3 -0
  313. package/dist/node/Queries/ModuleAddress/index.d.cts.map +1 -0
  314. package/dist/node/Queries/ModuleAddress/index.js +19 -5
  315. package/dist/node/Queries/ModuleAddress/index.js.map +1 -1
  316. package/dist/node/Queries/ModuleAddress/index.mjs +10 -2
  317. package/dist/node/Queries/ModuleAddress/index.mjs.map +1 -1
  318. package/dist/node/Queries/Subscribe.d.cts +17 -0
  319. package/dist/node/Queries/Subscribe.d.cts.map +1 -0
  320. package/dist/node/Queries/Subscribe.js +3 -1
  321. package/dist/node/Queries/Subscribe.js.map +1 -1
  322. package/dist/node/Queries/Subscribe.mjs +2 -1
  323. package/dist/node/Queries/Subscribe.mjs.map +1 -1
  324. package/dist/node/Queries/index.d.cts +14 -0
  325. package/dist/node/Queries/index.d.cts.map +1 -0
  326. package/dist/node/Queries/index.js +44 -11
  327. package/dist/node/Queries/index.js.map +1 -1
  328. package/dist/node/Queries/index.mjs +30 -5
  329. package/dist/node/Queries/index.mjs.map +1 -1
  330. package/dist/node/index.d.cts +14 -0
  331. package/dist/node/index.d.cts.map +1 -0
  332. package/dist/node/index.js +373 -27
  333. package/dist/node/index.js.map +1 -1
  334. package/dist/node/index.mjs +334 -13
  335. package/dist/node/index.mjs.map +1 -1
  336. package/dist/node/instance/ModuleInstance.d.cts +41 -0
  337. package/dist/node/instance/ModuleInstance.d.cts.map +1 -0
  338. package/dist/node/instance/ModuleInstance.js +4 -2
  339. package/dist/node/instance/ModuleInstance.js.map +1 -1
  340. package/dist/node/instance/ModuleInstance.mjs +3 -2
  341. package/dist/node/instance/ModuleInstance.mjs.map +1 -1
  342. package/dist/node/instance/ModuleRepository.d.cts +9 -0
  343. package/dist/node/instance/ModuleRepository.d.cts.map +1 -0
  344. package/dist/node/instance/ModuleRepository.js +2 -0
  345. package/dist/node/instance/ModuleRepository.js.map +1 -1
  346. package/dist/node/instance/asModuleInstance.d.cts +5 -0
  347. package/dist/node/instance/asModuleInstance.d.cts.map +1 -0
  348. package/dist/node/instance/asModuleInstance.js +64 -2
  349. package/dist/node/instance/asModuleInstance.js.map +1 -1
  350. package/dist/node/instance/asModuleInstance.mjs +63 -2
  351. package/dist/node/instance/asModuleInstance.mjs.map +1 -1
  352. package/dist/node/instance/index.d.cts +5 -0
  353. package/dist/node/instance/index.d.cts.map +1 -0
  354. package/dist/node/instance/index.js +86 -9
  355. package/dist/node/instance/index.js.map +1 -1
  356. package/dist/node/instance/index.mjs +75 -4
  357. package/dist/node/instance/index.mjs.map +1 -1
  358. package/dist/node/instance/isModuleInstance.d.cts +5 -0
  359. package/dist/node/instance/isModuleInstance.d.cts.map +1 -0
  360. package/dist/node/instance/isModuleInstance.js +53 -4
  361. package/dist/node/instance/isModuleInstance.js.map +1 -1
  362. package/dist/node/instance/isModuleInstance.mjs +52 -4
  363. package/dist/node/instance/isModuleInstance.mjs.map +1 -1
  364. package/dist/node/lib/duplicateModules.d.cts +12 -0
  365. package/dist/node/lib/duplicateModules.d.cts.map +1 -0
  366. package/dist/node/lib/duplicateModules.js +3 -1
  367. package/dist/node/lib/duplicateModules.js.map +1 -1
  368. package/dist/node/lib/duplicateModules.mjs +2 -1
  369. package/dist/node/lib/duplicateModules.mjs.map +1 -1
  370. package/dist/node/lib/index.d.cts +3 -0
  371. package/dist/node/lib/index.d.cts.map +1 -0
  372. package/dist/node/lib/index.js +42 -5
  373. package/dist/node/lib/index.js.map +1 -1
  374. package/dist/node/lib/index.mjs +32 -2
  375. package/dist/node/lib/index.mjs.map +1 -1
  376. package/dist/node/lib/serializable.d.cts +3 -0
  377. package/dist/node/lib/serializable.d.cts.map +1 -0
  378. package/dist/node/lib/serializable.js +6 -4
  379. package/dist/node/lib/serializable.js.map +1 -1
  380. package/dist/node/lib/serializable.mjs +5 -4
  381. package/dist/node/lib/serializable.mjs.map +1 -1
  382. package/dist/node/module/IsModuleFactory.d.cts +7 -0
  383. package/dist/node/module/IsModuleFactory.d.cts.map +1 -0
  384. package/dist/node/module/IsModuleFactory.js +28 -7
  385. package/dist/node/module/IsModuleFactory.js.map +1 -1
  386. package/dist/node/module/IsModuleFactory.mjs +24 -6
  387. package/dist/node/module/IsModuleFactory.mjs.map +1 -1
  388. package/dist/node/module/Module.d.cts +6 -0
  389. package/dist/node/module/Module.d.cts.map +1 -0
  390. package/dist/node/module/Module.js +2 -0
  391. package/dist/node/module/Module.js.map +1 -1
  392. package/dist/node/module/ModuleFields.d.cts +18 -0
  393. package/dist/node/module/ModuleFields.d.cts.map +1 -0
  394. package/dist/node/module/ModuleFields.js +2 -0
  395. package/dist/node/module/ModuleFields.js.map +1 -1
  396. package/dist/node/module/ModuleQueryFunctions.d.cts +12 -0
  397. package/dist/node/module/ModuleQueryFunctions.d.cts.map +1 -0
  398. package/dist/node/module/ModuleQueryFunctions.js +2 -0
  399. package/dist/node/module/ModuleQueryFunctions.js.map +1 -1
  400. package/dist/node/module/asModule.d.cts +5 -0
  401. package/dist/node/module/asModule.d.cts.map +1 -0
  402. package/dist/node/module/asModule.js +51 -2
  403. package/dist/node/module/asModule.js.map +1 -1
  404. package/dist/node/module/asModule.mjs +50 -2
  405. package/dist/node/module/asModule.mjs.map +1 -1
  406. package/dist/node/module/asModuleObject.d.cts +5 -0
  407. package/dist/node/module/asModuleObject.d.cts.map +1 -0
  408. package/dist/node/module/asModuleObject.js +18 -2
  409. package/dist/node/module/asModuleObject.js.map +1 -1
  410. package/dist/node/module/asModuleObject.mjs +17 -2
  411. package/dist/node/module/asModuleObject.mjs.map +1 -1
  412. package/dist/node/module/index.d.cts +9 -0
  413. package/dist/node/module/index.d.cts.map +1 -0
  414. package/dist/node/module/index.js +74 -17
  415. package/dist/node/module/index.js.map +1 -1
  416. package/dist/node/module/index.mjs +60 -8
  417. package/dist/node/module/index.mjs.map +1 -1
  418. package/dist/node/module/isModule.d.cts +5 -0
  419. package/dist/node/module/isModule.d.cts.map +1 -0
  420. package/dist/node/module/isModule.js +42 -7
  421. package/dist/node/module/isModule.js.map +1 -1
  422. package/dist/node/module/isModule.mjs +38 -6
  423. package/dist/node/module/isModule.mjs.map +1 -1
  424. package/dist/node/module/isModuleObject.d.cts +5 -0
  425. package/dist/node/module/isModuleObject.d.cts.map +1 -0
  426. package/dist/node/module/isModuleObject.js +5 -3
  427. package/dist/node/module/isModuleObject.js.map +1 -1
  428. package/dist/node/module/isModuleObject.mjs +4 -3
  429. package/dist/node/module/isModuleObject.mjs.map +1 -1
  430. package/dist/node/withModule.d.cts +7 -0
  431. package/dist/node/withModule.d.cts.map +1 -0
  432. package/dist/node/withModule.js +66 -5
  433. package/dist/node/withModule.js.map +1 -1
  434. package/dist/node/withModule.mjs +63 -5
  435. package/dist/node/withModule.mjs.map +1 -1
  436. package/package.json +18 -18
@@ -16,15 +16,31 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/CreatableModule/ModuleFactoryLocator.ts
19
21
  var ModuleFactoryLocator_exports = {};
20
22
  __export(ModuleFactoryLocator_exports, {
21
23
  ModuleFactoryLocator: () => ModuleFactoryLocator
22
24
  });
23
25
  module.exports = __toCommonJS(ModuleFactoryLocator_exports);
24
26
  var import_assert = require("@xylabs/assert");
25
- var import_Labels = require("../Labels");
26
- var import_LabeledCreatableModuleFactory = require("./LabeledCreatableModuleFactory");
27
- class ModuleFactoryLocator {
27
+
28
+ // src/Labels/Labels.ts
29
+ var hasAllLabels = (source, required) => {
30
+ if (!required)
31
+ return true;
32
+ return Object.entries(required).every(([key, value]) => {
33
+ return (source == null ? void 0 : source.hasOwnProperty(key)) && (source == null ? void 0 : source[key]) === value;
34
+ });
35
+ };
36
+
37
+ // src/CreatableModule/LabeledCreatableModuleFactory.ts
38
+ var hasLabels = (factory) => {
39
+ return factory.labels !== void 0;
40
+ };
41
+
42
+ // src/CreatableModule/ModuleFactoryLocator.ts
43
+ var ModuleFactoryLocator = class {
28
44
  constructor(_registry = {}) {
29
45
  this._registry = _registry;
30
46
  }
@@ -86,15 +102,16 @@ class ModuleFactoryLocator {
86
102
  * @returns A module factory that matches the supplied schema and labels or undefined
87
103
  */
88
104
  tryLocate(schema, labels) {
105
+ var _a, _b;
89
106
  return labels ? (
90
107
  // Find the first factory that has labels and has all the labels provided
91
- this._registry[schema]?.filter(import_LabeledCreatableModuleFactory.hasLabels).find((factory) => (0, import_Labels.hasAllLabels)(factory?.labels, labels))
108
+ (_a = this._registry[schema]) == null ? void 0 : _a.filter(hasLabels).find((factory) => hasAllLabels(factory == null ? void 0 : factory.labels, labels))
92
109
  ) : (
93
110
  // Otherwise, return the first factory
94
- this._registry[schema]?.[0]
111
+ (_b = this._registry[schema]) == null ? void 0 : _b[0]
95
112
  );
96
113
  }
97
- }
114
+ };
98
115
  // Annotate the CommonJS export names for ESM import in node:
99
116
  0 && (module.exports = {
100
117
  ModuleFactoryLocator
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/CreatableModule/ModuleFactoryLocator.ts"],"sourcesContent":["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"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAyB;AAGzB,oBAAqC;AAGrC,2CAAyD;AAKlD,MAAM,qBAAqB;AAAA,EAChC,YAA+B,YAAqC,CAAC,GAAG;AAAzC;AAAA,EAA0C;AAAA;AAAA;AAAA;AAAA,EAKzE,IAAI,WAA8C;AAChD,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,QAAgB,QAAyE;AAC9F,eAAO,wBAAS,KAAK,UAAU,QAAQ,MAAM,GAAG,MAAM;AACpD,YAAM,eAAe,kBAAkB,MAAM;AAC7C,YAAM,eAAe,SAAS,cAAc,KAAK,UAAU,MAAM,CAAC,MAAM;AACxE,aAAO,sCAAsC,YAAY,GAAG,YAAY;AAAA,IAC1E,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,SAAyC,KAAsC,QAAuB;AACpG,QAAI,cAAc,IAAI,CAAC,WAAW;AAChC,YAAM,oBAAoB,KAAK,UAAU,MAAM;AAC/C,YAAM,UAAkD;AAAA;AAAA,QAEtD,GAAG;AAAA;AAAA,QAEH,QAAQ,IAAI,OAAO,KAAK,GAAG;AAAA;AAAA,QAE3B,QAAQ,OAAO,OAAO,CAAC,GAAI,IAAsC,UAAU,CAAC,GAAG,UAAU,CAAC,CAAC;AAAA,MAC7F;AACA,WAAK,UAAU,MAAM,IAAI,oBAAoB,CAAC,GAAG,mBAAmB,OAAO,IAAI,CAAC,OAAO;AAAA,IACzF,CAAC;AACD,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,aAAa,YAA2C;AACtD,WAAO,QAAQ,UAAU,EAAE,IAAI,CAAC,CAAC,QAAQ,SAAS,MAAM;AACtD,UAAI,WAAW;AACb,cAAM,oBAAoB,KAAK,UAAU,MAAM;AAC/C,aAAK,UAAU,MAAM,IAAI,oBAAoB,CAAC,GAAG,mBAAmB,GAAG,SAAS,IAAI;AAAA,MACtF;AAAA,IACF,CAAC;AACD,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,UAAU,QAAgB,QAAqF;AAE7G,WAAO;AAAA;AAAA,MAEH,KAAK,UAAU,MAAM,GAAG,OAAO,8CAAS,EAAE,KAAK,CAAC,gBAAY,4BAAa,SAAS,QAAQ,MAAM,CAAC;AAAA;AAAA;AAAA,MAEjG,KAAK,UAAU,MAAM,IAAI,CAAC;AAAA;AAAA,EAChC;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../src/CreatableModule/ModuleFactoryLocator.ts","../../../src/Labels/Labels.ts","../../../src/CreatableModule/LabeledCreatableModuleFactory.ts"],"sourcesContent":["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 { 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"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAyB;;;AC2BlB,IAAM,eAAe,CAAC,QAAiB,aAA+B;AAC3E,MAAI,CAAC;AAAU,WAAO;AACtB,SAAO,OAAO,QAAQ,QAAQ,EAAE,MAAM,CAAC,CAAC,KAAK,KAAK,MAAM;AAEtD,YAAO,iCAAQ,eAAe,UAA+B,iCAAS,UAAgC;AAAA,EACxG,CAAC;AACH;;;AC3BO,IAAM,YAAY,CAAC,YAA8G;AACtI,SAAQ,QAA0C,WAAW;AAC/D;;;AFGO,IAAM,uBAAN,MAA2B;AAAA,EAChC,YAA+B,YAAqC,CAAC,GAAG;AAAzC;AAAA,EAA0C;AAAA;AAAA;AAAA;AAAA,EAKzE,IAAI,WAA8C;AAChD,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,QAAgB,QAAyE;AAC9F,eAAO,wBAAS,KAAK,UAAU,QAAQ,MAAM,GAAG,MAAM;AACpD,YAAM,eAAe,kBAAkB,MAAM;AAC7C,YAAM,eAAe,SAAS,cAAc,KAAK,UAAU,MAAM,CAAC,MAAM;AACxE,aAAO,sCAAsC,YAAY,GAAG,YAAY;AAAA,IAC1E,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,SAAyC,KAAsC,QAAuB;AACpG,QAAI,cAAc,IAAI,CAAC,WAAW;AAChC,YAAM,oBAAoB,KAAK,UAAU,MAAM;AAC/C,YAAM,UAAkD;AAAA;AAAA,QAEtD,GAAG;AAAA;AAAA,QAEH,QAAQ,IAAI,OAAO,KAAK,GAAG;AAAA;AAAA,QAE3B,QAAQ,OAAO,OAAO,CAAC,GAAI,IAAsC,UAAU,CAAC,GAAG,UAAU,CAAC,CAAC;AAAA,MAC7F;AACA,WAAK,UAAU,MAAM,IAAI,oBAAoB,CAAC,GAAG,mBAAmB,OAAO,IAAI,CAAC,OAAO;AAAA,IACzF,CAAC;AACD,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,aAAa,YAA2C;AACtD,WAAO,QAAQ,UAAU,EAAE,IAAI,CAAC,CAAC,QAAQ,SAAS,MAAM;AACtD,UAAI,WAAW;AACb,cAAM,oBAAoB,KAAK,UAAU,MAAM;AAC/C,aAAK,UAAU,MAAM,IAAI,oBAAoB,CAAC,GAAG,mBAAmB,GAAG,SAAS,IAAI;AAAA,MACtF;AAAA,IACF,CAAC;AACD,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,UAAU,QAAgB,QAAqF;AA3EjH;AA6EI,WAAO;AAAA;AAAA,OAEH,UAAK,UAAU,MAAM,MAArB,mBAAwB,OAAO,WAAW,KAAK,CAAC,YAAY,aAAa,mCAAS,QAAQ,MAAM;AAAA;AAAA;AAAA,OAEhG,UAAK,UAAU,MAAM,MAArB,mBAAyB;AAAA;AAAA,EAC/B;AACF;","names":[]}
@@ -1,7 +1,22 @@
1
+ // src/CreatableModule/ModuleFactoryLocator.ts
1
2
  import { assertEx } from "@xylabs/assert";
2
- import { hasAllLabels } from "../Labels";
3
- import { hasLabels } from "./LabeledCreatableModuleFactory";
4
- class ModuleFactoryLocator {
3
+
4
+ // src/Labels/Labels.ts
5
+ var hasAllLabels = (source, required) => {
6
+ if (!required)
7
+ return true;
8
+ return Object.entries(required).every(([key, value]) => {
9
+ return (source == null ? void 0 : source.hasOwnProperty(key)) && (source == null ? void 0 : source[key]) === value;
10
+ });
11
+ };
12
+
13
+ // src/CreatableModule/LabeledCreatableModuleFactory.ts
14
+ var hasLabels = (factory) => {
15
+ return factory.labels !== void 0;
16
+ };
17
+
18
+ // src/CreatableModule/ModuleFactoryLocator.ts
19
+ var ModuleFactoryLocator = class {
5
20
  constructor(_registry = {}) {
6
21
  this._registry = _registry;
7
22
  }
@@ -63,15 +78,16 @@ class ModuleFactoryLocator {
63
78
  * @returns A module factory that matches the supplied schema and labels or undefined
64
79
  */
65
80
  tryLocate(schema, labels) {
81
+ var _a, _b;
66
82
  return labels ? (
67
83
  // Find the first factory that has labels and has all the labels provided
68
- this._registry[schema]?.filter(hasLabels).find((factory) => hasAllLabels(factory?.labels, labels))
84
+ (_a = this._registry[schema]) == null ? void 0 : _a.filter(hasLabels).find((factory) => hasAllLabels(factory == null ? void 0 : factory.labels, labels))
69
85
  ) : (
70
86
  // Otherwise, return the first factory
71
- this._registry[schema]?.[0]
87
+ (_b = this._registry[schema]) == null ? void 0 : _b[0]
72
88
  );
73
89
  }
74
- }
90
+ };
75
91
  export {
76
92
  ModuleFactoryLocator
77
93
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/CreatableModule/ModuleFactoryLocator.ts"],"sourcesContent":["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"],"mappings":"AAAA,SAAS,gBAAgB;AAGzB,SAAS,oBAA4B;AAGrC,SAAS,iBAAgD;AAKlD,MAAM,qBAAqB;AAAA,EAChC,YAA+B,YAAqC,CAAC,GAAG;AAAzC;AAAA,EAA0C;AAAA;AAAA;AAAA;AAAA,EAKzE,IAAI,WAA8C;AAChD,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,QAAgB,QAAyE;AAC9F,WAAO,SAAS,KAAK,UAAU,QAAQ,MAAM,GAAG,MAAM;AACpD,YAAM,eAAe,kBAAkB,MAAM;AAC7C,YAAM,eAAe,SAAS,cAAc,KAAK,UAAU,MAAM,CAAC,MAAM;AACxE,aAAO,sCAAsC,YAAY,GAAG,YAAY;AAAA,IAC1E,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,SAAyC,KAAsC,QAAuB;AACpG,QAAI,cAAc,IAAI,CAAC,WAAW;AAChC,YAAM,oBAAoB,KAAK,UAAU,MAAM;AAC/C,YAAM,UAAkD;AAAA;AAAA,QAEtD,GAAG;AAAA;AAAA,QAEH,QAAQ,IAAI,OAAO,KAAK,GAAG;AAAA;AAAA,QAE3B,QAAQ,OAAO,OAAO,CAAC,GAAI,IAAsC,UAAU,CAAC,GAAG,UAAU,CAAC,CAAC;AAAA,MAC7F;AACA,WAAK,UAAU,MAAM,IAAI,oBAAoB,CAAC,GAAG,mBAAmB,OAAO,IAAI,CAAC,OAAO;AAAA,IACzF,CAAC;AACD,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,aAAa,YAA2C;AACtD,WAAO,QAAQ,UAAU,EAAE,IAAI,CAAC,CAAC,QAAQ,SAAS,MAAM;AACtD,UAAI,WAAW;AACb,cAAM,oBAAoB,KAAK,UAAU,MAAM;AAC/C,aAAK,UAAU,MAAM,IAAI,oBAAoB,CAAC,GAAG,mBAAmB,GAAG,SAAS,IAAI;AAAA,MACtF;AAAA,IACF,CAAC;AACD,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,UAAU,QAAgB,QAAqF;AAE7G,WAAO;AAAA;AAAA,MAEH,KAAK,UAAU,MAAM,GAAG,OAAO,SAAS,EAAE,KAAK,CAAC,YAAY,aAAa,SAAS,QAAQ,MAAM,CAAC;AAAA;AAAA;AAAA,MAEjG,KAAK,UAAU,MAAM,IAAI,CAAC;AAAA;AAAA,EAChC;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../src/CreatableModule/ModuleFactoryLocator.ts","../../../src/Labels/Labels.ts","../../../src/CreatableModule/LabeledCreatableModuleFactory.ts"],"sourcesContent":["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 { 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"],"mappings":";AAAA,SAAS,gBAAgB;;;AC2BlB,IAAM,eAAe,CAAC,QAAiB,aAA+B;AAC3E,MAAI,CAAC;AAAU,WAAO;AACtB,SAAO,OAAO,QAAQ,QAAQ,EAAE,MAAM,CAAC,CAAC,KAAK,KAAK,MAAM;AAEtD,YAAO,iCAAQ,eAAe,UAA+B,iCAAS,UAAgC;AAAA,EACxG,CAAC;AACH;;;AC3BO,IAAM,YAAY,CAAC,YAA8G;AACtI,SAAQ,QAA0C,WAAW;AAC/D;;;AFGO,IAAM,uBAAN,MAA2B;AAAA,EAChC,YAA+B,YAAqC,CAAC,GAAG;AAAzC;AAAA,EAA0C;AAAA;AAAA;AAAA;AAAA,EAKzE,IAAI,WAA8C;AAChD,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,QAAgB,QAAyE;AAC9F,WAAO,SAAS,KAAK,UAAU,QAAQ,MAAM,GAAG,MAAM;AACpD,YAAM,eAAe,kBAAkB,MAAM;AAC7C,YAAM,eAAe,SAAS,cAAc,KAAK,UAAU,MAAM,CAAC,MAAM;AACxE,aAAO,sCAAsC,YAAY,GAAG,YAAY;AAAA,IAC1E,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,SAAyC,KAAsC,QAAuB;AACpG,QAAI,cAAc,IAAI,CAAC,WAAW;AAChC,YAAM,oBAAoB,KAAK,UAAU,MAAM;AAC/C,YAAM,UAAkD;AAAA;AAAA,QAEtD,GAAG;AAAA;AAAA,QAEH,QAAQ,IAAI,OAAO,KAAK,GAAG;AAAA;AAAA,QAE3B,QAAQ,OAAO,OAAO,CAAC,GAAI,IAAsC,UAAU,CAAC,GAAG,UAAU,CAAC,CAAC;AAAA,MAC7F;AACA,WAAK,UAAU,MAAM,IAAI,oBAAoB,CAAC,GAAG,mBAAmB,OAAO,IAAI,CAAC,OAAO;AAAA,IACzF,CAAC;AACD,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,aAAa,YAA2C;AACtD,WAAO,QAAQ,UAAU,EAAE,IAAI,CAAC,CAAC,QAAQ,SAAS,MAAM;AACtD,UAAI,WAAW;AACb,cAAM,oBAAoB,KAAK,UAAU,MAAM;AAC/C,aAAK,UAAU,MAAM,IAAI,oBAAoB,CAAC,GAAG,mBAAmB,GAAG,SAAS,IAAI;AAAA,MACtF;AAAA,IACF,CAAC;AACD,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,UAAU,QAAgB,QAAqF;AA3EjH;AA6EI,WAAO;AAAA;AAAA,OAEH,UAAK,UAAU,MAAM,MAArB,mBAAwB,OAAO,WAAW,KAAK,CAAC,YAAY,aAAa,mCAAS,QAAQ,MAAM;AAAA;AAAA;AAAA,OAEhG,UAAK,UAAU,MAAM,MAArB,mBAAyB;AAAA;AAAA,EAC/B;AACF;","names":[]}
@@ -0,0 +1,7 @@
1
+ export * from './CreatableModule';
2
+ export * from './CreatableModuleDictionary';
3
+ export * from './CreatableModuleRegistry';
4
+ export * from './LabeledCreatableModuleFactory';
5
+ export * from './ModuleFactory';
6
+ export * from './ModuleFactoryLocator';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/CreatableModule/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,2BAA2B,CAAA;AACzC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,iBAAiB,CAAA;AAC/B,cAAc,wBAAwB,CAAA"}
@@ -3,6 +3,10 @@ var __defProp = Object.defineProperty;
3
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
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
+ };
6
10
  var __copyProps = (to, from, except, desc) => {
7
11
  if (from && typeof from === "object" || typeof from === "function") {
8
12
  for (let key of __getOwnPropNames(from))
@@ -11,23 +15,190 @@ var __copyProps = (to, from, except, desc) => {
11
15
  }
12
16
  return to;
13
17
  };
14
- var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
15
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/CreatableModule/index.ts
16
21
  var CreatableModule_exports = {};
22
+ __export(CreatableModule_exports, {
23
+ ModuleFactory: () => ModuleFactory,
24
+ ModuleFactoryLocator: () => ModuleFactoryLocator,
25
+ assignCreatableModuleRegistry: () => assignCreatableModuleRegistry,
26
+ creatableModule: () => creatableModule,
27
+ hasLabels: () => hasLabels,
28
+ toCreatableModuleRegistry: () => toCreatableModuleRegistry
29
+ });
17
30
  module.exports = __toCommonJS(CreatableModule_exports);
18
- __reExport(CreatableModule_exports, require("./CreatableModule"), module.exports);
19
- __reExport(CreatableModule_exports, require("./CreatableModuleDictionary"), module.exports);
20
- __reExport(CreatableModule_exports, require("./CreatableModuleRegistry"), module.exports);
21
- __reExport(CreatableModule_exports, require("./LabeledCreatableModuleFactory"), module.exports);
22
- __reExport(CreatableModule_exports, require("./ModuleFactory"), module.exports);
23
- __reExport(CreatableModule_exports, require("./ModuleFactoryLocator"), module.exports);
31
+
32
+ // src/CreatableModule/CreatableModule.ts
33
+ function creatableModule() {
34
+ return (constructor) => {
35
+ constructor;
36
+ };
37
+ }
38
+
39
+ // src/CreatableModule/CreatableModuleRegistry.ts
40
+ var toCreatableModuleRegistry = (dict) => {
41
+ return Object.entries(dict).reduce((registry, [schema, factory]) => {
42
+ registry[schema] = Array.isArray(factory) ? factory : [factory];
43
+ return registry;
44
+ }, {});
45
+ };
46
+ var assignCreatableModuleRegistry = (target = {}, ...sources) => {
47
+ sources.map(
48
+ (source) => Object.entries(source).map(([schema, factories]) => {
49
+ if (factories) {
50
+ const existingFactories = target[schema];
51
+ target[schema] = existingFactories ? target[schema] = [...existingFactories, ...factories] : factories;
52
+ }
53
+ })
54
+ );
55
+ return target;
56
+ };
57
+
58
+ // src/CreatableModule/LabeledCreatableModuleFactory.ts
59
+ var hasLabels = (factory) => {
60
+ return factory.labels !== void 0;
61
+ };
62
+
63
+ // src/CreatableModule/ModuleFactory.ts
64
+ var import_assert = require("@xylabs/assert");
65
+ var import_lodash = require("@xylabs/lodash");
66
+ var ModuleFactory = class _ModuleFactory {
67
+ configSchemas;
68
+ creatableModule;
69
+ defaultLogger;
70
+ defaultParams;
71
+ labels;
72
+ constructor(creatableModule2, params, labels = {}) {
73
+ this.creatableModule = creatableModule2;
74
+ this.defaultParams = params;
75
+ this.configSchemas = creatableModule2.configSchemas;
76
+ this.labels = Object.assign({}, creatableModule2.labels ?? {}, labels ?? {});
77
+ }
78
+ get configSchema() {
79
+ return this.configSchemas[0];
80
+ }
81
+ static withParams(creatableModule2, params, labels = {}) {
82
+ return new _ModuleFactory(creatableModule2, params, labels);
83
+ }
84
+ _getRootFunction(funcName) {
85
+ let anyThis = this;
86
+ while (anyThis.__proto__[funcName]) {
87
+ anyThis = anyThis.__proto__;
88
+ }
89
+ return anyThis[funcName];
90
+ }
91
+ _noOverride(functionName) {
92
+ const thisFunc = this[functionName];
93
+ const rootFunc = this._getRootFunction(functionName);
94
+ (0, import_assert.assertEx)(thisFunc === rootFunc, `Override not allowed for [${functionName}] - override ${functionName}Handler instead`);
95
+ }
96
+ create(params) {
97
+ var _a;
98
+ const factory = this;
99
+ const schema = factory.creatableModule.configSchema;
100
+ const mergedParams = (0, import_lodash.merge)({}, factory.defaultParams, params, {
101
+ config: (0, import_lodash.merge)({}, (_a = factory.defaultParams) == null ? void 0 : _a.config, params == null ? void 0 : params.config, { schema })
102
+ });
103
+ return factory.creatableModule.create(mergedParams);
104
+ }
105
+ factory(_params) {
106
+ throw new Error("Method not implemented.");
107
+ }
108
+ };
109
+
110
+ // src/CreatableModule/ModuleFactoryLocator.ts
111
+ var import_assert2 = require("@xylabs/assert");
112
+
113
+ // src/Labels/Labels.ts
114
+ var hasAllLabels = (source, required) => {
115
+ if (!required)
116
+ return true;
117
+ return Object.entries(required).every(([key, value]) => {
118
+ return (source == null ? void 0 : source.hasOwnProperty(key)) && (source == null ? void 0 : source[key]) === value;
119
+ });
120
+ };
121
+
122
+ // src/CreatableModule/ModuleFactoryLocator.ts
123
+ var ModuleFactoryLocator = class {
124
+ constructor(_registry = {}) {
125
+ this._registry = _registry;
126
+ }
127
+ /**
128
+ * The current registry for the module factory
129
+ */
130
+ get registry() {
131
+ return this._registry;
132
+ }
133
+ /**
134
+ * Locates a module factory that matches the supplied schema and labels
135
+ * @param schema The config schema for the module
136
+ * @param labels The labels for the module factory
137
+ * @returns A module factory that matches the supplied schema and labels or throws if one is not found
138
+ */
139
+ locate(schema, labels) {
140
+ return (0, import_assert2.assertEx)(this.tryLocate(schema, labels), () => {
141
+ const configString = `config schema [${schema}]`;
142
+ const labelsString = labels ? ` & labels [${JSON.stringify(labels)}]` : "";
143
+ return `No module factory for the supplied ${configString}${labelsString} registered`;
144
+ });
145
+ }
146
+ /**
147
+ * Registers a single module factory (with optional tags) with the locator
148
+ * @param additional Additional module factories to register
149
+ */
150
+ register(mod, labels) {
151
+ mod.configSchemas.map((schema) => {
152
+ const existingFactories = this._registry[schema];
153
+ const factory = {
154
+ // Destructure instance properties
155
+ ...mod,
156
+ // Copy static methods
157
+ create: mod.create.bind(mod),
158
+ // Merge module & supplied labels
159
+ labels: Object.assign({}, mod.labels ?? {}, labels ?? {})
160
+ };
161
+ this._registry[schema] = existingFactories ? [...existingFactories, factory] : [factory];
162
+ });
163
+ return this;
164
+ }
165
+ /**
166
+ * Registers multiple module factories with the locator
167
+ * @param additional Additional module factories to register
168
+ */
169
+ registerMany(additional) {
170
+ Object.entries(additional).map(([schema, factories]) => {
171
+ if (factories) {
172
+ const existingFactories = this._registry[schema];
173
+ this._registry[schema] = existingFactories ? [...existingFactories, ...factories] : factories;
174
+ }
175
+ });
176
+ return this;
177
+ }
178
+ /**
179
+ * Tries to locate a module factory that matches the supplied schema and labels
180
+ * @param schema The config schema for the module
181
+ * @param labels The labels for the module factory
182
+ * @returns A module factory that matches the supplied schema and labels or undefined
183
+ */
184
+ tryLocate(schema, labels) {
185
+ var _a, _b;
186
+ return labels ? (
187
+ // Find the first factory that has labels and has all the labels provided
188
+ (_a = this._registry[schema]) == null ? void 0 : _a.filter(hasLabels).find((factory) => hasAllLabels(factory == null ? void 0 : factory.labels, labels))
189
+ ) : (
190
+ // Otherwise, return the first factory
191
+ (_b = this._registry[schema]) == null ? void 0 : _b[0]
192
+ );
193
+ }
194
+ };
24
195
  // Annotate the CommonJS export names for ESM import in node:
25
196
  0 && (module.exports = {
26
- ...require("./CreatableModule"),
27
- ...require("./CreatableModuleDictionary"),
28
- ...require("./CreatableModuleRegistry"),
29
- ...require("./LabeledCreatableModuleFactory"),
30
- ...require("./ModuleFactory"),
31
- ...require("./ModuleFactoryLocator")
197
+ ModuleFactory,
198
+ ModuleFactoryLocator,
199
+ assignCreatableModuleRegistry,
200
+ creatableModule,
201
+ hasLabels,
202
+ toCreatableModuleRegistry
32
203
  });
33
204
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/CreatableModule/index.ts"],"sourcesContent":["export * from './CreatableModule'\nexport * from './CreatableModuleDictionary'\nexport * from './CreatableModuleRegistry'\nexport * from './LabeledCreatableModuleFactory'\nexport * from './ModuleFactory'\nexport * from './ModuleFactoryLocator'\n"],"mappings":";;;;;;;;;;;;;;;AAAA;AAAA;AAAA,oCAAc,8BAAd;AACA,oCAAc,wCADd;AAEA,oCAAc,sCAFd;AAGA,oCAAc,4CAHd;AAIA,oCAAc,4BAJd;AAKA,oCAAc,mCALd;","names":[]}
1
+ {"version":3,"sources":["../../../src/CreatableModule/index.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"],"sourcesContent":["export * from './CreatableModule'\nexport * from './CreatableModuleDictionary'\nexport * from './CreatableModuleRegistry'\nexport * from './LabeledCreatableModuleFactory'\nexport * from './ModuleFactory'\nexport * from './ModuleFactoryLocator'\n","import { AccountInstance } from '@xyo-network/account-model'\nimport { Logger } from '@xyo-network/logger'\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 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 '@xyo-network/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?: TModule['params']['config'] }\n\n labels?: Labels\n\n constructor(\n creatableModule: CreatableModule<TModule>,\n params?: Omit<TModule['params'], 'config'> & { config?: 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"],"mappings":"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","names":["creatableModule","import_assert"]}
@@ -1,7 +1,172 @@
1
- export * from "./CreatableModule";
2
- export * from "./CreatableModuleDictionary";
3
- export * from "./CreatableModuleRegistry";
4
- export * from "./LabeledCreatableModuleFactory";
5
- export * from "./ModuleFactory";
6
- export * from "./ModuleFactoryLocator";
1
+ // src/CreatableModule/CreatableModule.ts
2
+ function creatableModule() {
3
+ return (constructor) => {
4
+ constructor;
5
+ };
6
+ }
7
+
8
+ // src/CreatableModule/CreatableModuleRegistry.ts
9
+ var toCreatableModuleRegistry = (dict) => {
10
+ return Object.entries(dict).reduce((registry, [schema, factory]) => {
11
+ registry[schema] = Array.isArray(factory) ? factory : [factory];
12
+ return registry;
13
+ }, {});
14
+ };
15
+ var assignCreatableModuleRegistry = (target = {}, ...sources) => {
16
+ sources.map(
17
+ (source) => Object.entries(source).map(([schema, factories]) => {
18
+ if (factories) {
19
+ const existingFactories = target[schema];
20
+ target[schema] = existingFactories ? target[schema] = [...existingFactories, ...factories] : factories;
21
+ }
22
+ })
23
+ );
24
+ return target;
25
+ };
26
+
27
+ // src/CreatableModule/LabeledCreatableModuleFactory.ts
28
+ var hasLabels = (factory) => {
29
+ return factory.labels !== void 0;
30
+ };
31
+
32
+ // src/CreatableModule/ModuleFactory.ts
33
+ import { assertEx } from "@xylabs/assert";
34
+ import { merge } from "@xylabs/lodash";
35
+ var ModuleFactory = class _ModuleFactory {
36
+ configSchemas;
37
+ creatableModule;
38
+ defaultLogger;
39
+ defaultParams;
40
+ labels;
41
+ constructor(creatableModule2, params, labels = {}) {
42
+ this.creatableModule = creatableModule2;
43
+ this.defaultParams = params;
44
+ this.configSchemas = creatableModule2.configSchemas;
45
+ this.labels = Object.assign({}, creatableModule2.labels ?? {}, labels ?? {});
46
+ }
47
+ get configSchema() {
48
+ return this.configSchemas[0];
49
+ }
50
+ static withParams(creatableModule2, params, labels = {}) {
51
+ return new _ModuleFactory(creatableModule2, params, labels);
52
+ }
53
+ _getRootFunction(funcName) {
54
+ let anyThis = this;
55
+ while (anyThis.__proto__[funcName]) {
56
+ anyThis = anyThis.__proto__;
57
+ }
58
+ return anyThis[funcName];
59
+ }
60
+ _noOverride(functionName) {
61
+ const thisFunc = this[functionName];
62
+ const rootFunc = this._getRootFunction(functionName);
63
+ assertEx(thisFunc === rootFunc, `Override not allowed for [${functionName}] - override ${functionName}Handler instead`);
64
+ }
65
+ create(params) {
66
+ var _a;
67
+ const factory = this;
68
+ const schema = factory.creatableModule.configSchema;
69
+ const mergedParams = merge({}, factory.defaultParams, params, {
70
+ config: merge({}, (_a = factory.defaultParams) == null ? void 0 : _a.config, params == null ? void 0 : params.config, { schema })
71
+ });
72
+ return factory.creatableModule.create(mergedParams);
73
+ }
74
+ factory(_params) {
75
+ throw new Error("Method not implemented.");
76
+ }
77
+ };
78
+
79
+ // src/CreatableModule/ModuleFactoryLocator.ts
80
+ import { assertEx as assertEx2 } from "@xylabs/assert";
81
+
82
+ // src/Labels/Labels.ts
83
+ var hasAllLabels = (source, required) => {
84
+ if (!required)
85
+ return true;
86
+ return Object.entries(required).every(([key, value]) => {
87
+ return (source == null ? void 0 : source.hasOwnProperty(key)) && (source == null ? void 0 : source[key]) === value;
88
+ });
89
+ };
90
+
91
+ // src/CreatableModule/ModuleFactoryLocator.ts
92
+ var ModuleFactoryLocator = class {
93
+ constructor(_registry = {}) {
94
+ this._registry = _registry;
95
+ }
96
+ /**
97
+ * The current registry for the module factory
98
+ */
99
+ get registry() {
100
+ return this._registry;
101
+ }
102
+ /**
103
+ * Locates a module factory that matches the supplied schema and labels
104
+ * @param schema The config schema for the module
105
+ * @param labels The labels for the module factory
106
+ * @returns A module factory that matches the supplied schema and labels or throws if one is not found
107
+ */
108
+ locate(schema, labels) {
109
+ return assertEx2(this.tryLocate(schema, labels), () => {
110
+ const configString = `config schema [${schema}]`;
111
+ const labelsString = labels ? ` & labels [${JSON.stringify(labels)}]` : "";
112
+ return `No module factory for the supplied ${configString}${labelsString} registered`;
113
+ });
114
+ }
115
+ /**
116
+ * Registers a single module factory (with optional tags) with the locator
117
+ * @param additional Additional module factories to register
118
+ */
119
+ register(mod, labels) {
120
+ mod.configSchemas.map((schema) => {
121
+ const existingFactories = this._registry[schema];
122
+ const factory = {
123
+ // Destructure instance properties
124
+ ...mod,
125
+ // Copy static methods
126
+ create: mod.create.bind(mod),
127
+ // Merge module & supplied labels
128
+ labels: Object.assign({}, mod.labels ?? {}, labels ?? {})
129
+ };
130
+ this._registry[schema] = existingFactories ? [...existingFactories, factory] : [factory];
131
+ });
132
+ return this;
133
+ }
134
+ /**
135
+ * Registers multiple module factories with the locator
136
+ * @param additional Additional module factories to register
137
+ */
138
+ registerMany(additional) {
139
+ Object.entries(additional).map(([schema, factories]) => {
140
+ if (factories) {
141
+ const existingFactories = this._registry[schema];
142
+ this._registry[schema] = existingFactories ? [...existingFactories, ...factories] : factories;
143
+ }
144
+ });
145
+ return this;
146
+ }
147
+ /**
148
+ * Tries to locate a module factory that matches the supplied schema and labels
149
+ * @param schema The config schema for the module
150
+ * @param labels The labels for the module factory
151
+ * @returns A module factory that matches the supplied schema and labels or undefined
152
+ */
153
+ tryLocate(schema, labels) {
154
+ var _a, _b;
155
+ return labels ? (
156
+ // Find the first factory that has labels and has all the labels provided
157
+ (_a = this._registry[schema]) == null ? void 0 : _a.filter(hasLabels).find((factory) => hasAllLabels(factory == null ? void 0 : factory.labels, labels))
158
+ ) : (
159
+ // Otherwise, return the first factory
160
+ (_b = this._registry[schema]) == null ? void 0 : _b[0]
161
+ );
162
+ }
163
+ };
164
+ export {
165
+ ModuleFactory,
166
+ ModuleFactoryLocator,
167
+ assignCreatableModuleRegistry,
168
+ creatableModule,
169
+ hasLabels,
170
+ toCreatableModuleRegistry
171
+ };
7
172
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/CreatableModule/index.ts"],"sourcesContent":["export * from './CreatableModule'\nexport * from './CreatableModuleDictionary'\nexport * from './CreatableModuleRegistry'\nexport * from './LabeledCreatableModuleFactory'\nexport * from './ModuleFactory'\nexport * from './ModuleFactoryLocator'\n"],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;","names":[]}
1
+ {"version":3,"sources":["../../../src/CreatableModule/CreatableModule.ts","../../../src/CreatableModule/CreatableModuleRegistry.ts","../../../src/CreatableModule/LabeledCreatableModuleFactory.ts","../../../src/CreatableModule/ModuleFactory.ts","../../../src/CreatableModule/ModuleFactoryLocator.ts","../../../src/Labels/Labels.ts"],"sourcesContent":["import { AccountInstance } from '@xyo-network/account-model'\nimport { Logger } from '@xyo-network/logger'\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 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 '@xyo-network/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?: TModule['params']['config'] }\n\n labels?: Labels\n\n constructor(\n creatableModule: CreatableModule<TModule>,\n params?: Omit<TModule['params'], 'config'> & { config?: 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"],"mappings":"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","names":["creatableModule","assertEx","assertEx"]}