jopijs 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (455) hide show
  1. package/README.md +134 -0
  2. package/bin/jopib.js +4 -0
  3. package/bin/jopin.js +4 -0
  4. package/dist/@bundler/_logs.d.ts +2 -0
  5. package/dist/@bundler/_logs.js +4 -0
  6. package/dist/@bundler/_logs.js.map +1 -0
  7. package/dist/@bundler/core.d.ts +1 -0
  8. package/dist/@bundler/core.js +34 -0
  9. package/dist/@bundler/core.js.map +1 -0
  10. package/dist/@bundler/esbuild.d.ts +6 -0
  11. package/dist/@bundler/esbuild.js +111 -0
  12. package/dist/@bundler/esbuild.js.map +1 -0
  13. package/dist/@bundler/index.d.ts +2 -0
  14. package/dist/@bundler/index.js +3 -0
  15. package/dist/@bundler/index.js.map +1 -0
  16. package/dist/@bundler/plugins.d.ts +13 -0
  17. package/dist/@bundler/plugins.js +145 -0
  18. package/dist/@bundler/plugins.js.map +1 -0
  19. package/dist/@bundler/tailwind.d.ts +3 -0
  20. package/dist/@bundler/tailwind.js +119 -0
  21. package/dist/@bundler/tailwind.js.map +1 -0
  22. package/dist/@core/PageComponent.d.ts +6 -0
  23. package/dist/@core/PageComponent.js +10 -0
  24. package/dist/@core/PageComponent.js.map +1 -0
  25. package/dist/@core/_logs.d.ts +7 -0
  26. package/dist/@core/_logs.js +9 -0
  27. package/dist/@core/_logs.js.map +1 -0
  28. package/dist/@core/automaticStartStop.d.ts +25 -0
  29. package/dist/@core/automaticStartStop.js +106 -0
  30. package/dist/@core/automaticStartStop.js.map +1 -0
  31. package/dist/@core/browserCacheControl.d.ts +21 -0
  32. package/dist/@core/browserCacheControl.js +17 -0
  33. package/dist/@core/browserCacheControl.js.map +1 -0
  34. package/dist/@core/bundler/bundler.d.ts +22 -0
  35. package/dist/@core/bundler/bundler.js +90 -0
  36. package/dist/@core/bundler/bundler.js.map +1 -0
  37. package/dist/@core/bundler/common.d.ts +2 -0
  38. package/dist/@core/bundler/common.js +17 -0
  39. package/dist/@core/bundler/common.js.map +1 -0
  40. package/dist/@core/bundler/config.d.ts +20 -0
  41. package/dist/@core/bundler/config.js +11 -0
  42. package/dist/@core/bundler/config.js.map +1 -0
  43. package/dist/@core/bundler/extraContent.d.ts +6 -0
  44. package/dist/@core/bundler/extraContent.js +27 -0
  45. package/dist/@core/bundler/extraContent.js.map +1 -0
  46. package/dist/@core/bundler/pagesGenerator.d.ts +1 -0
  47. package/dist/@core/bundler/pagesGenerator.js +173 -0
  48. package/dist/@core/bundler/pagesGenerator.js.map +1 -0
  49. package/dist/@core/bundler/server.d.ts +8 -0
  50. package/dist/@core/bundler/server.js +35 -0
  51. package/dist/@core/bundler/server.js.map +1 -0
  52. package/dist/@core/caches/InMemoryCache.d.ts +35 -0
  53. package/dist/@core/caches/InMemoryCache.js +353 -0
  54. package/dist/@core/caches/InMemoryCache.js.map +1 -0
  55. package/dist/@core/caches/SimpleFileCache.d.ts +18 -0
  56. package/dist/@core/caches/SimpleFileCache.js +171 -0
  57. package/dist/@core/caches/SimpleFileCache.js.map +1 -0
  58. package/dist/@core/caches/cache.d.ts +36 -0
  59. package/dist/@core/caches/cache.js +33 -0
  60. package/dist/@core/caches/cache.js.map +1 -0
  61. package/dist/@core/caches/webSiteMirrorCache.d.ts +16 -0
  62. package/dist/@core/caches/webSiteMirrorCache.js +81 -0
  63. package/dist/@core/caches/webSiteMirrorCache.js.map +1 -0
  64. package/dist/@core/gzip.d.ts +4 -0
  65. package/dist/@core/gzip.js +31 -0
  66. package/dist/@core/gzip.js.map +1 -0
  67. package/dist/@core/index.d.ts +18 -0
  68. package/dist/@core/index.js +19 -0
  69. package/dist/@core/index.js.map +1 -0
  70. package/dist/@core/internalTools.d.ts +14 -0
  71. package/dist/@core/internalTools.js +79 -0
  72. package/dist/@core/internalTools.js.map +1 -0
  73. package/dist/@core/jQuery.d.ts +5 -0
  74. package/dist/@core/jQuery.js +18 -0
  75. package/dist/@core/jQuery.js.map +1 -0
  76. package/dist/@core/jopiEasy.d.ts +287 -0
  77. package/dist/@core/jopiEasy.js +983 -0
  78. package/dist/@core/jopiEasy.js.map +1 -0
  79. package/dist/@core/jopiRequest.d.ts +269 -0
  80. package/dist/@core/jopiRequest.js +1060 -0
  81. package/dist/@core/jopiRequest.js.map +1 -0
  82. package/dist/@core/jopiServer.d.ts +77 -0
  83. package/dist/@core/jopiServer.js +100 -0
  84. package/dist/@core/jopiServer.js.map +1 -0
  85. package/dist/@core/jopiWebSite.d.ts +319 -0
  86. package/dist/@core/jopiWebSite.js +653 -0
  87. package/dist/@core/jopiWebSite.js.map +1 -0
  88. package/dist/@core/letsEncrypt.d.ts +25 -0
  89. package/dist/@core/letsEncrypt.js +189 -0
  90. package/dist/@core/letsEncrypt.js.map +1 -0
  91. package/dist/@core/linker.d.ts +4 -0
  92. package/dist/@core/linker.js +37 -0
  93. package/dist/@core/linker.js.map +1 -0
  94. package/dist/@core/loadBalancing.d.ts +18 -0
  95. package/dist/@core/loadBalancing.js +126 -0
  96. package/dist/@core/loadBalancing.js.map +1 -0
  97. package/dist/@core/middlewares/CorsMiddleware.d.ts +5 -0
  98. package/dist/@core/middlewares/CorsMiddleware.js +15 -0
  99. package/dist/@core/middlewares/CorsMiddleware.js.map +1 -0
  100. package/dist/@core/middlewares/DdosProtection.d.ts +42 -0
  101. package/dist/@core/middlewares/DdosProtection.js +62 -0
  102. package/dist/@core/middlewares/DdosProtection.js.map +1 -0
  103. package/dist/@core/middlewares/index.d.ts +10 -0
  104. package/dist/@core/middlewares/index.js +14 -0
  105. package/dist/@core/middlewares/index.js.map +1 -0
  106. package/dist/@core/publicTools.d.ts +8 -0
  107. package/dist/@core/publicTools.js +11 -0
  108. package/dist/@core/publicTools.js.map +1 -0
  109. package/dist/@core/routeConfig.d.ts +48 -0
  110. package/dist/@core/routeConfig.js +102 -0
  111. package/dist/@core/routeConfig.js.map +1 -0
  112. package/dist/@core/searchParamFilter.d.ts +70 -0
  113. package/dist/@core/searchParamFilter.js +212 -0
  114. package/dist/@core/searchParamFilter.js.map +1 -0
  115. package/dist/@core/serverFetch.d.ts +122 -0
  116. package/dist/@core/serverFetch.js +312 -0
  117. package/dist/@core/serverFetch.js.map +1 -0
  118. package/dist/@core/serverImpl/server_bunjs.d.ts +29 -0
  119. package/dist/@core/serverImpl/server_bunjs.js +180 -0
  120. package/dist/@core/serverImpl/server_bunjs.js.map +1 -0
  121. package/dist/@core/serverImpl/server_nodejs.d.ts +22 -0
  122. package/dist/@core/serverImpl/server_nodejs.js +235 -0
  123. package/dist/@core/serverImpl/server_nodejs.js.map +1 -0
  124. package/dist/@core/serverInstanceBuilder.d.ts +17 -0
  125. package/dist/@core/serverInstanceBuilder.js +14 -0
  126. package/dist/@core/serverInstanceBuilder.js.map +1 -0
  127. package/dist/@core/userStores.d.ts +13 -0
  128. package/dist/@core/userStores.js +20 -0
  129. package/dist/@core/userStores.js.map +1 -0
  130. package/dist/@crawler/common.d.ts +203 -0
  131. package/dist/@crawler/common.js +68 -0
  132. package/dist/@crawler/common.js.map +1 -0
  133. package/dist/@crawler/core.d.ts +87 -0
  134. package/dist/@crawler/core.js +586 -0
  135. package/dist/@crawler/core.js.map +1 -0
  136. package/dist/@crawler/directFileCache.d.ts +10 -0
  137. package/dist/@crawler/directFileCache.js +60 -0
  138. package/dist/@crawler/directFileCache.js.map +1 -0
  139. package/dist/@crawler/index.d.ts +4 -0
  140. package/dist/@crawler/index.js +5 -0
  141. package/dist/@crawler/index.js.map +1 -0
  142. package/dist/@crawler/urlMapping.d.ts +21 -0
  143. package/dist/@crawler/urlMapping.js +52 -0
  144. package/dist/@crawler/urlMapping.js.map +1 -0
  145. package/dist/@crawler/utils.d.ts +6 -0
  146. package/dist/@crawler/utils.js +13 -0
  147. package/dist/@crawler/utils.js.map +1 -0
  148. package/dist/@generated/index.d.ts +29 -0
  149. package/dist/@generated/index.js +93 -0
  150. package/dist/@generated/index.js.map +1 -0
  151. package/dist/@linker/arobaseTypes.d.ts +50 -0
  152. package/dist/@linker/arobaseTypes.js +235 -0
  153. package/dist/@linker/arobaseTypes.js.map +1 -0
  154. package/dist/@linker/changeProof.d.ts +5 -0
  155. package/dist/@linker/changeProof.js +50 -0
  156. package/dist/@linker/changeProof.js.map +1 -0
  157. package/dist/@linker/config.d.ts +2 -0
  158. package/dist/@linker/config.js +40 -0
  159. package/dist/@linker/config.js.map +1 -0
  160. package/dist/@linker/engine.d.ts +156 -0
  161. package/dist/@linker/engine.js +665 -0
  162. package/dist/@linker/engine.js.map +1 -0
  163. package/dist/@linker/index.d.ts +3 -0
  164. package/dist/@linker/index.js +4 -0
  165. package/dist/@linker/index.js.map +1 -0
  166. package/dist/@linker/install.d.ts +4 -0
  167. package/dist/@linker/install.js +42 -0
  168. package/dist/@linker/install.js.map +1 -0
  169. package/dist/@linker/modInstaller.d.ts +10 -0
  170. package/dist/@linker/modInstaller.js +38 -0
  171. package/dist/@linker/modInstaller.js.map +1 -0
  172. package/dist/@linker/typeEvents.d.ts +9 -0
  173. package/dist/@linker/typeEvents.js +48 -0
  174. package/dist/@linker/typeEvents.js.map +1 -0
  175. package/dist/@linker/typeRoutes.d.ts +23 -0
  176. package/dist/@linker/typeRoutes.js +197 -0
  177. package/dist/@linker/typeRoutes.js.map +1 -0
  178. package/dist/@linker/typeUiComposite.d.ts +6 -0
  179. package/dist/@linker/typeUiComposite.js +16 -0
  180. package/dist/@linker/typeUiComposite.js.map +1 -0
  181. package/dist/@loader/index.d.ts +1 -0
  182. package/dist/@loader/index.js +17 -0
  183. package/dist/@loader/index.js.map +1 -0
  184. package/dist/@loader/nodeJsLoader.d.ts +2 -0
  185. package/dist/@loader/nodeJsLoader.js +19 -0
  186. package/dist/@loader/nodeJsLoader.js.map +1 -0
  187. package/dist/@loader-client/index.d.ts +33 -0
  188. package/dist/@loader-client/index.js +98 -0
  189. package/dist/@loader-client/index.js.map +1 -0
  190. package/dist/@loader-tools/bunJsLoader.d.ts +1 -0
  191. package/dist/@loader-tools/bunJsLoader.js +28 -0
  192. package/dist/@loader-tools/bunJsLoader.js.map +1 -0
  193. package/dist/@loader-tools/config.d.ts +49 -0
  194. package/dist/@loader-tools/config.js +79 -0
  195. package/dist/@loader-tools/config.js.map +1 -0
  196. package/dist/@loader-tools/cssModuleCompiler.d.ts +5 -0
  197. package/dist/@loader-tools/cssModuleCompiler.js +65 -0
  198. package/dist/@loader-tools/cssModuleCompiler.js.map +1 -0
  199. package/dist/@loader-tools/esBuildPlugin.d.ts +5 -0
  200. package/dist/@loader-tools/esBuildPlugin.js +113 -0
  201. package/dist/@loader-tools/esBuildPlugin.js.map +1 -0
  202. package/dist/@loader-tools/index.d.ts +9 -0
  203. package/dist/@loader-tools/index.js +10 -0
  204. package/dist/@loader-tools/index.js.map +1 -0
  205. package/dist/@loader-tools/jopin.d.ts +10 -0
  206. package/dist/@loader-tools/jopin.js +331 -0
  207. package/dist/@loader-tools/jopin.js.map +1 -0
  208. package/dist/@loader-tools/nodeJsLoader.d.ts +13 -0
  209. package/dist/@loader-tools/nodeJsLoader.js +101 -0
  210. package/dist/@loader-tools/nodeJsLoader.js.map +1 -0
  211. package/dist/@loader-tools/nodeJsResolver.d.ts +2 -0
  212. package/dist/@loader-tools/nodeJsResolver.js +117 -0
  213. package/dist/@loader-tools/nodeJsResolver.js.map +1 -0
  214. package/dist/@loader-tools/rules.d.ts +3 -0
  215. package/dist/@loader-tools/rules.js +33 -0
  216. package/dist/@loader-tools/rules.js.map +1 -0
  217. package/dist/@loader-tools/sourceChangesWatcher.d.ts +39 -0
  218. package/dist/@loader-tools/sourceChangesWatcher.js +182 -0
  219. package/dist/@loader-tools/sourceChangesWatcher.js.map +1 -0
  220. package/dist/@loader-tools/tools.d.ts +21 -0
  221. package/dist/@loader-tools/tools.js +113 -0
  222. package/dist/@loader-tools/tools.js.map +1 -0
  223. package/dist/@loader-tools/transform.d.ts +5 -0
  224. package/dist/@loader-tools/transform.js +114 -0
  225. package/dist/@loader-tools/transform.js.map +1 -0
  226. package/dist/@loader-tools/virtualUrl.d.ts +9 -0
  227. package/dist/@loader-tools/virtualUrl.js +40 -0
  228. package/dist/@loader-tools/virtualUrl.js.map +1 -0
  229. package/dist/@tool-jopinb/index.d.ts +1 -0
  230. package/dist/@tool-jopinb/index.js +9 -0
  231. package/dist/@tool-jopinb/index.js.map +1 -0
  232. package/dist/@ui/components.d.ts +27 -0
  233. package/dist/@ui/components.js +42 -0
  234. package/dist/@ui/components.js.map +1 -0
  235. package/dist/@ui/cssModules.d.ts +11 -0
  236. package/dist/@ui/cssModules.js +17 -0
  237. package/dist/@ui/cssModules.js.map +1 -0
  238. package/dist/@ui/hooks.d.ts +31 -0
  239. package/dist/@ui/hooks.js +71 -0
  240. package/dist/@ui/hooks.js.map +1 -0
  241. package/dist/@ui/index.d.ts +9 -0
  242. package/dist/@ui/index.js +11 -0
  243. package/dist/@ui/index.js.map +1 -0
  244. package/dist/@ui/internal.d.ts +4 -0
  245. package/dist/@ui/internal.js +10 -0
  246. package/dist/@ui/internal.js.map +1 -0
  247. package/dist/@ui/modules.d.ts +41 -0
  248. package/dist/@ui/modules.js +74 -0
  249. package/dist/@ui/modules.js.map +1 -0
  250. package/dist/@ui/objectRegistry.d.ts +12 -0
  251. package/dist/@ui/objectRegistry.js +35 -0
  252. package/dist/@ui/objectRegistry.js.map +1 -0
  253. package/dist/@ui/pageController.d.ts +61 -0
  254. package/dist/@ui/pageController.js +166 -0
  255. package/dist/@ui/pageController.js.map +1 -0
  256. package/dist/@ui/tools.d.ts +24 -0
  257. package/dist/@ui/tools.js +78 -0
  258. package/dist/@ui/tools.js.map +1 -0
  259. package/dist/@uikit/core/UiKitModule.d.ts +6 -0
  260. package/dist/@uikit/core/UiKitModule.js +18 -0
  261. package/dist/@uikit/core/UiKitModule.js.map +1 -0
  262. package/dist/@uikit/core/index.d.ts +1 -0
  263. package/dist/@uikit/core/index.js +4 -0
  264. package/dist/@uikit/core/index.js.map +1 -0
  265. package/dist/@uikit/core/jBundler_ifBrowser.d.ts +1 -0
  266. package/dist/@uikit/core/jBundler_ifBrowser.js +5 -0
  267. package/dist/@uikit/core/jBundler_ifBrowser.js.map +1 -0
  268. package/dist/@uikit/core/jBundler_ifServer.d.ts +6 -0
  269. package/dist/@uikit/core/jBundler_ifServer.js +17 -0
  270. package/dist/@uikit/core/jBundler_ifServer.js.map +1 -0
  271. package/dist/@uikit/forms/components.d.ts +18 -0
  272. package/dist/@uikit/forms/components.js +69 -0
  273. package/dist/@uikit/forms/components.js.map +1 -0
  274. package/dist/@uikit/forms/hooks.d.ts +4 -0
  275. package/dist/@uikit/forms/hooks.js +31 -0
  276. package/dist/@uikit/forms/hooks.js.map +1 -0
  277. package/dist/@uikit/forms/index.d.ts +3 -0
  278. package/dist/@uikit/forms/index.js +4 -0
  279. package/dist/@uikit/forms/index.js.map +1 -0
  280. package/dist/@uikit/forms/interfaces.d.ts +101 -0
  281. package/dist/@uikit/forms/interfaces.js +4 -0
  282. package/dist/@uikit/forms/interfaces.js.map +1 -0
  283. package/dist/@uikit/forms/private.d.ts +40 -0
  284. package/dist/@uikit/forms/private.js +307 -0
  285. package/dist/@uikit/forms/private.js.map +1 -0
  286. package/dist/@uikit/helpers/hooks.d.ts +33 -0
  287. package/dist/@uikit/helpers/hooks.js +107 -0
  288. package/dist/@uikit/helpers/hooks.js.map +1 -0
  289. package/dist/@uikit/helpers/index.d.ts +2 -0
  290. package/dist/@uikit/helpers/index.js +3 -0
  291. package/dist/@uikit/helpers/index.js.map +1 -0
  292. package/dist/@uikit/helpers/tools.d.ts +8 -0
  293. package/dist/@uikit/helpers/tools.js +35 -0
  294. package/dist/@uikit/helpers/tools.js.map +1 -0
  295. package/dist/@uikit/index.d.ts +10 -0
  296. package/dist/@uikit/index.js +13 -0
  297. package/dist/@uikit/index.js.map +1 -0
  298. package/dist/@uikit/menu/core.d.ts +21 -0
  299. package/dist/@uikit/menu/core.js +191 -0
  300. package/dist/@uikit/menu/core.js.map +1 -0
  301. package/dist/@uikit/menu/hooks.d.ts +5 -0
  302. package/dist/@uikit/menu/hooks.js +24 -0
  303. package/dist/@uikit/menu/hooks.js.map +1 -0
  304. package/dist/@uikit/menu/index.d.ts +3 -0
  305. package/dist/@uikit/menu/index.js +4 -0
  306. package/dist/@uikit/menu/index.js.map +1 -0
  307. package/dist/@uikit/menu/interfaces.d.ts +20 -0
  308. package/dist/@uikit/menu/interfaces.js +8 -0
  309. package/dist/@uikit/menu/interfaces.js.map +1 -0
  310. package/dist/@uikit/menu/internal.d.ts +40 -0
  311. package/dist/@uikit/menu/internal.js +191 -0
  312. package/dist/@uikit/menu/internal.js.map +1 -0
  313. package/dist/@uikit/reactRouter/hooks/jBundler_ifBrowser.d.ts +18 -0
  314. package/dist/@uikit/reactRouter/hooks/jBundler_ifBrowser.js +40 -0
  315. package/dist/@uikit/reactRouter/hooks/jBundler_ifBrowser.js.map +1 -0
  316. package/dist/@uikit/reactRouter/hooks/jBundler_ifServer.d.ts +28 -0
  317. package/dist/@uikit/reactRouter/hooks/jBundler_ifServer.js +35 -0
  318. package/dist/@uikit/reactRouter/hooks/jBundler_ifServer.js.map +1 -0
  319. package/dist/@uikit/reactRouter/index.d.ts +1 -0
  320. package/dist/@uikit/reactRouter/index.js +2 -0
  321. package/dist/@uikit/reactRouter/index.js.map +1 -0
  322. package/dist/@uikit/users/hooks.d.ts +10 -0
  323. package/dist/@uikit/users/hooks.js +39 -0
  324. package/dist/@uikit/users/hooks.js.map +1 -0
  325. package/dist/@uikit/users/index.d.ts +1 -0
  326. package/dist/@uikit/users/index.js +2 -0
  327. package/dist/@uikit/users/index.js.map +1 -0
  328. package/dist/@uikit/variants/index.d.ts +7 -0
  329. package/dist/@uikit/variants/index.js +16 -0
  330. package/dist/@uikit/variants/index.js.map +1 -0
  331. package/package.json +115 -0
  332. package/src/@bundler/README.md +1 -0
  333. package/src/@bundler/_logs.ts +4 -0
  334. package/src/@bundler/core.ts +41 -0
  335. package/src/@bundler/esbuild.ts +141 -0
  336. package/src/@bundler/index.ts +3 -0
  337. package/src/@bundler/plugins.ts +163 -0
  338. package/src/@bundler/tailwind.ts +139 -0
  339. package/src/@core/PageComponent.tsx +25 -0
  340. package/src/@core/README.md +1 -0
  341. package/src/@core/_logs.ts +11 -0
  342. package/src/@core/automaticStartStop.ts +132 -0
  343. package/src/@core/browserCacheControl.ts +40 -0
  344. package/src/@core/bundler/bundler.ts +128 -0
  345. package/src/@core/bundler/common.ts +18 -0
  346. package/src/@core/bundler/config.ts +37 -0
  347. package/src/@core/bundler/extraContent.ts +30 -0
  348. package/src/@core/bundler/pagesGenerator.ts +194 -0
  349. package/src/@core/bundler/server.ts +41 -0
  350. package/src/@core/caches/InMemoryCache.ts +483 -0
  351. package/src/@core/caches/SimpleFileCache.ts +205 -0
  352. package/src/@core/caches/cache.ts +77 -0
  353. package/src/@core/caches/webSiteMirrorCache.ts +90 -0
  354. package/src/@core/cheerio.d.ts +332 -0
  355. package/src/@core/gzip.ts +33 -0
  356. package/src/@core/index.ts +23 -0
  357. package/src/@core/internalTools.ts +95 -0
  358. package/src/@core/jQuery.ts +22 -0
  359. package/src/@core/jopiEasy.ts +1285 -0
  360. package/src/@core/jopiRequest.tsx +1279 -0
  361. package/src/@core/jopiServer.ts +188 -0
  362. package/src/@core/jopiWebSite.tsx +1027 -0
  363. package/src/@core/letsEncrypt.ts +243 -0
  364. package/src/@core/linker.ts +42 -0
  365. package/src/@core/loadBalancing.ts +152 -0
  366. package/src/@core/middlewares/CorsMiddleware.ts +23 -0
  367. package/src/@core/middlewares/DdosProtection.ts +120 -0
  368. package/src/@core/middlewares/index.ts +16 -0
  369. package/src/@core/publicTools.ts +14 -0
  370. package/src/@core/routeConfig.ts +104 -0
  371. package/src/@core/searchParamFilter.ts +315 -0
  372. package/src/@core/serverFetch.ts +454 -0
  373. package/src/@core/serverImpl/server_bunjs.tsx +230 -0
  374. package/src/@core/serverImpl/server_nodejs.ts +312 -0
  375. package/src/@core/serverInstanceBuilder.ts +36 -0
  376. package/src/@core/userStores.ts +34 -0
  377. package/src/@crawler/README.md +1 -0
  378. package/src/@crawler/common.ts +275 -0
  379. package/src/@crawler/core.ts +678 -0
  380. package/src/@crawler/directFileCache.ts +69 -0
  381. package/src/@crawler/index.ts +4 -0
  382. package/src/@crawler/urlMapping.ts +67 -0
  383. package/src/@crawler/utils.ts +13 -0
  384. package/src/@generated/index.ts +134 -0
  385. package/src/@linker/arobaseTypes.ts +325 -0
  386. package/src/@linker/changeProof.ts +53 -0
  387. package/src/@linker/config.ts +46 -0
  388. package/src/@linker/engine.ts +865 -0
  389. package/src/@linker/index.ts +3 -0
  390. package/src/@linker/install.ts +39 -0
  391. package/src/@linker/modInstaller.ts +50 -0
  392. package/src/@linker/typeEvents.ts +58 -0
  393. package/src/@linker/typeRoutes.ts +255 -0
  394. package/src/@linker/typeUiComposite.ts +19 -0
  395. package/src/@loader/README.md +4 -0
  396. package/src/@loader/bunHtmlCompiler.mjs +27 -0
  397. package/src/@loader/index.ts +19 -0
  398. package/src/@loader/loader.mjs +7 -0
  399. package/src/@loader/nodeJsLoader.ts +21 -0
  400. package/src/@loader-client/README.md +2 -0
  401. package/src/@loader-client/index.ts +108 -0
  402. package/src/@loader-tools/README.md +6 -0
  403. package/src/@loader-tools/bunJsLoader.ts +33 -0
  404. package/src/@loader-tools/config.ts +142 -0
  405. package/src/@loader-tools/cssModuleCompiler.ts +76 -0
  406. package/src/@loader-tools/esBuildPlugin.ts +142 -0
  407. package/src/@loader-tools/index.ts +11 -0
  408. package/src/@loader-tools/jopin.ts +403 -0
  409. package/src/@loader-tools/nodeJsLoader.ts +119 -0
  410. package/src/@loader-tools/nodeJsResolver.ts +140 -0
  411. package/src/@loader-tools/rules.ts +45 -0
  412. package/src/@loader-tools/sourceChangesWatcher.ts +225 -0
  413. package/src/@loader-tools/tools.ts +139 -0
  414. package/src/@loader-tools/transform.ts +138 -0
  415. package/src/@loader-tools/virtualUrl.ts +57 -0
  416. package/src/@loader-types/README.md +15 -0
  417. package/src/@loader-types/extensions.d.ts +65 -0
  418. package/src/@tool-jopinb/README.md +1 -0
  419. package/src/@tool-jopinb/index.ts +11 -0
  420. package/src/@ui/README.md +3 -0
  421. package/src/@ui/components.tsx +49 -0
  422. package/src/@ui/cssModules.tsx +27 -0
  423. package/src/@ui/hooks.tsx +95 -0
  424. package/src/@ui/index.ts +13 -0
  425. package/src/@ui/internal.ts +12 -0
  426. package/src/@ui/modules.ts +100 -0
  427. package/src/@ui/objectRegistry.ts +50 -0
  428. package/src/@ui/pageController.ts +203 -0
  429. package/src/@ui/tools.ts +116 -0
  430. package/src/@uikit/README.md +1 -0
  431. package/src/@uikit/core/UiKitModule.ts +20 -0
  432. package/src/@uikit/core/index.ts +4 -0
  433. package/src/@uikit/core/jBundler_ifBrowser.ts +4 -0
  434. package/src/@uikit/core/jBundler_ifServer.ts +18 -0
  435. package/src/@uikit/forms/components.tsx +97 -0
  436. package/src/@uikit/forms/hooks.ts +38 -0
  437. package/src/@uikit/forms/index.ts +3 -0
  438. package/src/@uikit/forms/interfaces.ts +159 -0
  439. package/src/@uikit/forms/private.ts +365 -0
  440. package/src/@uikit/helpers/hooks.ts +133 -0
  441. package/src/@uikit/helpers/index.ts +2 -0
  442. package/src/@uikit/helpers/tools.ts +39 -0
  443. package/src/@uikit/index.ts +15 -0
  444. package/src/@uikit/menu/core.ts +227 -0
  445. package/src/@uikit/menu/hooks.ts +28 -0
  446. package/src/@uikit/menu/index.ts +3 -0
  447. package/src/@uikit/menu/interfaces.ts +26 -0
  448. package/src/@uikit/menu/internal.ts +218 -0
  449. package/src/@uikit/package.json +15 -0
  450. package/src/@uikit/reactRouter/hooks/jBundler_ifBrowser.tsx +59 -0
  451. package/src/@uikit/reactRouter/hooks/jBundler_ifServer.tsx +51 -0
  452. package/src/@uikit/reactRouter/index.ts +1 -0
  453. package/src/@uikit/users/hooks.ts +50 -0
  454. package/src/@uikit/users/index.ts +1 -0
  455. package/src/@uikit/variants/index.tsx +20 -0
@@ -0,0 +1,4 @@
1
+ export function registerUiKit() {
2
+ // Do nothing. Is here because "jopi-toolkit-server"
3
+ // will be replaced by "jopi-toolkit-browser" (by the bundler engine).
4
+ }
@@ -0,0 +1,18 @@
1
+ import * as jk_event from "jopi-toolkit/jk_events";
2
+ import type {WebSite, WebSiteImpl} from "jopijs";
3
+ import {UiKitModule} from "./UiKitModule.ts";
4
+
5
+ /**
6
+ * Must be called manually from the server-side init to enable UiKit.
7
+ * This will allow replacing the instance of ModuleInitContext
8
+ * by an instance of UiKitModule.
9
+ */
10
+ export function registerUiKit() {
11
+ // We want to replace the creation of the object ModuleInitContext
12
+ // with our own implementation, which extend the core functionalities.
13
+ //
14
+ jk_event.addListener<WebSite>("jopi.server.install.done", (webSite) => {
15
+ // @ts-ignore It doesn't correctly cast references.
16
+ (webSite as WebSiteImpl).setModuleInitClassInstancier(host => new UiKitModule(host));
17
+ });
18
+ }
@@ -0,0 +1,97 @@
1
+ // noinspection JSUnusedGlobalSymbols
2
+
3
+ import React, {useRef} from "react";
4
+ import {useVariant, VariantContext} from "../variants/index.tsx";
5
+ import {
6
+ type JAutoFormFieldProps,
7
+ type JCheckboxFormFieldProps, type JFormMessageProps,
8
+ type JInputFormFieldProps, type JFieldProps,
9
+ type JFormComponentProps,
10
+ type JFormController, type JNumberFormFieldProps, type JFileSelectFieldProps
11
+ } from "./interfaces.ts";
12
+ import {FormContext, JFormControllerImpl} from "./private.ts";
13
+ import {useJForm, useJFormField, UseJFormMessage} from "./hooks.ts";
14
+
15
+ export function JForm({children, className, variants, ...p}: JFormComponentProps & {
16
+ children: React.ReactNode, className?: string, variants?: any
17
+ })
18
+ {
19
+ const formRef = useRef<HTMLFormElement>(null);
20
+ const ref = useRef<JFormControllerImpl>(new JFormControllerImpl(p, formRef));
21
+
22
+ const onSubmit = async (e: React.FormEvent<HTMLFormElement>) => {
23
+ e.preventDefault();
24
+ await ref.current.submit();
25
+ };
26
+
27
+ return <FormContext.Provider value={ref.current}>
28
+ <VariantContext.Provider value={variants}>
29
+ <form ref={formRef} className={className} onSubmit={onSubmit}>{children}</form>
30
+ </VariantContext.Provider>
31
+ </FormContext.Provider>
32
+ }
33
+
34
+ export function JFormStateListener({custom, ifSubmitted, ifNotSubmitted}: {
35
+ ifSubmitted?: React.ReactNode,
36
+ ifNotSubmitted?: React.ReactNode,
37
+ custom?: (form: JFormController) => React.ReactNode
38
+ }) {
39
+ const form = useJForm();
40
+
41
+ if (form.submitted || form.submitting) {
42
+ if (ifSubmitted) return ifSubmitted;
43
+ } else {
44
+ if (ifNotSubmitted) return ifNotSubmitted;
45
+ }
46
+
47
+ return custom?.(form);
48
+ }
49
+
50
+ function renderField(variantName: string|undefined, p: JFieldProps) {
51
+ const field = useJFormField(p.name);
52
+ if (!field) return <div style={{color: "red"}}><strong>Form error: the field '{p.name}' doesn't exist.</strong></div>;
53
+
54
+ p = {...p};
55
+ if (p.title===undefined) p.title = field.title;
56
+ if (p.description===undefined) p.description = field.description;
57
+ if (p.placeholder===undefined) p.placeholder = field.placeholder;
58
+
59
+ if (!variantName) {
60
+ variantName = field.variantName;
61
+ }
62
+
63
+ const V = useVariant(variantName, p.variant);
64
+ return <V {...p} field={field} />;
65
+ }
66
+
67
+ export function JAutoFormField({variant, ...p}: JAutoFormFieldProps) {
68
+ return renderField(undefined, p);
69
+ }
70
+
71
+ //region Form Types
72
+
73
+ export function JFormMessage(p: JFormMessageProps) {
74
+ const message = UseJFormMessage();
75
+ if (!message) return null;
76
+
77
+ const V = useVariant("FormMessage", p.variant);
78
+ return <V {...p} message={message} />;
79
+ }
80
+
81
+ export function JTextFormField({variant, ...p}: JInputFormFieldProps) {
82
+ return renderField("TextFormField", p);
83
+ }
84
+
85
+ export function JNumberFormField({variant, ...p}: JNumberFormFieldProps) {
86
+ return renderField("NumberFormField", p);
87
+ }
88
+
89
+ export function JCheckboxFormField({variant, ...p}: JCheckboxFormFieldProps) {
90
+ return renderField("CheckboxFormField", p);
91
+ }
92
+
93
+ export function JFileSelectField({variant, ...p}: JFileSelectFieldProps) {
94
+ return renderField("FileSelectField", p);
95
+ }
96
+
97
+ //endregion
@@ -0,0 +1,38 @@
1
+ import React, {useContext, useEffect} from "react";
2
+ import type {JMessage, JFieldController, JFormController} from "./interfaces.ts";
3
+ import {FormContext, JFormControllerImpl} from "./private.ts";
4
+
5
+ export function useJForm(): JFormController {
6
+ const theForm = useContext(FormContext) as JFormControllerImpl;
7
+ if (!theForm) throw new Error("useJForm must be used within a JForm component.");
8
+
9
+ const [_, setCounter] = React.useState(0);
10
+
11
+ useEffect(() => {
12
+ function eventHandler() {
13
+ // Here use prevCount to always have the update counter value.
14
+ setCounter(prevCount => prevCount+1);
15
+ }
16
+
17
+ theForm.addStateChangeListener(eventHandler);
18
+ return () => { theForm.removeStateChangeListener(eventHandler) };
19
+ }, []);
20
+
21
+ return theForm;
22
+ }
23
+
24
+ export function UseJFormMessage(): JMessage|undefined {
25
+ let form = useJForm();
26
+ return form.formMessage
27
+ }
28
+
29
+ export function useJFormField(name: string): JFieldController {
30
+ const [_, setCounter] = React.useState(0);
31
+ const form = useJForm() as JFormControllerImpl;
32
+
33
+ let thisField = form.getField(name);
34
+ if (!thisField) return undefined as unknown as JFieldController;
35
+
36
+ thisField.onStateChange = () => { setCounter(prev => prev + 1) };
37
+ return thisField;
38
+ }
@@ -0,0 +1,3 @@
1
+ export * from "./interfaces.ts";
2
+ export * from "./components.tsx";
3
+ export * from "./hooks.ts";
@@ -0,0 +1,159 @@
1
+ import type {UiText} from "../helpers/tools";
2
+ import {type Schema, type ValidationErrors} from "jopi-toolkit/jk_schema";
3
+ import React from "react";
4
+
5
+ //region Core
6
+
7
+ export type SubmitFunction = (params: { data: any, form: JFormController, hasFiles: boolean })
8
+ => Promise<JMessage|undefined|void> | JMessage | undefined | void;
9
+
10
+ export interface JFormComponentProps {
11
+ schema: Schema;
12
+ action?: string;
13
+ submit?: SubmitFunction
14
+ }
15
+
16
+ export interface JFieldController {
17
+ form: JFormController;
18
+ variantName: string;
19
+
20
+ name: string;
21
+ type: string;
22
+
23
+ error: boolean;
24
+ errorMessage?: string;
25
+
26
+ title?: string;
27
+ description?: string;
28
+ placeholder?: string;
29
+
30
+ value: any;
31
+ oldValue: any;
32
+ onChange: (value: any) => void;
33
+ valueConverter: (value: any, isTyping: boolean) => any;
34
+
35
+ //region Type String
36
+
37
+ minLength?: number;
38
+ errorMessage_minLength?: string;
39
+
40
+ maxLength?: number;
41
+ errorMessage_maxLength?: string;
42
+
43
+ //endregion
44
+
45
+ //region Type Number
46
+
47
+ minValue?: number;
48
+ errorMessage_minValue?: string;
49
+
50
+ maxValue?: number;
51
+ errorMessage_maxValue?: string;
52
+
53
+ allowDecimal?: boolean;
54
+ roundMethod?: "round" | "floor" | "ceil";
55
+ errorMessage_dontAllowDecimal?: string;
56
+
57
+ incrStep?: number;
58
+
59
+ //endregion
60
+
61
+ //region Type File
62
+
63
+ maxFileCount?: number;
64
+ errorMessage_maxFileCount?: string;
65
+
66
+ acceptFileType?: string;
67
+ errorMessage_invalidFileType?: string;
68
+
69
+ maxFileSize?: number;
70
+ errorMessage_maxFileSize?: string;
71
+
72
+ //endregion
73
+
74
+ //region Type Boolean
75
+
76
+ requireTrue?: boolean;
77
+ errorMessage_requireTrue?: string;
78
+
79
+ requireFalse?: boolean;
80
+ errorMessage_requireFalse?: string;
81
+
82
+ //endregion
83
+ }
84
+
85
+ export interface JFormController {
86
+ error: boolean;
87
+ submitting: boolean;
88
+ submitted: boolean;
89
+ formMessage?: JMessage;
90
+
91
+ getData<T = any>(): T;
92
+ getFormData(): FormData;
93
+ getSubmitUrl(): string;
94
+
95
+ sendFormData(url?: string): Promise<JMessage>;
96
+ sendJsonData(url?: string): Promise<JMessage>;
97
+ }
98
+
99
+ export interface JMessage {
100
+ isOk: boolean;
101
+ isSubmitted: boolean;
102
+
103
+ message?: string;
104
+ code?: string;
105
+
106
+ fieldErrors?: ValidationErrors;
107
+ }
108
+
109
+ //endregion
110
+
111
+ //region By type
112
+
113
+ export interface JFieldProps {
114
+ name: string;
115
+ title?: UiText;
116
+ description?: UiText;
117
+ placeholder?: string;
118
+
119
+ variant?: React.FC<unknown>;
120
+
121
+ id?: string;
122
+ className?: string;
123
+ }
124
+
125
+ export interface JFormMessageProps {
126
+ id?: string;
127
+ className?: string;
128
+ variant?: React.FC<unknown>;
129
+ isBefore?: boolean;
130
+ message?: JMessage;
131
+
132
+ errorMessage?: UiText;
133
+
134
+ // false: allows hiding the submitted message.
135
+ submittedMessage?: UiText|false;
136
+
137
+ // false: allows hiding the message if field errors.
138
+ fieldErrorMessage?: UiText|false;
139
+ }
140
+
141
+ export interface JInputFormFieldProps extends JFieldProps {
142
+ }
143
+
144
+ export interface JCheckboxFormFieldProps extends JFieldProps {
145
+ defaultChecked?: boolean;
146
+ }
147
+ export interface JFileSelectFieldProps extends JFieldProps {
148
+ }
149
+
150
+ export interface JNumberFormFieldProps extends JFieldProps {
151
+ minValue?: number;
152
+ maxValue?: number;
153
+ incrStep?: number;
154
+ }
155
+
156
+ export interface JAutoFormFieldProps extends JInputFormFieldProps, JCheckboxFormFieldProps, JNumberFormFieldProps {
157
+ }
158
+
159
+ //endregion
@@ -0,0 +1,365 @@
1
+ import React from "react";
2
+ import * as jk_schema from "jopi-toolkit/jk_schema";
3
+ import type {
4
+ JMessage,
5
+ JFieldController,
6
+ JFormComponentProps,
7
+ JFormController,
8
+ SubmitFunction
9
+ } from "./interfaces.ts";
10
+ import type {ValidationErrors} from "jopi-toolkit/jk_schema";
11
+ import {sendFormData, sendJsonData} from "../helpers/tools.ts";
12
+
13
+ type Listener = () => void;
14
+
15
+ export const FormContext = React.createContext<JFormController>(undefined as unknown as JFormController);
16
+
17
+ interface JFieldController_Private extends JFieldController {
18
+ onStateChange?: () => void;
19
+ }
20
+
21
+ export class JFormControllerImpl implements JFormController {
22
+ private readonly fields: Record<string, JFieldController_Private> = {};
23
+ private readonly jsonSchema: jk_schema.SchemaDescriptor;
24
+ private readonly onStateChange: Listener[] = [];
25
+ private readonly submitHandler?: SubmitFunction;
26
+ private autoRevalidate = false;
27
+ private hasFiles = false;
28
+
29
+ error = false;
30
+ submitting = false;
31
+ submitted = false;
32
+ formMessage?: JMessage;
33
+
34
+ constructor(private props: JFormComponentProps, private readonly formRef: React.RefObject<HTMLFormElement|null>) {
35
+ this.jsonSchema = jk_schema.toJson(this.props.schema).desc;
36
+ this.submitHandler = props.submit;
37
+ }
38
+
39
+ getData<T = any>(): T {
40
+ let data: any = {};
41
+
42
+ for (let name in this.fields) {
43
+ let field = this.fields[name];
44
+ data[name] = field.valueConverter(field.value, false);
45
+ }
46
+
47
+ return data as T;
48
+ }
49
+
50
+ getFormData(): FormData {
51
+ let form = this.formRef.current!;
52
+ let formData = new FormData(form);
53
+
54
+ let data = this.getData();
55
+
56
+ // Values can have been updated by a normalization step.
57
+ // It's why we inject back the values.
58
+ //
59
+ for (let name in this.fields) {
60
+ let field = this.fields[name];
61
+ let value = data[name];
62
+
63
+ // Special case for files.
64
+ //
65
+ if (field.type === "file") {
66
+ if (field.value instanceof File) {
67
+ formData.set(name, field.value);
68
+ } else if (field.value instanceof Array) {
69
+ // Remove the current value.
70
+ formData.delete(name);
71
+
72
+ // Add each one file of the array.
73
+ for (let i = 0; i < field.value.length; i++) {
74
+ formData.append(name, field.value[i]);
75
+ }
76
+ }
77
+ } else {
78
+ if (value !== undefined && value !== null) {
79
+ formData.set(name, String(value));
80
+ }
81
+ }
82
+ }
83
+
84
+ return formData;
85
+ }
86
+
87
+ getSubmitUrl(): string {
88
+ return this.props.action || window.location.href
89
+ }
90
+
91
+ async sendJsonData(url?: string): Promise<JMessage> {
92
+ if (!url) url = this.getSubmitUrl();
93
+ return this.processSendToServerResponse(await sendJsonData(url, this.getData()));
94
+ }
95
+
96
+ async sendFormData(url?: string): Promise<JMessage> {
97
+ if (!url) url = this.getSubmitUrl();
98
+ return this.processSendToServerResponse(await sendFormData(url, this.getFormData()));
99
+ }
100
+
101
+ private processSendToServerResponse(response: Response): JMessage {
102
+ if (response.status === 200) {
103
+ return {isOk: true, isSubmitted: true};
104
+ }
105
+
106
+ return {
107
+ isOk: false,
108
+ isSubmitted: false,
109
+ message: response.status===500
110
+ ? "An error occurred with the server. Please try again later."
111
+ : "Invalid form content.",
112
+
113
+ code: response.status === 500
114
+ ? "SERVER_ERROR_500"
115
+ : "SERVER_INVALID_DATA"
116
+ };
117
+ }
118
+
119
+ private setFormMessage(message: JMessage): JMessage {
120
+ this.formMessage = message;
121
+
122
+ if (!message.message && message.fieldErrors && message.fieldErrors.globalError) {
123
+ message.message = message.fieldErrors.globalError;
124
+ message.code = "GLOBAL_ERROR";
125
+ }
126
+
127
+ if (message.isSubmitted) {
128
+ this.declareState_Submitted();
129
+ } else {
130
+ if (message.isOk) {
131
+ this.declareState_Reset();
132
+ }
133
+ else {
134
+ this.submitted = false;
135
+ this.submitting = false;
136
+ this.declareState_Error()
137
+ }
138
+ }
139
+
140
+ return message;
141
+ }
142
+
143
+ async submit(): Promise<JMessage|undefined> {
144
+ this.autoRevalidate = true;
145
+ let data = this.getData();
146
+ let fieldErrors = this.validateAux(data);
147
+
148
+ if (fieldErrors) {
149
+ return this.setFormMessage({isOk: false, isSubmitted: false, fieldErrors});
150
+ }
151
+
152
+ this.autoRevalidate = false;
153
+
154
+ let submitHandler = this.submitHandler;
155
+ if (!submitHandler) submitHandler = () => this.sendFormData()
156
+
157
+ this.declareState_Submitting();
158
+
159
+ try {
160
+ let r = submitHandler({data, form: this, hasFiles: this.hasFiles});
161
+
162
+ if (r instanceof Promise) r = await r;
163
+ if (r) return this.setFormMessage(r);
164
+ } catch (e) {
165
+ console.error("Error when submitting form:", e);
166
+
167
+ return this.setFormMessage({
168
+ isOk: false,
169
+ isSubmitted: false,
170
+ message: "An error occurred when submitting form",
171
+ code: "UNKNOWN_SUBMIT_ERROR"
172
+ });
173
+ }
174
+
175
+ return this.setFormMessage({isOk: true, isSubmitted: true});
176
+ }
177
+
178
+ validate(): ValidationErrors | undefined {
179
+ let errors = this.validateAux(this.getData());
180
+
181
+ if (errors) {
182
+ this.setFormMessage({isOk: false, isSubmitted: false, fieldErrors: errors});
183
+ } else {
184
+ this.declareState_Reset();
185
+ }
186
+
187
+ return errors;
188
+ }
189
+
190
+ private validateAux(data: any): ValidationErrors | undefined {
191
+ for (let field of Object.values(this.fields)) {
192
+ field.error = false;
193
+ field.errorMessage = undefined;
194
+ }
195
+
196
+ const errors = jk_schema.validateSchema(data, this.props.schema);
197
+
198
+ if (errors) {
199
+ if (errors.fields) {
200
+ for (let fieldError of Object.values(errors.fields)) {
201
+ let fieldRef = this.getField(fieldError.fieldName);
202
+
203
+ if (fieldRef) {
204
+ fieldRef.error = true;
205
+ fieldRef.errorMessage = fieldError.message;
206
+ }
207
+ }
208
+ }
209
+ }
210
+
211
+ for (let field of Object.values(this.fields)) {
212
+ field.onStateChange?.();
213
+ }
214
+
215
+ return errors;
216
+ }
217
+
218
+ getField(name: string): JFieldController_Private|undefined {
219
+ let field: JFieldController_Private = this.fields[name];
220
+ if (field) return field;
221
+
222
+ const fieldDef = this.jsonSchema[name];
223
+ if (!fieldDef) return undefined;
224
+
225
+ const form = this;
226
+ const valueConverter = selectValueConverter(fieldDef.type);
227
+
228
+ if (fieldDef.type==="file") {
229
+ this.hasFiles = true;
230
+ }
231
+
232
+ this.fields[name] = field = {
233
+ form: this,
234
+ variantName: getVariantName(fieldDef.type),
235
+
236
+ name: name,
237
+ error: false,
238
+
239
+ valueConverter,
240
+ value: fieldDef && fieldDef.default ? fieldDef.default : calcDefault(fieldDef),
241
+
242
+ oldValue: undefined,
243
+
244
+ onChange: (value: any) => {
245
+ if (value!==undefined) value = valueConverter(value, true);
246
+ if (value===field.value) return;
247
+
248
+ field.oldValue = field.value;
249
+ field.value = value;
250
+
251
+ if (form.autoRevalidate) form.validate();
252
+ else if (field.onStateChange) field.onStateChange();
253
+ },
254
+
255
+ ...fieldDef
256
+ } as JFieldController_Private;
257
+
258
+ return field;
259
+ }
260
+
261
+ private declareState_Submitting() {
262
+ this.submitting = true;
263
+ this.submitted = false;
264
+ this.error = false;
265
+
266
+ this.onStateChange.forEach(l => l());
267
+ }
268
+
269
+ private declareState_Submitted() {
270
+ this.submitting = false;
271
+ this.submitted = true;
272
+ this.error = false;
273
+
274
+ this.onStateChange.forEach(l => l());
275
+ }
276
+
277
+ private declareState_Error(isError = true) {
278
+ // Here we must keep the submitted state.
279
+ this.error = isError;
280
+
281
+ if (!isError) {
282
+ if (this.formMessage && !this.formMessage.isOk) {
283
+ this.formMessage = undefined;
284
+ }
285
+ }
286
+
287
+ this.onStateChange.forEach(l => l());
288
+ }
289
+
290
+ private declareState_Reset() {
291
+ this.submitting = false;
292
+ this.submitted = false;
293
+ this.declareState_Error(false);
294
+ }
295
+
296
+ addStateChangeListener(l: () => void) {
297
+ if (!this.onStateChange.includes(l)) {
298
+ this.onStateChange.push(l);
299
+ }
300
+ }
301
+
302
+ removeStateChangeListener(l: () => void) {
303
+ let idx = this.onStateChange.indexOf(l);
304
+ if (idx!==-1) this.onStateChange.splice(idx, 1);
305
+ }
306
+ }
307
+
308
+ function calcDefault(fieldDef: jk_schema.SchemaFieldInfos|undefined): any {
309
+ if (!fieldDef) return undefined;
310
+
311
+ if (fieldDef.type === "string") return "";
312
+ if (fieldDef.type === "number") return undefined;
313
+ if (fieldDef.type === "boolean") return false;
314
+ if (fieldDef.type === "object") return {};
315
+ if (fieldDef.type === "array") return [];
316
+ return undefined;
317
+ }
318
+
319
+ function getVariantName(fieldType: string): string {
320
+ switch (fieldType) {
321
+ case "string": return "TextFormField";
322
+ case "number": return "NumberFormField";
323
+ case "boolean": return "CheckboxFormField";
324
+ case "file": return "FileSelectField";
325
+ }
326
+
327
+ return "TextFormField";
328
+ }
329
+
330
+ function selectValueConverter(fieldType: string): ((v: any, isTyping: boolean) => any) {
331
+ switch (fieldType) {
332
+ case "string": return (v: any) => {
333
+ return String(v);
334
+ }
335
+
336
+ case "number": return (v: any, isTyping: boolean) => {
337
+ if (!isTyping) {
338
+ if (v===undefined) return undefined;
339
+ v = String(v).trim().replaceAll(",", ".");
340
+ if (v === "") return undefined;
341
+ }
342
+ else {
343
+ v = String(v).trim().replaceAll(",", ".");
344
+ }
345
+
346
+ let asNumber = Number(v);
347
+
348
+ // Must avoid blocking if doing something like "+5,3"
349
+
350
+ // Let it return a string.
351
+ // Will send an error of the type "number is required".
352
+ //
353
+ if (isNaN(asNumber)) return v;
354
+
355
+ if (v==="") return undefined;
356
+ return asNumber;
357
+ }
358
+
359
+ case "boolean": return (v: any) => {
360
+ return Boolean(v);
361
+ }
362
+ }
363
+
364
+ return (v: any) => v;
365
+ }