jopijs 0.0.1 → 3.0.16
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.
- package/README.md +21 -54
- package/dist/@bundler/esbuild.d.ts +1 -1
- package/dist/@bundler/index.d.ts +0 -1
- package/dist/@bundler/index.js +0 -1
- package/dist/@bundler/index.js.map +1 -1
- package/dist/@bundler/plugins.d.ts +1 -0
- package/dist/@bundler/plugins.js +19 -4
- package/dist/@bundler/plugins.js.map +1 -1
- package/dist/@bundler/tailwind.d.ts +1 -2
- package/dist/@bundler/tailwind.js +1 -48
- package/dist/@bundler/tailwind.js.map +1 -1
- package/dist/@core/bundler/bundler.d.ts +1 -1
- package/dist/@core/bundler/bundler.js +3 -6
- package/dist/@core/bundler/bundler.js.map +1 -1
- package/dist/@core/bundler/config.d.ts +3 -0
- package/dist/@core/bundler/config.js +82 -0
- package/dist/@core/bundler/config.js.map +1 -1
- package/dist/@core/bundler/extraContent.js +1 -3
- package/dist/@core/bundler/extraContent.js.map +1 -1
- package/dist/@core/bundler/index.d.ts +4 -0
- package/dist/@core/bundler/index.js +5 -0
- package/dist/@core/bundler/index.js.map +1 -0
- package/dist/@core/bundler/pagesGenerator.js +32 -9
- package/dist/@core/bundler/pagesGenerator.js.map +1 -1
- package/dist/@core/caches/InMemoryCache.js +0 -2
- package/dist/@core/caches/InMemoryCache.js.map +1 -1
- package/dist/@core/caches/SimpleFileCache.js +1 -1
- package/dist/@core/caches/SimpleFileCache.js.map +1 -1
- package/dist/@core/dataSources.d.ts +9 -0
- package/dist/@core/dataSources.js +37 -0
- package/dist/@core/dataSources.js.map +1 -0
- package/dist/@core/index.d.ts +4 -2
- package/dist/@core/index.js +4 -2
- package/dist/@core/index.js.map +1 -1
- package/dist/@core/internalTools.d.ts +0 -2
- package/dist/@core/internalTools.js +0 -1
- package/dist/@core/internalTools.js.map +1 -1
- package/dist/@core/jopiEasy.d.ts +25 -9
- package/dist/@core/jopiEasy.js +43 -16
- package/dist/@core/jopiEasy.js.map +1 -1
- package/dist/@core/jopiRequest.d.ts +17 -10
- package/dist/@core/jopiRequest.js +38 -29
- package/dist/@core/jopiRequest.js.map +1 -1
- package/dist/@core/jopiServer.js +2 -0
- package/dist/@core/jopiServer.js.map +1 -1
- package/dist/@core/jopiWebSite.d.ts +35 -17
- package/dist/@core/jopiWebSite.js +136 -104
- package/dist/@core/jopiWebSite.js.map +1 -1
- package/dist/@core/loadDotEnvFile.d.ts +1 -0
- package/dist/@core/loadDotEnvFile.js +27 -0
- package/dist/@core/loadDotEnvFile.js.map +1 -0
- package/dist/@core/routeConfig.d.ts +33 -1
- package/dist/@core/routeConfig.js +45 -1
- package/dist/@core/routeConfig.js.map +1 -1
- package/dist/@core/serverImpl/server_bunjs.js +1 -1
- package/dist/@core/serverImpl/server_bunjs.js.map +1 -1
- package/dist/@core/serverImpl/server_nodejs.js +2 -2
- package/dist/@core/serverImpl/server_nodejs.js.map +1 -1
- package/dist/@generated/index.d.ts +4 -2
- package/dist/@generated/index.js +13 -8
- package/dist/@generated/index.js.map +1 -1
- package/dist/@linker/common.d.ts +1 -0
- package/dist/@linker/common.js +19 -0
- package/dist/@linker/common.js.map +1 -0
- package/dist/@linker/config.js +21 -7
- package/dist/@linker/config.js.map +1 -1
- package/dist/@linker/coreAliasTypes.d.ts +79 -0
- package/dist/@linker/{arobaseTypes.js → coreAliasTypes.js} +119 -31
- package/dist/@linker/coreAliasTypes.js.map +1 -0
- package/dist/@linker/engine.d.ts +58 -23
- package/dist/@linker/engine.js +186 -104
- package/dist/@linker/engine.js.map +1 -1
- package/dist/@linker/index.d.ts +1 -0
- package/dist/@linker/index.js +1 -0
- package/dist/@linker/index.js.map +1 -1
- package/dist/@linker/install.js +2 -0
- package/dist/@linker/install.js.map +1 -1
- package/dist/@linker/jopiModulesTools.d.ts +10 -0
- package/dist/@linker/jopiModulesTools.js +33 -0
- package/dist/@linker/jopiModulesTools.js.map +1 -0
- package/dist/@linker/modInstaller.d.ts +2 -1
- package/dist/@linker/modInstaller.js +7 -8
- package/dist/@linker/modInstaller.js.map +1 -1
- package/dist/@linker/modPackageJson.d.ts +8 -0
- package/dist/@linker/modPackageJson.js +13 -0
- package/dist/@linker/modPackageJson.js.map +1 -0
- package/dist/@linker/modulesTools.d.ts +3 -0
- package/dist/@linker/modulesTools.js +3 -0
- package/dist/@linker/modulesTools.js.map +1 -0
- package/dist/@linker/typeEvents.d.ts +9 -4
- package/dist/@linker/typeEvents.js +30 -22
- package/dist/@linker/typeEvents.js.map +1 -1
- package/dist/@linker/typeRoutes.d.ts +8 -5
- package/dist/@linker/typeRoutes.js +158 -67
- package/dist/@linker/typeRoutes.js.map +1 -1
- package/dist/@linker/typeTable.d.ts +26 -0
- package/dist/@linker/typeTable.js +159 -0
- package/dist/@linker/typeTable.js.map +1 -0
- package/dist/@linker/typeTranslation.d.ts +25 -0
- package/dist/@linker/typeTranslation.js +371 -0
- package/dist/@linker/typeTranslation.js.map +1 -0
- package/dist/@linker/typeUiComposite.d.ts +2 -2
- package/dist/@linker/typeUiComposite.js +2 -2
- package/dist/@linker/typeUiComposite.js.map +1 -1
- package/dist/@linker/typeVariants.d.ts +9 -0
- package/dist/@linker/typeVariants.js +51 -0
- package/dist/@linker/typeVariants.js.map +1 -0
- package/dist/@loader-client/index.js +1 -1
- package/dist/@loader-client/index.js.map +1 -1
- package/dist/@loader-tools/index.d.ts +0 -1
- package/dist/@loader-tools/index.js +0 -1
- package/dist/@loader-tools/index.js.map +1 -1
- package/dist/@loader-tools/jopin.js +5 -1
- package/dist/@loader-tools/jopin.js.map +1 -1
- package/dist/@loader-tools/nodeJsLoader.d.ts +2 -2
- package/dist/@loader-tools/nodeJsLoader.js +117 -32
- package/dist/@loader-tools/nodeJsLoader.js.map +1 -1
- package/dist/@loader-tools/sourceChangesWatcher.d.ts +9 -4
- package/dist/@loader-tools/sourceChangesWatcher.js +42 -28
- package/dist/@loader-tools/sourceChangesWatcher.js.map +1 -1
- package/dist/@loader-tools/tools.d.ts +0 -7
- package/dist/@loader-tools/tools.js +10 -24
- package/dist/@loader-tools/tools.js.map +1 -1
- package/dist/@loader-tools/transform.js +40 -3
- package/dist/@loader-tools/transform.js.map +1 -1
- package/dist/@modules/index.d.ts +47 -0
- package/dist/@modules/index.js +265 -0
- package/dist/@modules/index.js.map +1 -0
- package/dist/@modules/jopiModulesTools.d.ts +7 -0
- package/dist/@modules/jopiModulesTools.js +31 -0
- package/dist/@modules/jopiModulesTools.js.map +1 -0
- package/dist/@ui/components.js +0 -1
- package/dist/@ui/components.js.map +1 -1
- package/dist/@ui/cookies/common.d.ts +3 -0
- package/dist/@ui/cookies/common.js +2 -0
- package/dist/@ui/cookies/common.js.map +1 -0
- package/dist/@ui/cookies/cookies.d.ts +10 -0
- package/dist/@ui/cookies/cookies.js +56 -0
- package/dist/@ui/cookies/cookies.js.map +1 -0
- package/dist/@ui/cookies/index.d.ts +2 -0
- package/dist/@ui/cookies/index.js +3 -0
- package/dist/@ui/cookies/index.js.map +1 -0
- package/dist/@ui/cookies/interfaces.d.ts +3 -0
- package/dist/@ui/cookies/interfaces.js +2 -0
- package/dist/@ui/cookies/interfaces.js.map +1 -0
- package/dist/@ui/cookies/jBundler_ifBrowser.d.ts +4 -0
- package/dist/@ui/cookies/jBundler_ifBrowser.js +36 -0
- package/dist/@ui/cookies/jBundler_ifBrowser.js.map +1 -0
- package/dist/@ui/cookies/jBundler_ifServer.d.ts +11 -0
- package/dist/@ui/cookies/jBundler_ifServer.js +25 -0
- package/dist/@ui/cookies/jBundler_ifServer.js.map +1 -0
- package/dist/@ui/cookies/server.d.ts +10 -0
- package/dist/@ui/cookies/server.js +56 -0
- package/dist/@ui/cookies/server.js.map +1 -0
- package/dist/@ui/cookies.d.ts +10 -0
- package/dist/@ui/cookies.js +56 -0
- package/dist/@ui/cookies.js.map +1 -0
- package/dist/@ui/hooks/common.d.ts +22 -0
- package/dist/@ui/hooks/common.js +55 -0
- package/dist/@ui/hooks/common.js.map +1 -0
- package/dist/@ui/hooks/hooks.d.ts +52 -0
- package/dist/@ui/hooks/hooks.js +115 -0
- package/dist/@ui/hooks/hooks.js.map +1 -0
- package/dist/@ui/hooks/index.d.ts +2 -0
- package/dist/@ui/hooks/index.js +3 -0
- package/dist/@ui/hooks/index.js.map +1 -0
- package/dist/@ui/hooks/jBundler_ifBrowser.d.ts +17 -0
- package/dist/@ui/hooks/jBundler_ifBrowser.js +53 -0
- package/dist/@ui/hooks/jBundler_ifBrowser.js.map +1 -0
- package/dist/@ui/hooks/jBundler_ifServer.d.ts +39 -0
- package/dist/@ui/hooks/jBundler_ifServer.js +43 -0
- package/dist/@ui/hooks/jBundler_ifServer.js.map +1 -0
- package/dist/@ui/hooks.d.ts +21 -0
- package/dist/@ui/hooks.js +44 -0
- package/dist/@ui/hooks.js.map +1 -1
- package/dist/@ui/index.d.ts +4 -2
- package/dist/@ui/index.js +4 -2
- package/dist/@ui/index.js.map +1 -1
- package/dist/@ui/interfaces.d.ts +4 -0
- package/dist/@ui/interfaces.js +2 -0
- package/dist/@ui/interfaces.js.map +1 -0
- package/dist/@ui/internal.d.ts +0 -2
- package/dist/@ui/internal.js +0 -1
- package/dist/@ui/internal.js.map +1 -1
- package/dist/@ui/modules.d.ts +27 -5
- package/dist/@ui/modules.js +60 -6
- package/dist/@ui/modules.js.map +1 -1
- package/dist/@ui/pageController.d.ts +6 -5
- package/dist/@ui/pageController.js +15 -12
- package/dist/@ui/pageController.js.map +1 -1
- package/dist/@ui/pageModifier.d.ts +69 -0
- package/dist/@ui/pageModifier.js +107 -0
- package/dist/@ui/pageModifier.js.map +1 -0
- package/dist/@ui/pageModifier.ts.d.ts +13 -0
- package/dist/@ui/pageModifier.ts.js +30 -0
- package/dist/@ui/pageModifier.ts.js.map +1 -0
- package/dist/@ui/tools.d.ts +0 -10
- package/dist/@ui/tools.js +1 -52
- package/dist/@ui/tools.js.map +1 -1
- package/dist/@ui/user.d.ts +14 -0
- package/dist/@ui/user.js +26 -0
- package/dist/@ui/user.js.map +1 -0
- package/dist/@uikit/core/UiKitModule.d.ts +6 -2
- package/dist/@uikit/core/UiKitModule.js +42 -3
- package/dist/@uikit/core/UiKitModule.js.map +1 -1
- package/dist/@uikit/core/jBundler_ifServer.js +1 -1
- package/dist/@uikit/core/jBundler_ifServer.js.map +1 -1
- package/dist/@uikit/forms/components.d.ts +7 -6
- package/dist/@uikit/forms/components.js +23 -9
- package/dist/@uikit/forms/components.js.map +1 -1
- package/dist/@uikit/forms/interfaces.d.ts +101 -11
- package/dist/@uikit/forms/interfaces.js +0 -1
- package/dist/@uikit/forms/interfaces.js.map +1 -1
- package/dist/@uikit/helpers/tools.d.ts +11 -4
- package/dist/@uikit/helpers/tools.js +33 -8
- package/dist/@uikit/helpers/tools.js.map +1 -1
- package/dist/@uikit/index.d.ts +2 -1
- package/dist/@uikit/index.js +2 -1
- package/dist/@uikit/index.js.map +1 -1
- package/dist/@uikit/menu/core.d.ts +45 -8
- package/dist/@uikit/menu/core.js +175 -26
- package/dist/@uikit/menu/core.js.map +1 -1
- package/dist/@uikit/menu/hooks.d.ts +3 -3
- package/dist/@uikit/menu/hooks.js +0 -1
- package/dist/@uikit/menu/hooks.js.map +1 -1
- package/dist/@uikit/menu/interfaces.d.ts +9 -6
- package/dist/@uikit/menu/internal.d.ts +0 -38
- package/dist/@uikit/menu/internal.js +3 -183
- package/dist/@uikit/menu/internal.js.map +1 -1
- package/dist/@uikit/reactRouter/hooks/jBundler_ifBrowser.d.ts +1 -0
- package/dist/@uikit/reactRouter/hooks/jBundler_ifBrowser.js.map +1 -1
- package/dist/@uikit/reactRouter/hooks/jBundler_ifServer.d.ts +1 -0
- package/dist/@uikit/reactRouter/hooks/jBundler_ifServer.js.map +1 -1
- package/dist/@uikit/table/JTable.d.ts +3 -0
- package/dist/@uikit/table/JTable.js +251 -0
- package/dist/@uikit/table/JTable.js.map +1 -0
- package/dist/@uikit/table/index.d.ts +2 -0
- package/dist/@uikit/table/index.js +3 -0
- package/dist/@uikit/table/index.js.map +1 -0
- package/dist/@uikit/table/interfaces.d.ts +149 -0
- package/dist/@uikit/table/interfaces.js +5 -0
- package/dist/@uikit/table/interfaces.js.map +1 -0
- package/dist/@uikit/users/hooks.d.ts +9 -2
- package/dist/@uikit/users/hooks.js +22 -5
- package/dist/@uikit/users/hooks.js.map +1 -1
- package/dist/@uikit/variants/index.d.ts +2 -5
- package/dist/@uikit/variants/index.js +10 -12
- package/dist/@uikit/variants/index.js.map +1 -1
- package/package.json +18 -8
- package/src/@bundler/README.md +1 -1
- package/src/@bundler/esbuild.ts +1 -1
- package/src/@bundler/index.ts +0 -2
- package/src/@bundler/plugins.ts +21 -4
- package/src/@bundler/tailwind.ts +1 -57
- package/src/@core/bundler/bundler.ts +5 -8
- package/src/@core/bundler/config.ts +106 -1
- package/src/@core/bundler/extraContent.ts +1 -3
- package/src/@core/bundler/index.ts +5 -0
- package/src/@core/bundler/pagesGenerator.ts +35 -10
- package/src/@core/caches/InMemoryCache.ts +0 -2
- package/src/@core/caches/SimpleFileCache.ts +1 -1
- package/src/@core/dataSources.ts +58 -0
- package/src/@core/index.ts +6 -4
- package/src/@core/internalTools.ts +0 -2
- package/src/@core/jopiEasy.ts +80 -26
- package/src/@core/jopiRequest.tsx +43 -35
- package/src/@core/jopiServer.ts +10 -7
- package/src/@core/jopiWebSite.tsx +169 -113
- package/src/@core/loadDotEnvFile.ts +28 -0
- package/src/@core/routeConfig.ts +60 -1
- package/src/@core/serverImpl/server_bunjs.tsx +1 -1
- package/src/@core/serverImpl/server_nodejs.ts +2 -2
- package/src/@generated/index.ts +21 -12
- package/src/@linker/common.ts +21 -0
- package/src/@linker/config.ts +25 -8
- package/src/@linker/{arobaseTypes.ts → coreAliasTypes.ts} +171 -54
- package/src/@linker/engine.ts +240 -117
- package/src/@linker/index.ts +3 -1
- package/src/@linker/install.ts +2 -0
- package/src/@linker/modInstaller.ts +8 -6
- package/src/@linker/modPackageJson.ts +13 -0
- package/src/@linker/typeEvents.ts +34 -27
- package/src/@linker/typeRoutes.ts +182 -75
- package/src/@linker/typeTable.ts +200 -0
- package/src/@linker/typeTranslation.ts +485 -0
- package/src/@linker/typeUiComposite.ts +2 -2
- package/src/@linker/typeVariants.ts +61 -0
- package/src/@loader/bunHtmlCompiler.mjs +1 -2
- package/src/@loader-client/index.ts +1 -1
- package/src/@loader-tools/README.md +1 -1
- package/src/@loader-tools/index.ts +0 -1
- package/src/@loader-tools/jopin.ts +6 -1
- package/src/@loader-tools/nodeJsLoader.ts +137 -31
- package/src/@loader-tools/sourceChangesWatcher.ts +47 -33
- package/src/@loader-tools/tools.ts +7 -31
- package/src/@loader-tools/transform.ts +44 -3
- package/src/@modules/index.ts +323 -0
- package/src/@ui/components.tsx +0 -1
- package/src/@ui/cookies/index.ts +2 -0
- package/src/@ui/cookies/interfaces.ts +3 -0
- package/src/@ui/cookies/jBundler_ifBrowser.ts +47 -0
- package/src/@ui/cookies/jBundler_ifServer.ts +29 -0
- package/src/@ui/{hooks.tsx → hooks/common.tsx} +15 -43
- package/src/@ui/hooks/index.ts +2 -0
- package/src/@ui/hooks/jBundler_ifBrowser.tsx +65 -0
- package/src/@ui/hooks/jBundler_ifServer.tsx +71 -0
- package/src/@ui/index.ts +4 -2
- package/src/@ui/interfaces.ts +4 -0
- package/src/@ui/modules.ts +94 -8
- package/src/@ui/pageController.ts +17 -11
- package/src/@ui/pageModifier.tsx +118 -0
- package/src/@ui/user.ts +48 -0
- package/src/@uikit/core/UiKitModule.ts +54 -4
- package/src/@uikit/core/jBundler_ifServer.ts +1 -1
- package/src/@uikit/forms/components.tsx +28 -14
- package/src/@uikit/forms/interfaces.ts +160 -14
- package/src/@uikit/helpers/tools.ts +40 -10
- package/src/@uikit/index.ts +3 -1
- package/src/@uikit/menu/core.ts +217 -33
- package/src/@uikit/menu/hooks.ts +3 -4
- package/src/@uikit/menu/interfaces.ts +11 -8
- package/src/@uikit/menu/internal.ts +3 -208
- package/src/@uikit/reactRouter/hooks/jBundler_ifBrowser.tsx +2 -1
- package/src/@uikit/reactRouter/hooks/jBundler_ifServer.tsx +2 -1
- package/src/@uikit/table/JTable.tsx +313 -0
- package/src/@uikit/table/index.ts +2 -0
- package/src/@uikit/table/interfaces.ts +209 -0
- package/src/@uikit/users/hooks.ts +23 -8
- package/src/@uikit/variants/index.tsx +9 -13
- package/dist/@core/bundler/common.d.ts +0 -2
- package/dist/@core/bundler/common.js +0 -17
- package/dist/@core/bundler/common.js.map +0 -1
- package/dist/@linker/arobaseTypes.d.ts +0 -50
- package/dist/@linker/arobaseTypes.js.map +0 -1
- package/dist/@linker/changeProof.d.ts +0 -5
- package/dist/@linker/changeProof.js +0 -50
- package/dist/@linker/changeProof.js.map +0 -1
- package/src/@core/bundler/common.ts +0 -18
- package/src/@linker/changeProof.ts +0 -53
- package/src/@ui/README.md +0 -3
- package/src/@ui/internal.ts +0 -12
- package/src/@ui/tools.ts +0 -116
package/README.md
CHANGED
|
@@ -1,71 +1,38 @@
|
|
|
1
|
-
## What is Jopi
|
|
1
|
+
## What is Jopi ?
|
|
2
2
|
|
|
3
|
-
Jopi
|
|
3
|
+
Jopi is a Bun.js framework, with Node.js compatibility, for building ultra-fast websites using React.js.
|
|
4
4
|
|
|
5
|
-
Its operating principle is very similar to Next.js
|
|
6
|
-
* On the server side, React.js is used to generate the HTML of pages, which are search-engine friendly (Google, Bing, ...). On the browser side, the generated HTML is automatically replaced by its fully interactive equivalent.
|
|
7
|
-
* Pages and APIs (GET/POST/...) are defined by placing files in directories whose names correspond directly to the URL structure.
|
|
5
|
+
Its operating principle is very similar to Next.js, with a file based router, and React Server Side Rendering.
|
|
8
6
|
|
|
9
|
-
The goal of Jopi
|
|
7
|
+
**The goal of Jopi is simplicity, and making big website easier to maintain. This thank to a powerful module system.**
|
|
8
|
+
|
|
9
|
+
> This module is make website refactoring much more easier, since it allows you to alter the website without touching the current code :
|
|
10
|
+
you create a new module, which override some existing routes and React components. Once this module disabled (by adding a simple underscore in front of his name), then you immediatly revert to your old version.
|
|
11
|
+
|
|
12
|
+
Here are some of Jopi features:
|
|
10
13
|
|
|
11
14
|
* **Tailwind already configured and enabled**. As well as **React HMR integration** so that any UI code change is instantly reflected in the browser.
|
|
12
15
|
* Inclusion of a **Docker script** to quickly convert your project into a very lightweight Docker VM.
|
|
13
16
|
* Built-in **JWT authentication** with the ability to easily create a user directory: a minimalist system that is easy to understand and extend for your own needs.
|
|
14
17
|
* **User role-based security** is included. It allows limiting access to certain resources and customizing behavior according to user roles.
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
### Application structure
|
|
22
|
-
|
|
23
|
-
A typical application looks like this in terms of folders.
|
|
24
|
-
|
|
25
|
-
**Example Jopi project**
|
|
26
|
-
```
|
|
27
|
-
|- node_modules/
|
|
28
|
-
|- package.json
|
|
29
|
-
|- tsconfig.json < If you use node.js / typescript
|
|
30
|
-
|- src/
|
|
31
|
-
|- mod_moduleA < Code is always divided into modules
|
|
32
|
-
|- mod_moduleB
|
|
33
|
-
|- @alias < Allows sharing between modules
|
|
34
|
-
|- @routes/admin < Define items bound to urls
|
|
35
|
-
|- page.tsx < Bound to http://mysite/admin
|
|
36
|
-
|- onPOST.ts < Catch all POST call to this url
|
|
37
|
-
|- config.ts < If you want to configure some options
|
|
38
|
-
|- pageNeedRole_admin.cond < You can also use special file names
|
|
39
|
-
|- postNeedRole_write.cond < to avoid using config.ts
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
As noted in the comments, there are two particularities: code is always divided into modules, while folders beginning with an at sign are used by code generation mechanisms. Notably the `@alias` folder which allows sharing elements between modules.
|
|
43
|
-
|
|
44
|
-
### The power of a modular application
|
|
45
|
-
|
|
46
|
-
The module organization allows clear separations between different aspects of your code, and above all it allows reusing/sharing code blocks between multiple applications, while facilitating division of work in a team. For example, one module manages the site structure, another handles authentication, and a third adds pages for the products sold.
|
|
18
|
+
* Simple but powerful **module system** :
|
|
19
|
+
* Allow sharing React components.
|
|
20
|
+
* Allows a module to override a shared component.
|
|
21
|
+
* Allows modules to communicate with each other (event/listeners pattern).
|
|
22
|
+
* Allows modules to extend a toolbar-like component.
|
|
23
|
+
* Modules to override an existing route.
|
|
47
24
|
|
|
48
|
-
Modules can share dependencies with other modules thanks to powerful alias mechanisms. For example a module defines a component MyComp, which becomes accessible to all modules by importing `import MyComp from @/uiBlocks/MyComp`.
|
|
49
|
-
|
|
50
|
-
Jopi's module system has the major advantage of being compatible with code pruning performed by JavasScript Bundlers, avoid common pitfalls with low-coupled code.
|
|
51
|
-
|
|
52
|
-
The module system is based on a set of mechanisms:
|
|
53
|
-
* **Events / listeners** — This mechanism lets modules communicate via a flexible "notify when this happens" system.
|
|
54
|
-
* **Composites** — This mechanism allows React components to have content enriched by modules. For example, so that a module can add content to a toolbar.
|
|
55
|
-
* **Sharing React.js components** — Modules can share React components, which are automatically registered in the global namespace. Also, a module can replace a shared component with its own version.
|
|
56
|
-
|
|
57
|
-
### Server-only code, browser-only code?
|
|
58
|
-
|
|
59
|
-
To be fast, Jopi does not include code analysis and server-side code removal. However, a very useful mechanism compensates for this: whenever the token **jopiBundler_ifServer** is encountered, it is replaced by the token **jopiBundler_ifBrowser**. Thus `import * as myLib from "./jopiBundler_ifServer.ts"` becomes `import * as myLib from "./jopiBundler_ifBrowser.ts"` when Jopi creates the JavaScript for the browser.
|
|
60
|
-
|
|
61
|
-
Besides being performant, this mechanism is easier to use while offering interesting possibilities.
|
|
62
|
-
|
|
63
|
-
Internally, Jopi Rewrite uses a library called **Jopi Toolkit**. This library gathers a set of tools not specific to Jopi Rewrite and usable in independent projects. This library also uses the translation mechanism (jopiBundler_ifServer to jopiBundler_ifBrowser) so that all server code is automatically removed or replaced by a browser-specific part.
|
|
64
25
|
|
|
65
26
|
## Cookbook
|
|
66
27
|
|
|
67
28
|
The documentation is organized as a cookbook: you want to do this, here is how.
|
|
68
29
|
|
|
30
|
+
I do regular update this cookbook with new features.
|
|
31
|
+
You can also visit the YouTube page for video tutorials [link](https://www.youtube.com/@jopijs)
|
|
32
|
+
|
|
33
|
+
> Don't forget to like the videos, it helps a lot !
|
|
34
|
+
> Also give GitHub stars if you like this project !
|
|
35
|
+
|
|
69
36
|
### Basics
|
|
70
37
|
|
|
71
38
|
[Start a new project.](_doc/basic/new_project.md)
|
package/dist/@bundler/index.d.ts
CHANGED
package/dist/@bundler/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/@bundler/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/@bundler/index.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,CAAC"}
|
|
@@ -3,6 +3,7 @@ import type { EsBuildParams } from "./esbuild.ts";
|
|
|
3
3
|
/**
|
|
4
4
|
* This plugin allows replacing some text entries according to rules.
|
|
5
5
|
*/
|
|
6
|
+
export declare function jopiReplaceText__Old(): Plugin;
|
|
6
7
|
export declare function jopiReplaceText(): Plugin;
|
|
7
8
|
export declare function jopiDetectRebuild(params: EsBuildParams): Plugin;
|
|
8
9
|
/**
|
package/dist/@bundler/plugins.js
CHANGED
|
@@ -10,7 +10,7 @@ import { logServer_refresh } from "./_logs.js";
|
|
|
10
10
|
/**
|
|
11
11
|
* This plugin allows replacing some text entries according to rules.
|
|
12
12
|
*/
|
|
13
|
-
export function
|
|
13
|
+
export function jopiReplaceText__Old() {
|
|
14
14
|
async function getExistingSourceMap(filePath, source) {
|
|
15
15
|
const sourceMapCommentMatch = source.match(/\/\/# sourceMappingURL=(.+)$/m);
|
|
16
16
|
if (!sourceMapCommentMatch)
|
|
@@ -33,9 +33,9 @@ export function jopiReplaceText() {
|
|
|
33
33
|
return {
|
|
34
34
|
name: "jopi-replace-text",
|
|
35
35
|
setup(build) {
|
|
36
|
-
build.onLoad({ filter: /\.(tsx|jsx|js)$/ }, async (args) => {
|
|
36
|
+
build.onLoad({ filter: /\.(tsx|jsx|ts|js)$/ }, async (args) => {
|
|
37
37
|
const oldContent = await fs.readFile(args.path, 'utf8');
|
|
38
|
-
let newContent = oldContent.
|
|
38
|
+
let newContent = oldContent.replaceAll("jBundler_ifServer", "jBundler_ifBrowser");
|
|
39
39
|
if (newContent === oldContent)
|
|
40
40
|
return undefined;
|
|
41
41
|
const useSourceMap = !!build.initialOptions.sourcemap;
|
|
@@ -45,7 +45,7 @@ export function jopiReplaceText() {
|
|
|
45
45
|
}
|
|
46
46
|
const existingSourceMap = await getExistingSourceMap(args.path, oldContent);
|
|
47
47
|
const magic = new MagicString(oldContent, { filename: args.path });
|
|
48
|
-
magic.
|
|
48
|
+
magic.replaceAll("jBundler_ifServer", "jBundler_ifBrowser");
|
|
49
49
|
const map = magic.generateMap({
|
|
50
50
|
file: args.path,
|
|
51
51
|
source: path.basename(args.path),
|
|
@@ -90,6 +90,21 @@ export function jopiReplaceText() {
|
|
|
90
90
|
}
|
|
91
91
|
};
|
|
92
92
|
}
|
|
93
|
+
export function jopiReplaceText() {
|
|
94
|
+
return {
|
|
95
|
+
name: "jopi-replace-text",
|
|
96
|
+
setup(build) {
|
|
97
|
+
build.onLoad({ filter: /\.(tsx|jsx|ts|js)$/ }, async (args) => {
|
|
98
|
+
const oldContent = await fs.readFile(args.path, 'utf8');
|
|
99
|
+
let newContent = oldContent.replaceAll("jBundler_ifServer", "jBundler_ifBrowser");
|
|
100
|
+
if (newContent === oldContent)
|
|
101
|
+
return undefined;
|
|
102
|
+
let loader = path.extname(args.path).toLowerCase().substring(1);
|
|
103
|
+
return { contents: newContent, loader: loader };
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
}
|
|
93
108
|
export function jopiDetectRebuild(params) {
|
|
94
109
|
// Allow avoiding behaviors with TypeScript compiler doing some late works.
|
|
95
110
|
//
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugins.js","sourceRoot":"","sources":["../../src/@bundler/plugins.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAC,sBAAsB,EAAC,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,SAAS,MAAM,wBAAwB,CAAC;AAEpD,OAAO,EAAC,qBAAqB,EAAC,MAAM,qBAAqB,CAAC;AAC1D,OAAO,WAAW,MAAM,cAAc,CAAC;AACvC,OAAO,EAAC,iBAAiB,EAAE,kBAAkB,EAAC,MAAM,YAAY,CAAC;AACjE,OAAO,EAAC,iBAAiB,EAAC,MAAM,YAAY,CAAC;AAE7C;;GAEG;AACH,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"plugins.js","sourceRoot":"","sources":["../../src/@bundler/plugins.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { type CreateBundleParams } from "jopijs";
|
|
2
2
|
export declare function applyTailwindProcessor(params: CreateBundleParams): Promise<void>;
|
|
3
|
-
export declare function getGlobalCssFileContent(config: BundlerConfig): Promise<string>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { getGlobalCssFileContent } from "jopijs";
|
|
2
2
|
import * as jk_fs from "jopi-toolkit/jk_fs";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import fs from "node:fs/promises";
|
|
@@ -69,51 +69,4 @@ async function applyPostCss(params, sourceFiles) {
|
|
|
69
69
|
return undefined;
|
|
70
70
|
}
|
|
71
71
|
}
|
|
72
|
-
export async function getGlobalCssFileContent(config) {
|
|
73
|
-
if (config.tailwind.globalCssContent) {
|
|
74
|
-
return config.tailwind.globalCssContent;
|
|
75
|
-
}
|
|
76
|
-
if (config.tailwind.globalCssFilePath) {
|
|
77
|
-
if (!await jk_fs.isFile(config.tailwind.globalCssFilePath)) {
|
|
78
|
-
throw new Error(`Tailwind - File not found where resolving 'global.css': ${config.tailwind.globalCssFilePath}`);
|
|
79
|
-
}
|
|
80
|
-
return jk_fs.readTextFromFile(config.tailwind.globalCssFilePath);
|
|
81
|
-
}
|
|
82
|
-
let found = await getTailwindTemplateFromShadCnConfig();
|
|
83
|
-
if (found)
|
|
84
|
-
return found;
|
|
85
|
-
let rootDir = jk_fs.dirname(jk_app.findPackageJson());
|
|
86
|
-
if (await jk_fs.isFile(jk_fs.join(rootDir, "global.css"))) {
|
|
87
|
-
return jk_fs.readTextFromFile(jk_fs.join(rootDir, "global.css"));
|
|
88
|
-
}
|
|
89
|
-
return `@import "tailwindcss";`;
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Get Tailwind template CSS file from Shadcn config file (components.json).
|
|
93
|
-
* See: https://ui.shadcn.com/docs/components-json
|
|
94
|
-
*/
|
|
95
|
-
async function getTailwindTemplateFromShadCnConfig() {
|
|
96
|
-
const pkgJsonPath = jk_app.findPackageJson();
|
|
97
|
-
if (!pkgJsonPath)
|
|
98
|
-
return undefined;
|
|
99
|
-
let filePath = path.join(path.dirname(pkgJsonPath), "components.json");
|
|
100
|
-
if (!await jk_fs.isFile(filePath))
|
|
101
|
-
return undefined;
|
|
102
|
-
try {
|
|
103
|
-
let asText = jk_fs.readTextFromFileSync(filePath);
|
|
104
|
-
let asJSON = JSON.parse(asText);
|
|
105
|
-
let tailwindConfig = asJSON.tailwind;
|
|
106
|
-
if (!tailwindConfig)
|
|
107
|
-
return undefined;
|
|
108
|
-
let tailwindCssTemplate = tailwindConfig.css;
|
|
109
|
-
if (!tailwindCssTemplate)
|
|
110
|
-
return undefined;
|
|
111
|
-
let fullPath = path.resolve(path.dirname(pkgJsonPath), tailwindCssTemplate);
|
|
112
|
-
return jk_fs.readTextFromFileSync(fullPath);
|
|
113
|
-
}
|
|
114
|
-
catch (e) {
|
|
115
|
-
console.error("Error reading Shadcn config file:", e);
|
|
116
|
-
return undefined;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
72
|
//# sourceMappingURL=tailwind.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tailwind.js","sourceRoot":"","sources":["../../src/@bundler/tailwind.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tailwind.js","sourceRoot":"","sources":["../../src/@bundler/tailwind.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { WebSiteImpl } from "../jopiWebSite.tsx";
|
|
2
2
|
import { type BundlerConfig } from "./config.ts";
|
|
3
3
|
import { type VirtualUrlEntry } from "jopijs/loader-tools";
|
|
4
|
-
import "./pagesGenerator.ts";
|
|
5
4
|
export interface CreateBundleParams {
|
|
6
5
|
singlePageMode: boolean;
|
|
7
6
|
innerUrl: string;
|
|
@@ -16,6 +15,7 @@ export interface CreateBundleParams {
|
|
|
16
15
|
pageRoute?: string;
|
|
17
16
|
pageKey?: string;
|
|
18
17
|
pageScript?: string;
|
|
18
|
+
pageExtraParams: any;
|
|
19
19
|
promise?: Promise<void>;
|
|
20
20
|
}
|
|
21
21
|
export declare function createBundle(webSite: WebSiteImpl): Promise<void>;
|
|
@@ -7,19 +7,16 @@ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExte
|
|
|
7
7
|
return path;
|
|
8
8
|
};
|
|
9
9
|
import { WebSiteImpl } from "../jopiWebSite.js";
|
|
10
|
-
import { serverInitChronos } from "../internalTools.js";
|
|
11
10
|
import * as jk_fs from "jopi-toolkit/jk_fs";
|
|
12
11
|
import * as jk_events from "jopi-toolkit/jk_events";
|
|
13
|
-
import { getBundleDirPath } from "./
|
|
12
|
+
import { getBundleDirPath } from "./config.js";
|
|
14
13
|
import { getBundlerConfig } from "./config.js";
|
|
15
14
|
import { getExtraCssToBundle } from "./extraContent.js";
|
|
16
15
|
import { configureServer } from "./server.js";
|
|
17
16
|
import { getVirtualUrlMap } from "jopijs/loader-tools";
|
|
18
|
-
import "./pagesGenerator.js";
|
|
19
17
|
import { isSinglePageMode } from "jopijs/loader-client";
|
|
20
18
|
import { logBundler } from "../_logs.js";
|
|
21
19
|
export async function createBundle(webSite) {
|
|
22
|
-
serverInitChronos.start("createBrowserBundle", "Time for building browser bundler");
|
|
23
20
|
const genDir = getBundleDirPath(webSite);
|
|
24
21
|
const outputDir = jk_fs.join(genDir, "out");
|
|
25
22
|
// Reset the dir.
|
|
@@ -38,11 +35,11 @@ export async function createBundle(webSite) {
|
|
|
38
35
|
singlePageMode: isSinglePageMode(),
|
|
39
36
|
outputDir, genDir, publicUrl, innerUrl, webSite, requireTailwind,
|
|
40
37
|
config: getBundlerConfig(), entryPoints: [...config.entryPoints],
|
|
41
|
-
virtualUrlMap: getVirtualUrlMap()
|
|
38
|
+
virtualUrlMap: getVirtualUrlMap(),
|
|
39
|
+
pageExtraParams: webSite.getExtraPageParams()
|
|
42
40
|
};
|
|
43
41
|
await executeBundler(gCreateBundleData);
|
|
44
42
|
configureServer(outputDir);
|
|
45
|
-
serverInitChronos.end();
|
|
46
43
|
}
|
|
47
44
|
let gCreateBundleData;
|
|
48
45
|
let gPageBundlerIsOk = {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bundler.js","sourceRoot":"","sources":["../../../src/@core/bundler/bundler.ts"],"names":[],"mappings":";;;;;;;;AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,mBAAoB,CAAC;AAC/C,OAAO,
|
|
1
|
+
{"version":3,"file":"bundler.js","sourceRoot":"","sources":["../../../src/@core/bundler/bundler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Config as TailwindConfig } from 'tailwindcss';
|
|
2
2
|
import postcss from 'postcss';
|
|
3
|
+
import { type WebSite } from "../jopiWebSite.tsx";
|
|
3
4
|
export type PostCssInitializer = (sources: string[], tailwindPlugin: postcss.AcceptedPlugin | undefined) => postcss.AcceptedPlugin[];
|
|
4
5
|
export interface BundlerConfig {
|
|
5
6
|
tailwind: {
|
|
@@ -18,3 +19,5 @@ export interface BundlerConfig {
|
|
|
18
19
|
entryPoints: string[];
|
|
19
20
|
}
|
|
20
21
|
export declare function getBundlerConfig(): BundlerConfig;
|
|
22
|
+
export declare function getBundleDirPath(webSite: WebSite): string;
|
|
23
|
+
export declare function getGlobalCssFileContent(config: BundlerConfig): Promise<string>;
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import postcss from 'postcss';
|
|
2
|
+
import { WebSiteImpl } from "../jopiWebSite.js";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import * as jk_fs from "jopi-toolkit/jk_fs";
|
|
5
|
+
import * as jk_app from "jopi-toolkit/jk_app";
|
|
2
6
|
const gBundlerConfig = {
|
|
3
7
|
tailwind: {},
|
|
4
8
|
postCss: {},
|
|
@@ -8,4 +12,82 @@ const gBundlerConfig = {
|
|
|
8
12
|
export function getBundlerConfig() {
|
|
9
13
|
return gBundlerConfig;
|
|
10
14
|
}
|
|
15
|
+
export function getBundleDirPath(webSite) {
|
|
16
|
+
// To known: the loader uses jopi.webSiteUrl from "package.json".
|
|
17
|
+
// This can create a situation where we have 2 output directories for
|
|
18
|
+
// the same website.
|
|
19
|
+
//
|
|
20
|
+
let webSiteHost = webSite.host.replaceAll(".", "_").replaceAll(":", "_");
|
|
21
|
+
return path.join(gTempDirPath, webSiteHost);
|
|
22
|
+
}
|
|
23
|
+
let gGlobalCssContent;
|
|
24
|
+
export async function getGlobalCssFileContent(config) {
|
|
25
|
+
if (gGlobalCssContent)
|
|
26
|
+
return gGlobalCssContent;
|
|
27
|
+
if (config.tailwind.globalCssContent) {
|
|
28
|
+
return config.tailwind.globalCssContent;
|
|
29
|
+
}
|
|
30
|
+
if (config.tailwind.globalCssFilePath) {
|
|
31
|
+
if (!await jk_fs.isFile(config.tailwind.globalCssFilePath)) {
|
|
32
|
+
throw new Error(`Tailwind - File not found where resolving 'global.css': ${config.tailwind.globalCssFilePath}`);
|
|
33
|
+
}
|
|
34
|
+
return jk_fs.readTextFromFile(config.tailwind.globalCssFilePath);
|
|
35
|
+
}
|
|
36
|
+
let rootDir = jk_fs.dirname(jk_app.findPackageJson());
|
|
37
|
+
let dirItems = await jk_fs.listDir(jk_fs.join(rootDir, "src"));
|
|
38
|
+
let globalCss = `/* Warning: generated file */`;
|
|
39
|
+
let coreGlobalCssPath = jk_fs.join(rootDir, "global.css");
|
|
40
|
+
if (await jk_fs.isFile(coreGlobalCssPath)) {
|
|
41
|
+
let content = await jk_fs.readTextFromFile(coreGlobalCssPath);
|
|
42
|
+
globalCss += "\n\n/* --- Compiled from ./global.css --- */\n\n" + content;
|
|
43
|
+
}
|
|
44
|
+
coreGlobalCssPath = jk_fs.join(rootDir, "src/global.css");
|
|
45
|
+
if (await jk_fs.isFile(coreGlobalCssPath)) {
|
|
46
|
+
let content = await jk_fs.readTextFromFile(coreGlobalCssPath);
|
|
47
|
+
globalCss += "\n\n/* --- Compiled from ./src/global.css --- */\n\n" + content;
|
|
48
|
+
}
|
|
49
|
+
for (let item of dirItems) {
|
|
50
|
+
if (!item.isDirectory)
|
|
51
|
+
continue;
|
|
52
|
+
if (!item.name.startsWith("mod_"))
|
|
53
|
+
continue;
|
|
54
|
+
let globalCssPath = jk_fs.join(item.fullPath, "global.css");
|
|
55
|
+
let content = await jk_fs.readTextFromFile(globalCssPath);
|
|
56
|
+
if (content) {
|
|
57
|
+
content = removeImportDoublon(globalCss, content);
|
|
58
|
+
globalCss += `\n\n/* --- Compiled from ./src/${item.name}/global.css --- */`;
|
|
59
|
+
globalCss += "\n" + content;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
await jk_fs.writeTextToFile(jk_fs.join(rootDir, "global.compiled.css"), globalCss);
|
|
63
|
+
return gGlobalCssContent = globalCss;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Remove '@import' already found into globalCss
|
|
67
|
+
*/
|
|
68
|
+
function removeImportDoublon(globalCss, content) {
|
|
69
|
+
let foundImports = {};
|
|
70
|
+
for (let line of globalCss.split("\n")) {
|
|
71
|
+
let tmp = line.trim();
|
|
72
|
+
if (tmp.startsWith("@import")) {
|
|
73
|
+
foundImports[tmp] = true;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
let lines = [];
|
|
77
|
+
for (let line of content.split("\n")) {
|
|
78
|
+
let tmp = line.trim();
|
|
79
|
+
if (tmp.startsWith("@import")) {
|
|
80
|
+
if (foundImports[tmp])
|
|
81
|
+
continue;
|
|
82
|
+
foundImports[tmp] = true;
|
|
83
|
+
}
|
|
84
|
+
lines.push(line);
|
|
85
|
+
}
|
|
86
|
+
return lines.join("\n");
|
|
87
|
+
}
|
|
88
|
+
// Don't use node_modules because of a bug when using workspaces.
|
|
89
|
+
// This bug is doing that WebStorm doesn't resolve the file to his real location
|
|
90
|
+
// but to the workspace node_modules (and not the project inside the workspace).
|
|
91
|
+
//
|
|
92
|
+
let gTempDirPath = path.resolve(jk_app.getTempDir(), ".reactHydrateCache");
|
|
11
93
|
//# sourceMappingURL=config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/@core/bundler/config.ts"],"names":[],"mappings":"AACA,OAAO,OAAO,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/@core/bundler/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {} from "jopijs/loader-tools";
|
|
2
2
|
import * as jk_events from "jopi-toolkit/jk_events";
|
|
3
3
|
/**
|
|
4
4
|
* Add a CSS file which must be bundled with the page.
|
|
@@ -16,8 +16,6 @@ export function getExtraCssToBundle() {
|
|
|
16
16
|
return gAllCssFiles;
|
|
17
17
|
}
|
|
18
18
|
jk_events.addListener("jopi.virtualUrl.added", (v) => {
|
|
19
|
-
if (!v.url)
|
|
20
|
-
debugger;
|
|
21
19
|
if (v.url && v.url.endsWith(".css") || v.url.endsWith(".scss")) {
|
|
22
20
|
addExtraCssToBundle(v.sourceFile);
|
|
23
21
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extraContent.js","sourceRoot":"","sources":["../../../src/@core/bundler/extraContent.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"extraContent.js","sourceRoot":"","sources":["../../../src/@core/bundler/extraContent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,SAAS,MAAM,wBAAwB,CAAC;AAEpD;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAAmB;IACnD,uBAAuB,GAAG,IAAI,CAAC;IAC/B,IAAI,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC;QAAE,OAAO;IAC/C,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,sBAAsB;IAClC,OAAO,uBAAuB,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,mBAAmB;IAC/B,OAAO,YAAY,CAAC;AACxB,CAAC;AAED,SAAS,CAAC,WAAW,CAAkB,uBAAuB,EAAE,CAAC,CAAC,EAAE,EAAE;IAClE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7D,mBAAmB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IACtC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,uBAAuB,GAAG,KAAK,CAAC;AACpC,MAAM,YAAY,GAAa,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/@core/bundler/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAE5B,OAAO,qBAAqB,CAAC"}
|
|
@@ -3,7 +3,7 @@ import * as jk_fs from "jopi-toolkit/jk_fs";
|
|
|
3
3
|
import * as jk_crypto from "jopi-toolkit/jk_crypto";
|
|
4
4
|
import { getBrowserInstallScript } from "jopijs/linker";
|
|
5
5
|
import { getBrowserRefreshScript, isBrowserRefreshEnabled, isSinglePageMode, isReactHMR } from "jopijs/loader-client";
|
|
6
|
-
import { getGlobalCssFileContent } from "
|
|
6
|
+
import { getGlobalCssFileContent } from "./index.js";
|
|
7
7
|
// *********************************************************************************************************************
|
|
8
8
|
// The goal of this file is to generate the individual pages required for each page found in the root (page.tsx).
|
|
9
9
|
// *********************************************************************************************************************
|
|
@@ -30,13 +30,18 @@ jk_events.addListener("@jopi.bundler.beforeCreateBundle", rebuildPages);
|
|
|
30
30
|
jk_events.addListener("@jopi.bundler.beforeCreateBundleForPage", rebuildPages);
|
|
31
31
|
async function rebuildPages(p) {
|
|
32
32
|
async function buildPage(sourceFilePath, route, pageKey) {
|
|
33
|
+
function convertPath(filePath) {
|
|
34
|
+
let relPath = jk_fs.getRelativePath(p.genDir, filePath);
|
|
35
|
+
return jk_fs.win32ToLinuxPath(relPath);
|
|
36
|
+
}
|
|
33
37
|
// Here we save the name without extension.
|
|
34
38
|
gRouteToPageKey[route] = pageKey;
|
|
35
39
|
let txt = REACT_TEMPLATE;
|
|
36
|
-
txt = txt.replace("__PATH__", sourceFilePath);
|
|
37
|
-
txt = txt.replace("__INSTALL__", installScript);
|
|
40
|
+
txt = txt.replace("__PATH__", convertPath(sourceFilePath));
|
|
41
|
+
txt = txt.replace("__INSTALL__", convertPath(installScript));
|
|
38
42
|
txt = txt.replace("__ROUTE__", JSON.stringify(route));
|
|
39
|
-
txt = txt.replace("__OPTIONS__", JSON.stringify({
|
|
43
|
+
txt = txt.replace("__OPTIONS__", JSON.stringify({ removeTrailingSlashes: p.webSite.mustRemoveTrailingSlashes }));
|
|
44
|
+
txt = txt.replace("__PAGE_EXTRA_PARAMS__", JSON.stringify(p.pageExtraParams));
|
|
40
45
|
if (isReactHMR()) {
|
|
41
46
|
// Bun.js use his own SSE events.
|
|
42
47
|
txt = txt.replace("__SSE_EVENTS__", "");
|
|
@@ -121,7 +126,7 @@ __EXTRA_IMPORTS__
|
|
|
121
126
|
window["__JOPI_ROUTE__"] = __ROUTE__;
|
|
122
127
|
window["__JOPI_OPTIONS__"] = __OPTIONS__;
|
|
123
128
|
|
|
124
|
-
installer(new UiKitModule());
|
|
129
|
+
installer(new UiKitModule(undefined, __PAGE_EXTRA_PARAMS__));
|
|
125
130
|
|
|
126
131
|
function Render(p) {
|
|
127
132
|
const [_, setCount] = React.useState(0);
|
|
@@ -130,19 +135,37 @@ function Render(p) {
|
|
|
130
135
|
}
|
|
131
136
|
|
|
132
137
|
function start() {
|
|
133
|
-
const container = document.body;
|
|
134
|
-
const root = ReactDOM.createRoot(container);
|
|
135
138
|
const params = useParams();
|
|
136
|
-
|
|
139
|
+
|
|
140
|
+
let searchParams;
|
|
141
|
+
const coreSearchParams = new URL(window.location).searchParams;
|
|
142
|
+
|
|
143
|
+
if (coreSearchParams.toJSON) {
|
|
144
|
+
searchParams = coreSearchParams.toJSON();
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
searchParams = {};
|
|
148
|
+
coreSearchParams.forEach((v,k) => searchParams[k] = v);
|
|
149
|
+
}
|
|
150
|
+
|
|
137
151
|
const controller = new PageController_ExposePrivate();
|
|
138
152
|
|
|
139
|
-
|
|
153
|
+
const app = (
|
|
140
154
|
<React.StrictMode>
|
|
141
155
|
<PageContext.Provider value={controller}>
|
|
142
156
|
<Render controller={controller} params={params} searchParams={searchParams} />
|
|
143
157
|
</PageContext.Provider>
|
|
144
158
|
</React.StrictMode>
|
|
145
159
|
);
|
|
160
|
+
|
|
161
|
+
const container = document.body;
|
|
162
|
+
|
|
163
|
+
if (import.meta.hot) {
|
|
164
|
+
const root = (import.meta.hot.data.root ??= ReactDOM.createRoot(container));
|
|
165
|
+
root.render(app);
|
|
166
|
+
} else {
|
|
167
|
+
ReactDOM.createRoot(container).render(app);
|
|
168
|
+
}
|
|
146
169
|
}
|
|
147
170
|
|
|
148
171
|
__SSE_EVENTS__
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pagesGenerator.js","sourceRoot":"","sources":["../../../src/@core/bundler/pagesGenerator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,wBAAwB,CAAC;AACpD,OAAO,KAAK,KAAK,MAAM,oBAAoB,CAAC;AAC5C,OAAO,KAAK,SAAS,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAC,uBAAuB,EAAC,MAAM,eAAe,CAAC;AACtD,OAAO,EAAC,uBAAuB,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,UAAU,EAAC,MAAM,sBAAsB,CAAC;AACpH,OAAO,EAAC,uBAAuB,EAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"pagesGenerator.js","sourceRoot":"","sources":["../../../src/@core/bundler/pagesGenerator.ts"],"names":[],"mappings":"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"}
|