jac-client 0.2.3__py3-none-any.whl → 0.2.4__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 (176) hide show
  1. jac_client/examples/all-in-one/assets/workers/worker.py +5 -0
  2. jac_client/tests/conftest.py +281 -0
  3. jac_client/tests/test_cli.py +755 -0
  4. jac_client/tests/test_it.py +347 -67
  5. {jac_client-0.2.3.dist-info → jac_client-0.2.4.dist-info}/METADATA +28 -30
  6. jac_client-0.2.4.dist-info/RECORD +10 -0
  7. {jac_client-0.2.3.dist-info → jac_client-0.2.4.dist-info}/WHEEL +2 -1
  8. jac_client-0.2.4.dist-info/entry_points.txt +4 -0
  9. jac_client-0.2.4.dist-info/top_level.txt +1 -0
  10. jac_client/docs/README.md +0 -689
  11. jac_client/docs/advanced-state.md +0 -1265
  12. jac_client/docs/asset-serving/intro.md +0 -209
  13. jac_client/docs/assets/pipe_line-v2.svg +0 -32
  14. jac_client/docs/assets/pipe_line.png +0 -0
  15. jac_client/docs/file-system/app.jac.md +0 -121
  16. jac_client/docs/file-system/backend-frontend.md +0 -217
  17. jac_client/docs/file-system/intro.md +0 -72
  18. jac_client/docs/file-system/nested-imports.md +0 -348
  19. jac_client/docs/guide-example/intro.md +0 -115
  20. jac_client/docs/guide-example/step-01-setup.md +0 -270
  21. jac_client/docs/guide-example/step-02-components.md +0 -416
  22. jac_client/docs/guide-example/step-03-styling.md +0 -478
  23. jac_client/docs/guide-example/step-04-todo-ui.md +0 -477
  24. jac_client/docs/guide-example/step-05-local-state.md +0 -530
  25. jac_client/docs/guide-example/step-06-events.md +0 -749
  26. jac_client/docs/guide-example/step-07-effects.md +0 -468
  27. jac_client/docs/guide-example/step-08-walkers.md +0 -534
  28. jac_client/docs/guide-example/step-09-authentication.md +0 -586
  29. jac_client/docs/guide-example/step-10-routing.md +0 -539
  30. jac_client/docs/guide-example/step-11-final.md +0 -963
  31. jac_client/docs/imports.md +0 -1141
  32. jac_client/docs/lifecycle-hooks.md +0 -773
  33. jac_client/docs/routing.md +0 -659
  34. jac_client/docs/styling/intro.md +0 -249
  35. jac_client/docs/styling/js-styling.md +0 -367
  36. jac_client/docs/styling/material-ui.md +0 -341
  37. jac_client/docs/styling/pure-css.md +0 -299
  38. jac_client/docs/styling/sass.md +0 -403
  39. jac_client/docs/styling/styled-components.md +0 -395
  40. jac_client/docs/styling/tailwind.md +0 -298
  41. jac_client/examples/all-in-one/.babelrc +0 -9
  42. jac_client/examples/all-in-one/README.md +0 -16
  43. jac_client/examples/all-in-one/app.jac +0 -426
  44. jac_client/examples/all-in-one/assets/burger.png +0 -0
  45. jac_client/examples/all-in-one/button.jac +0 -7
  46. jac_client/examples/all-in-one/components/button.jac +0 -7
  47. jac_client/examples/all-in-one/package.json +0 -29
  48. jac_client/examples/all-in-one/styles.css +0 -26
  49. jac_client/examples/all-in-one/vite.config.js +0 -28
  50. jac_client/examples/asset-serving/css-with-image/.babelrc +0 -9
  51. jac_client/examples/asset-serving/css-with-image/README.md +0 -91
  52. jac_client/examples/asset-serving/css-with-image/app.jac +0 -88
  53. jac_client/examples/asset-serving/css-with-image/assets/burger.png +0 -0
  54. jac_client/examples/asset-serving/css-with-image/package.json +0 -28
  55. jac_client/examples/asset-serving/css-with-image/styles.css +0 -26
  56. jac_client/examples/asset-serving/css-with-image/vite.config.js +0 -28
  57. jac_client/examples/asset-serving/image-asset/.babelrc +0 -9
  58. jac_client/examples/asset-serving/image-asset/README.md +0 -119
  59. jac_client/examples/asset-serving/image-asset/app.jac +0 -55
  60. jac_client/examples/asset-serving/image-asset/assets/burger.png +0 -0
  61. jac_client/examples/asset-serving/image-asset/package.json +0 -28
  62. jac_client/examples/asset-serving/image-asset/styles.css +0 -26
  63. jac_client/examples/asset-serving/image-asset/vite.config.js +0 -28
  64. jac_client/examples/asset-serving/import-alias/.babelrc +0 -9
  65. jac_client/examples/asset-serving/import-alias/README.md +0 -83
  66. jac_client/examples/asset-serving/import-alias/app.jac +0 -111
  67. jac_client/examples/asset-serving/import-alias/assets/burger.png +0 -0
  68. jac_client/examples/asset-serving/import-alias/package.json +0 -28
  69. jac_client/examples/asset-serving/import-alias/vite.config.js +0 -28
  70. jac_client/examples/basic/.babelrc +0 -9
  71. jac_client/examples/basic/README.md +0 -16
  72. jac_client/examples/basic/app.jac +0 -21
  73. jac_client/examples/basic/package.json +0 -27
  74. jac_client/examples/basic/vite.config.js +0 -27
  75. jac_client/examples/basic-auth/.babelrc +0 -9
  76. jac_client/examples/basic-auth/README.md +0 -16
  77. jac_client/examples/basic-auth/app.jac +0 -308
  78. jac_client/examples/basic-auth/package.json +0 -27
  79. jac_client/examples/basic-auth/vite.config.js +0 -27
  80. jac_client/examples/basic-auth-with-router/.babelrc +0 -9
  81. jac_client/examples/basic-auth-with-router/README.md +0 -60
  82. jac_client/examples/basic-auth-with-router/app.jac +0 -464
  83. jac_client/examples/basic-auth-with-router/package.json +0 -28
  84. jac_client/examples/basic-auth-with-router/vite.config.js +0 -27
  85. jac_client/examples/basic-full-stack/.babelrc +0 -9
  86. jac_client/examples/basic-full-stack/README.md +0 -18
  87. jac_client/examples/basic-full-stack/app.jac +0 -320
  88. jac_client/examples/basic-full-stack/package.json +0 -28
  89. jac_client/examples/basic-full-stack/vite.config.js +0 -27
  90. jac_client/examples/css-styling/js-styling/.babelrc +0 -9
  91. jac_client/examples/css-styling/js-styling/README.md +0 -183
  92. jac_client/examples/css-styling/js-styling/app.jac +0 -84
  93. jac_client/examples/css-styling/js-styling/package.json +0 -28
  94. jac_client/examples/css-styling/js-styling/styles.js +0 -100
  95. jac_client/examples/css-styling/js-styling/vite.config.js +0 -27
  96. jac_client/examples/css-styling/material-ui/.babelrc +0 -9
  97. jac_client/examples/css-styling/material-ui/README.md +0 -16
  98. jac_client/examples/css-styling/material-ui/app.jac +0 -122
  99. jac_client/examples/css-styling/material-ui/package.json +0 -32
  100. jac_client/examples/css-styling/material-ui/vite.config.js +0 -27
  101. jac_client/examples/css-styling/pure-css/.babelrc +0 -9
  102. jac_client/examples/css-styling/pure-css/README.md +0 -16
  103. jac_client/examples/css-styling/pure-css/app.jac +0 -64
  104. jac_client/examples/css-styling/pure-css/package.json +0 -28
  105. jac_client/examples/css-styling/pure-css/styles.css +0 -111
  106. jac_client/examples/css-styling/pure-css/vite.config.js +0 -27
  107. jac_client/examples/css-styling/sass-example/.babelrc +0 -9
  108. jac_client/examples/css-styling/sass-example/README.md +0 -16
  109. jac_client/examples/css-styling/sass-example/app.jac +0 -64
  110. jac_client/examples/css-styling/sass-example/package.json +0 -29
  111. jac_client/examples/css-styling/sass-example/styles.scss +0 -153
  112. jac_client/examples/css-styling/sass-example/vite.config.js +0 -27
  113. jac_client/examples/css-styling/styled-components/.babelrc +0 -9
  114. jac_client/examples/css-styling/styled-components/README.md +0 -16
  115. jac_client/examples/css-styling/styled-components/app.jac +0 -71
  116. jac_client/examples/css-styling/styled-components/package.json +0 -29
  117. jac_client/examples/css-styling/styled-components/styled.js +0 -90
  118. jac_client/examples/css-styling/styled-components/vite.config.js +0 -27
  119. jac_client/examples/css-styling/tailwind-example/.babelrc +0 -9
  120. jac_client/examples/css-styling/tailwind-example/README.md +0 -16
  121. jac_client/examples/css-styling/tailwind-example/app.jac +0 -63
  122. jac_client/examples/css-styling/tailwind-example/global.css +0 -1
  123. jac_client/examples/css-styling/tailwind-example/package.json +0 -30
  124. jac_client/examples/css-styling/tailwind-example/vite.config.js +0 -29
  125. jac_client/examples/full-stack-with-auth/.babelrc +0 -9
  126. jac_client/examples/full-stack-with-auth/README.md +0 -16
  127. jac_client/examples/full-stack-with-auth/app.jac +0 -722
  128. jac_client/examples/full-stack-with-auth/package.json +0 -28
  129. jac_client/examples/full-stack-with-auth/vite.config.js +0 -29
  130. jac_client/examples/little-x/app.jac +0 -724
  131. jac_client/examples/little-x/package.json +0 -23
  132. jac_client/examples/little-x/submit-button.jac +0 -8
  133. jac_client/examples/nested-folders/nested-advance/.babelrc +0 -9
  134. jac_client/examples/nested-folders/nested-advance/ButtonRoot.jac +0 -11
  135. jac_client/examples/nested-folders/nested-advance/README.md +0 -77
  136. jac_client/examples/nested-folders/nested-advance/app.jac +0 -35
  137. jac_client/examples/nested-folders/nested-advance/level1/ButtonSecondL.jac +0 -19
  138. jac_client/examples/nested-folders/nested-advance/level1/Card.jac +0 -43
  139. jac_client/examples/nested-folders/nested-advance/level1/level2/ButtonThirdL.jac +0 -25
  140. jac_client/examples/nested-folders/nested-advance/package.json +0 -29
  141. jac_client/examples/nested-folders/nested-advance/vite.config.js +0 -28
  142. jac_client/examples/nested-folders/nested-basic/.babelrc +0 -9
  143. jac_client/examples/nested-folders/nested-basic/README.md +0 -183
  144. jac_client/examples/nested-folders/nested-basic/app.jac +0 -13
  145. jac_client/examples/nested-folders/nested-basic/app.js +0 -7
  146. jac_client/examples/nested-folders/nested-basic/button.jac +0 -7
  147. jac_client/examples/nested-folders/nested-basic/components/button.jac +0 -7
  148. jac_client/examples/nested-folders/nested-basic/package.json +0 -28
  149. jac_client/examples/nested-folders/nested-basic/vite.config.js +0 -27
  150. jac_client/examples/with-router/.babelrc +0 -9
  151. jac_client/examples/with-router/README.md +0 -17
  152. jac_client/examples/with-router/app.jac +0 -323
  153. jac_client/examples/with-router/package.json +0 -28
  154. jac_client/examples/with-router/vite.config.js +0 -27
  155. jac_client/plugin/cli.py +0 -244
  156. jac_client/plugin/client.py +0 -152
  157. jac_client/plugin/client_runtime.jac +0 -234
  158. jac_client/plugin/vite_client_bundle.py +0 -503
  159. jac_client/tests/fixtures/basic-app/app.jac +0 -23
  160. jac_client/tests/fixtures/cl_file/app.cl.jac +0 -48
  161. jac_client/tests/fixtures/cl_file/app.jac +0 -15
  162. jac_client/tests/fixtures/client_app_with_antd/app.jac +0 -34
  163. jac_client/tests/fixtures/js_import/app.jac +0 -34
  164. jac_client/tests/fixtures/js_import/utils.js +0 -21
  165. jac_client/tests/fixtures/package-lock.json +0 -329
  166. jac_client/tests/fixtures/package.json +0 -11
  167. jac_client/tests/fixtures/relative_import/app.jac +0 -11
  168. jac_client/tests/fixtures/relative_import/button.jac +0 -7
  169. jac_client/tests/fixtures/spawn_test/app.jac +0 -129
  170. jac_client/tests/fixtures/test_fragments_spread/app.jac +0 -67
  171. jac_client/tests/test_asset_examples.py +0 -322
  172. jac_client/tests/test_cl.py +0 -530
  173. jac_client/tests/test_create_jac_app.py +0 -131
  174. jac_client/tests/test_nested_file.py +0 -374
  175. jac_client-0.2.3.dist-info/RECORD +0 -171
  176. jac_client-0.2.3.dist-info/entry_points.txt +0 -4
@@ -1,322 +0,0 @@
1
- """Tests for asset-serving and css-styling examples."""
2
-
3
- from __future__ import annotations
4
-
5
- import json
6
- import shutil
7
- import subprocess
8
- import tempfile
9
- from pathlib import Path
10
-
11
- import pytest
12
-
13
- from jac_client.plugin.vite_client_bundle import ViteClientBundleBuilder
14
- from jaclang.runtimelib.runtime import JacRuntime as Jac
15
-
16
-
17
- @pytest.fixture(autouse=True)
18
- def reset_jac_machine():
19
- """Reset Jac machine before and after each test."""
20
- Jac.reset_machine()
21
- yield
22
- Jac.reset_machine()
23
-
24
-
25
- def _create_test_project_with_vite(
26
- temp_path: Path, include_assets: bool = False
27
- ) -> tuple[Path, Path]:
28
- """Create a minimal test project with Vite installed.
29
-
30
- Args:
31
- temp_path: Path to the temporary directory
32
- include_assets: If True, includes asset handling setup
33
- """
34
- # Create package.json with base dependencies
35
- package_data = {
36
- "name": "test-client",
37
- "version": "0.0.1",
38
- "type": "module",
39
- "scripts": {
40
- "build": "npm run compile && vite build",
41
- "dev": "vite dev",
42
- "preview": "vite preview",
43
- "compile": 'babel src --out-dir build --extensions ".jsx,.js" --out-file-extension .js',
44
- },
45
- "dependencies": {
46
- "react": "^19.2.0",
47
- "react-dom": "^19.2.0",
48
- "react-router-dom": "^7.3.0",
49
- },
50
- "devDependencies": {
51
- "vite": "^6.4.1",
52
- "@babel/cli": "^7.28.3",
53
- "@babel/core": "^7.28.5",
54
- "@babel/preset-env": "^7.28.5",
55
- "@babel/preset-react": "^7.28.5",
56
- },
57
- }
58
-
59
- package_json = temp_path / "package.json"
60
- with package_json.open("w", encoding="utf-8") as f:
61
- json.dump(package_data, f, indent=2)
62
-
63
- # Create .babelrc file
64
- babelrc = temp_path / ".babelrc"
65
- babelrc.write_text(
66
- """{
67
- "presets": [[
68
- "@babel/preset-env",
69
- {
70
- "modules": false
71
- }
72
- ], "@babel/preset-react"]
73
- }
74
- """,
75
- encoding="utf-8",
76
- )
77
-
78
- # Create vite.config.js file
79
- vite_config = temp_path / "vite.config.js"
80
- if include_assets:
81
- vite_config.write_text(
82
- """import { defineConfig } from "vite";
83
- import path from "path";
84
- import { fileURLToPath } from "url";
85
-
86
- const __dirname = path.dirname(fileURLToPath(import.meta.url));
87
-
88
- export default defineConfig({
89
- root: ".",
90
- build: {
91
- rollupOptions: {
92
- input: "build/main.js",
93
- output: {
94
- entryFileNames: "client.[hash].js",
95
- assetFileNames: "[name].[ext]",
96
- },
97
- },
98
- outDir: "dist",
99
- emptyOutDir: true,
100
- minify: false,
101
- },
102
- publicDir: false,
103
- resolve: {
104
- alias: {
105
- "@jac-client/utils": path.resolve(__dirname, "src/client_runtime.js"),
106
- "@jac-client/assets": path.resolve(__dirname, "src/assets"),
107
- },
108
- },
109
- });
110
- """,
111
- encoding="utf-8",
112
- )
113
- else:
114
- vite_config.write_text(
115
- """import { defineConfig } from "vite";
116
- import path from "path";
117
- import { fileURLToPath } from "url";
118
-
119
- const __dirname = path.dirname(fileURLToPath(import.meta.url));
120
-
121
- export default defineConfig({
122
- root: ".",
123
- build: {
124
- rollupOptions: {
125
- input: "build/main.js",
126
- output: {
127
- entryFileNames: "client.[hash].js",
128
- assetFileNames: "[name].[ext]",
129
- },
130
- },
131
- outDir: "dist",
132
- emptyOutDir: true,
133
- minify: false,
134
- },
135
- publicDir: false,
136
- resolve: {
137
- alias: {
138
- "@jac-client/utils": path.resolve(__dirname, "src/client_runtime.js"),
139
- },
140
- },
141
- });
142
- """,
143
- encoding="utf-8",
144
- )
145
-
146
- # Install dependencies
147
- result = subprocess.run(
148
- ["npm", "install"],
149
- cwd=temp_path,
150
- check=False,
151
- capture_output=True,
152
- text=True,
153
- )
154
- if result.returncode != 0:
155
- error_msg = f"npm install failed with exit code {result.returncode}\n"
156
- error_msg += f"stdout: {result.stdout}\n"
157
- error_msg += f"stderr: {result.stderr}\n"
158
- raise RuntimeError(error_msg)
159
-
160
- # Create output directory
161
- output_dir = temp_path / "dist"
162
- output_dir.mkdir(parents=True, exist_ok=True)
163
-
164
- src_dir = temp_path / "src"
165
- src_dir.mkdir(parents=True, exist_ok=True)
166
-
167
- build_dir = temp_path / "build"
168
- build_dir.mkdir(parents=True, exist_ok=True)
169
-
170
- return package_json, output_dir
171
-
172
-
173
- def test_image_asset_example() -> None:
174
- """Test image-asset example with static asset paths."""
175
- with tempfile.TemporaryDirectory() as temp_dir:
176
- temp_path = Path(temp_dir)
177
-
178
- package_json, output_dir = _create_test_project_with_vite(
179
- temp_path, include_assets=True
180
- )
181
- runtime_path = Path(__file__).parent.parent / "plugin" / "client_runtime.jac"
182
-
183
- # Initialize the Vite builder
184
- builder = ViteClientBundleBuilder(
185
- runtime_path=runtime_path,
186
- vite_package_json=package_json,
187
- vite_output_dir=output_dir,
188
- vite_minify=False,
189
- )
190
-
191
- # Import the image-asset example
192
- examples_dir = (
193
- Path(__file__).parent.parent / "examples" / "asset-serving" / "image-asset"
194
- )
195
- (module,) = Jac.jac_import("app", str(examples_dir))
196
-
197
- # Build the bundle
198
- bundle = builder.build(module, force=True)
199
-
200
- # Verify bundle structure
201
- assert bundle is not None
202
- assert bundle.module_name == "app"
203
- assert "app" in bundle.client_functions
204
-
205
- # Verify image path is in the bundle
206
- assert "/static/assets/burger.png" in bundle.code
207
-
208
- # Verify bundle was written to output directory
209
- bundle_files = list(output_dir.glob("client.*.js"))
210
- assert len(bundle_files) > 0, "Expected at least one bundle file"
211
-
212
- # Cleanup
213
- builder.cleanup_temp_dir()
214
-
215
-
216
- def test_css_with_image_example() -> None:
217
- """Test css-with-image example with CSS and image assets."""
218
- with tempfile.TemporaryDirectory() as temp_dir:
219
- temp_path = Path(temp_dir)
220
-
221
- package_json, output_dir = _create_test_project_with_vite(
222
- temp_path, include_assets=True
223
- )
224
- runtime_path = Path(__file__).parent.parent / "plugin" / "client_runtime.jac"
225
-
226
- # Initialize the Vite builder
227
- builder = ViteClientBundleBuilder(
228
- runtime_path=runtime_path,
229
- vite_package_json=package_json,
230
- vite_output_dir=output_dir,
231
- vite_minify=False,
232
- )
233
-
234
- # Import the css-with-image example
235
- examples_dir = (
236
- Path(__file__).parent.parent
237
- / "examples"
238
- / "asset-serving"
239
- / "css-with-image"
240
- )
241
- (module,) = Jac.jac_import("app", str(examples_dir))
242
-
243
- # Build the bundle
244
- bundle = builder.build(module, force=True)
245
-
246
- # Verify bundle structure
247
- assert bundle is not None
248
- assert bundle.module_name == "app"
249
- assert "app" in bundle.client_functions
250
-
251
- # Verify CSS import is present (CSS should be extracted to separate file)
252
- # The bundle should reference the CSS file
253
- assert "import" in bundle.code.lower()
254
-
255
- # Verify image paths are in the bundle
256
- assert "/static/assets/burger.png" in bundle.code
257
-
258
- # Verify CSS file was extracted
259
- css_files = list(output_dir.glob("*.css"))
260
- assert len(css_files) > 0, "Expected at least one CSS file"
261
-
262
- # Verify bundle was written to output directory
263
- bundle_files = list(output_dir.glob("client.*.js"))
264
- assert len(bundle_files) > 0, "Expected at least one bundle file"
265
-
266
- # Cleanup
267
- builder.cleanup_temp_dir()
268
-
269
-
270
- def test_import_alias_example() -> None:
271
- """Test import-alias example with @jac-client/assets alias."""
272
- with tempfile.TemporaryDirectory() as temp_dir:
273
- temp_path = Path(temp_dir)
274
- package_json, output_dir = _create_test_project_with_vite(
275
- temp_path, include_assets=True
276
- )
277
- runtime_path = Path(__file__).parent.parent / "plugin" / "client_runtime.jac"
278
-
279
- # Initialize the Vite builder
280
- builder = ViteClientBundleBuilder(
281
- runtime_path=runtime_path,
282
- vite_package_json=package_json,
283
- vite_output_dir=output_dir,
284
- vite_minify=False,
285
- )
286
-
287
- # Import the import-alias example
288
- examples_dir = (
289
- Path(__file__).parent.parent / "examples" / "asset-serving" / "import-alias"
290
- )
291
- (module,) = Jac.jac_import("app", str(examples_dir))
292
-
293
- # Copy assets from example directory to temp project's src/assets/
294
- # This is needed because @jac-client/assets alias points to src/assets
295
- example_assets_dir = examples_dir / "assets"
296
- temp_assets_dir = temp_path / "src" / "assets"
297
- if example_assets_dir.exists():
298
- temp_assets_dir.mkdir(parents=True, exist_ok=True)
299
- # Copy all files from example assets to temp assets
300
- for asset_file in example_assets_dir.iterdir():
301
- if asset_file.is_file():
302
- shutil.copy2(asset_file, temp_assets_dir / asset_file.name)
303
-
304
- # Build the bundle
305
- bundle = builder.build(module, force=True)
306
-
307
- # Verify bundle structure
308
- assert bundle is not None
309
- assert bundle.module_name == "app"
310
- assert "app" in bundle.client_functions
311
-
312
- # Verify the import alias was processed by Vite
313
- # Vite should have resolved the asset import
314
- # The bundle should contain the processed asset URL
315
- assert "burgerImage" in bundle.code
316
-
317
- # Verify bundle was written to output directory
318
- bundle_files = list(output_dir.glob("client.*.js"))
319
- assert len(bundle_files) > 0, "Expected at least one bundle file"
320
-
321
- # Cleanup
322
- builder.cleanup_temp_dir()