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 @@
1
+ export * from "./hooks/jBundler_ifServer.tsx";
@@ -0,0 +1,2 @@
1
+ export * from "./hooks/jBundler_ifServer.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/@uikit/reactRouter/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA+B,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { type UiUserInfos } from "jopijs/ui";
2
+ import React from "react";
3
+ export declare function useLogOutUser(): () => void;
4
+ export declare function useUserStateRefresh(): () => void;
5
+ export declare function useUserHasRoles(roles: string[]): boolean;
6
+ export declare function useUserInfos(): UiUserInfos | undefined;
7
+ export declare function RequireRoles({ roles, children }: {
8
+ roles: string[];
9
+ children: React.ReactNode;
10
+ }): React.ReactNode;
@@ -0,0 +1,39 @@
1
+ import { _usePage } from "jopijs/ui";
2
+ import React from "react";
3
+ export function useLogOutUser() {
4
+ const page = _usePage();
5
+ return () => {
6
+ page.logOutUser();
7
+ page.onRequireRefresh();
8
+ };
9
+ }
10
+ export function useUserStateRefresh() {
11
+ const page = _usePage();
12
+ return () => {
13
+ page.refreshUserInfos();
14
+ page.onRequireRefresh();
15
+ };
16
+ }
17
+ export function useUserHasRoles(roles) {
18
+ if (roles.length === 0)
19
+ return true;
20
+ let userInfos = useUserInfos();
21
+ if (!userInfos)
22
+ return false;
23
+ let userRoles = userInfos.roles;
24
+ if (!userRoles)
25
+ return false;
26
+ return !!roles.every(role => userRoles.includes(role));
27
+ }
28
+ export function useUserInfos() {
29
+ const page = _usePage();
30
+ return page.getUserInfos();
31
+ }
32
+ export function RequireRoles({ roles, children }) {
33
+ const hasRoles = useUserHasRoles(roles);
34
+ if (hasRoles) {
35
+ return children;
36
+ }
37
+ return null;
38
+ }
39
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../src/@uikit/users/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAmB,MAAM,WAAW,CAAC;AACrD,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,UAAU,aAAa;IACzB,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;IAExB,OAAO,GAAG,EAAE;QACR,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC5B,CAAC,CAAA;AACL,CAAC;AAED,MAAM,UAAU,mBAAmB;IAC/B,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;IAExB,OAAO,GAAG,EAAE;QACR,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC5B,CAAC,CAAA;AACL,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAe;IAC3C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEpC,IAAI,SAAS,GAAG,YAAY,EAAE,CAAC;IAC/B,IAAI,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC;IAE7B,IAAI,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC;IAChC,IAAI,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC;IAE7B,OAAO,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,YAAY;IACxB,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;IACxB,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,EAAC,KAAK,EAAE,QAAQ,EAG5C;IACG,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IAExC,IAAI,QAAQ,EAAE,CAAC;QACX,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC"}
@@ -0,0 +1 @@
1
+ export * from "./hooks.ts";
@@ -0,0 +1,2 @@
1
+ export * from "./hooks.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/@uikit/users/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC"}
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ export declare const VariantContext: React.Context<any>;
3
+ export declare function VariantProvider({ children, variants }: {
4
+ children: React.ReactNode;
5
+ variants?: any;
6
+ }): import("react/jsx-runtime").JSX.Element;
7
+ export declare function useVariant<T extends React.FC>(name: string, defaultValue?: T | undefined): any;
@@ -0,0 +1,16 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React from 'react';
3
+ export const VariantContext = React.createContext({});
4
+ export function VariantProvider({ children, variants }) {
5
+ return _jsx(VariantContext.Provider, { value: variants, children: children });
6
+ }
7
+ export function useVariant(name, defaultValue) {
8
+ const variants = React.useContext(VariantContext);
9
+ return variants[name] ?? (defaultValue ?? variantNotFound(name));
10
+ }
11
+ function variantNotFound(variantName) {
12
+ return function () {
13
+ return _jsxs("div", { children: ["Variant not found: ", variantName] });
14
+ };
15
+ }
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/@uikit/variants/index.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,CAAC,aAAa,CAAM,EAAE,CAAC,CAAC;AAE3D,MAAM,UAAU,eAAe,CAAC,EAAC,QAAQ,EAAE,QAAQ,EAA8C;IAC7F,OAAO,KAAC,cAAc,CAAC,QAAQ,IAAC,KAAK,EAAE,QAAQ,YAC1C,QAAQ,GACa,CAAA;AAC9B,CAAC;AAED,MAAM,UAAU,UAAU,CAAqB,IAAY,EAAE,YAA0B;IACnF,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;IAClD,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,eAAe,CAAC,WAAmB;IACxC,OAAO;QACH,OAAO,iDAAyB,WAAW,IAAO,CAAC;IACvD,CAAC,CAAA;AACL,CAAC"}
package/package.json ADDED
@@ -0,0 +1,115 @@
1
+ {
2
+ "name": "jopijs",
3
+ "version": "0.0.1",
4
+ "publishedDate": "11/20/2025",
5
+ "publicPublishedDate": "11/19/2025",
6
+ "license": "MIT",
7
+ "homepage": "https://github.com/johanpiquet/jopijs",
8
+ "keywords": [
9
+ "express.js",
10
+ "nextjs",
11
+ "react",
12
+ "react-ssr",
13
+ "react-hydrate"
14
+ ],
15
+ "author": "Johan PIQUET",
16
+ "description": "A web framework for building proxy/cache and react-hydrate applications",
17
+ "engines": {
18
+ "node": ">=22.18.0"
19
+ },
20
+ "type": "module",
21
+ "files": [
22
+ "/dist",
23
+ "./src",
24
+ "./bin",
25
+ "README.md",
26
+ "LICENSE"
27
+ ],
28
+ "bin": {
29
+ "jopib": "bin/jopib.js",
30
+ "jopin": "bin/jopin.js"
31
+ },
32
+ "scripts": {
33
+ "clean": "rm -rf ./dist .turbo tsconfig.tsbuildinfo",
34
+ "build:priority:2": "npx tsc",
35
+ "bun-publish": "bun publish",
36
+ "untrack": "git rm -r --cached -- ./dist/**;"
37
+ },
38
+ "devDependencies": {
39
+ "@types/bun": "latest",
40
+ "@types/jsonwebtoken": "^9.0.10",
41
+ "@types/postcss-url": "^10.0.4",
42
+ "@types/react": "^19.1.10",
43
+ "@types/react-dom": "^19.1.7",
44
+ "@types/ws": "^8.18.1"
45
+ },
46
+ "dependencies": {
47
+ "@tailwindcss/postcss": "^4.1.12",
48
+ "acme-client": "^5.4.0",
49
+ "cheerio": "^1.1.2",
50
+ "chokidar": "^4.0.3",
51
+ "css-url-parser": "^1.1.4",
52
+ "esbuild": "=0.25.9",
53
+ "jopi-toolkit": "^3.0.5",
54
+ "jsonwebtoken": "^9.0.2",
55
+ "magic-string": "^0.30.19",
56
+ "postcss": "^8.5.6",
57
+ "postcss-modules": "^6.0.1",
58
+ "postcss-url": "^10.1.3",
59
+ "react": "^19.1.1",
60
+ "react-dom": "^19.1.1",
61
+ "react-router": "^7.8.2",
62
+ "rou3": "^0.7.3",
63
+ "sass": "^1.90.0",
64
+ "source-map": "^0.7.6",
65
+ "strip-json-comments": "^5.0.3",
66
+ "tailwindcss": "^4.1.12",
67
+ "ws": "^8.18.3"
68
+ },
69
+ "exports": {
70
+ ".": {
71
+ "bun": "./src/@core/index.ts",
72
+ "default": "./dist/@core/index.js"
73
+ },
74
+ "./ui": {
75
+ "bun": "./src/@ui/index.ts",
76
+ "default": "./dist/@ui/index.js"
77
+ },
78
+ "./uikit": {
79
+ "bun": "./src/@uikit/index.ts",
80
+ "default": "./dist/@uikit/index.js"
81
+ },
82
+ "./bundler": {
83
+ "bun": "./src/@bundler/index.ts",
84
+ "default": "./dist/@bundler/index.js"
85
+ },
86
+ "./crawler": {
87
+ "bun": "./src/@crawler/index.ts",
88
+ "default": "./dist/@crawler/index.js"
89
+ },
90
+ "./generated": {
91
+ "bun": "./src/@generated/index.ts",
92
+ "default": "./dist/@generated/index.js"
93
+ },
94
+ "./loader": {
95
+ "bun": "./src/@loader/index.ts",
96
+ "default": "./dist/@loader/index.js"
97
+ },
98
+ "./loader/loader.mjs": "./src/@loader/loader.mjs",
99
+ "./bun-server-static": "./src/@loader/bunHtmlCompiler.mjs",
100
+ "./loader-tools": "./dist/@loader-tools/index.js",
101
+ "./loader-client": {
102
+ "bun": "./src/@loader-client/index.ts",
103
+ "default": "./dist/@loader-client/index.js"
104
+ },
105
+ "./linker": {
106
+ "bun": "./src/@linker/index.ts",
107
+ "default": "./dist/@linker/index.js"
108
+ },
109
+ "./tool-jopinb": {
110
+ "bun": "./src/@tool-jopinb/index.ts",
111
+ "default": "./dist/@tool-jopinb/index.js"
112
+ },
113
+ "./types": "./src/@loader-types/extensions.d.ts"
114
+ }
115
+ }
@@ -0,0 +1 @@
1
+ Contains the bundler functionalities of Jopi Rewrite.
@@ -0,0 +1,4 @@
1
+ import {getLogger} from "jopi-toolkit/jk_logs";
2
+
3
+ export const logBundler = getLogger("jopi.bundler");
4
+ export const logServer_refresh = getLogger("refresh", logBundler);
@@ -0,0 +1,41 @@
1
+ import * as jk_fs from "jopi-toolkit/jk_fs";
2
+ import * as jk_events from "jopi-toolkit/jk_events";
3
+ import type {CreateBundleParams} from "jopijs";
4
+ import {isReactHMR} from "jopijs/loader-client";
5
+ import {esBuildBundle} from "./esbuild.ts";
6
+
7
+ async function createBundle(params: CreateBundleParams): Promise<void> {
8
+ const config = params.config;
9
+
10
+ // Load the metadata generated.
11
+ const metaDataFilePath = jk_fs.join(params.genDir, "esbuildMeta.json");
12
+
13
+ process.env.JOPI_BUNLDER_ESBUILD = "1";
14
+
15
+ try {
16
+ await esBuildBundle({
17
+ metaDataFilePath,
18
+ dontEmbed: config.embed.dontEmbedThis,
19
+
20
+ ...params
21
+ });
22
+ }
23
+ finally {
24
+ delete process.env.JOPI_BUNLDER_ESBUILD;
25
+ }
26
+ }
27
+
28
+ jk_events.addListener("@jopi.bundler.createBundle", jk_events.EventPriority.veryLow, async (params: CreateBundleParams) => {
29
+ // For React HMR, creating the full bundle is not required
30
+ // and will only slow down the startup.
31
+ //
32
+ if (isReactHMR()) return;
33
+
34
+ // Will compile all the pages.
35
+ await createBundle(params);
36
+ });
37
+
38
+ jk_events.addListener("@jopi.bundler.createBundleForPage", jk_events.EventPriority.veryLow, async (params: CreateBundleParams) => {
39
+ // Will compile only the selected page, because of params values.
40
+ await createBundle(params);
41
+ });
@@ -0,0 +1,141 @@
1
+ import esbuild, {type BuildResult} from "esbuild";
2
+ import * as jk_fs from "jopi-toolkit/jk_fs";
3
+ import * as n_what from "jopi-toolkit/jk_what";
4
+ import type {CreateBundleParams} from "../@core/index.ts";
5
+ import {jopiReplaceText, jopiLoaderPlugin, jopiDetectRebuild} from "./plugins.ts";
6
+ import {applyTailwindProcessor} from "./tailwind.ts";
7
+
8
+ export interface EsBuildParams extends CreateBundleParams {
9
+ metaDataFilePath: string;
10
+ dontEmbed: string[]|undefined;
11
+ }
12
+
13
+ export async function esBuildBundle(params: EsBuildParams) {
14
+ // To know: will generate:
15
+ // * Some files out/page_xxxx.js, where each page is an "page.tsx".
16
+ // * Some files out/page_xxxx.css with the CSS specific to this page.
17
+
18
+ const buildOptions: esbuild.BuildOptions = {
19
+ entryPoints: params.entryPoints,
20
+
21
+ bundle: true,
22
+ outdir: params.outputDir,
23
+ external: params.dontEmbed,
24
+
25
+ // Allows generating relative url
26
+ // without the full website name.
27
+ //
28
+ publicPath: "/_bundle/",
29
+
30
+ platform: 'browser',
31
+ format: 'esm',
32
+ target: "es2020",
33
+
34
+ splitting: true,
35
+
36
+ plugins: [
37
+ jopiLoaderPlugin,
38
+ jopiReplaceText()
39
+ ],
40
+
41
+ loader: {
42
+ ".css": "css",
43
+ ".scss": "css",
44
+
45
+ // Polices
46
+ '.woff': 'file',
47
+ '.woff2': 'file',
48
+ '.ttf': 'file',
49
+ '.eot': 'file',
50
+
51
+ // Images
52
+ '.jpg': 'file',
53
+ '.jpeg': 'file',
54
+ '.png': 'file',
55
+ '.svg': 'file',
56
+ '.gif': 'file',
57
+ '.webp': 'file',
58
+
59
+ // Media
60
+ '.mp3': 'file',
61
+ '.mp4': 'file',
62
+
63
+ // Others
64
+ '.html': 'text',
65
+ '.md': 'text'
66
+ },
67
+
68
+ minify: true,
69
+ //minify: false,
70
+ sourcemap: true,
71
+
72
+ // Will trigger an error on collision detection.
73
+ allowOverwrite: false,
74
+
75
+ // Produce metadata about the build.
76
+ metafile: true
77
+ };
78
+
79
+ // Note: each page is compiled one time.
80
+ // Once compiled, the watch mode will refresh it.
81
+ //
82
+ if (params.singlePageMode) {
83
+ buildOptions.publicPath += params.pageKey! + '/';
84
+ buildOptions.entryPoints = [params.pageScript!];
85
+ buildOptions.outdir = jk_fs.join(buildOptions.outdir!, params.pageKey!);
86
+ buildOptions.plugins?.push(jopiDetectRebuild(params));
87
+ }
88
+
89
+ await applyTailwindProcessor(params);
90
+
91
+ const context = await esbuild.context(buildOptions);
92
+ let result: BuildResult = await context.rebuild();
93
+
94
+ if (params.singlePageMode) {
95
+ try {
96
+ // Will allows the page to be automatically updated.
97
+ await context.watch({
98
+ delay: n_what.isNodeJS ? 100 : 0
99
+ });
100
+ } catch {
101
+ process.exit(1);
102
+ }
103
+ }
104
+
105
+ // >>> Resolve virtual urls
106
+
107
+ // The url is formed before the bundle is done.
108
+ // It's why we don't know the final url of the resource
109
+ // which is a processed and transformed resource, especially
110
+ // for CSS files, which content is resolving his dependencies.
111
+
112
+ if (params.virtualUrlMap) {
113
+ const allMeta = result.metafile!;
114
+
115
+ if (allMeta.outputs) {
116
+ for (const outputFilePath in allMeta.outputs) {
117
+ const ext = jk_fs.extname(outputFilePath);
118
+ if ([".js", ".ts", ".tsx", ".jsx", ".mjs", ".cjs"].includes(ext)) continue;
119
+
120
+ const metaValue = allMeta.outputs[outputFilePath];
121
+
122
+ if (metaValue.inputs) {
123
+ const inputs = metaValue.inputs;
124
+
125
+ for (let inputFilePath of Object.keys(inputs)) {
126
+ const key = jk_fs.resolve(inputFilePath);
127
+ const entry = params.virtualUrlMap.find(e => e.sourceFile === key);
128
+
129
+ // Don't override if already set because the next
130
+ // entry can be a resource using our entry, so it
131
+ // will be overridden.
132
+ //
133
+ if (entry && !entry.bundleFile) {
134
+ entry.bundleFile = jk_fs.resolve(outputFilePath);
135
+ }
136
+ }
137
+ }
138
+ }
139
+ }
140
+ }
141
+ }
@@ -0,0 +1,3 @@
1
+ export {getGlobalCssFileContent} from "./tailwind.ts";
2
+
3
+ import "./core.ts";
@@ -0,0 +1,163 @@
1
+ import {type Plugin} from "esbuild";
2
+ import fs from "node:fs/promises";
3
+ import path from "node:path";
4
+ import {applyTailwindProcessor} from "./tailwind.ts";
5
+ import * as jk_events from "jopi-toolkit/jk_events";
6
+ import type {EsBuildParams} from "./esbuild.ts";
7
+ import {installEsBuildPlugins} from "jopijs/loader-tools";
8
+ import MagicString from 'magic-string';
9
+ import {SourceMapConsumer, SourceMapGenerator} from "source-map";
10
+ import {logServer_refresh} from "./_logs.ts";
11
+
12
+ /**
13
+ * This plugin allows replacing some text entries according to rules.
14
+ */
15
+ export function jopiReplaceText(): Plugin {
16
+ async function getExistingSourceMap(filePath: string, source: string): Promise<string | null> {
17
+ const sourceMapCommentMatch = source.match(/\/\/# sourceMappingURL=(.+)$/m);
18
+ if (!sourceMapCommentMatch) return null;
19
+
20
+ const sourceMapUrl = sourceMapCommentMatch[1];
21
+
22
+ if (sourceMapUrl.startsWith('data:application/json;base64,')) {
23
+ const base64Content = sourceMapUrl.replace('data:application/json;base64,', '');
24
+ return Buffer.from(base64Content, 'base64').toString('utf8');
25
+ } else {
26
+ const sourceMapPath = path.resolve(path.dirname(filePath), sourceMapUrl);
27
+ try {
28
+ return await fs.readFile(sourceMapPath, 'utf8');
29
+ } catch {
30
+ return null;
31
+ }
32
+ }
33
+ }
34
+
35
+ return {
36
+ name: "jopi-replace-text",
37
+
38
+ setup(build) {
39
+ build.onLoad({ filter: /\.(tsx|jsx|js)$/ }, async (args) => {
40
+ const oldContent = await fs.readFile(args.path, 'utf8');
41
+ let newContent = oldContent.replace("jBundler_ifServer", "jBundler_ifBrowser");
42
+ if (newContent === oldContent) return undefined;
43
+
44
+ const useSourceMap = !!build.initialOptions.sourcemap;
45
+
46
+ if (!useSourceMap) {
47
+ let loader = path.extname(args.path).toLowerCase().substring(1);
48
+ return {contents: newContent, loader: loader as 'js' | 'jsx' | 'ts' | 'tsx'};
49
+ }
50
+
51
+ const existingSourceMap = await getExistingSourceMap(args.path, oldContent);
52
+ const magic = new MagicString(oldContent, {filename: args.path});
53
+ magic.replace("jBundler_ifServer", "jBundler_ifBrowser");
54
+
55
+ const map = magic.generateMap({
56
+ file: args.path,
57
+ source: path.basename(args.path),
58
+ includeContent: true,
59
+ hires: true
60
+ });
61
+
62
+ let finalMap: string;
63
+
64
+ // Will merge the existing and final source-map.
65
+ //
66
+ if (existingSourceMap) {
67
+ const consumerExisting = await new SourceMapConsumer(existingSourceMap);
68
+ const generator = SourceMapGenerator.fromSourceMap(consumerExisting);
69
+
70
+ const consumerNew = await new SourceMapConsumer(JSON.parse(map.toString()));
71
+ consumerNew.eachMapping((mapping) => {
72
+ if (mapping.originalLine != null && mapping.originalColumn != null) {
73
+ generator.addMapping({
74
+ source: mapping.source || path.basename(args.path),
75
+ original: { line: mapping.originalLine, column: mapping.originalColumn },
76
+ generated: { line: mapping.generatedLine, column: mapping.generatedColumn },
77
+ name: mapping.name,
78
+ });
79
+ }
80
+ });
81
+
82
+ consumerNew.sources.forEach((source) => {
83
+ const content = consumerNew.sourceContentFor(source, true);
84
+ if (content) {
85
+ generator.setSourceContent(source, content);
86
+ }
87
+ });
88
+
89
+ finalMap = JSON.stringify(generator.toJSON());
90
+ consumerNew.destroy();
91
+ consumerExisting.destroy();
92
+ } else {
93
+ finalMap = map.toString();
94
+ }
95
+
96
+ newContent = magic.toString() +
97
+ `\n//# sourceMappingURL=data:application/json;base64,${Buffer.from(finalMap).toString('base64')}`;
98
+
99
+ let loader = path.extname(args.path).toLowerCase().substring(1);
100
+ return {contents: newContent, loader: loader as 'js' | 'jsx' | 'ts' | 'tsx'};
101
+ });
102
+ }
103
+ };
104
+ }
105
+
106
+ export function jopiDetectRebuild(params: EsBuildParams): Plugin {
107
+ // Allow avoiding behaviors with TypeScript compiler doing some late works.
108
+ //
109
+ let isEnabled = false;
110
+ setTimeout(() => { isEnabled = true }, 2000);
111
+
112
+ return {
113
+ name: "jopi-detect-rebuild",
114
+
115
+ setup(build) {
116
+ build.onStart(async () => {
117
+ // isEnabled is automatically set to true after 2 seconds.
118
+ // It allows avoiding some behaviors with false calls from EsBuild.
119
+ // (probably caused by the dev-tools, including TypeScript compiler)
120
+ //
121
+ if (!isEnabled) return;
122
+
123
+ if (params.singlePageMode) {
124
+ logServer_refresh.info("Refreshing page " + params.pageRoute);
125
+ }
126
+
127
+ // Rebuild Tailwind.
128
+ // - Single page mode: rebuild only the local tailwind.
129
+ // - Global mode: never occurs.
130
+ //
131
+ if (params.requireTailwind) {
132
+ await applyTailwindProcessor(params);
133
+ }
134
+
135
+ if (params.singlePageMode) {
136
+ // This event will execute Jopi Linker.
137
+ await jk_events.sendAsyncEvent("@jopi.bundler.watch.beforeRebuild");
138
+ }
139
+ });
140
+
141
+ build.onEnd(async () => {
142
+ if (!isEnabled) return;
143
+
144
+ if (params.singlePageMode) {
145
+ // This event will execute trigger the SSE event that refreshes the browser.
146
+ await jk_events.sendAsyncEvent("@jopi.bundler.watch.afterRebuild");
147
+ }
148
+ });
149
+ }
150
+ }
151
+ }
152
+
153
+ /**
154
+ * Allows managing custom import:
155
+ * * Importing CSS modules (.module.css)
156
+ * * Import with ?raw and ?inline
157
+ */
158
+ export const jopiLoaderPlugin: Plugin = {
159
+ name: "jopi-loader",
160
+ setup(build) {
161
+ installEsBuildPlugins(build as unknown as Bun.PluginBuilder)
162
+ },
163
+ };