divhunt 2.0.0

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 (473) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +86 -0
  3. package/addons/core/clients/LICENSE.txt +40 -0
  4. package/addons/core/clients/README.md +123 -0
  5. package/addons/core/clients/back/grpc/addon.js +25 -0
  6. package/addons/core/clients/back/grpc/item/catch/add.js +8 -0
  7. package/addons/core/clients/back/grpc/item/functions/connect.js +73 -0
  8. package/addons/core/clients/back/grpc/item/functions/resolve.js +41 -0
  9. package/addons/core/clients/back/grpc/item/functions/stream.js +103 -0
  10. package/addons/core/clients/back/grpc/load.js +11 -0
  11. package/addons/core/clients/back/grpc/service.proto +20 -0
  12. package/addons/core/clients/back/http/addon.js +21 -0
  13. package/addons/core/clients/back/http/item/catch/add.js +18 -0
  14. package/addons/core/clients/back/http/item/functions/gRPC/create.js +192 -0
  15. package/addons/core/clients/back/http/item/functions/gRPC/execute.js +15 -0
  16. package/addons/core/clients/back/http/item/functions/http/create.js +143 -0
  17. package/addons/core/clients/back/http/item/functions/http/delete.js +8 -0
  18. package/addons/core/clients/back/http/item/functions/http/get.js +8 -0
  19. package/addons/core/clients/back/http/item/functions/http/post.js +8 -0
  20. package/addons/core/clients/back/http/item/functions/http/put.js +8 -0
  21. package/addons/core/clients/back/http/item/functions/http/request.js +15 -0
  22. package/addons/core/clients/back/http/load.js +17 -0
  23. package/addons/core/commands/LICENSE.txt +40 -0
  24. package/addons/core/commands/README.md +294 -0
  25. package/addons/core/commands/back/addon.js +31 -0
  26. package/addons/core/commands/back/functions/find.js +54 -0
  27. package/addons/core/commands/back/functions/grpc/client.js +155 -0
  28. package/addons/core/commands/back/functions/grpc/server.js +71 -0
  29. package/addons/core/commands/back/functions/http/server.js +91 -0
  30. package/addons/core/commands/back/item/functions/run.js +82 -0
  31. package/addons/core/commands/back/items/many.js +76 -0
  32. package/addons/core/commands/back/items/one.js +78 -0
  33. package/addons/core/commands/back/items/run.js +51 -0
  34. package/addons/core/commands/back/load.js +20 -0
  35. package/addons/core/commands/front/#register/addon.js +11 -0
  36. package/addons/core/commands/front/functions/find.js +24 -0
  37. package/addons/core/commands/front/item/functions/run.js +98 -0
  38. package/addons/core/commands/front/items/elements/table/table.css +18 -0
  39. package/addons/core/commands/front/items/elements/table/table.js +254 -0
  40. package/addons/core/database/README.md +276 -0
  41. package/addons/core/database/back/addon.js +14 -0
  42. package/addons/core/database/back/events/addon.add.js +18 -0
  43. package/addons/core/database/back/events/middleware/addon.items.find.js +24 -0
  44. package/addons/core/database/back/events/middleware/item.crud.create.js +24 -0
  45. package/addons/core/database/back/events/middleware/item.crud.delete.js +24 -0
  46. package/addons/core/database/back/events/middleware/item.crud.update.js +24 -0
  47. package/addons/core/database/back/functions/create.js +6 -0
  48. package/addons/core/database/back/functions/delete.js +6 -0
  49. package/addons/core/database/back/functions/find/builder.js +160 -0
  50. package/addons/core/database/back/functions/find/count.js +12 -0
  51. package/addons/core/database/back/functions/find/filter.js +37 -0
  52. package/addons/core/database/back/functions/find/filters.js +7 -0
  53. package/addons/core/database/back/functions/find/many.js +93 -0
  54. package/addons/core/database/back/functions/find/methods.js +235 -0
  55. package/addons/core/database/back/functions/find/plain.js +25 -0
  56. package/addons/core/database/back/functions/find/validation.js +214 -0
  57. package/addons/core/database/back/functions/find.js +25 -0
  58. package/addons/core/database/back/functions/update.js +6 -0
  59. package/addons/core/database/back/item/catch/add.js +25 -0
  60. package/addons/core/database/back/item/functions/create.js +93 -0
  61. package/addons/core/database/back/item/functions/delete.js +25 -0
  62. package/addons/core/database/back/item/functions/find.js +19 -0
  63. package/addons/core/database/back/item/functions/save.js +15 -0
  64. package/addons/core/database/back/item/functions/transaction.js +17 -0
  65. package/addons/core/database/back/item/functions/update.js +76 -0
  66. package/addons/core/database/back/items/commands/expose.js +321 -0
  67. package/addons/core/database/back/load.js +68 -0
  68. package/addons/core/database/front/#register/addon.js +4 -0
  69. package/addons/core/database/front/events/addon.add.js +13 -0
  70. package/addons/core/database/front/functions/find.js +142 -0
  71. package/addons/core/queue/README.md +216 -0
  72. package/addons/core/queue/back/addon.js +21 -0
  73. package/addons/core/queue/back/functions/calculate/art.js +12 -0
  74. package/addons/core/queue/back/functions/calculate/rps.js +22 -0
  75. package/addons/core/queue/back/item/catch/add.js +6 -0
  76. package/addons/core/queue/back/item/catch/remove.js +6 -0
  77. package/addons/core/queue/back/item/functions/add.js +15 -0
  78. package/addons/core/queue/back/item/functions/start.js +135 -0
  79. package/addons/core/queue/back/load.js +12 -0
  80. package/addons/core/queue/index.js +66 -0
  81. package/addons/core/queue/package.json +13 -0
  82. package/addons/core/servers/README.md +85 -0
  83. package/addons/core/servers/back/grpc/addon.js +23 -0
  84. package/addons/core/servers/back/grpc/item/catch/add.js +6 -0
  85. package/addons/core/servers/back/grpc/item/functions/resolve.js +41 -0
  86. package/addons/core/servers/back/grpc/item/functions/start.js +65 -0
  87. package/addons/core/servers/back/grpc/item/functions/stream.js +68 -0
  88. package/addons/core/servers/back/grpc/load.js +9 -0
  89. package/addons/core/servers/back/grpc/service.proto +20 -0
  90. package/addons/core/servers/back/http/addon.js +15 -0
  91. package/addons/core/servers/back/http/functions/extract/data.js +232 -0
  92. package/addons/core/servers/back/http/item/catch/add.js +6 -0
  93. package/addons/core/servers/back/http/item/functions/start.js +135 -0
  94. package/addons/core/servers/back/http/load.js +8 -0
  95. package/addons/float/modals/front/css/modals.css +26 -0
  96. package/addons/float/modals/front/js/#register/addon.js +10 -0
  97. package/addons/float/modals/front/js/item/catch/add.js +48 -0
  98. package/addons/float/modals/front/js/item/catch/remove.js +9 -0
  99. package/addons/float/overlays/front/css/overlays.css +29 -0
  100. package/addons/float/overlays/front/js/#register/addon.js +17 -0
  101. package/addons/float/overlays/front/js/events/click.js +27 -0
  102. package/addons/float/overlays/front/js/events/escape.js +18 -0
  103. package/addons/float/overlays/front/js/functions/flip.js +74 -0
  104. package/addons/float/overlays/front/js/functions/index.js +17 -0
  105. package/addons/float/overlays/front/js/functions/position.js +63 -0
  106. package/addons/float/overlays/front/js/item/catch/add.js +121 -0
  107. package/addons/float/overlays/front/js/item/catch/remove.js +16 -0
  108. package/addons/float/popups/css/popups.css +4 -0
  109. package/addons/float/popups/js/#register/addon.js +18 -0
  110. package/addons/float/popups/js/item/catch/add.js +7 -0
  111. package/addons/float/popups/js/item/catch/remove.js +7 -0
  112. package/addons/float/popups/js/item/catch/set.js +73 -0
  113. package/addons/float/popups/js/items/directives/popup.js +54 -0
  114. package/addons/float/toasts/#register/addon.js +17 -0
  115. package/addons/float/toasts/item/catch/add.js +7 -0
  116. package/addons/float/toasts/item/catch/remove.js +7 -0
  117. package/addons/float/toasts/item/catch/set.js +86 -0
  118. package/addons/float/toasts/items/elements/toast/toast.css +84 -0
  119. package/addons/float/toasts/items/elements/toast/toast.js +61 -0
  120. package/addons/float/tooltips/#register/addon.js +15 -0
  121. package/addons/float/tooltips/item/catch/add.js +7 -0
  122. package/addons/float/tooltips/item/catch/remove.js +26 -0
  123. package/addons/float/tooltips/item/catch/set.js +65 -0
  124. package/addons/float/tooltips/items/directives/tooltip.js +74 -0
  125. package/addons/float/tooltips/items/elements/tooltip.css +64 -0
  126. package/addons/float/tooltips/items/elements/tooltip.js +42 -0
  127. package/addons/modules/actions/front/addon.js +19 -0
  128. package/addons/modules/actions/front/functions/run.js +230 -0
  129. package/addons/modules/actions/front/load.js +5 -0
  130. package/addons/modules/bugs/front/addon.js +16 -0
  131. package/addons/modules/bugs/front/functions/clear.js +14 -0
  132. package/addons/modules/bugs/front/functions/push.js +15 -0
  133. package/addons/modules/bugs/front/functions/resolve.js +13 -0
  134. package/addons/modules/bugs/front/item/catch/add.js +9 -0
  135. package/addons/modules/bugs/front/load.js +9 -0
  136. package/addons/modules/events/front/addon.js +11 -0
  137. package/addons/modules/events/front/functions/clear.js +9 -0
  138. package/addons/modules/events/front/functions/emit.js +60 -0
  139. package/addons/modules/events/front/functions/off.js +23 -0
  140. package/addons/modules/events/front/functions/on.js +40 -0
  141. package/addons/modules/events/front/functions/once.js +6 -0
  142. package/addons/modules/events/front/load.js +9 -0
  143. package/addons/modules/schedules/back/addon.js +26 -0
  144. package/addons/modules/schedules/back/functions/disable.js +17 -0
  145. package/addons/modules/schedules/back/functions/enable.js +17 -0
  146. package/addons/modules/schedules/back/functions/next.js +142 -0
  147. package/addons/modules/schedules/back/functions/start.js +126 -0
  148. package/addons/modules/schedules/back/functions/stop.js +38 -0
  149. package/addons/modules/schedules/back/functions/trigger.js +134 -0
  150. package/addons/modules/schedules/back/items/create.js +82 -0
  151. package/addons/modules/schedules/back/items/delete.js +38 -0
  152. package/addons/modules/schedules/back/items/many.js +90 -0
  153. package/addons/modules/schedules/back/items/one.js +48 -0
  154. package/addons/modules/schedules/back/items/update.js +115 -0
  155. package/addons/modules/schedules/back/load.js +16 -0
  156. package/addons/modules/schedules/front/addon.js +23 -0
  157. package/addons/modules/schedules/front/functions/disable.js +17 -0
  158. package/addons/modules/schedules/front/functions/enable.js +17 -0
  159. package/addons/modules/schedules/front/functions/next.js +142 -0
  160. package/addons/modules/schedules/front/functions/start.js +126 -0
  161. package/addons/modules/schedules/front/functions/stop.js +38 -0
  162. package/addons/modules/schedules/front/functions/trigger.js +161 -0
  163. package/addons/modules/schedules/front/load.js +10 -0
  164. package/addons/modules/shortcuts/front/#register/addon.js +22 -0
  165. package/addons/modules/shortcuts/front/functions/context.js +13 -0
  166. package/addons/modules/shortcuts/front/functions/disable.js +15 -0
  167. package/addons/modules/shortcuts/front/functions/enable.js +15 -0
  168. package/addons/modules/shortcuts/front/functions/register.js +170 -0
  169. package/addons/modules/shortcuts/front/functions/trigger.js +140 -0
  170. package/addons/modules/shortcuts/front/functions/unregister.js +19 -0
  171. package/addons/modules/shortcuts/front/load.js +12 -0
  172. package/addons/modules/sources/back/addon.js +23 -0
  173. package/addons/modules/sources/back/functions/run.js +252 -0
  174. package/addons/modules/sources/back/items/create.js +74 -0
  175. package/addons/modules/sources/back/items/delete.js +36 -0
  176. package/addons/modules/sources/back/items/many.js +80 -0
  177. package/addons/modules/sources/back/items/one.js +46 -0
  178. package/addons/modules/sources/back/items/run.js +28 -0
  179. package/addons/modules/sources/back/items/update.js +110 -0
  180. package/addons/modules/sources/back/load.js +12 -0
  181. package/addons/modules/sources/front/addon.js +20 -0
  182. package/addons/modules/sources/front/functions/run.js +279 -0
  183. package/addons/modules/sources/front/load.js +5 -0
  184. package/addons/modules/variables/addon.js +12 -0
  185. package/addons/modules/variables/functions/filter.js +24 -0
  186. package/addons/modules/variables/functions/process.js +52 -0
  187. package/addons/modules/variables/item/catch/add.js +13 -0
  188. package/addons/modules/variables/load.js +8 -0
  189. package/addons/render/assets/back/README.md +1 -0
  190. package/addons/render/assets/back/addon.js +15 -0
  191. package/addons/render/assets/back/functions/css.js +32 -0
  192. package/addons/render/assets/back/functions/js.js +32 -0
  193. package/addons/render/assets/back/functions/scan/directories.js +38 -0
  194. package/addons/render/assets/back/functions/scan/files.js +58 -0
  195. package/addons/render/assets/back/functions/utils/read.js +26 -0
  196. package/addons/render/assets/back/functions/utils/transform.js +34 -0
  197. package/addons/render/assets/back/items/commands/css.js +20 -0
  198. package/addons/render/assets/back/items/commands/js.js +19 -0
  199. package/addons/render/assets/back/items/html/css.js +18 -0
  200. package/addons/render/assets/back/items/html/js.js +18 -0
  201. package/addons/render/assets/back/load.js +23 -0
  202. package/addons/render/directives/front/js/#register/addon.js +32 -0
  203. package/addons/render/directives/front/js/functions/process/attributes.js +47 -0
  204. package/addons/render/directives/front/js/functions/process/data.js +74 -0
  205. package/addons/render/directives/front/js/functions/process/match.js +43 -0
  206. package/addons/render/directives/front/js/functions/process.js +57 -0
  207. package/addons/render/directives/front/js/items/100-if.js +24 -0
  208. package/addons/render/directives/front/js/items/1000-render.js +36 -0
  209. package/addons/render/directives/front/js/items/110-show.js +25 -0
  210. package/addons/render/directives/front/js/items/160-slot.js +32 -0
  211. package/addons/render/directives/front/js/items/200-for.js +79 -0
  212. package/addons/render/directives/front/js/items/500-blur.js +46 -0
  213. package/addons/render/directives/front/js/items/500-change.js +53 -0
  214. package/addons/render/directives/front/js/items/500-click-outside.js +50 -0
  215. package/addons/render/directives/front/js/items/500-click.js +52 -0
  216. package/addons/render/directives/front/js/items/500-double-click.js +52 -0
  217. package/addons/render/directives/front/js/items/500-focus.js +46 -0
  218. package/addons/render/directives/front/js/items/500-input.js +46 -0
  219. package/addons/render/directives/front/js/items/500-keydown.js +53 -0
  220. package/addons/render/directives/front/js/items/500-keyup.js +53 -0
  221. package/addons/render/directives/front/js/items/500-mouse-enter.js +61 -0
  222. package/addons/render/directives/front/js/items/500-mouse-leave.js +61 -0
  223. package/addons/render/directives/front/js/items/500-mouse-move.js +45 -0
  224. package/addons/render/directives/front/js/items/500-scroll.js +45 -0
  225. package/addons/render/directives/front/js/items/500-submit.js +52 -0
  226. package/addons/render/directives/front/js/items/650-fetch.js +189 -0
  227. package/addons/render/directives/front/js/items/660-form.js +291 -0
  228. package/addons/render/directives/front/js/items/700-text.js +50 -0
  229. package/addons/render/directives/front/js/items/750-html.js +44 -0
  230. package/addons/render/elements/front/#register/addon.js +12 -0
  231. package/addons/render/elements/front/item/catch/add.js +9 -0
  232. package/addons/render/elements/front/items/directives/element.js +76 -0
  233. package/addons/render/elements/front/items/self/base/menu/menu.js +96 -0
  234. package/addons/render/elements/front/items/self/base/menu/styles/base.css +116 -0
  235. package/addons/render/elements/front/items/self/base/menu/styles/sizes.css +27 -0
  236. package/addons/render/elements/front/items/self/base/menu/styles/variants.css +99 -0
  237. package/addons/render/elements/front/items/self/base/tag/tag.css +199 -0
  238. package/addons/render/elements/front/items/self/base/tag/tag.js +37 -0
  239. package/addons/render/elements/front/items/self/cards/basic/basic.js +89 -0
  240. package/addons/render/elements/front/items/self/cards/basic/styles/base.css +66 -0
  241. package/addons/render/elements/front/items/self/cards/basic/styles/sizes.css +32 -0
  242. package/addons/render/elements/front/items/self/cards/basic/styles/variants.css +99 -0
  243. package/addons/render/elements/front/items/self/cards/list/list.js +108 -0
  244. package/addons/render/elements/front/items/self/cards/list/styles/base.css +96 -0
  245. package/addons/render/elements/front/items/self/cards/list/styles/sizes.css +32 -0
  246. package/addons/render/elements/front/items/self/cards/list/styles/variants.css +99 -0
  247. package/addons/render/elements/front/items/self/cards/media/media.js +116 -0
  248. package/addons/render/elements/front/items/self/cards/media/styles/base.css +126 -0
  249. package/addons/render/elements/front/items/self/cards/media/styles/sizes.css +49 -0
  250. package/addons/render/elements/front/items/self/cards/media/styles/variants.css +74 -0
  251. package/addons/render/elements/front/items/self/cards/profile/profile.js +95 -0
  252. package/addons/render/elements/front/items/self/cards/profile/styles/base.css +142 -0
  253. package/addons/render/elements/front/items/self/cards/profile/styles/sizes.css +43 -0
  254. package/addons/render/elements/front/items/self/cards/profile/styles/variants.css +131 -0
  255. package/addons/render/elements/front/items/self/cards/stat/stat.js +117 -0
  256. package/addons/render/elements/front/items/self/cards/stat/styles/base.css +97 -0
  257. package/addons/render/elements/front/items/self/cards/stat/styles/sizes.css +49 -0
  258. package/addons/render/elements/front/items/self/cards/stat/styles/variants.css +124 -0
  259. package/addons/render/elements/front/items/self/content/html/html.css +93 -0
  260. package/addons/render/elements/front/items/self/content/html/html.js +40 -0
  261. package/addons/render/elements/front/items/self/content/markdown/markdown.css +200 -0
  262. package/addons/render/elements/front/items/self/content/markdown/markdown.js +120 -0
  263. package/addons/render/elements/front/items/self/data/comments/comments.css +253 -0
  264. package/addons/render/elements/front/items/self/data/comments/comments.js +134 -0
  265. package/addons/render/elements/front/items/self/data/files/files.css +116 -0
  266. package/addons/render/elements/front/items/self/data/files/files.js +85 -0
  267. package/addons/render/elements/front/items/self/data/folders/folders.css +104 -0
  268. package/addons/render/elements/front/items/self/data/folders/folders.js +73 -0
  269. package/addons/render/elements/front/items/self/data/inbox/inbox.css +225 -0
  270. package/addons/render/elements/front/items/self/data/inbox/inbox.js +111 -0
  271. package/addons/render/elements/front/items/self/data/logs/logs.css +133 -0
  272. package/addons/render/elements/front/items/self/data/logs/logs.js +65 -0
  273. package/addons/render/elements/front/items/self/data/plans/plans.css +231 -0
  274. package/addons/render/elements/front/items/self/data/plans/plans.js +104 -0
  275. package/addons/render/elements/front/items/self/data/properties/properties.css +108 -0
  276. package/addons/render/elements/front/items/self/data/properties/properties.js +156 -0
  277. package/addons/render/elements/front/items/self/data/table/table.css +153 -0
  278. package/addons/render/elements/front/items/self/data/table/table.js +106 -0
  279. package/addons/render/elements/front/items/self/data/timeline/timeline.css +127 -0
  280. package/addons/render/elements/front/items/self/data/timeline/timeline.js +57 -0
  281. package/addons/render/elements/front/items/self/feedback/alert/alert.css +258 -0
  282. package/addons/render/elements/front/items/self/feedback/alert/alert.js +67 -0
  283. package/addons/render/elements/front/items/self/feedback/confirm/confirm.css +229 -0
  284. package/addons/render/elements/front/items/self/feedback/confirm/confirm.js +81 -0
  285. package/addons/render/elements/front/items/self/feedback/loader/loader.css +203 -0
  286. package/addons/render/elements/front/items/self/feedback/loader/loader.js +25 -0
  287. package/addons/render/elements/front/items/self/feedback/progress/progress.css +136 -0
  288. package/addons/render/elements/front/items/self/feedback/progress/progress.js +40 -0
  289. package/addons/render/elements/front/items/self/form/button/button.js +105 -0
  290. package/addons/render/elements/front/items/self/form/button/styles/base.css +176 -0
  291. package/addons/render/elements/front/items/self/form/button/styles/sizes.css +78 -0
  292. package/addons/render/elements/front/items/self/form/button/styles/variants.css +421 -0
  293. package/addons/render/elements/front/items/self/form/checkbox/checkbox.js +57 -0
  294. package/addons/render/elements/front/items/self/form/checkbox/styles/base.css +52 -0
  295. package/addons/render/elements/front/items/self/form/checkbox/styles/sizes.css +39 -0
  296. package/addons/render/elements/front/items/self/form/checkbox/styles/variants.css +121 -0
  297. package/addons/render/elements/front/items/self/form/field/field.css +96 -0
  298. package/addons/render/elements/front/items/self/form/field/field.js +39 -0
  299. package/addons/render/elements/front/items/self/form/input/input.css +111 -0
  300. package/addons/render/elements/front/items/self/form/input/input.js +78 -0
  301. package/addons/render/elements/front/items/self/form/input/styles/base.css +26 -0
  302. package/addons/render/elements/front/items/self/form/input/styles/sizes.css +15 -0
  303. package/addons/render/elements/front/items/self/form/input/styles/variants.css +98 -0
  304. package/addons/render/elements/front/items/self/form/radio/radio.js +57 -0
  305. package/addons/render/elements/front/items/self/form/radio/styles/base.css +48 -0
  306. package/addons/render/elements/front/items/self/form/radio/styles/sizes.css +36 -0
  307. package/addons/render/elements/front/items/self/form/radio/styles/variants.css +121 -0
  308. package/addons/render/elements/front/items/self/form/rating/rating.css +95 -0
  309. package/addons/render/elements/front/items/self/form/rating/rating.js +88 -0
  310. package/addons/render/elements/front/items/self/form/section/section.css +107 -0
  311. package/addons/render/elements/front/items/self/form/section/section.js +39 -0
  312. package/addons/render/elements/front/items/self/form/slider/slider.css +244 -0
  313. package/addons/render/elements/front/items/self/form/slider/slider.js +69 -0
  314. package/addons/render/elements/front/items/self/form/textarea/textarea.css +117 -0
  315. package/addons/render/elements/front/items/self/form/textarea/textarea.js +69 -0
  316. package/addons/render/elements/front/items/self/layout/empty/empty.css +154 -0
  317. package/addons/render/elements/front/items/self/layout/empty/empty.js +43 -0
  318. package/addons/render/elements/front/items/self/layout/heading/heading.css +117 -0
  319. package/addons/render/elements/front/items/self/layout/heading/heading.js +47 -0
  320. package/addons/render/elements/front/items/self/layout/hero/hero.js +88 -0
  321. package/addons/render/elements/front/items/self/layout/hero/styles/base.css +81 -0
  322. package/addons/render/elements/front/items/self/layout/hero/styles/sizes.css +24 -0
  323. package/addons/render/elements/front/items/self/layout/hero/styles/variants.css +98 -0
  324. package/addons/render/elements/front/items/self/navigation/breadcrumb/addon/_class/addon.js +9 -0
  325. package/addons/render/elements/front/items/self/navigation/breadcrumb/addon/functions/get.js +22 -0
  326. package/addons/render/elements/front/items/self/navigation/breadcrumb/breadcrumb.css +13 -0
  327. package/addons/render/elements/front/items/self/navigation/breadcrumb/breadcrumb.js +51 -0
  328. package/addons/render/elements/front/items/self/navigation/footer/addon/_class/addon.js +11 -0
  329. package/addons/render/elements/front/items/self/navigation/footer/addon/functions/columns.js +11 -0
  330. package/addons/render/elements/front/items/self/navigation/footer/addon/functions/get.js +34 -0
  331. package/addons/render/elements/front/items/self/navigation/footer/footer.css +283 -0
  332. package/addons/render/elements/front/items/self/navigation/footer/footer.js +139 -0
  333. package/addons/render/elements/front/items/self/navigation/navbar/addon/_class/addon.js +13 -0
  334. package/addons/render/elements/front/items/self/navigation/navbar/addon/functions/active.js +7 -0
  335. package/addons/render/elements/front/items/self/navigation/navbar/addon/functions/get.js +31 -0
  336. package/addons/render/elements/front/items/self/navigation/navbar/navbar.css +140 -0
  337. package/addons/render/elements/front/items/self/navigation/navbar/navbar.js +118 -0
  338. package/addons/render/elements/front/items/self/navigation/pagination/pagination.css +160 -0
  339. package/addons/render/elements/front/items/self/navigation/pagination/pagination.js +131 -0
  340. package/addons/render/elements/front/items/self/navigation/sidebar/addon/_class/addon.js +12 -0
  341. package/addons/render/elements/front/items/self/navigation/sidebar/addon/functions/active.js +7 -0
  342. package/addons/render/elements/front/items/self/navigation/sidebar/addon/functions/get.js +35 -0
  343. package/addons/render/elements/front/items/self/navigation/sidebar/addon/functions/groups.js +10 -0
  344. package/addons/render/elements/front/items/self/navigation/sidebar/sidebar.css +278 -0
  345. package/addons/render/elements/front/items/self/navigation/sidebar/sidebar.js +85 -0
  346. package/addons/render/elements/front/items/self/navigation/stepper/stepper.css +202 -0
  347. package/addons/render/elements/front/items/self/navigation/stepper/stepper.js +82 -0
  348. package/addons/render/elements/front/items/self/navigation/tabs/addon.js +32 -0
  349. package/addons/render/elements/front/items/self/navigation/tabs/tabs.css +239 -0
  350. package/addons/render/elements/front/items/self/navigation/tabs/tabs.js +76 -0
  351. package/addons/render/elements/front/items/self/preview/html/html.css +377 -0
  352. package/addons/render/elements/front/items/self/preview/html/html.js +107 -0
  353. package/addons/render/html/addon.js +13 -0
  354. package/addons/render/html/functions/render.js +85 -0
  355. package/addons/render/html/item/functions/render.js +66 -0
  356. package/addons/render/html/items/assets/favicon.js +12 -0
  357. package/addons/render/html/items/fonts/outfit.js +12 -0
  358. package/addons/render/html/items/fonts/preconnect.js +24 -0
  359. package/addons/render/html/items/meta/charset.js +11 -0
  360. package/addons/render/html/items/meta/description.js +12 -0
  361. package/addons/render/html/items/meta/title.js +9 -0
  362. package/addons/render/html/items/meta/viewport.js +12 -0
  363. package/addons/render/html/items/seo/robots.js +12 -0
  364. package/addons/render/html/items/seo/theme-color.js +12 -0
  365. package/addons/render/html/load.js +26 -0
  366. package/addons/render/items/js/#register/addon.js +14 -0
  367. package/addons/render/items/js/functions/count.js +9 -0
  368. package/addons/render/items/js/functions/get.js +34 -0
  369. package/addons/render/items/js/functions/groups.js +16 -0
  370. package/addons/render/items/js/functions/render.js +44 -0
  371. package/addons/render/items/js/item/catch/add.js +18 -0
  372. package/addons/render/pages/front/css/page.css +17 -0
  373. package/addons/render/pages/front/js/#register/addon.js +29 -0
  374. package/addons/render/pages/front/js/events/click.js +27 -0
  375. package/addons/render/pages/front/js/events/load.js +25 -0
  376. package/addons/render/pages/front/js/functions/change.js +119 -0
  377. package/addons/render/pages/front/js/functions/match.js +34 -0
  378. package/addons/render/pages/front/js/functions/open.js +19 -0
  379. package/addons/render/pages/front/js/item/catch/add.js +24 -0
  380. package/addons/render/pages/front/js/item/catch/remove.js +17 -0
  381. package/addons/render/pages/front/js/item/functions/enter.js +45 -0
  382. package/addons/render/pages/front/js/item/functions/leave.js +27 -0
  383. package/addons/render/pages/front/js/item/functions/render.js +33 -0
  384. package/addons/render/pages/front/js/items/commands/change.js +41 -0
  385. package/addons/render/pages/front/js/items/shortcuts/home.js +9 -0
  386. package/addons/render/pages/front/js/items/shortcuts/login.js +9 -0
  387. package/addons/render/tags/addon.js +11 -0
  388. package/addons/render/tags/functions/groups.js +13 -0
  389. package/addons/render/tags/functions/validate.js +51 -0
  390. package/addons/render/tags/items/block.js +131 -0
  391. package/addons/render/tags/items/form.js +112 -0
  392. package/addons/render/tags/items/media.js +64 -0
  393. package/addons/render/tags/items/meta.js +28 -0
  394. package/addons/render/tags/items/semantic.js +114 -0
  395. package/addons/render/tags/items/table.js +92 -0
  396. package/addons/render/tags/items/text-inline.js +215 -0
  397. package/addons/render/tags/load.js +16 -0
  398. package/addons/render/transforms/front/js/#register/addon.js +11 -0
  399. package/addons/render/transforms/front/js/functions/load/assets.js +49 -0
  400. package/addons/render/transforms/front/js/items/directives/transform.js +40 -0
  401. package/addons/render/transforms/front/js/items/self/accordion.js +174 -0
  402. package/addons/render/transforms/front/js/items/self/chart/area.js +156 -0
  403. package/addons/render/transforms/front/js/items/self/chart/bar.js +140 -0
  404. package/addons/render/transforms/front/js/items/self/chart/bubble.js +169 -0
  405. package/addons/render/transforms/front/js/items/self/chart/doughnut.js +127 -0
  406. package/addons/render/transforms/front/js/items/self/chart/line.js +152 -0
  407. package/addons/render/transforms/front/js/items/self/chart/pie.js +125 -0
  408. package/addons/render/transforms/front/js/items/self/chart/radar.js +157 -0
  409. package/addons/render/transforms/front/js/items/self/chart/scatter.js +152 -0
  410. package/addons/render/transforms/front/js/items/self/codeflask.js +99 -0
  411. package/addons/render/transforms/front/js/items/self/codemirror.js +231 -0
  412. package/addons/render/transforms/front/js/items/self/comparison.js +142 -0
  413. package/addons/render/transforms/front/js/items/self/heatmap.js +494 -0
  414. package/addons/render/transforms/front/js/items/self/interact.js +277 -0
  415. package/addons/render/transforms/front/js/items/self/particles.js +329 -0
  416. package/addons/render/transforms/front/js/items/self/sparkline.js +240 -0
  417. package/addons/render/transforms/front/js/items/self/swiper.js +143 -0
  418. package/addons/render/transforms/front/js/items/self/tabs.js +460 -0
  419. package/addons/render/transforms/front/js/items/self/typed.js +173 -0
  420. package/docs/addons.md +281 -0
  421. package/docs/architecture.md +190 -0
  422. package/docs/commands.md +308 -0
  423. package/docs/database.md +171 -0
  424. package/docs/frontend.md +379 -0
  425. package/docs/servers.md +133 -0
  426. package/lib/LICENSE.txt +40 -0
  427. package/lib/README.md +132 -0
  428. package/lib/browser.js +26 -0
  429. package/lib/events.js +108 -0
  430. package/lib/load.js +39 -0
  431. package/lib/src/classes/addon/class.js +86 -0
  432. package/lib/src/classes/addon/classes/item/class.js +27 -0
  433. package/lib/src/classes/addon/classes/item/mixins/crud.js +30 -0
  434. package/lib/src/classes/addon/classes/item/mixins/functions.js +11 -0
  435. package/lib/src/classes/addon/classes/item/mixins/get.js +78 -0
  436. package/lib/src/classes/addon/classes/item/mixins/remove.js +11 -0
  437. package/lib/src/classes/addon/classes/item/mixins/set.js +69 -0
  438. package/lib/src/classes/addon/classes/item/mixins/store.js +58 -0
  439. package/lib/src/classes/addon/classes/render/class.js +117 -0
  440. package/lib/src/classes/addon/classes/render/mixins/compile.js +91 -0
  441. package/lib/src/classes/addon/classes/render/mixins/dom.js +18 -0
  442. package/lib/src/classes/addon/classes/render/mixins/events.js +152 -0
  443. package/lib/src/classes/addon/classes/render/mixins/get.js +56 -0
  444. package/lib/src/classes/addon/classes/render/mixins/methods.js +191 -0
  445. package/lib/src/classes/addon/classes/render/mixins/process.js +88 -0
  446. package/lib/src/classes/addon/classes/render/mixins/set.js +36 -0
  447. package/lib/src/classes/addon/mixins/fields.js +85 -0
  448. package/lib/src/classes/addon/mixins/find.js +14 -0
  449. package/lib/src/classes/addon/mixins/functions.js +131 -0
  450. package/lib/src/classes/addon/mixins/get.js +11 -0
  451. package/lib/src/classes/addon/mixins/items.js +176 -0
  452. package/lib/src/classes/addon/mixins/remove.js +12 -0
  453. package/lib/src/classes/addon/mixins/render.js +57 -0
  454. package/lib/src/classes/addon/mixins/store.js +52 -0
  455. package/lib/src/classes/addon/mixins/table.js +37 -0
  456. package/lib/src/divhunt.js +84 -0
  457. package/lib/src/mixins/addons.js +150 -0
  458. package/lib/src/mixins/binaries.js +89 -0
  459. package/lib/src/mixins/data.js +312 -0
  460. package/lib/src/mixins/dependencies.js +99 -0
  461. package/lib/src/mixins/dom.js +167 -0
  462. package/lib/src/mixins/emitter.js +77 -0
  463. package/lib/src/mixins/function.js +82 -0
  464. package/lib/src/mixins/generate.js +73 -0
  465. package/lib/src/mixins/helper.js +317 -0
  466. package/lib/src/mixins/logger.js +75 -0
  467. package/lib/src/mixins/middleware.js +52 -0
  468. package/lib/src/mixins/overrides.js +37 -0
  469. package/lib/src/mixins/request.js +28 -0
  470. package/lib/src/mixins/route.js +191 -0
  471. package/lib/src/mixins/string.js +196 -0
  472. package/lib/src/mixins/validate.js +78 -0
  473. package/package.json +70 -0
@@ -0,0 +1,379 @@
1
+ # Frontend
2
+
3
+ Proxy-based reactivity with DOM diffing, Vue-like directives, SPA page routing, and convention-based asset bundling.
4
+
5
+ ## Pages
6
+
7
+ Pages define routes with async data loading, CSS Grid layouts, and template areas.
8
+
9
+ ```js
10
+ pages.ItemAdd({
11
+ id: 'home',
12
+ route: '/',
13
+ title: 'Home',
14
+ grid: {
15
+ template: '"content"',
16
+ columns: '1fr',
17
+ rows: '1fr'
18
+ },
19
+ areas: {
20
+ content: function() {
21
+ return `
22
+ <div class="page-home">
23
+ <c-navbar></c-navbar>
24
+ <c-hero title="Welcome"></c-hero>
25
+ <c-footer></c-footer>
26
+ </div>
27
+ `;
28
+ }
29
+ }
30
+ });
31
+ ```
32
+
33
+ ### Route params
34
+
35
+ ```js
36
+ pages.ItemAdd({
37
+ id: 'offer',
38
+ route: '/ponuda/:id/:type/:location/:name',
39
+ // ...
40
+ });
41
+ ```
42
+
43
+ Params are available in `this.parameters`:
44
+
45
+ ```js
46
+ areas: {
47
+ content: function() {
48
+ const id = this.parameters.id;
49
+ // ...
50
+ }
51
+ }
52
+ ```
53
+
54
+ ### Multiple routes
55
+
56
+ ```js
57
+ route: ['/offers', '/offers/:type/:value']
58
+ ```
59
+
60
+ ### Async data loading
61
+
62
+ The `data` function runs before render:
63
+
64
+ ```js
65
+ pages.ItemAdd({
66
+ id: 'offer',
67
+ route: '/ponuda/:id/:type/:location/:name',
68
+
69
+ title: function(parameters, data) {
70
+ return data?.offer?.name || 'Offer';
71
+ },
72
+
73
+ data: async function(parameters) {
74
+ const offer = await offers.Find()
75
+ .filter('id', parameters.id)
76
+ .join('files', 'cover_id', 'cover')
77
+ .join('countries', 'countries', 'countries')
78
+ .join('cities', 'cities', 'cities')
79
+ .one();
80
+
81
+ return { offer: offer ? offer.data : null };
82
+ },
83
+
84
+ areas: {
85
+ content: function() {
86
+ this.offer = this.data.offer || {};
87
+
88
+ return `
89
+ <div>
90
+ <h1>{{ offer.name }}</h1>
91
+ <span dh-if="offer.stars">{{ offer.stars }} stars</span>
92
+ </div>
93
+ `;
94
+ }
95
+ }
96
+ });
97
+ ```
98
+
99
+ ### Interactive pages
100
+
101
+ Pages can have local state and methods:
102
+
103
+ ```js
104
+ areas: {
105
+ content: function() {
106
+ this.items = [];
107
+ this.page = 1;
108
+ this.total = 0;
109
+
110
+ this.fetch = async () => {
111
+ const result = await offers.Find()
112
+ .filter('status', 'Aktivna')
113
+ .sort('score', 'desc')
114
+ .page(this.page)
115
+ .limit(12)
116
+ .plain();
117
+
118
+ this.items = result.items;
119
+ this.total = result.total;
120
+ };
121
+
122
+ this.handlePageChange = (newPage) => {
123
+ this.page = newPage;
124
+ this.fetch();
125
+ };
126
+
127
+ this.fetch();
128
+
129
+ return `
130
+ <div>
131
+ <span>{{ total }} results</span>
132
+
133
+ <div dh-if="items.length > 0" class="grid">
134
+ <a dh-for="offer in items" :href="'/offer/' + offer.id">
135
+ <c-offer-card :offer="offer"></c-offer-card>
136
+ </a>
137
+ </div>
138
+
139
+ <c-pagination
140
+ :page="page"
141
+ :pages="Math.ceil(total / 12)"
142
+ :_change="handlePageChange"
143
+ ></c-pagination>
144
+ </div>
145
+ `;
146
+ }
147
+ }
148
+ ```
149
+
150
+ Setting `this.items`, `this.page`, or `this.total` triggers a 16ms debounced re-render with DOM diffing.
151
+
152
+ ## Components
153
+
154
+ Reusable UI elements with typed config and template rendering.
155
+
156
+ ```js
157
+ components.ItemAdd({
158
+ id: 'hero',
159
+ config: {
160
+ title: { type: 'string', value: 'Page Title' },
161
+ subtitle: { type: 'string', value: '' },
162
+ image: { type: 'string', value: '' },
163
+ variant: { type: 'array', value: [], options: ['compact', 'tall'] }
164
+ },
165
+ render: function() {
166
+ return `
167
+ <section class="holder" :style="'background-image: url(' + image + ')'">
168
+ <div class="overlay"></div>
169
+ <div class="content">
170
+ <slot name="top"></slot>
171
+ <h1>{{ title }}</h1>
172
+ <p dh-if="subtitle">{{ subtitle }}</p>
173
+ </div>
174
+ </section>
175
+ `;
176
+ }
177
+ });
178
+ ```
179
+
180
+ ### Using components
181
+
182
+ Components become custom elements prefixed with `c-`:
183
+
184
+ ```html
185
+ <c-hero title="Our Offers" subtitle="Find your trip" image="/hero.jpg">
186
+ <div slot="top">
187
+ <c-breadcrumb :items="[{label: 'Home', href: '/'}, {label: 'Offers'}]"></c-breadcrumb>
188
+ </div>
189
+ </c-hero>
190
+ ```
191
+
192
+ ### Config types
193
+
194
+ ```js
195
+ config: {
196
+ title: { type: 'string', value: 'Default' },
197
+ count: { type: 'number', value: 0 },
198
+ active: { type: 'boolean', value: true },
199
+ items: { type: 'array', value: [] },
200
+ data: { type: 'object', value: {} },
201
+ variant: { type: 'array', value: [], options: ['size-s', 'size-m', 'size-l'] },
202
+ _click: { type: 'function' }, // callback (prefixed with _)
203
+ _change: { type: 'function' }
204
+ }
205
+ ```
206
+
207
+ ### Component with logic
208
+
209
+ ```js
210
+ components.ItemAdd({
211
+ id: 'pagination',
212
+ config: {
213
+ page: { type: 'number', value: 1 },
214
+ pages: { type: 'number', value: 1 },
215
+ _change: { type: 'function' }
216
+ },
217
+ render: function() {
218
+ this.goToPage = (num) => {
219
+ if (num >= 1 && num <= this.pages) {
220
+ this.page = num;
221
+ if (this._change) this._change(num);
222
+ }
223
+ };
224
+
225
+ return `
226
+ <div class="pagination">
227
+ <button dh-click="() => goToPage(page - 1)" :disabled="page === 1">Prev</button>
228
+ <span>{{ page }} / {{ pages }}</span>
229
+ <button dh-click="() => goToPage(page + 1)" :disabled="page === pages">Next</button>
230
+ </div>
231
+ `;
232
+ }
233
+ });
234
+ ```
235
+
236
+ ## Directives
237
+
238
+ Vue-like syntax, processed during compile with priority ordering.
239
+
240
+ ### Conditional rendering
241
+
242
+ ```html
243
+ <div dh-if="items.length > 0">Has items</div>
244
+ <div dh-if="!loading">Content loaded</div>
245
+ ```
246
+
247
+ ### List rendering
248
+
249
+ ```html
250
+ <a dh-for="offer in items" :href="'/offer/' + offer.id">
251
+ {{ offer.name }}
252
+ </a>
253
+
254
+ <!-- With index -->
255
+ <div dh-for="item, index in items">
256
+ {{ index }}: {{ item.name }}
257
+ </div>
258
+ ```
259
+
260
+ ### Event handlers
261
+
262
+ ```html
263
+ <button dh-click="submit">Send</button>
264
+ <button dh-click="() => goToPage(3)">Page 3</button>
265
+ <input :_input="(e) => form.name = e.target.value">
266
+ ```
267
+
268
+ ### Dynamic attributes
269
+
270
+ ```html
271
+ <img :src="getImage()" :alt="name" loading="lazy">
272
+ <div :class="'card ' + (active ? 'active' : '')">
273
+ <div :style="'background-image: url(' + image + ')'">
274
+ <button :disabled="page === 1">
275
+ <article :variant="variant.join(' ')">
276
+ ```
277
+
278
+ ### Text interpolation
279
+
280
+ ```html
281
+ <span>{{ total }} results</span>
282
+ <h1>{{ offer.name }}</h1>
283
+ <span>{{ getStars() }}</span>
284
+ ```
285
+
286
+ ### All directives
287
+
288
+ `dh-if`, `dh-show`, `dh-for`, `dh-click`, `dh-text`, `dh-html`, `dh-fetch`, `dh-render`, `dh-form`, and all DOM event handlers.
289
+
290
+ ## Reactivity
291
+
292
+ Setting any property on a render context triggers a re-render:
293
+
294
+ ```js
295
+ this.count = 0;
296
+ this.increment = () => this.count++; // triggers DOM update
297
+ ```
298
+
299
+ Updates are batched with a 16ms debounce. The framework diffs the new DOM against the current DOM and patches only what changed. No virtual DOM — direct DOM diffing.
300
+
301
+ Lifecycle: `init → render → compile → ready → mount → update → unmount → destroy`.
302
+
303
+ ## Slots
304
+
305
+ Components can define named slots:
306
+
307
+ ```js
308
+ render: function() {
309
+ return `
310
+ <div>
311
+ <slot name="top"></slot>
312
+ <div class="content">
313
+ <slot></slot>
314
+ </div>
315
+ </div>
316
+ `;
317
+ }
318
+ ```
319
+
320
+ Usage:
321
+
322
+ ```html
323
+ <c-layout>
324
+ <div slot="top">Header content</div>
325
+ <p>Default slot content</p>
326
+ </c-layout>
327
+ ```
328
+
329
+ ## Asset bundling
330
+
331
+ Convention-based bundler that scans directories, strips ES module syntax, concatenates, and minifies.
332
+
333
+ ```js
334
+ import assets from '#assets/load.js';
335
+
336
+ // Scan directories in order
337
+ assets.Item({ type: 'js', order: 0, path: 'framework' });
338
+ assets.Item({ type: 'js', order: 1, path: 'addons/core/commands/front' });
339
+ assets.Item({ type: 'js', order: 1, path: 'addons/render/directives/front' });
340
+ assets.Item({ type: 'js', order: 1, path: 'addons/render/pages/front' });
341
+
342
+ // CSS
343
+ assets.Item({ type: 'css', order: 0, path: 'styles' });
344
+ assets.Item({ type: 'css', order: 1, path: 'addons/render/elements/front' });
345
+ assets.Item({ type: 'css', order: 2, path: 'projects/travel/site/front' });
346
+
347
+ // Ignore specific files
348
+ assets.Item({ type: 'js', order: 0, path: 'framework', ignore: ['framework/load.js'] });
349
+ ```
350
+
351
+ ### Dynamic content injection
352
+
353
+ Inject server-side data into the frontend bundle:
354
+
355
+ ```js
356
+ assets.Item({
357
+ type: 'js',
358
+ order: 4,
359
+ content: function() {
360
+ const items = Object.values(settings.Items())
361
+ .filter(item => item.Get('organization_id') === 9)
362
+ .map(item => item.data);
363
+
364
+ return `settings.ItemsAdd(${JSON.stringify(items)}, null, false);`;
365
+ }
366
+ });
367
+ ```
368
+
369
+ This runs at bundle time — server-side data becomes available client-side without an API call.
370
+
371
+ ### How it works
372
+
373
+ 1. Scans directories recursively for `.js` or `.css` files
374
+ 2. Prioritizes `addon.js` files (loaded first)
375
+ 3. Strips `import`/`export` statements
376
+ 4. Concatenates by `order` value
377
+ 5. Minifies via terser
378
+
379
+ No webpack, no build step, no configuration files.
@@ -0,0 +1,133 @@
1
+ # Servers
2
+
3
+ HTTP and gRPC servers, both configured through the commands addon.
4
+
5
+ ## HTTP server
6
+
7
+ ```js
8
+ import commands from '#commands/load.js';
9
+
10
+ commands.Fn('http.server', 3000, {
11
+ onStart: (server) => {
12
+ console.log('HTTP server started on port 3000');
13
+ },
14
+ onResponse: (http) => {
15
+ // Called after each response
16
+ },
17
+ onError: (error) => {
18
+ console.log('HTTP server error:', error.message);
19
+ }
20
+ });
21
+ ```
22
+
23
+ ## gRPC server
24
+
25
+ Bidirectional streaming with automatic reconnection and binary data transport.
26
+
27
+ ```js
28
+ commands.Fn('grpc.server', 50000, {
29
+ onStart: function() {
30
+ console.log('gRPC server started on port 50000');
31
+ },
32
+ onStreamConnect: async function(stream) {
33
+ // Authenticate via metadata
34
+ const node = await nodes.Fn('find', stream.metadata.get('token')[0]);
35
+
36
+ // Track the connection as an item
37
+ const connection = streams.Item({
38
+ gateway_id: gateway.Get('id'),
39
+ node_id: node.Get('id')
40
+ });
41
+ await connection.Create();
42
+
43
+ // Attach runtime state via Store
44
+ connection.StoreSet('gateway', gateway);
45
+ connection.StoreSet('node', node);
46
+ connection.StoreSet('stream', stream);
47
+
48
+ stream.connection = connection;
49
+
50
+ console.log('Connection established:', node.Get('name'));
51
+ },
52
+ onStreamEnd: function(stream) {
53
+ if (stream.connection) {
54
+ const node = stream.connection.StoreGet('node');
55
+ console.log('Disconnected:', node.Get('name'));
56
+
57
+ stream.connection.Delete();
58
+ stream.connection.Remove();
59
+ }
60
+ },
61
+ onStreamError: function(stream) {
62
+ console.log('Stream error');
63
+ },
64
+ onError: function(message) {
65
+ console.log('Server error:', message);
66
+ }
67
+ });
68
+ ```
69
+
70
+ ## Binary transport
71
+
72
+ gRPC messages are JSON strings. Binary data (Buffers) is automatically extracted into a separate `map<string, bytes>` field before sending and re-injected on receive.
73
+
74
+ ```js
75
+ // Extract binaries from a data object
76
+ const extracted = divhunt.BinariesExtract(data);
77
+ // extracted.data → JSON-safe object (Buffers replaced with keys)
78
+ // extracted.binaries → map of key → Buffer
79
+
80
+ // Re-inject binaries
81
+ const restored = divhunt.BinariesInject(extracted.data, extracted.binaries);
82
+ ```
83
+
84
+ This enables transparent file transfers over the same gRPC stream without base64 encoding.
85
+
86
+ ## Store API
87
+
88
+ Per-item in-memory key-value storage — useful for attaching runtime state (like gRPC streams) to items:
89
+
90
+ ```js
91
+ // Set
92
+ connection.StoreSet('node', nodeItem);
93
+ connection.StoreSet('stream', streamObject);
94
+
95
+ // Get
96
+ const node = connection.StoreGet('node');
97
+ const stream = connection.StoreGet('stream');
98
+ ```
99
+
100
+ Store data is never persisted to the database. It exists only in memory for the lifetime of the item.
101
+
102
+ ## Requesting over gRPC
103
+
104
+ Send a request to a connected node and await the response:
105
+
106
+ ```js
107
+ const response = await stream.request('tool-slug', inputProperties, (chunk) => {
108
+ // Optional: handle streaming chunks
109
+ resolve(chunk.data, chunk.message, chunk.code, false);
110
+ });
111
+
112
+ // response.data, response.message, response.code, response.time
113
+ ```
114
+
115
+ ## Graceful shutdown
116
+
117
+ The framework handles process signals through middleware:
118
+
119
+ ```js
120
+ process.on('SIGINT', async () => {
121
+ await divhunt.Middleware('sigint');
122
+ await divhunt.Middleware('shutdown');
123
+ process.exit(0);
124
+ });
125
+ ```
126
+
127
+ Register shutdown handlers:
128
+
129
+ ```js
130
+ divhunt.MiddlewareAdd('shutdown', async () => {
131
+ // Close connections, flush data, etc.
132
+ });
133
+ ```
@@ -0,0 +1,40 @@
1
+ Copyright © 2025 Divhunt GmbH
2
+
3
+ This License governs use of the Divhunt framework (the "Software"). By accessing or using the Software, you agree to be bound by the terms of this License.
4
+
5
+ 1. GRANT OF LICENSE
6
+ You are granted a limited, non-exclusive, non-transferable, non-sublicensable license to use the Software solely for:
7
+ - personal projects;
8
+ - internal business purposes;
9
+ - client work, provided the client is not reselling or redistributing the Software.
10
+
11
+ 2. ATTRIBUTION AND BRANDING
12
+ a. All uses of the Software must retain visible attribution to “Divhunt”.
13
+ b. You must not remove, obscure, alter, or suppress any branding, notices, or credits related to Divhunt.
14
+ c. Any public project using the Software must clearly state that it uses the “Divhunt Framework”.
15
+
16
+ 3. PROHIBITED USES
17
+ The following are strictly prohibited:
18
+ a. Rebranding, renaming, or representing the Software as your own work;
19
+ b. Creating derivative frameworks or similar software tools based on the Software with the intent of distribution;
20
+ c. Redistributing, sublicensing, or selling the Software or any modified version thereof;
21
+ d. Using the Software in any commercial product, service, or offering without explicit, written permission from Divhunt GmbH.
22
+
23
+ 4. MODIFICATIONS
24
+ You may modify the Software for personal or internal use only. Modified versions may not be:
25
+ - redistributed;
26
+ - rebranded or marketed as original work;
27
+ - offered as a service or product.
28
+
29
+ 5. ENFORCEMENT AND TERMINATION
30
+ Any violation of this License will result in the immediate termination of all rights granted herein. Divhunt GmbH reserves the right to pursue legal remedies including but not limited to damages, injunctions, and recovery of profits obtained through unauthorized use.
31
+
32
+ 6. NO WARRANTY
33
+ THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. IN NO EVENT SHALL JOVANAT GMBH BE LIABLE FOR ANY DAMAGES ARISING FROM THE USE OR INABILITY TO USE THE SOFTWARE.
34
+
35
+ 7. GOVERNING LAW
36
+ This License shall be governed by and construed in accordance with the laws of Switzerland. All disputes shall be subject to the exclusive jurisdiction of the courts of Zug, Switzerland.
37
+
38
+ ---
39
+
40
+ For commercial licensing or other questions, please contact: **dejan@divhunt.com**
package/lib/README.md ADDED
@@ -0,0 +1,132 @@
1
+ ## Built with the Divhunt Framework – non-commercial use only. For commercial use, contact dejan@divhunt.com.
2
+
3
+ # Divhunt Framework
4
+
5
+ A lightweight, extensible JavaScript framework built around an addon system with powerful data validation, event handling, and DOM manipulation capabilities.
6
+
7
+ ## Core Architecture
8
+
9
+ The framework consists of a main `Divhunt` class with modular mixins and an extensible addon system:
10
+
11
+ ```
12
+ Framework Core
13
+ ├── Divhunt Class (main)
14
+ ├── Mixins (functionality)
15
+ │ ├── Addons
16
+ │ ├── Data Validation
17
+ │ ├── Event System
18
+ │ ├── Middleware
19
+ │ ├── DOM Manipulation
20
+ │ └── Utilities
21
+ └── Addon System
22
+ ├── DivhuntAddon
23
+ ├── DivhuntAddonItem
24
+ └── DivhuntAddonRender
25
+ ```
26
+
27
+ ## Quick Start
28
+
29
+ ### Server-side
30
+ ```javascript
31
+ import Divhunt from './lib/load.js';
32
+
33
+ const divhunt = new Divhunt();
34
+
35
+ // Create an addon
36
+ const users = divhunt.Addon('users', (addon) => {
37
+ addon.Field('name', ['string']);
38
+ addon.Field('email', ['string']);
39
+ });
40
+
41
+ // Add items
42
+ users.Item({
43
+ name: 'John Doe',
44
+ email: 'john@example.com'
45
+ });
46
+ ```
47
+
48
+ ### Browser
49
+ ```html
50
+ <script src="framework/browser.js"></script>
51
+ <script>
52
+ // window.divhunt is automatically available
53
+ const myAddon = window.divhunt.Addon('myAddon');
54
+ </script>
55
+ ```
56
+
57
+ ## Core Features
58
+
59
+ ### 🔧 Addon System
60
+ Create modular, reusable components with built-in validation
61
+
62
+ ### 📊 Data Validation
63
+ Powerful schema-based validation with nested objects and arrays
64
+
65
+ ### 🎯 Event System
66
+ Publisher-subscriber pattern for decoupled communication
67
+
68
+ ### ⚡ Middleware
69
+ Intercept and modify operations with middleware chains
70
+
71
+ ### 🌐 DOM Manipulation
72
+ Efficient DOM operations with state preservation
73
+
74
+ ### 🛠️ Utilities
75
+ Helper functions for common operations and data manipulation
76
+
77
+ ## Documentation
78
+
79
+ - [Installation](./docs/installation.md)
80
+ - [Addons](./docs/addons.md)
81
+ - [Data Validation](./docs/data-validation.md)
82
+ - [Events & Middleware](./docs/events-middleware.md)
83
+ - [DOM Manipulation](./docs/dom.md)
84
+ - [Utilities](./docs/utilities.md)
85
+ - [API Reference](./docs/api-reference.md)
86
+
87
+ ## Example Usage
88
+
89
+ ```javascript
90
+ // Create a blog addon
91
+ const blog = divhunt.Addon('blog', (addon) => {
92
+ addon.Field('title', ['string', '', true]);
93
+ addon.Field('content', ['string', '', true]);
94
+ addon.Field('author', ['object', {}, true], null, null, false, {
95
+ name: ['string'],
96
+ email: ['string']
97
+ });
98
+ addon.Field('tags', ['array'], null, null, false, {
99
+ each: ['string']
100
+ });
101
+ });
102
+
103
+ // Add a post
104
+ const post = blog.Item({
105
+ title: 'Getting Started',
106
+ content: 'Welcome to our blog...',
107
+ author: {
108
+ name: 'Jane Smith',
109
+ email: 'jane@example.com'
110
+ },
111
+ tags: ['tutorial', 'getting-started']
112
+ });
113
+
114
+ // Listen for events
115
+ divhunt.EmitOn('addon.item.add', (addon, item) => {
116
+ console.log(`New item added to ${addon.GetName()}`);
117
+ });
118
+
119
+ // Custom function
120
+ blog.Fn('getByTag', function(tag) {
121
+ return Object.values(this.Items()).filter(item =>
122
+ item.Get('tags').includes(tag)
123
+ );
124
+ });
125
+
126
+ // Use the function
127
+ const tutorials = blog.Fn('getByTag', 'tutorial');
128
+ ```
129
+
130
+ ## License
131
+
132
+ Licensed under the Divhunt Framework License. See LICENSE.txt for terms.
package/lib/browser.js ADDED
@@ -0,0 +1,26 @@
1
+ // © 2025 Divhunt GmbH — Licensed under the Divhunt Framework License. See LICENSE for terms.
2
+
3
+ window.divhunt = window.divhunt = new Divhunt();
4
+
5
+ if (document.readyState === 'loading')
6
+ {
7
+ document.addEventListener('DOMContentLoaded', initBrowser);
8
+ }
9
+ else
10
+ {
11
+ initBrowser();
12
+ }
13
+
14
+ function initBrowser()
15
+ {
16
+ divhunt.Addon('browser', function(addon)
17
+ {
18
+ addon.Render('body', () =>
19
+ {
20
+ return document.body.outerHTML;
21
+ });
22
+
23
+ const render = addon.Render('body', window);
24
+ document.body.replaceChildren(...render.Element.children);
25
+ });
26
+ }