jac-client 0.2.3__py3-none-any.whl → 0.2.8__py3-none-any.whl

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 (224) hide show
  1. jac_client/examples/all-in-one/app.jac +494 -347
  2. jac_client/examples/all-in-one/assets/workers/worker.py +5 -0
  3. jac_client/examples/all-in-one/button.jac +1 -1
  4. jac_client/examples/all-in-one/components/CategoryFilter.jac +35 -0
  5. jac_client/examples/all-in-one/components/Header.jac +13 -0
  6. jac_client/examples/all-in-one/components/ProfitOverview.jac +50 -0
  7. jac_client/examples/all-in-one/components/Summary.jac +53 -0
  8. jac_client/examples/all-in-one/components/TransactionForm.jac +158 -0
  9. jac_client/examples/all-in-one/components/TransactionItem.jac +55 -0
  10. jac_client/examples/all-in-one/components/TransactionList.jac +37 -0
  11. jac_client/examples/all-in-one/components/button.jac +1 -1
  12. jac_client/examples/all-in-one/components/navigation.jac +132 -0
  13. jac_client/examples/all-in-one/constants/categories.jac +37 -0
  14. jac_client/examples/all-in-one/constants/clients.jac +13 -0
  15. jac_client/examples/all-in-one/context/BudgetContext.jac +28 -0
  16. jac_client/examples/all-in-one/hooks/useBudget.jac +116 -0
  17. jac_client/examples/all-in-one/hooks/useLocalStorage.jac +36 -0
  18. jac_client/examples/all-in-one/pages/BudgetPlanner.cl.jac +70 -0
  19. jac_client/examples/all-in-one/pages/BudgetPlanner.jac +126 -0
  20. jac_client/examples/all-in-one/pages/FeaturesTest.cl.jac +552 -0
  21. jac_client/examples/all-in-one/pages/FeaturesTest.jac +126 -0
  22. jac_client/examples/all-in-one/pages/LandingPage.jac +101 -0
  23. jac_client/examples/all-in-one/pages/loginPage.jac +132 -0
  24. jac_client/examples/all-in-one/pages/nestedDemo.jac +61 -0
  25. jac_client/examples/all-in-one/pages/notFound.jac +24 -0
  26. jac_client/examples/all-in-one/pages/signupPage.jac +133 -0
  27. jac_client/examples/all-in-one/utils/formatters.jac +52 -0
  28. jac_client/examples/asset-serving/css-with-image/{app.jac → src/app.jac} +4 -4
  29. jac_client/examples/asset-serving/image-asset/{app.jac → src/app.jac} +4 -4
  30. jac_client/examples/asset-serving/import-alias/{app.jac → src/app.jac} +5 -5
  31. jac_client/examples/basic/{app.jac → src/app.jac} +4 -4
  32. jac_client/examples/basic-auth/src/app.jac +371 -0
  33. jac_client/examples/basic-auth-with-router/{app.jac → src/app.jac} +28 -28
  34. jac_client/examples/basic-full-stack/{app.jac → src/app.jac} +166 -127
  35. jac_client/examples/css-styling/js-styling/{app.jac → src/app.jac} +7 -7
  36. jac_client/examples/css-styling/material-ui/{app.jac → src/app.jac} +6 -6
  37. jac_client/examples/css-styling/pure-css/{app.jac → src/app.jac} +7 -7
  38. jac_client/examples/css-styling/sass-example/{app.jac → src/app.jac} +7 -7
  39. jac_client/examples/css-styling/styled-components/{app.jac → src/app.jac} +6 -6
  40. jac_client/examples/css-styling/tailwind-example/{app.jac → src/app.jac} +7 -7
  41. jac_client/examples/full-stack-with-auth/{app.jac → src/app.jac} +47 -47
  42. jac_client/examples/little-x/{app.jac → src/app.jac} +27 -32
  43. jac_client/examples/little-x/src/submit-button.jac +16 -0
  44. jac_client/examples/nested-folders/nested-advance/{ButtonRoot.jac → src/ButtonRoot.jac} +1 -1
  45. jac_client/examples/nested-folders/nested-advance/{app.jac → src/app.jac} +1 -1
  46. jac_client/examples/nested-folders/nested-advance/{level1 → src/level1}/ButtonSecondL.jac +1 -1
  47. jac_client/examples/nested-folders/nested-advance/{level1 → src/level1}/Card.jac +1 -1
  48. jac_client/examples/nested-folders/nested-advance/{level1 → src/level1}/level2/ButtonThirdL.jac +1 -1
  49. jac_client/examples/nested-folders/nested-basic/{app.jac → src/app.jac} +2 -2
  50. jac_client/examples/nested-folders/nested-basic/{button.jac → src/button.jac} +1 -1
  51. jac_client/examples/nested-folders/nested-basic/{components → src/components}/button.jac +1 -1
  52. jac_client/examples/ts-support/src/app.jac +35 -0
  53. jac_client/examples/with-router/{app.jac → src/app.jac} +15 -15
  54. jac_client/plugin/cli.jac +504 -0
  55. jac_client/plugin/client.jac +45 -0
  56. jac_client/plugin/client_runtime.cl.jac +42 -0
  57. jac_client/plugin/impl/client.impl.jac +193 -0
  58. jac_client/plugin/impl/client_runtime.impl.jac +195 -0
  59. jac_client/plugin/impl/vite_client_bundle.impl.jac +72 -0
  60. jac_client/plugin/plugin_config.jac +195 -0
  61. jac_client/plugin/src/__init__.jac +20 -0
  62. jac_client/plugin/src/asset_processor.jac +33 -0
  63. jac_client/plugin/src/babel_processor.jac +18 -0
  64. jac_client/plugin/src/compiler.jac +67 -0
  65. jac_client/plugin/src/config_loader.jac +32 -0
  66. jac_client/plugin/src/impl/asset_processor.impl.jac +127 -0
  67. jac_client/plugin/src/impl/babel_processor.impl.jac +89 -0
  68. jac_client/plugin/src/impl/compiler.impl.jac +288 -0
  69. jac_client/plugin/src/impl/config_loader.impl.jac +119 -0
  70. jac_client/plugin/src/impl/import_processor.impl.jac +33 -0
  71. jac_client/plugin/src/impl/jac_to_js.impl.jac +41 -0
  72. jac_client/plugin/src/impl/package_installer.impl.jac +105 -0
  73. jac_client/plugin/src/impl/vite_bundler.impl.jac +626 -0
  74. jac_client/plugin/src/import_processor.jac +19 -0
  75. jac_client/plugin/src/jac_to_js.jac +35 -0
  76. jac_client/plugin/src/package_installer.jac +26 -0
  77. jac_client/plugin/src/vite_bundler.jac +44 -0
  78. jac_client/plugin/vite_client_bundle.jac +31 -0
  79. jac_client/tests/conftest.py +283 -0
  80. jac_client/tests/fixtures/basic-app/app.jac +2 -2
  81. jac_client/tests/fixtures/cl_file/app.cl.jac +2 -2
  82. jac_client/tests/fixtures/client_app_with_antd/app.jac +1 -1
  83. jac_client/tests/fixtures/js_import/app.jac +5 -5
  84. jac_client/tests/fixtures/spawn_test/app.jac +15 -18
  85. jac_client/tests/fixtures/with-ts/app.jac +35 -0
  86. jac_client/tests/test_cli.py +811 -0
  87. jac_client/tests/test_it.py +592 -97
  88. {jac_client-0.2.3.dist-info → jac_client-0.2.8.dist-info}/METADATA +41 -34
  89. jac_client-0.2.8.dist-info/RECORD +97 -0
  90. {jac_client-0.2.3.dist-info → jac_client-0.2.8.dist-info}/WHEEL +2 -1
  91. jac_client-0.2.8.dist-info/entry_points.txt +4 -0
  92. jac_client-0.2.8.dist-info/top_level.txt +1 -0
  93. jac_client/docs/README.md +0 -689
  94. jac_client/docs/advanced-state.md +0 -1265
  95. jac_client/docs/asset-serving/intro.md +0 -209
  96. jac_client/docs/assets/pipe_line-v2.svg +0 -32
  97. jac_client/docs/assets/pipe_line.png +0 -0
  98. jac_client/docs/file-system/app.jac.md +0 -121
  99. jac_client/docs/file-system/backend-frontend.md +0 -217
  100. jac_client/docs/file-system/intro.md +0 -72
  101. jac_client/docs/file-system/nested-imports.md +0 -348
  102. jac_client/docs/guide-example/intro.md +0 -115
  103. jac_client/docs/guide-example/step-01-setup.md +0 -270
  104. jac_client/docs/guide-example/step-02-components.md +0 -416
  105. jac_client/docs/guide-example/step-03-styling.md +0 -478
  106. jac_client/docs/guide-example/step-04-todo-ui.md +0 -477
  107. jac_client/docs/guide-example/step-05-local-state.md +0 -530
  108. jac_client/docs/guide-example/step-06-events.md +0 -749
  109. jac_client/docs/guide-example/step-07-effects.md +0 -468
  110. jac_client/docs/guide-example/step-08-walkers.md +0 -534
  111. jac_client/docs/guide-example/step-09-authentication.md +0 -586
  112. jac_client/docs/guide-example/step-10-routing.md +0 -539
  113. jac_client/docs/guide-example/step-11-final.md +0 -963
  114. jac_client/docs/imports.md +0 -1141
  115. jac_client/docs/lifecycle-hooks.md +0 -773
  116. jac_client/docs/routing.md +0 -659
  117. jac_client/docs/styling/intro.md +0 -249
  118. jac_client/docs/styling/js-styling.md +0 -367
  119. jac_client/docs/styling/material-ui.md +0 -341
  120. jac_client/docs/styling/pure-css.md +0 -299
  121. jac_client/docs/styling/sass.md +0 -403
  122. jac_client/docs/styling/styled-components.md +0 -395
  123. jac_client/docs/styling/tailwind.md +0 -298
  124. jac_client/examples/all-in-one/.babelrc +0 -9
  125. jac_client/examples/all-in-one/README.md +0 -16
  126. jac_client/examples/all-in-one/assets/burger.png +0 -0
  127. jac_client/examples/all-in-one/package.json +0 -29
  128. jac_client/examples/all-in-one/styles.css +0 -26
  129. jac_client/examples/all-in-one/vite.config.js +0 -28
  130. jac_client/examples/asset-serving/css-with-image/.babelrc +0 -9
  131. jac_client/examples/asset-serving/css-with-image/README.md +0 -91
  132. jac_client/examples/asset-serving/css-with-image/assets/burger.png +0 -0
  133. jac_client/examples/asset-serving/css-with-image/package.json +0 -28
  134. jac_client/examples/asset-serving/css-with-image/styles.css +0 -26
  135. jac_client/examples/asset-serving/css-with-image/vite.config.js +0 -28
  136. jac_client/examples/asset-serving/image-asset/.babelrc +0 -9
  137. jac_client/examples/asset-serving/image-asset/README.md +0 -119
  138. jac_client/examples/asset-serving/image-asset/assets/burger.png +0 -0
  139. jac_client/examples/asset-serving/image-asset/package.json +0 -28
  140. jac_client/examples/asset-serving/image-asset/styles.css +0 -26
  141. jac_client/examples/asset-serving/image-asset/vite.config.js +0 -28
  142. jac_client/examples/asset-serving/import-alias/.babelrc +0 -9
  143. jac_client/examples/asset-serving/import-alias/README.md +0 -83
  144. jac_client/examples/asset-serving/import-alias/assets/burger.png +0 -0
  145. jac_client/examples/asset-serving/import-alias/package.json +0 -28
  146. jac_client/examples/asset-serving/import-alias/vite.config.js +0 -28
  147. jac_client/examples/basic/.babelrc +0 -9
  148. jac_client/examples/basic/README.md +0 -16
  149. jac_client/examples/basic/package.json +0 -27
  150. jac_client/examples/basic/vite.config.js +0 -27
  151. jac_client/examples/basic-auth/.babelrc +0 -9
  152. jac_client/examples/basic-auth/README.md +0 -16
  153. jac_client/examples/basic-auth/app.jac +0 -308
  154. jac_client/examples/basic-auth/package.json +0 -27
  155. jac_client/examples/basic-auth/vite.config.js +0 -27
  156. jac_client/examples/basic-auth-with-router/.babelrc +0 -9
  157. jac_client/examples/basic-auth-with-router/README.md +0 -60
  158. jac_client/examples/basic-auth-with-router/package.json +0 -28
  159. jac_client/examples/basic-auth-with-router/vite.config.js +0 -27
  160. jac_client/examples/basic-full-stack/.babelrc +0 -9
  161. jac_client/examples/basic-full-stack/README.md +0 -18
  162. jac_client/examples/basic-full-stack/package.json +0 -28
  163. jac_client/examples/basic-full-stack/vite.config.js +0 -27
  164. jac_client/examples/css-styling/js-styling/.babelrc +0 -9
  165. jac_client/examples/css-styling/js-styling/README.md +0 -183
  166. jac_client/examples/css-styling/js-styling/package.json +0 -28
  167. jac_client/examples/css-styling/js-styling/styles.js +0 -100
  168. jac_client/examples/css-styling/js-styling/vite.config.js +0 -27
  169. jac_client/examples/css-styling/material-ui/.babelrc +0 -9
  170. jac_client/examples/css-styling/material-ui/README.md +0 -16
  171. jac_client/examples/css-styling/material-ui/package.json +0 -32
  172. jac_client/examples/css-styling/material-ui/vite.config.js +0 -27
  173. jac_client/examples/css-styling/pure-css/.babelrc +0 -9
  174. jac_client/examples/css-styling/pure-css/README.md +0 -16
  175. jac_client/examples/css-styling/pure-css/package.json +0 -28
  176. jac_client/examples/css-styling/pure-css/styles.css +0 -111
  177. jac_client/examples/css-styling/pure-css/vite.config.js +0 -27
  178. jac_client/examples/css-styling/sass-example/.babelrc +0 -9
  179. jac_client/examples/css-styling/sass-example/README.md +0 -16
  180. jac_client/examples/css-styling/sass-example/package.json +0 -29
  181. jac_client/examples/css-styling/sass-example/styles.scss +0 -153
  182. jac_client/examples/css-styling/sass-example/vite.config.js +0 -27
  183. jac_client/examples/css-styling/styled-components/.babelrc +0 -9
  184. jac_client/examples/css-styling/styled-components/README.md +0 -16
  185. jac_client/examples/css-styling/styled-components/package.json +0 -29
  186. jac_client/examples/css-styling/styled-components/styled.js +0 -90
  187. jac_client/examples/css-styling/styled-components/vite.config.js +0 -27
  188. jac_client/examples/css-styling/tailwind-example/.babelrc +0 -9
  189. jac_client/examples/css-styling/tailwind-example/README.md +0 -16
  190. jac_client/examples/css-styling/tailwind-example/global.css +0 -1
  191. jac_client/examples/css-styling/tailwind-example/package.json +0 -30
  192. jac_client/examples/css-styling/tailwind-example/vite.config.js +0 -29
  193. jac_client/examples/full-stack-with-auth/.babelrc +0 -9
  194. jac_client/examples/full-stack-with-auth/README.md +0 -16
  195. jac_client/examples/full-stack-with-auth/package.json +0 -28
  196. jac_client/examples/full-stack-with-auth/vite.config.js +0 -29
  197. jac_client/examples/little-x/package.json +0 -23
  198. jac_client/examples/little-x/submit-button.jac +0 -8
  199. jac_client/examples/nested-folders/nested-advance/.babelrc +0 -9
  200. jac_client/examples/nested-folders/nested-advance/README.md +0 -77
  201. jac_client/examples/nested-folders/nested-advance/package.json +0 -29
  202. jac_client/examples/nested-folders/nested-advance/vite.config.js +0 -28
  203. jac_client/examples/nested-folders/nested-basic/.babelrc +0 -9
  204. jac_client/examples/nested-folders/nested-basic/README.md +0 -183
  205. jac_client/examples/nested-folders/nested-basic/app.js +0 -7
  206. jac_client/examples/nested-folders/nested-basic/package.json +0 -28
  207. jac_client/examples/nested-folders/nested-basic/vite.config.js +0 -27
  208. jac_client/examples/with-router/.babelrc +0 -9
  209. jac_client/examples/with-router/README.md +0 -17
  210. jac_client/examples/with-router/package.json +0 -28
  211. jac_client/examples/with-router/vite.config.js +0 -27
  212. jac_client/plugin/cli.py +0 -244
  213. jac_client/plugin/client.py +0 -152
  214. jac_client/plugin/client_runtime.jac +0 -234
  215. jac_client/plugin/vite_client_bundle.py +0 -503
  216. jac_client/tests/fixtures/js_import/utils.js +0 -21
  217. jac_client/tests/fixtures/package-lock.json +0 -329
  218. jac_client/tests/fixtures/package.json +0 -11
  219. jac_client/tests/test_asset_examples.py +0 -322
  220. jac_client/tests/test_cl.py +0 -530
  221. jac_client/tests/test_create_jac_app.py +0 -131
  222. jac_client/tests/test_nested_file.py +0 -374
  223. jac_client-0.2.3.dist-info/RECORD +0 -171
  224. jac_client-0.2.3.dist-info/entry_points.txt +0 -4
@@ -1,29 +0,0 @@
1
- {
2
- "name": "all-in-one",
3
- "version": "1.0.0",
4
- "main": "index.js",
5
- "scripts": {
6
- "build": "npm run compile && vite build",
7
- "dev": "vite dev",
8
- "preview": "vite preview",
9
- "compile": "babel src --out-dir build --extensions \".jsx,.js\" --out-file-extension .js"
10
- },
11
- "keywords": [],
12
- "author": "",
13
- "license": "ISC",
14
- "description": "Jac application: all-in-one",
15
- "type": "module",
16
- "devDependencies": {
17
- "@babel/cli": "^7.28.3",
18
- "@babel/core": "^7.28.5",
19
- "@babel/preset-env": "^7.28.5",
20
- "@babel/preset-react": "^7.28.5",
21
- "vite": "^6.4.1"
22
- },
23
- "dependencies": {
24
- "antd": "^6.0.0",
25
- "react": "^19.2.0",
26
- "react-dom": "^19.2.0",
27
- "react-router-dom": "^6.30.1"
28
- }
29
- }
@@ -1,26 +0,0 @@
1
- .container {
2
- background-image: url('/static/assets/burger.png');
3
- background-size: cover;
4
- background-position: center;
5
- min-height: 300px;
6
- border-radius: 10px;
7
- padding: 20px;
8
- margin: 20px 0;
9
- }
10
-
11
- .card {
12
- background: white;
13
- border-radius: 10px;
14
- padding: 20px;
15
- box-shadow: 0 4px 8px rgba(0,0,0,0.2);
16
- max-width: 400px;
17
- margin: 20px auto;
18
- }
19
-
20
- .burgerImage {
21
- width: 200px;
22
- height: auto;
23
- border-radius: 10px;
24
- display: block;
25
- margin: 0 auto;
26
- }
@@ -1,28 +0,0 @@
1
-
2
- import { defineConfig } from "vite";
3
- import path from "path";
4
- import { fileURLToPath } from "url";
5
-
6
- const __dirname = path.dirname(fileURLToPath(import.meta.url));
7
-
8
- export default defineConfig({
9
- root: ".", // base folder
10
- build: {
11
- rollupOptions: {
12
- input: "build/main.js", // your compiled entry file
13
- output: {
14
- entryFileNames: "client.[hash].js", // name of the final js file
15
- assetFileNames: "[name].[ext]",
16
- },
17
- },
18
- outDir: "dist", // final bundled output
19
- emptyOutDir: true,
20
- },
21
- publicDir: false,
22
- resolve: {
23
- alias: {
24
- "@jac-client/utils": path.resolve(__dirname, "src/client_runtime.js"),
25
- "@jac-client/assets": path.resolve(__dirname, "src/assets"),
26
- },
27
- },
28
- });
@@ -1,9 +0,0 @@
1
-
2
- {
3
- "presets": [[
4
- "@babel/preset-env",
5
- {
6
- "modules": false
7
- }
8
- ], "@babel/preset-react"]
9
- }
@@ -1,91 +0,0 @@
1
- # Relative Imports Example
2
-
3
- This example demonstrates how to import static assets using relative path imports.
4
-
5
- ## Features
6
-
7
- - Imports image using relative path (`./assets/burger.png`)
8
- - Component-scoped asset organization
9
- - Vite processes and optimizes the asset
10
- - Familiar import syntax
11
-
12
- ## Project Structure
13
-
14
- ```
15
- relative-imports/
16
- ├── app.jac # Main application file
17
- ├── assets/ # Static assets directory
18
- │ └── burger.png # Burger image
19
- ├── src/ # Source files (generated)
20
- ├── build/ # Build output (generated)
21
- └── dist/ # Distribution output (generated)
22
- ```
23
-
24
- ## Running the Example
25
-
26
- 1. Make sure node modules are installed:
27
- ```bash
28
- npm install
29
- ```
30
-
31
- 2. Run the Jac server:
32
- ```bash
33
- jac serve app.jac
34
- ```
35
-
36
- 3. Open your browser and navigate to:
37
- ```
38
- http://localhost:8000/page/app
39
- ```
40
-
41
- ## How It Works
42
-
43
- ### Import Syntax
44
-
45
- ```jac
46
- cl import from "./assets/burger.png" { default as burgerImage }
47
- <img src={burgerImage} />
48
- ```
49
-
50
- ### Path Resolution
51
-
52
- - Relative paths are resolved from the current file location
53
- - `./assets/burger.png` resolves relative to `app.jac`
54
- - Vite processes the import during build
55
- - Assets are optimized and bundled
56
-
57
- ### Use Cases
58
-
59
- **Component-Scoped Assets:**
60
- ```jac
61
- # In a component file
62
- cl import from "./images/icon.svg" { default as icon }
63
- ```
64
-
65
- **Parent Directory Assets:**
66
- ```jac
67
- # Access assets from parent directory
68
- cl import from "../shared/assets/logo.png" { default as logo }
69
- ```
70
-
71
- **Nested Assets:**
72
- ```jac
73
- # Assets in subdirectories
74
- cl import from "./assets/images/hero.jpg" { default as hero }
75
- ```
76
-
77
- ### Benefits
78
-
79
- - **Familiar Syntax**: Standard relative import pattern
80
- - **Component Organization**: Assets organized by component/feature
81
- - **Flexibility**: Easy to reorganize without changing alias config
82
- - **Modular**: Works well with component-based architecture
83
-
84
- ## Best Practices
85
-
86
- 1. Use relative imports for component-specific assets
87
- 2. Organize assets near the components that use them
88
- 3. Keep relative paths simple and clear
89
- 4. Use consistent naming conventions
90
-
91
- Happy coding with Jac! 🍔
@@ -1,28 +0,0 @@
1
- {
2
- "name": "relative-imports",
3
- "version": "1.0.0",
4
- "main": "index.js",
5
- "scripts": {
6
- "build": "npm run compile && vite build",
7
- "dev": "vite dev",
8
- "preview": "vite preview",
9
- "compile": "babel src --out-dir build --extensions \".jsx,.js\" --out-file-extension .js"
10
- },
11
- "keywords": [],
12
- "author": "",
13
- "license": "ISC",
14
- "description": "Jac application: relative-imports",
15
- "type": "module",
16
- "devDependencies": {
17
- "vite": "^6.4.1",
18
- "@babel/cli": "^7.28.3",
19
- "@babel/core": "^7.28.5",
20
- "@babel/preset-env": "^7.28.5",
21
- "@babel/preset-react": "^7.28.5"
22
- },
23
- "dependencies": {
24
- "react": "^19.2.0",
25
- "react-dom": "^19.2.0",
26
- "react-router-dom": "^6.30.1"
27
- }
28
- }
@@ -1,26 +0,0 @@
1
- .container {
2
- background-image: url('/static/assets/burger.png');
3
- background-size: cover;
4
- background-position: center;
5
- min-height: 300px;
6
- border-radius: 10px;
7
- padding: 20px;
8
- margin: 20px 0;
9
- }
10
-
11
- .card {
12
- background: white;
13
- border-radius: 10px;
14
- padding: 20px;
15
- box-shadow: 0 4px 8px rgba(0,0,0,0.2);
16
- max-width: 400px;
17
- margin: 20px auto;
18
- }
19
-
20
- .burgerImage {
21
- width: 200px;
22
- height: auto;
23
- border-radius: 10px;
24
- display: block;
25
- margin: 0 auto;
26
- }
@@ -1,28 +0,0 @@
1
-
2
- import { defineConfig } from "vite";
3
- import path from "path";
4
- import { fileURLToPath } from "url";
5
-
6
- const __dirname = path.dirname(fileURLToPath(import.meta.url));
7
-
8
- export default defineConfig({
9
- root: ".", // base folder
10
- build: {
11
- rollupOptions: {
12
- input: "build/main.js", // your compiled entry file
13
- output: {
14
- entryFileNames: "client.[hash].js", // name of the final js file
15
- assetFileNames: "[name].[ext]",
16
- },
17
- },
18
- outDir: "dist", // final bundled output
19
- emptyOutDir: true,
20
- },
21
- publicDir: false,
22
- resolve: {
23
- alias: {
24
- "@jac-client/utils": path.resolve(__dirname, "src/client_runtime.js"),
25
- "@jac-client/assets": path.resolve(__dirname, "src/assets"),
26
- },
27
- },
28
- });
@@ -1,9 +0,0 @@
1
-
2
- {
3
- "presets": [[
4
- "@babel/preset-env",
5
- {
6
- "modules": false
7
- }
8
- ], "@babel/preset-react"]
9
- }
@@ -1,119 +0,0 @@
1
- # Static Path Example
2
-
3
- This example demonstrates how to serve static assets using direct `/static/` path references.
4
-
5
- ## Features
6
-
7
- - Direct path references using `/static/assets/` URLs
8
- - Simple and straightforward approach
9
- - No build configuration required
10
- - Works immediately without imports
11
-
12
- ## Project Structure
13
-
14
- ```
15
- image-asset/
16
- ├── app.jac # Main application file
17
- ├── assets/ # Static assets directory
18
- │ └── burger.png # Burger image
19
- ├── src/ # Source files (generated)
20
- ├── build/ # Build output (generated)
21
- └── dist/ # Distribution output (generated)
22
- ```
23
-
24
- ## Running the Example
25
-
26
- 1. Make sure node modules are installed:
27
- ```bash
28
- npm install
29
- ```
30
-
31
- 2. Run the Jac server:
32
- ```bash
33
- jac serve app.jac
34
- ```
35
-
36
- 3. Open your browser and navigate to:
37
- ```
38
- http://localhost:8000/page/app
39
- ```
40
-
41
- ## How It Works
42
-
43
- ### Static Path Syntax
44
-
45
- ```jac
46
- <img src="/static/assets/burger.png" alt="Burger" />
47
- ```
48
-
49
- ### Server Configuration
50
-
51
- The server automatically serves files from:
52
- - `dist/` directory (Vite-bundled assets)
53
- - `assets/` directory (user-provided static assets)
54
-
55
- Both directories are checked when serving `/static/*` requests.
56
-
57
- ### Path Resolution
58
-
59
- 1. Request: `/static/assets/burger.png`
60
- 2. Server checks `dist/assets/burger.png` first
61
- 3. If not found, checks `assets/burger.png`
62
- 4. Serves file with appropriate MIME type
63
- 5. Sets cache headers for optimal performance
64
-
65
- ### Benefits
66
-
67
- - **Simplicity**: No imports or build configuration needed
68
- - **Immediate**: Works right away without build step
69
- - **Flexible**: Easy to reference assets from anywhere
70
- - **Quick Prototyping**: Perfect for rapid development
71
-
72
- ### Use Cases
73
-
74
- **Direct Image References:**
75
- ```jac
76
- <img src="/static/assets/logo.png" alt="Logo" />
77
- ```
78
-
79
- **CSS Background Images:**
80
- ```jac
81
- <div style={{backgroundImage: "url('/static/assets/hero.jpg')"}} />
82
- ```
83
-
84
- **Dynamic Asset Paths:**
85
- ```jac
86
- let imagePath = `/static/assets/${imageName}.png`;
87
- <img src={imagePath} />
88
- ```
89
-
90
- ## Best Practices
91
-
92
- 1. Use this method for quick prototypes
93
- 2. Organize assets in the `assets/` folder
94
- 3. Use descriptive file names
95
- 4. Keep assets reasonably sized
96
- 5. Consider using imports for production apps
97
-
98
- ## Limitations
99
-
100
- - No automatic optimization
101
- - No hash-based cache busting
102
- - Manual cache control required
103
- - No type safety for asset paths
104
-
105
- ## When to Use
106
-
107
- **Choose Static Path if:**
108
- - Building a quick prototype
109
- - Assets don't need optimization
110
- - Want immediate results
111
- - Working with simple, small assets
112
-
113
- **Consider Import Methods if:**
114
- - Building for production
115
- - Need automatic optimization
116
- - Want cache busting
117
- - Prefer type-safe references
118
-
119
- Happy coding with Jac! 🍔
@@ -1,28 +0,0 @@
1
- {
2
- "name": "image-asset",
3
- "version": "1.0.0",
4
- "main": "index.js",
5
- "scripts": {
6
- "build": "npm run compile && vite build",
7
- "dev": "vite dev",
8
- "preview": "vite preview",
9
- "compile": "babel src --out-dir build --extensions \".jsx,.js\" --out-file-extension .js"
10
- },
11
- "keywords": [],
12
- "author": "",
13
- "license": "ISC",
14
- "description": "Jac application: image-asset",
15
- "type": "module",
16
- "devDependencies": {
17
- "vite": "^6.4.1",
18
- "@babel/cli": "^7.28.3",
19
- "@babel/core": "^7.28.5",
20
- "@babel/preset-env": "^7.28.5",
21
- "@babel/preset-react": "^7.28.5"
22
- },
23
- "dependencies": {
24
- "react": "^19.2.0",
25
- "react-dom": "^19.2.0",
26
- "react-router-dom": "^6.30.1"
27
- }
28
- }
@@ -1,26 +0,0 @@
1
- .container {
2
- background-image: url('/static/assets/burger.png');
3
- background-size: cover;
4
- background-position: center;
5
- min-height: 300px;
6
- border-radius: 10px;
7
- padding: 20px;
8
- margin: 20px 0;
9
- }
10
-
11
- .card {
12
- background: white;
13
- border-radius: 10px;
14
- padding: 20px;
15
- box-shadow: 0 4px 8px rgba(0,0,0,0.2);
16
- max-width: 400px;
17
- margin: 20px auto;
18
- }
19
-
20
- .burgerImage {
21
- width: 200px;
22
- height: auto;
23
- border-radius: 10px;
24
- display: block;
25
- margin: 0 auto;
26
- }
@@ -1,28 +0,0 @@
1
-
2
- import { defineConfig } from "vite";
3
- import path from "path";
4
- import { fileURLToPath } from "url";
5
-
6
- const __dirname = path.dirname(fileURLToPath(import.meta.url));
7
-
8
- export default defineConfig({
9
- root: ".", // base folder
10
- build: {
11
- rollupOptions: {
12
- input: "build/main.js", // your compiled entry file
13
- output: {
14
- entryFileNames: "client.[hash].js", // name of the final js file
15
- assetFileNames: "[name].[ext]",
16
- },
17
- },
18
- outDir: "dist", // final bundled output
19
- emptyOutDir: true,
20
- },
21
- publicDir: false,
22
- resolve: {
23
- alias: {
24
- "@jac-client/utils": path.resolve(__dirname, "src/client_runtime.js"),
25
- "@jac-client/assets": path.resolve(__dirname, "src/assets"),
26
- },
27
- },
28
- });
@@ -1,9 +0,0 @@
1
-
2
- {
3
- "presets": [[
4
- "@babel/preset-env",
5
- {
6
- "modules": false
7
- }
8
- ], "@babel/preset-react"]
9
- }
@@ -1,83 +0,0 @@
1
- # Import Alias Example
2
-
3
- This example demonstrates how to import static assets using the `@jac-client/assets` alias pattern.
4
-
5
- ## Features
6
-
7
- - Imports image using `@jac-client/assets` alias
8
- - Vite processes and optimizes the asset
9
- - Automatic hash generation for cache busting
10
- - Type-safe asset references
11
-
12
- ## Project Structure
13
-
14
- ```
15
- import-alias/
16
- ├── app.jac # Main application file
17
- ├── assets/ # Static assets directory
18
- │ └── burger.png # Burger image
19
- ├── src/ # Source files (generated)
20
- ├── build/ # Build output (generated)
21
- └── dist/ # Distribution output (generated)
22
- ```
23
-
24
- ## Running the Example
25
-
26
- 1. Make sure node modules are installed:
27
- ```bash
28
- npm install
29
- ```
30
-
31
- 2. Run the Jac server:
32
- ```bash
33
- jac serve app.jac
34
- ```
35
-
36
- 3. Open your browser and navigate to:
37
- ```
38
- http://localhost:8000/page/app
39
- ```
40
-
41
- ## How It Works
42
-
43
- ### Import Syntax
44
-
45
- ```jac
46
- cl import from "@jac-client/assets/burger.png" { default as burgerImage }
47
- <img src={burgerImage} />
48
- ```
49
-
50
- ### Configuration
51
-
52
- The alias is configured in `vite.config.js`:
53
-
54
- ```javascript
55
- resolve: {
56
- alias: {
57
- "@jac-client/assets": path.resolve(__dirname, "src/assets"),
58
- },
59
- }
60
- ```
61
-
62
- ### Build Process
63
-
64
- 1. Assets from root `assets/` folder are copied to `src/assets/` during build
65
- 2. Vite processes the import and generates optimized asset URLs
66
- 3. Assets are bundled with hash-based filenames for cache invalidation
67
- 4. The imported variable contains the processed asset URL
68
-
69
- ### Benefits
70
-
71
- - **Type Safety**: Import errors caught at build time
72
- - **Optimization**: Vite automatically optimizes assets
73
- - **Cache Busting**: Hash-based filenames prevent stale cache
74
- - **Code Splitting**: Assets can be code-split automatically
75
-
76
- ## Best Practices
77
-
78
- 1. Use this method for production applications
79
- 2. Organize assets in the `assets/` folder
80
- 3. Let Vite handle optimization and caching
81
- 4. Use descriptive variable names for imported assets
82
-
83
- Happy coding with Jac! 🍔
@@ -1,28 +0,0 @@
1
- {
2
- "name": "import-alias",
3
- "version": "1.0.0",
4
- "main": "index.js",
5
- "scripts": {
6
- "build": "npm run compile && vite build",
7
- "dev": "vite dev",
8
- "preview": "vite preview",
9
- "compile": "babel src --out-dir build --extensions \".jsx,.js\" --out-file-extension .js"
10
- },
11
- "keywords": [],
12
- "author": "",
13
- "license": "ISC",
14
- "description": "Jac application: import-alias",
15
- "type": "module",
16
- "devDependencies": {
17
- "vite": "^6.4.1",
18
- "@babel/cli": "^7.28.3",
19
- "@babel/core": "^7.28.5",
20
- "@babel/preset-env": "^7.28.5",
21
- "@babel/preset-react": "^7.28.5"
22
- },
23
- "dependencies": {
24
- "react": "^19.2.0",
25
- "react-dom": "^19.2.0",
26
- "react-router-dom": "^6.30.1"
27
- }
28
- }
@@ -1,28 +0,0 @@
1
-
2
- import { defineConfig } from "vite";
3
- import path from "path";
4
- import { fileURLToPath } from "url";
5
-
6
- const __dirname = path.dirname(fileURLToPath(import.meta.url));
7
-
8
- export default defineConfig({
9
- root: ".", // base folder
10
- build: {
11
- rollupOptions: {
12
- input: "build/main.js", // your compiled entry file
13
- output: {
14
- entryFileNames: "client.[hash].js", // name of the final js file
15
- assetFileNames: "[name].[ext]",
16
- },
17
- },
18
- outDir: "dist", // final bundled output
19
- emptyOutDir: true,
20
- },
21
- publicDir: false,
22
- resolve: {
23
- alias: {
24
- "@jac-client/utils": path.resolve(__dirname, "src/client_runtime.js"),
25
- "@jac-client/assets": path.resolve(__dirname, "src/assets"),
26
- },
27
- },
28
- });
@@ -1,9 +0,0 @@
1
-
2
- {
3
- "presets": [[
4
- "@babel/preset-env",
5
- {
6
- "modules": false
7
- }
8
- ], "@babel/preset-react"]
9
- }
@@ -1,16 +0,0 @@
1
- # my-app
2
- make sure node modules are installed:
3
- ```bash
4
- npm install
5
- ```
6
-
7
-
8
- ## Running Jac Code
9
-
10
- To run your Jac code, use the Jac CLI:
11
-
12
- ```bash
13
- jac serve app.jac
14
- ```
15
-
16
- Happy coding with Jac!