jac-client 0.2.2__py3-none-any.whl → 0.2.6__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 (202) hide show
  1. jac_client/examples/all-in-one/assets/workers/worker.py +5 -0
  2. jac_client/examples/all-in-one/src/app.jac +841 -0
  3. jac_client/examples/all-in-one/{button.jac → src/button.jac} +1 -1
  4. jac_client/examples/all-in-one/{components → src/components}/button.jac +1 -1
  5. jac_client/examples/asset-serving/css-with-image/{app.jac → src/app.jac} +2 -2
  6. jac_client/examples/asset-serving/image-asset/{app.jac → src/app.jac} +2 -2
  7. jac_client/examples/asset-serving/import-alias/{app.jac → src/app.jac} +7 -7
  8. jac_client/examples/basic/{app.jac → src/app.jac} +2 -2
  9. jac_client/examples/basic-auth/src/app.jac +377 -0
  10. jac_client/examples/basic-auth-with-router/{app.jac → src/app.jac} +18 -18
  11. jac_client/examples/basic-full-stack/{app.jac → src/app.jac} +175 -130
  12. jac_client/examples/css-styling/js-styling/{app.jac → src/app.jac} +6 -6
  13. jac_client/examples/css-styling/material-ui/{app.jac → src/app.jac} +5 -5
  14. jac_client/examples/css-styling/pure-css/{app.jac → src/app.jac} +6 -6
  15. jac_client/examples/css-styling/sass-example/{app.jac → src/app.jac} +6 -6
  16. jac_client/examples/css-styling/styled-components/{app.jac → src/app.jac} +5 -5
  17. jac_client/examples/css-styling/tailwind-example/{app.jac → src/app.jac} +6 -6
  18. jac_client/examples/full-stack-with-auth/{app.jac → src/app.jac} +37 -37
  19. jac_client/examples/little-x/{app.jac → src/app.jac} +27 -32
  20. jac_client/examples/little-x/src/submit-button.jac +16 -0
  21. jac_client/examples/nested-folders/nested-advance/{ButtonRoot.jac → src/ButtonRoot.jac} +1 -1
  22. jac_client/examples/nested-folders/nested-advance/{app.jac → src/app.jac} +1 -1
  23. jac_client/examples/nested-folders/nested-advance/{level1 → src/level1}/ButtonSecondL.jac +1 -1
  24. jac_client/examples/nested-folders/nested-advance/{level1 → src/level1}/Card.jac +1 -1
  25. jac_client/examples/nested-folders/nested-advance/{level1 → src/level1}/level2/ButtonThirdL.jac +1 -1
  26. jac_client/examples/nested-folders/nested-basic/{app.jac → src/app.jac} +2 -2
  27. jac_client/examples/nested-folders/nested-basic/{button.jac → src/button.jac} +1 -1
  28. jac_client/examples/nested-folders/nested-basic/{components → src/components}/button.jac +1 -1
  29. jac_client/examples/ts-support/src/app.jac +35 -0
  30. jac_client/examples/with-router/{app.jac → src/app.jac} +11 -11
  31. jac_client/plugin/cli.jac +547 -0
  32. jac_client/plugin/client.jac +52 -0
  33. jac_client/plugin/client_runtime.cl.jac +38 -0
  34. jac_client/plugin/impl/client.impl.jac +134 -0
  35. jac_client/plugin/impl/client_runtime.impl.jac +177 -0
  36. jac_client/plugin/impl/vite_client_bundle.impl.jac +72 -0
  37. jac_client/plugin/plugin_config.jac +195 -0
  38. jac_client/plugin/src/__init__.jac +20 -0
  39. jac_client/plugin/src/asset_processor.jac +33 -0
  40. jac_client/plugin/src/babel_processor.jac +18 -0
  41. jac_client/plugin/src/compiler.jac +66 -0
  42. jac_client/plugin/src/config_loader.jac +32 -0
  43. jac_client/plugin/src/impl/asset_processor.impl.jac +127 -0
  44. jac_client/plugin/src/impl/babel_processor.impl.jac +84 -0
  45. jac_client/plugin/src/impl/compiler.impl.jac +251 -0
  46. jac_client/plugin/src/impl/config_loader.impl.jac +119 -0
  47. jac_client/plugin/src/impl/import_processor.impl.jac +33 -0
  48. jac_client/plugin/src/impl/jac_to_js.impl.jac +41 -0
  49. jac_client/plugin/src/impl/package_installer.impl.jac +105 -0
  50. jac_client/plugin/src/impl/vite_bundler.impl.jac +513 -0
  51. jac_client/plugin/src/import_processor.jac +19 -0
  52. jac_client/plugin/src/jac_to_js.jac +35 -0
  53. jac_client/plugin/src/package_installer.jac +26 -0
  54. jac_client/plugin/src/vite_bundler.jac +36 -0
  55. jac_client/plugin/vite_client_bundle.jac +31 -0
  56. jac_client/tests/conftest.py +281 -0
  57. jac_client/tests/fixtures/basic-app/app.jac +2 -2
  58. jac_client/tests/fixtures/cl_file/app.cl.jac +2 -2
  59. jac_client/tests/fixtures/client_app_with_antd/app.jac +1 -1
  60. jac_client/tests/fixtures/js_import/app.jac +5 -5
  61. jac_client/tests/fixtures/spawn_test/app.jac +7 -7
  62. jac_client/tests/fixtures/with-ts/app.jac +35 -0
  63. jac_client/tests/test_cli.py +755 -0
  64. jac_client/tests/test_it.py +347 -67
  65. {jac_client-0.2.2.dist-info → jac_client-0.2.6.dist-info}/METADATA +30 -24
  66. jac_client-0.2.6.dist-info/RECORD +74 -0
  67. {jac_client-0.2.2.dist-info → jac_client-0.2.6.dist-info}/WHEEL +2 -1
  68. jac_client-0.2.6.dist-info/entry_points.txt +4 -0
  69. jac_client-0.2.6.dist-info/top_level.txt +1 -0
  70. jac_client/docs/README.md +0 -689
  71. jac_client/docs/advanced-state.md +0 -1265
  72. jac_client/docs/asset-serving/intro.md +0 -209
  73. jac_client/docs/assets/pipe_line-v2.svg +0 -32
  74. jac_client/docs/assets/pipe_line.png +0 -0
  75. jac_client/docs/file-system/app.jac.md +0 -121
  76. jac_client/docs/file-system/backend-frontend.md +0 -217
  77. jac_client/docs/file-system/intro.md +0 -72
  78. jac_client/docs/file-system/nested-imports.md +0 -348
  79. jac_client/docs/guide-example/intro.md +0 -115
  80. jac_client/docs/guide-example/step-01-setup.md +0 -270
  81. jac_client/docs/guide-example/step-02-components.md +0 -416
  82. jac_client/docs/guide-example/step-03-styling.md +0 -478
  83. jac_client/docs/guide-example/step-04-todo-ui.md +0 -477
  84. jac_client/docs/guide-example/step-05-local-state.md +0 -530
  85. jac_client/docs/guide-example/step-06-events.md +0 -749
  86. jac_client/docs/guide-example/step-07-effects.md +0 -468
  87. jac_client/docs/guide-example/step-08-walkers.md +0 -534
  88. jac_client/docs/guide-example/step-09-authentication.md +0 -586
  89. jac_client/docs/guide-example/step-10-routing.md +0 -539
  90. jac_client/docs/guide-example/step-11-final.md +0 -963
  91. jac_client/docs/imports.md +0 -1141
  92. jac_client/docs/lifecycle-hooks.md +0 -773
  93. jac_client/docs/routing.md +0 -659
  94. jac_client/docs/styling/intro.md +0 -249
  95. jac_client/docs/styling/js-styling.md +0 -367
  96. jac_client/docs/styling/material-ui.md +0 -341
  97. jac_client/docs/styling/pure-css.md +0 -299
  98. jac_client/docs/styling/sass.md +0 -403
  99. jac_client/docs/styling/styled-components.md +0 -395
  100. jac_client/docs/styling/tailwind.md +0 -298
  101. jac_client/examples/all-in-one/.babelrc +0 -9
  102. jac_client/examples/all-in-one/README.md +0 -16
  103. jac_client/examples/all-in-one/app.jac +0 -426
  104. jac_client/examples/all-in-one/assets/burger.png +0 -0
  105. jac_client/examples/all-in-one/package.json +0 -29
  106. jac_client/examples/all-in-one/styles.css +0 -26
  107. jac_client/examples/all-in-one/vite.config.js +0 -28
  108. jac_client/examples/asset-serving/css-with-image/.babelrc +0 -9
  109. jac_client/examples/asset-serving/css-with-image/README.md +0 -91
  110. jac_client/examples/asset-serving/css-with-image/assets/burger.png +0 -0
  111. jac_client/examples/asset-serving/css-with-image/package.json +0 -28
  112. jac_client/examples/asset-serving/css-with-image/styles.css +0 -26
  113. jac_client/examples/asset-serving/css-with-image/vite.config.js +0 -28
  114. jac_client/examples/asset-serving/image-asset/.babelrc +0 -9
  115. jac_client/examples/asset-serving/image-asset/README.md +0 -119
  116. jac_client/examples/asset-serving/image-asset/assets/burger.png +0 -0
  117. jac_client/examples/asset-serving/image-asset/package.json +0 -28
  118. jac_client/examples/asset-serving/image-asset/styles.css +0 -26
  119. jac_client/examples/asset-serving/image-asset/vite.config.js +0 -28
  120. jac_client/examples/asset-serving/import-alias/.babelrc +0 -9
  121. jac_client/examples/asset-serving/import-alias/README.md +0 -83
  122. jac_client/examples/asset-serving/import-alias/assets/burger.png +0 -0
  123. jac_client/examples/asset-serving/import-alias/package.json +0 -28
  124. jac_client/examples/asset-serving/import-alias/vite.config.js +0 -28
  125. jac_client/examples/basic/.babelrc +0 -9
  126. jac_client/examples/basic/README.md +0 -16
  127. jac_client/examples/basic/package.json +0 -27
  128. jac_client/examples/basic/vite.config.js +0 -27
  129. jac_client/examples/basic-auth/.babelrc +0 -9
  130. jac_client/examples/basic-auth/README.md +0 -16
  131. jac_client/examples/basic-auth/app.jac +0 -308
  132. jac_client/examples/basic-auth/package.json +0 -27
  133. jac_client/examples/basic-auth/vite.config.js +0 -27
  134. jac_client/examples/basic-auth-with-router/.babelrc +0 -9
  135. jac_client/examples/basic-auth-with-router/README.md +0 -60
  136. jac_client/examples/basic-auth-with-router/package.json +0 -28
  137. jac_client/examples/basic-auth-with-router/vite.config.js +0 -27
  138. jac_client/examples/basic-full-stack/.babelrc +0 -9
  139. jac_client/examples/basic-full-stack/README.md +0 -18
  140. jac_client/examples/basic-full-stack/package.json +0 -28
  141. jac_client/examples/basic-full-stack/vite.config.js +0 -27
  142. jac_client/examples/css-styling/js-styling/.babelrc +0 -9
  143. jac_client/examples/css-styling/js-styling/README.md +0 -183
  144. jac_client/examples/css-styling/js-styling/package.json +0 -28
  145. jac_client/examples/css-styling/js-styling/styles.js +0 -100
  146. jac_client/examples/css-styling/js-styling/vite.config.js +0 -27
  147. jac_client/examples/css-styling/material-ui/.babelrc +0 -9
  148. jac_client/examples/css-styling/material-ui/README.md +0 -16
  149. jac_client/examples/css-styling/material-ui/package.json +0 -32
  150. jac_client/examples/css-styling/material-ui/vite.config.js +0 -27
  151. jac_client/examples/css-styling/pure-css/.babelrc +0 -9
  152. jac_client/examples/css-styling/pure-css/README.md +0 -16
  153. jac_client/examples/css-styling/pure-css/package.json +0 -28
  154. jac_client/examples/css-styling/pure-css/styles.css +0 -111
  155. jac_client/examples/css-styling/pure-css/vite.config.js +0 -27
  156. jac_client/examples/css-styling/sass-example/.babelrc +0 -9
  157. jac_client/examples/css-styling/sass-example/README.md +0 -16
  158. jac_client/examples/css-styling/sass-example/package.json +0 -29
  159. jac_client/examples/css-styling/sass-example/styles.scss +0 -153
  160. jac_client/examples/css-styling/sass-example/vite.config.js +0 -27
  161. jac_client/examples/css-styling/styled-components/.babelrc +0 -9
  162. jac_client/examples/css-styling/styled-components/README.md +0 -16
  163. jac_client/examples/css-styling/styled-components/package.json +0 -29
  164. jac_client/examples/css-styling/styled-components/styled.js +0 -90
  165. jac_client/examples/css-styling/styled-components/vite.config.js +0 -27
  166. jac_client/examples/css-styling/tailwind-example/.babelrc +0 -9
  167. jac_client/examples/css-styling/tailwind-example/README.md +0 -16
  168. jac_client/examples/css-styling/tailwind-example/global.css +0 -1
  169. jac_client/examples/css-styling/tailwind-example/package.json +0 -30
  170. jac_client/examples/css-styling/tailwind-example/vite.config.js +0 -29
  171. jac_client/examples/full-stack-with-auth/.babelrc +0 -9
  172. jac_client/examples/full-stack-with-auth/README.md +0 -16
  173. jac_client/examples/full-stack-with-auth/package.json +0 -28
  174. jac_client/examples/full-stack-with-auth/vite.config.js +0 -29
  175. jac_client/examples/little-x/package.json +0 -23
  176. jac_client/examples/little-x/submit-button.jac +0 -8
  177. jac_client/examples/nested-folders/nested-advance/.babelrc +0 -9
  178. jac_client/examples/nested-folders/nested-advance/README.md +0 -77
  179. jac_client/examples/nested-folders/nested-advance/package.json +0 -29
  180. jac_client/examples/nested-folders/nested-advance/vite.config.js +0 -28
  181. jac_client/examples/nested-folders/nested-basic/.babelrc +0 -9
  182. jac_client/examples/nested-folders/nested-basic/README.md +0 -183
  183. jac_client/examples/nested-folders/nested-basic/app.js +0 -7
  184. jac_client/examples/nested-folders/nested-basic/package.json +0 -28
  185. jac_client/examples/nested-folders/nested-basic/vite.config.js +0 -27
  186. jac_client/examples/with-router/.babelrc +0 -9
  187. jac_client/examples/with-router/README.md +0 -17
  188. jac_client/examples/with-router/package.json +0 -28
  189. jac_client/examples/with-router/vite.config.js +0 -27
  190. jac_client/plugin/cli.py +0 -244
  191. jac_client/plugin/client.py +0 -152
  192. jac_client/plugin/client_runtime.jac +0 -234
  193. jac_client/plugin/vite_client_bundle.py +0 -503
  194. jac_client/tests/fixtures/js_import/utils.js +0 -21
  195. jac_client/tests/fixtures/package-lock.json +0 -329
  196. jac_client/tests/fixtures/package.json +0 -11
  197. jac_client/tests/test_asset_examples.py +0 -322
  198. jac_client/tests/test_cl.py +0 -530
  199. jac_client/tests/test_create_jac_app.py +0 -131
  200. jac_client/tests/test_nested_file.py +0 -374
  201. jac_client-0.2.2.dist-info/RECORD +0 -171
  202. jac_client-0.2.2.dist-info/entry_points.txt +0 -4
@@ -0,0 +1,33 @@
1
+ """Check if an import should be processed (compiled/copied) vs left for Vite."""
2
+
3
+ impl ImportProcessor.should_process_import(
4
+ self: ImportProcessor, import_path: Path
5
+ ) -> bool {
6
+ return (import_path.suffix in {'.jac','.js'});
7
+ }
8
+
9
+ """Process client imports for Vite bundling."""
10
+ impl ImportProcessor.process_vite_imports(
11
+ self: ImportProcessor, manifest: (ClientManifest | None), module_path: Path
12
+ ) -> list[(Path | None)] {
13
+ imported_js_modules: list[(Path | None)] = [];
14
+ if (manifest and manifest.imports) {
15
+ for (_, import_path) in manifest.imports.items() {
16
+ import_path_obj = Path(import_path);
17
+ if (import_path_obj.suffix == '.js') {
18
+ try {
19
+ imported_js_modules.append(import_path_obj);
20
+ } except FileNotFoundError {
21
+ imported_js_modules.append(None);
22
+ }
23
+ } elif (import_path_obj.suffix == '.jac') {
24
+ try {
25
+ imported_js_modules.append(import_path_obj);
26
+ } except ClientBundleError {
27
+ imported_js_modules.append(None);
28
+ }
29
+ }
30
+ }
31
+ }
32
+ return imported_js_modules;
33
+ }
@@ -0,0 +1,41 @@
1
+ """Add runtime imports to compiled JS code."""
2
+
3
+ impl JacToJSCompiler.add_runtime_imports(self: JacToJSCompiler, js_code: str) -> str {
4
+ jac_jsx_import = 'import {__jacJsx, __jacSpawn} from "@jac-client/utils";';
5
+ return f"{jac_jsx_import}\n{js_code}";
6
+ }
7
+
8
+ """Extract client globals from manifest and module."""
9
+ impl JacToJSCompiler.extract_globals(
10
+ self: JacToJSCompiler, manifest: (ClientManifest | None), module: ModuleType
11
+ ) -> dict[str, Any] {
12
+ return self._extract_client_globals(manifest, module);
13
+ }
14
+
15
+ """Extract client exports from manifest."""
16
+ impl JacToJSCompiler.extract_exports(
17
+ self: JacToJSCompiler, manifest: (ClientManifest | None)
18
+ ) -> list[str] {
19
+ return self._extract_client_exports(manifest);
20
+ }
21
+
22
+ """Compile a Jac module to JavaScript."""
23
+ impl JacToJSCompiler.compile_module(
24
+ self: JacToJSCompiler, module_path: Path
25
+ ) -> tuple[str, (ModuleType | None), (ClientManifest | None)] {
26
+ (module_js, mod) = self._compile_to_js(module_path);
27
+ manifest = mod.gen.client_manifest if mod else None;
28
+ return (module_js, mod, manifest);
29
+ }
30
+
31
+ """Initialize the Jac to JS compiler."""
32
+ impl JacToJSCompiler.init(
33
+ self: JacToJSCompiler,
34
+ compile_to_js_func: Callable[([Path], tuple[(str, (ModuleType | None))])],
35
+ extract_exports_func: Callable[([Any], list[str])],
36
+ extract_globals_func: Callable[([Any, ModuleType], dict[(str, Any)])]
37
+ ) {
38
+ self._compile_to_js = compile_to_js_func;
39
+ self._extract_client_exports = extract_exports_func;
40
+ self._extract_client_globals = extract_globals_func;
41
+ }
@@ -0,0 +1,105 @@
1
+ """List all installed packages from jac.toml."""
2
+
3
+ impl PackageInstaller.list_packages(
4
+ self: PackageInstaller
5
+ ) -> dict[str, dict[str, str]] {
6
+ if not self.config_file.exists() {
7
+ raise ClientBundleError(
8
+ f'jac.toml not found at {self.config_file}. Run "jac init" first.'
9
+ ) ;
10
+ }
11
+ config = self.config_loader.load();
12
+ package_config = config.get('package', {});
13
+ return {
14
+ 'dependencies': package_config.get('dependencies', {}),
15
+ 'devDependencies': package_config.get('devDependencies', {})
16
+ };
17
+ }
18
+
19
+ """Uninstall a package by removing it from jac.toml."""
20
+ impl PackageInstaller.uninstall_package(
21
+ self: PackageInstaller, package_name: str, is_dev: bool = False
22
+ ) -> None {
23
+ if not self.config_file.exists() {
24
+ raise ClientBundleError(
25
+ f'jac.toml not found at {self.config_file}. Run "jac init" first.'
26
+ ) ;
27
+ }
28
+ # Remove the dependency using JacClientConfig
29
+ result = self.config_loader.remove_dependency(package_name, is_dev);
30
+ if not result {
31
+ deps_key = 'dev-dependencies' if is_dev else 'dependencies';
32
+ raise ClientBundleError(f'Package "{package_name}" not found in {deps_key}') ;
33
+ }
34
+ # Save the updated config
35
+ self.config_loader.save();
36
+ # Regenerate package.json and run npm install to actually remove the package
37
+ self._regenerate_and_install();
38
+ }
39
+
40
+ """Regenerate package.json from jac.toml and run npm install."""
41
+ impl PackageInstaller._regenerate_and_install(self: PackageInstaller) -> None {
42
+ # Regenerate package.json from updated jac.toml
43
+ bundler = ViteBundler(self.project_dir);
44
+ bundler.create_package_json();
45
+ # Ensure root package.json exists temporarily for npm commands
46
+ bundler._ensure_root_package_json();
47
+ try {
48
+ # Run npm install to actually install the packages
49
+ subprocess.run(
50
+ ['npm', 'install'],
51
+ cwd=self.project_dir,
52
+ check=True,
53
+ capture_output=True,
54
+ text=True
55
+ );
56
+ } except subprocess.CalledProcessError as e {
57
+ raise ClientBundleError(f'Failed to install npm packages: {e.stderr}') from e ;
58
+ } except FileNotFoundError {
59
+ raise ClientBundleError(
60
+ 'npm command not found. Ensure Node.js and npm are installed.'
61
+ ) from None ;
62
+ } finally {
63
+ # Always clean up root package.json and move package-lock.json
64
+ bundler._cleanup_root_package_files();
65
+ }
66
+ }
67
+
68
+ """Install all packages from jac.toml (regenerate package.json and run npm install)."""
69
+ impl PackageInstaller.install_all(self: PackageInstaller) -> None {
70
+ if not self.config_file.exists() {
71
+ raise ClientBundleError(
72
+ f'jac.toml not found at {self.config_file}. Run "jac init" first.'
73
+ ) ;
74
+ }
75
+ self._regenerate_and_install();
76
+ }
77
+
78
+ """Install a package by adding it to jac.toml."""
79
+ impl PackageInstaller.install_package(
80
+ self: PackageInstaller,
81
+ package_name: str,
82
+ version: (str | None) = None,
83
+ is_dev: bool = False
84
+ ) -> None {
85
+ if not self.config_file.exists() {
86
+ raise ClientBundleError(
87
+ f'jac.toml not found at {self.config_file}. Run "jac init" first.'
88
+ ) ;
89
+ }
90
+ # Add package with version (default to latest if not specified)
91
+ package_version = version or 'latest';
92
+ # Use JacClientConfig to add the dependency
93
+ self.config_loader.add_dependency(package_name, package_version, is_dev);
94
+ # Save the updated config
95
+ self.config_loader.save();
96
+ # Regenerate package.json and install the package via npm
97
+ self._regenerate_and_install();
98
+ }
99
+
100
+ """Handles installing npm packages by updating jac.toml."""
101
+ impl PackageInstaller.init(self: PackageInstaller, project_dir: Path) {
102
+ self.project_dir = project_dir;
103
+ self.config_loader = JacClientConfig(project_dir);
104
+ self.config_file = project_dir / 'jac.toml';
105
+ }