jac-client 0.2.12__py3-none-any.whl → 0.2.14__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 (51) hide show
  1. jac_client/examples/all-in-one/components/Header.jac +1 -1
  2. jac_client/examples/all-in-one/components/ProfitOverview.jac +1 -1
  3. jac_client/examples/all-in-one/components/Summary.jac +1 -1
  4. jac_client/examples/all-in-one/components/TransactionList.jac +2 -2
  5. jac_client/examples/all-in-one/components/navigation.jac +3 -9
  6. jac_client/examples/all-in-one/context/BudgetContext.jac +1 -1
  7. jac_client/examples/all-in-one/main.jac +5 -386
  8. jac_client/examples/all-in-one/pages/(auth)/index.jac +299 -0
  9. jac_client/examples/all-in-one/pages/{nestedDemo.jac → (auth)/nested.jac} +3 -13
  10. jac_client/examples/all-in-one/pages/{loginPage.jac → (public)/login.jac} +1 -1
  11. jac_client/examples/all-in-one/pages/{signupPage.jac → (public)/signup.jac} +1 -1
  12. jac_client/examples/all-in-one/pages/{notFound.jac → [...notFound].jac} +2 -1
  13. jac_client/examples/all-in-one/pages/budget.jac +11 -0
  14. jac_client/examples/all-in-one/pages/budget_planner_ui.cl.jac +1 -1
  15. jac_client/examples/all-in-one/pages/features.jac +8 -0
  16. jac_client/examples/all-in-one/pages/features_test_ui.cl.jac +7 -7
  17. jac_client/examples/all-in-one/pages/{LandingPage.jac → landing.jac} +4 -9
  18. jac_client/examples/all-in-one/pages/layout.jac +20 -0
  19. jac_client/examples/nested-folders/nested-advance/src/ButtonRoot.jac +1 -1
  20. jac_client/examples/nested-folders/nested-advance/src/level1/ButtonSecondL.jac +1 -1
  21. jac_client/examples/nested-folders/nested-advance/src/level1/level2/ButtonThirdL.jac +1 -1
  22. jac_client/plugin/cli.jac +3 -3
  23. jac_client/plugin/client_runtime.cl.jac +7 -4
  24. jac_client/plugin/impl/client_runtime.impl.jac +29 -7
  25. jac_client/plugin/plugin_config.jac +4 -11
  26. jac_client/plugin/src/compiler.jac +19 -1
  27. jac_client/plugin/src/config_loader.jac +1 -0
  28. jac_client/plugin/src/impl/compiler.impl.jac +232 -62
  29. jac_client/plugin/src/impl/config_loader.impl.jac +8 -0
  30. jac_client/plugin/src/impl/package_installer.impl.jac +3 -2
  31. jac_client/plugin/src/impl/route_scanner.impl.jac +201 -0
  32. jac_client/plugin/src/impl/vite_bundler.impl.jac +54 -15
  33. jac_client/plugin/src/route_scanner.jac +44 -0
  34. jac_client/plugin/src/targets/desktop/sidecar/main.py +42 -23
  35. jac_client/plugin/src/targets/desktop_target.jac +4 -2
  36. jac_client/plugin/src/targets/impl/desktop_target.impl.jac +324 -112
  37. jac_client/plugin/src/vite_bundler.jac +18 -3
  38. jac_client/plugin/utils/impl/bun_installer.impl.jac +16 -19
  39. jac_client/plugin/utils/impl/client_deps.impl.jac +12 -16
  40. jac_client/templates/fullstack.jacpack +3 -2
  41. jac_client/tests/test_cli.py +74 -0
  42. jac_client/tests/test_desktop_api_url.py +854 -0
  43. jac_client/tests/test_e2e.py +31 -40
  44. jac_client/tests/test_it.py +209 -11
  45. {jac_client-0.2.12.dist-info → jac_client-0.2.14.dist-info}/METADATA +2 -2
  46. {jac_client-0.2.12.dist-info → jac_client-0.2.14.dist-info}/RECORD +49 -44
  47. jac_client/examples/all-in-one/pages/BudgetPlanner.jac +0 -140
  48. jac_client/examples/all-in-one/pages/FeaturesTest.jac +0 -157
  49. {jac_client-0.2.12.dist-info → jac_client-0.2.14.dist-info}/WHEEL +0 -0
  50. {jac_client-0.2.12.dist-info → jac_client-0.2.14.dist-info}/entry_points.txt +0 -0
  51. {jac_client-0.2.12.dist-info → jac_client-0.2.14.dist-info}/top_level.txt +0 -0
@@ -4,10 +4,9 @@ from __future__ import annotations
4
4
 
5
5
  import gc
6
6
  import os
7
- import shutil
8
7
  import tempfile
9
8
  import time
10
- from subprocess import PIPE, Popen, run
9
+ from subprocess import Popen, run
11
10
 
12
11
  import pytest
13
12
 
@@ -27,6 +26,8 @@ from .test_helpers import (
27
26
  def running_server():
28
27
  """Start the all-in-one jac server for the test module and yield its URL.
29
28
 
29
+ Uses jacpack to bundle and extract the all-in-one example.
30
+
30
31
  Yields a dict with keys `port` and `url`.
31
32
  """
32
33
  tests_dir = os.path.dirname(__file__)
@@ -44,43 +45,33 @@ def running_server():
44
45
  original_cwd = os.getcwd()
45
46
  try:
46
47
  os.chdir(temp_dir)
47
- process = Popen(
48
- [*jac_cmd, "create", "--use", "client", app_name],
49
- stdin=PIPE,
50
- stdout=PIPE,
51
- stderr=PIPE,
48
+
49
+ # Create jacpack file from all-in-one example
50
+ jacpack_path = os.path.join(temp_dir, "all-in-one.jacpack")
51
+ pack_result = run(
52
+ [*jac_cmd, "jacpack", "pack", all_in_one_path, "-o", jacpack_path],
53
+ capture_output=True,
52
54
  text=True,
53
55
  env=env,
54
56
  )
55
- stdout, stderr = process.communicate()
56
- if process.returncode != 0:
57
- pytest.fail(f"jac create --use client failed: {stderr}")
58
-
59
- project_path = os.path.join(temp_dir, app_name)
57
+ if pack_result.returncode != 0:
58
+ pytest.fail(f"jac jacpack pack failed: {pack_result.stderr}")
60
59
 
61
- for entry in os.listdir(all_in_one_path):
62
- if entry in {"node_modules", "build", "dist", ".pytest_cache"}:
63
- continue
64
- src = os.path.join(all_in_one_path, entry)
65
- dst = os.path.join(project_path, entry)
66
- if os.path.isdir(src):
67
- shutil.copytree(src, dst, dirs_exist_ok=True)
68
- else:
69
- shutil.copy2(src, dst)
70
-
71
- jac_add_result = run(
72
- [*jac_cmd, "add", "--npm"],
73
- cwd=project_path,
60
+ # Create project from jacpack file
61
+ create_result = run(
62
+ [*jac_cmd, "create", app_name, "--use", jacpack_path],
74
63
  capture_output=True,
75
64
  text=True,
76
65
  env=env,
77
66
  )
78
- if jac_add_result.returncode != 0:
79
- pytest.fail(f"jac add --npm failed: {jac_add_result.stderr}")
67
+ if create_result.returncode != 0:
68
+ pytest.fail(f"jac create --use jacpack failed: {create_result.stderr}")
69
+
70
+ project_path = os.path.join(temp_dir, app_name)
80
71
 
81
72
  server_port = get_free_port()
82
73
  server = Popen(
83
- [*jac_cmd, "start", "main.jac", "-p", str(server_port)],
74
+ [*jac_cmd, "start", "-p", str(server_port)],
84
75
  cwd=project_path,
85
76
  env=env,
86
77
  )
@@ -144,14 +135,14 @@ class TestAuthenticationE2E:
144
135
 
145
136
  def _signup(self, page: Page, base_url: str, username: str, password: str) -> None:
146
137
  """Navigate to signup, fill form, and submit."""
147
- page.goto(f"{base_url}#/signup", wait_until="networkidle", timeout=60000)
138
+ page.goto(f"{base_url}/signup", wait_until="networkidle", timeout=60000)
148
139
  page.wait_for_selector('input[type="text"]', timeout=30000)
149
140
  self._fill_auth_form(page, username, password)
150
141
  self._submit_form(page)
151
142
 
152
143
  def _login(self, page: Page, base_url: str, username: str, password: str) -> None:
153
144
  """Navigate to login, fill form, and submit."""
154
- page.goto(f"{base_url}#/login", wait_until="networkidle", timeout=30000)
145
+ page.goto(f"{base_url}/login", wait_until="networkidle", timeout=30000)
155
146
  page.wait_for_selector('input[type="text"]', timeout=30000)
156
147
  self._fill_auth_form(page, username, password)
157
148
  self._submit_form(page)
@@ -166,10 +157,10 @@ class TestAuthenticationE2E:
166
157
  def test_navigate_without_auth(self, running_server: dict, page: Page) -> None:
167
158
  """Visiting protected route without auth should redirect to login."""
168
159
  page.goto(
169
- f"{running_server['url']}#/nested", wait_until="networkidle", timeout=60000
160
+ f"{running_server['url']}/nested", wait_until="networkidle", timeout=60000
170
161
  )
171
162
  page.wait_for_timeout(2000)
172
- assert "#/login" in page.url.lower()
163
+ assert "/login" in page.url.lower()
173
164
 
174
165
  def test_signup_form_submission(self, running_server: dict, page: Page) -> None:
175
166
  """Signup via UI should redirect away from signup page on success."""
@@ -179,7 +170,7 @@ class TestAuthenticationE2E:
179
170
  f"e2e_signup_{int(time.time())}",
180
171
  "test_pass_123",
181
172
  )
182
- assert "#/signup" not in page.url.lower()
173
+ assert "/signup" not in page.url.lower()
183
174
 
184
175
  def test_login_with_valid_credentials(
185
176
  self, running_server: dict, page: Page
@@ -192,7 +183,7 @@ class TestAuthenticationE2E:
192
183
  self._logout(page)
193
184
  self._login(page, base_url, username, password)
194
185
 
195
- assert "#/login" not in page.url.lower() and "#/signup" not in page.url.lower()
186
+ assert "/login" not in page.url.lower() and "/signup" not in page.url.lower()
196
187
 
197
188
  def test_login_with_invalid_credentials(
198
189
  self, running_server: dict, page: Page
@@ -200,7 +191,7 @@ class TestAuthenticationE2E:
200
191
  """Verify login fails for invalid credentials (stays or shows error)."""
201
192
  self._login(page, running_server["url"], "nonexistent_999", "wrong_pass")
202
193
 
203
- assert "#/login" in page.url.lower()
194
+ assert "/login" in page.url.lower()
204
195
  assert page.locator("text=/Invalid credentials/i").first.is_visible()
205
196
 
206
197
  def test_logout_functionality(self, running_server: dict, page: Page) -> None:
@@ -214,7 +205,7 @@ class TestAuthenticationE2E:
214
205
  logout_btn.click()
215
206
  page.wait_for_timeout(1500)
216
207
 
217
- assert "#/login" in page.url.lower() and not logout_btn.is_visible(timeout=5000)
208
+ assert "/login" in page.url.lower() and not logout_btn.is_visible(timeout=5000)
218
209
 
219
210
  def test_complete_auth_flow(self, running_server: dict, page: Page) -> None:
220
211
  """Integration: signup -> logout -> login -> access protected route."""
@@ -222,11 +213,11 @@ class TestAuthenticationE2E:
222
213
  username, password = f"e2e_complete_{int(time.time())}", "complete_pass_123"
223
214
 
224
215
  self._signup(page, base_url, username, password)
225
- assert "#/signup" not in page.url.lower()
216
+ assert "/signup" not in page.url.lower()
226
217
 
227
218
  self._logout(page)
228
219
  self._login(page, base_url, username, password)
229
- assert "#/login" not in page.url.lower()
220
+ assert "/login" not in page.url.lower()
230
221
 
231
- page.goto(f"{base_url}#/nested", wait_until="networkidle", timeout=30000)
232
- assert "#/nested" in page.url.lower()
222
+ page.goto(f"{base_url}/nested", wait_until="networkidle", timeout=30000)
223
+ assert "/nested" in page.url.lower()
@@ -247,29 +247,28 @@ def test_all_in_one_app_endpoints() -> None:
247
247
  print(f"[DEBUG] Error while requesting /cl/app endpoint: {exc}")
248
248
  pytest.fail(f"Failed to GET /cl/app endpoint: {exc}")
249
249
 
250
- # "/cl/app#/nested" – relative paths / nested route
251
- # (hash fragment is client-side only but server should still serve the app shell)
250
+ # "/nested" – SPA catch-all serves app shell for client-side routing
252
251
  try:
253
- print("[DEBUG] Sending GET request to /cl/app#/nested endpoint")
252
+ print(
253
+ "[DEBUG] Sending GET request to /nested endpoint (SPA catch-all)"
254
+ )
254
255
  with urlopen(
255
- f"http://127.0.0.1:{server_port}/cl/app#/nested",
256
+ f"http://127.0.0.1:{server_port}/nested",
256
257
  timeout=200,
257
258
  ) as resp_nested:
258
259
  nested_body = resp_nested.read().decode(
259
260
  "utf-8", errors="ignore"
260
261
  )
261
262
  print(
262
- "[DEBUG] Received response from /cl/app#/nested endpoint\n"
263
+ "[DEBUG] Received response from /nested endpoint\n"
263
264
  f"Status: {resp_nested.status}\n"
264
265
  f"Body (truncated to 500 chars):\n{nested_body[:500]}"
265
266
  )
266
267
  assert resp_nested.status == 200
267
268
  assert "<html" in nested_body.lower()
268
269
  except (URLError, HTTPError) as exc:
269
- print(
270
- f"[DEBUG] Error while requesting /cl/app#/nested endpoint: {exc}"
271
- )
272
- pytest.fail("Failed to GET /cl/app#/nested endpoint")
270
+ print(f"[DEBUG] Error while requesting /nested endpoint: {exc}")
271
+ pytest.fail("Failed to GET /nested endpoint (SPA catch-all)")
273
272
 
274
273
  # Note: CSS serving is tested separately in test_css_with_image
275
274
  # The CSS is bundled into client.js so no separate /static/styles.css endpoint
@@ -521,10 +520,10 @@ def test_all_in_one_app_endpoints() -> None:
521
520
  print(f"[DEBUG] Error verifying TypeScript component: {exc}")
522
521
  pytest.fail("Failed to verify TypeScript component integration")
523
522
 
524
- # Verify nested folder imports are working - /cl/app#/nested route
523
+ # Verify nested folder imports are working - /nested route (SPA catch-all)
525
524
  # This route uses nested folder imports (components.button and button)
526
525
  try:
527
- print("[DEBUG] Verifying nested folder imports via /cl/app#/nested")
526
+ print("[DEBUG] Verifying nested folder imports via /nested")
528
527
  # The nested route should load successfully (already tested above)
529
528
  # Nested imports are compiled and included in the bundle
530
529
  assert "<html" in nested_body.lower(), (
@@ -778,3 +777,202 @@ def test_default_client_app_renders() -> None:
778
777
  print(f"[DEBUG] Restoring working directory to {original_cwd}")
779
778
  os.chdir(original_cwd)
780
779
  gc.collect()
780
+
781
+
782
+ def test_configurable_api_base_url_in_bundle() -> None:
783
+ """Test that [plugins.client.api] base_url is baked into the served JS bundle.
784
+
785
+ End-to-end verification of the configurable API base URL feature:
786
+ 1. Creates a client app using the all-in-one example (which uses walkers/auth)
787
+ 2. Injects [plugins.client.api] base_url into jac.toml
788
+ 3. Starts the server and waits for the bundle to build
789
+ 4. Fetches the served JS bundle
790
+ 5. Asserts the configured URL appears in the bundled JavaScript
791
+ """
792
+ import re
793
+ import tomllib
794
+
795
+ print("[DEBUG] Starting test_configurable_api_base_url_in_bundle")
796
+
797
+ # Resolve the all-in-one example (uses walkers/auth so base URL won't be tree-shaken)
798
+ tests_dir = os.path.dirname(__file__)
799
+ jac_client_root = os.path.dirname(tests_dir)
800
+ all_in_one_path = os.path.join(jac_client_root, "examples", "all-in-one")
801
+
802
+ print(f"[DEBUG] Resolved all-in-one source path: {all_in_one_path}")
803
+ assert os.path.isdir(all_in_one_path), "all-in-one example directory missing"
804
+
805
+ app_name = "e2e-api-base-url"
806
+ configured_base_url = "http://my-custom-backend:9000"
807
+
808
+ with tempfile.TemporaryDirectory() as temp_dir:
809
+ print(f"[DEBUG] Created temporary directory at {temp_dir}")
810
+ original_cwd = os.getcwd()
811
+ try:
812
+ os.chdir(temp_dir)
813
+
814
+ # 1. Create a client app and copy all-in-one into it
815
+ jac_cmd = get_jac_command()
816
+ env = get_env_with_npm()
817
+ print(f"[DEBUG] Running 'jac create --use client {app_name}'")
818
+ process = Popen(
819
+ [*jac_cmd, "create", "--use", "client", app_name],
820
+ stdin=PIPE,
821
+ stdout=PIPE,
822
+ stderr=PIPE,
823
+ text=True,
824
+ env=env,
825
+ )
826
+ stdout, stderr = process.communicate()
827
+ returncode = process.returncode
828
+
829
+ print(
830
+ f"[DEBUG] 'jac create --use client' completed returncode={returncode}\n"
831
+ f"STDOUT:\n{stdout}\n"
832
+ f"STDERR:\n{stderr}\n"
833
+ )
834
+
835
+ if returncode != 0 and "unrecognized arguments: --use" in stderr:
836
+ pytest.fail(
837
+ "Test failed: installed `jac` CLI does not support `create --use client`."
838
+ )
839
+
840
+ assert returncode == 0, (
841
+ f"jac create --use client failed\nSTDOUT:\n{stdout}\nSTDERR:\n{stderr}\n"
842
+ )
843
+
844
+ project_path = os.path.join(temp_dir, app_name)
845
+ assert os.path.isdir(project_path)
846
+
847
+ # Copy all-in-one contents (which uses walkers, auth, etc.)
848
+ print("[DEBUG] Copying @all-in-one contents into created Jac app")
849
+ for entry in os.listdir(all_in_one_path):
850
+ src = os.path.join(all_in_one_path, entry)
851
+ dst = os.path.join(project_path, entry)
852
+ if entry in {"node_modules", "build", "dist", ".pytest_cache"}:
853
+ continue
854
+ if os.path.isdir(src):
855
+ shutil.copytree(src, dst, dirs_exist_ok=True)
856
+ else:
857
+ shutil.copy2(src, dst)
858
+
859
+ # 2. Inject [plugins.client.api] base_url into jac.toml
860
+ jac_toml_path = os.path.join(project_path, "jac.toml")
861
+ assert os.path.isfile(jac_toml_path), "jac.toml should exist"
862
+
863
+ with open(jac_toml_path, "rb") as f:
864
+ original_config = tomllib.load(f)
865
+ print(f"[DEBUG] Original jac.toml keys: {list(original_config.keys())}")
866
+
867
+ # Append api config (the all-in-one jac.toml may already have [plugins.client])
868
+ with open(jac_toml_path, "a") as f:
869
+ f.write(f'\n[plugins.client.api]\nbase_url = "{configured_base_url}"\n')
870
+
871
+ with open(jac_toml_path, "rb") as f:
872
+ updated_config = tomllib.load(f)
873
+ api_base = (
874
+ updated_config.get("plugins", {})
875
+ .get("client", {})
876
+ .get("api", {})
877
+ .get("base_url", "")
878
+ )
879
+ print(f"[DEBUG] Verified jac.toml base_url = {api_base!r}")
880
+ assert api_base == configured_base_url
881
+
882
+ # 3. Install packages
883
+ print("[DEBUG] Running 'jac add --npm' to install packages")
884
+ jac_add_result = run(
885
+ [*jac_cmd, "add", "--npm"],
886
+ cwd=project_path,
887
+ capture_output=True,
888
+ text=True,
889
+ env=env,
890
+ )
891
+ print(
892
+ f"[DEBUG] 'jac add --npm' returncode={jac_add_result.returncode}\n"
893
+ f"STDOUT (truncated):\n{jac_add_result.stdout[:1000]}\n"
894
+ f"STDERR (truncated):\n{jac_add_result.stderr[:1000]}\n"
895
+ )
896
+ if jac_add_result.returncode != 0:
897
+ pytest.fail(
898
+ f"jac add --npm failed\n"
899
+ f"STDOUT:\n{jac_add_result.stdout}\n"
900
+ f"STDERR:\n{jac_add_result.stderr}\n"
901
+ )
902
+
903
+ # 4. Start the server
904
+ server: Popen[bytes] | None = None
905
+ server_port = get_free_port()
906
+ try:
907
+ print(
908
+ f"[DEBUG] Starting server with 'jac start main.jac -p {server_port}'"
909
+ )
910
+ server = Popen(
911
+ [*jac_cmd, "start", "main.jac", "-p", str(server_port)],
912
+ cwd=project_path,
913
+ env=env,
914
+ )
915
+
916
+ print(f"[DEBUG] Waiting for server on 127.0.0.1:{server_port}")
917
+ wait_for_port("127.0.0.1", server_port, timeout=90.0)
918
+ print(
919
+ f"[DEBUG] Server is accepting connections on 127.0.0.1:{server_port}"
920
+ )
921
+
922
+ # 5. Fetch root HTML to find the JS bundle path
923
+ try:
924
+ root_bytes = _wait_for_endpoint(
925
+ f"http://127.0.0.1:{server_port}",
926
+ timeout=120.0,
927
+ poll_interval=2.0,
928
+ request_timeout=30.0,
929
+ )
930
+ root_body = root_bytes.decode("utf-8", errors="ignore")
931
+ print(f"[DEBUG] Root response (truncated):\n{root_body[:500]}")
932
+ assert "<html" in root_body.lower(), "Root should return HTML"
933
+ except (URLError, HTTPError, TimeoutError) as exc:
934
+ pytest.fail(f"Failed to GET root endpoint: {exc}")
935
+
936
+ # 6. Extract JS bundle path and fetch it
937
+ # URL format is /static/client.js?hash=... or /static/client.HASH.js
938
+ script_match = re.search(r'src="(/static/client[^"]+)"', root_body)
939
+ assert script_match, (
940
+ f"Could not find client JS bundle path in HTML:\n{root_body[:1000]}"
941
+ )
942
+
943
+ js_path = script_match.group(1)
944
+ js_url = f"http://127.0.0.1:{server_port}{js_path}"
945
+ print(f"[DEBUG] Fetching JS bundle from {js_url}")
946
+
947
+ with urlopen(js_url, timeout=30) as resp:
948
+ js_body = resp.read().decode("utf-8", errors="ignore")
949
+ assert resp.status == 200, "JS bundle should return 200"
950
+ assert len(js_body) > 0, "JS bundle should not be empty"
951
+ print(f"[DEBUG] JS bundle fetched ({len(js_body)} bytes)")
952
+
953
+ # 7. Assert the configured base URL is baked into the bundle
954
+ assert configured_base_url in js_body, (
955
+ f"Expected configured base_url '{configured_base_url}' to appear "
956
+ f"in the bundled JavaScript, but it was not found.\n"
957
+ f"Bundle size: {len(js_body)} bytes"
958
+ )
959
+ print(f"[DEBUG] Confirmed '{configured_base_url}' found in JS bundle")
960
+
961
+ finally:
962
+ if server is not None:
963
+ print("[DEBUG] Terminating server process")
964
+ server.terminate()
965
+ try:
966
+ server.wait(timeout=15)
967
+ print("[DEBUG] Server terminated cleanly")
968
+ except Exception:
969
+ print("[DEBUG] Server did not terminate cleanly, killing")
970
+ server.kill()
971
+ server.wait(timeout=5)
972
+ time.sleep(1)
973
+ gc.collect()
974
+
975
+ finally:
976
+ print(f"[DEBUG] Restoring working directory to {original_cwd}")
977
+ os.chdir(original_cwd)
978
+ gc.collect()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: jac-client
3
- Version: 0.2.12
3
+ Version: 0.2.14
4
4
  Summary: Build full-stack web applications with Jac - one language for frontend and backend.
5
5
  Author-email: Jason Mars <jason@mars.ninja>
6
6
  Maintainer-email: Jason Mars <jason@mars.ninja>
@@ -11,7 +11,7 @@ Project-URL: Documentation, https://jac-lang.org
11
11
  Keywords: jac,jaclang,jaseci,frontend,full-stack,web-development
12
12
  Requires-Python: >=3.12
13
13
  Description-Content-Type: text/markdown
14
- Requires-Dist: jaclang>=0.9.12
14
+ Requires-Dist: jaclang>=0.9.14
15
15
  Provides-Extra: dev
16
16
  Requires-Dist: python-dotenv==1.0.1; extra == "dev"
17
17
  Requires-Dist: pytest==8.3.5; extra == "dev"
@@ -1,29 +1,31 @@
1
1
  jac_client/examples/all-in-one/button.jac,sha256=KzMM8B8kjPMZmNXImmi8QwNSKhNLBP38kLmX_NQyz20,142
2
- jac_client/examples/all-in-one/main.jac,sha256=y-LmSXHDqhzVlRbjD_MIS5RkKoKUB1EPQHtY08PT3UE,17829
2
+ jac_client/examples/all-in-one/main.jac,sha256=FlpzztN1J7dOMdBvwBZuPlvnDTuzrrZFg584wVAp7t8,3853
3
3
  jac_client/examples/all-in-one/assets/workers/worker.py,sha256=erXICb1WvDKYlReUIzgZf9v0Pey6pmWDbvAm9vtGQmg,131
4
4
  jac_client/examples/all-in-one/components/CategoryFilter.jac,sha256=YQh1OqqZf89lZxKOKum-fK8ep5h8itNcQC0rbaAlMl4,1838
5
- jac_client/examples/all-in-one/components/Header.jac,sha256=NYRnyQKo8NyVFNfAjpEQkBe-Qc9nwHZy9cXGV24nKUI,503
6
- jac_client/examples/all-in-one/components/ProfitOverview.jac,sha256=zF-chUWBK_6pjTuVpzgv76-1Y3cBE7L9tSx8HyIbtGI,2532
7
- jac_client/examples/all-in-one/components/Summary.jac,sha256=ZKH9JzSpShgjVyyWeCnQDVLrSYYkqo0h3fsGBpothFA,3015
5
+ jac_client/examples/all-in-one/components/Header.jac,sha256=TCgz6XBEB9rAkzFSurTOIiFB3NV_I2nmuS7Zdy2PXV8,510
6
+ jac_client/examples/all-in-one/components/ProfitOverview.jac,sha256=MItkmvvaXi8-fcCUen1Pz0tFYwOjmL4_yGamBYeVD14,2539
7
+ jac_client/examples/all-in-one/components/Summary.jac,sha256=C0cxF-aXnp6PEFveik4Oqmv7Jrv20YCqfZ7Cv7vv44c,3022
8
8
  jac_client/examples/all-in-one/components/TransactionForm.jac,sha256=g7tbmUSX5gw2hobhTvMhCAshC4YbIyJ6yTs937iuPsc,7553
9
9
  jac_client/examples/all-in-one/components/TransactionItem.jac,sha256=OJmdWgYTOa8SsBIfUEEdUWkFRWQT_Cfczdm8O8f-vDY,2133
10
- jac_client/examples/all-in-one/components/TransactionList.jac,sha256=rBm0o3zn7VYfPmRwZVdluwkQCfikBlTYGzEd-qBg9-M,1560
10
+ jac_client/examples/all-in-one/components/TransactionList.jac,sha256=__H-RDBtyYDrMDVMT8dxgQYsRb43IsiKqQhg-pcTnsM,1574
11
11
  jac_client/examples/all-in-one/components/button.jac,sha256=uev3QkRyZSe1iBIc0RC-8evbMrStAbTJHP0_4h4R1Mg,140
12
- jac_client/examples/all-in-one/components/navigation.jac,sha256=jLRToiqtiQXuDxGm9FlBT6O1bJQCts0orypcTFfiaVA,4256
12
+ jac_client/examples/all-in-one/components/navigation.jac,sha256=k9dwIGLiNWA5Scep9dFPIKfIYfyO7gu3t8A1fbd-v24,4027
13
13
  jac_client/examples/all-in-one/constants/categories.jac,sha256=5HrX2JN4OhcQpoJg6ylcE1lzuWaSIaJAn8Ebo9DeYzo,1092
14
14
  jac_client/examples/all-in-one/constants/clients.jac,sha256=8M4AhooSTsxEeC2QTn6UwrNHkLitXUWczCaOwQxrbtw,316
15
- jac_client/examples/all-in-one/context/BudgetContext.jac,sha256=YnAGc60OcKxPYZ2WdKz_0VVf_Lf6z_x3XYql5xFSLYk,890
15
+ jac_client/examples/all-in-one/context/BudgetContext.jac,sha256=pva1ZSKD4EPbZXICld-g771NMu4-dLjqZnsnVMlBqD4,897
16
16
  jac_client/examples/all-in-one/hooks/useBudget.jac,sha256=TmidLwmJUhX_mqD0gKSAXfikwkCKXOfhm9P96LpHbqM,4026
17
17
  jac_client/examples/all-in-one/hooks/useLocalStorage.jac,sha256=3DElBqJvpQhbZNyAfScuZGOXhZM73YPqqF5NzPrvNWo,1196
18
- jac_client/examples/all-in-one/pages/BudgetPlanner.jac,sha256=uHil0s-7otuj7Sn7cobwhWMOMRrMCssbFVD-PPQew2E,3742
19
- jac_client/examples/all-in-one/pages/FeaturesTest.jac,sha256=E2jIt5ivBJSDbhEUzw2_JVywLyWx0bnNO5SB5qyW4n8,4333
20
- jac_client/examples/all-in-one/pages/LandingPage.jac,sha256=KUvow59dbolydimTkX9Ibr6lWPMyE27IbH-zJIUO93o,5428
21
- jac_client/examples/all-in-one/pages/budget_planner_ui.cl.jac,sha256=M-h2IkjhP357WpYUWRgrvRSHK5tjZe4RYeogw3LKK-o,2250
22
- jac_client/examples/all-in-one/pages/features_test_ui.cl.jac,sha256=RM7Re1XPpS5fjlmU5aXL-AFaBr77_CcJ1K-C1oFmv7s,26109
23
- jac_client/examples/all-in-one/pages/loginPage.jac,sha256=PBrMTbt3e379nduOEfXGaIpYibXRAivDrxZXubtkaXE,4499
24
- jac_client/examples/all-in-one/pages/nestedDemo.jac,sha256=NJoBLDajJFLSH7h8KQeaWEq66ARgl7Xnj6dCsWIsRGM,1686
25
- jac_client/examples/all-in-one/pages/notFound.jac,sha256=urlwejdhGu4Gf8JyBNyeS7io-htduvEKdJSZjmKVg58,506
26
- jac_client/examples/all-in-one/pages/signupPage.jac,sha256=8gLRXQo1gW_RjPAsydimTrQ9vB8VpqzXP-i_wUrEcqY,4548
18
+ jac_client/examples/all-in-one/pages/[...notFound].jac,sha256=7Em5HP2UVCUncwjKDXDTIGjEV10wmoQGWaLdzietsf0,510
19
+ jac_client/examples/all-in-one/pages/budget.jac,sha256=e1f7zehStW4RYpQue5pCQ0Ltn1_3kdhcVBL50gVJ-Sk,289
20
+ jac_client/examples/all-in-one/pages/budget_planner_ui.cl.jac,sha256=kgi4LyUkJmvSO14TuRKDIejzg0nq84isUBPEzVR_D1g,2257
21
+ jac_client/examples/all-in-one/pages/features.jac,sha256=pthjFEgI-vgA4SfvKlExgOYRfAiDMc_4ZYrge3Wm7L0,163
22
+ jac_client/examples/all-in-one/pages/features_test_ui.cl.jac,sha256=DlPS5vvcvffA2GvjU-KBRJQk8i03l1rDzQbTEr0V3vQ,26144
23
+ jac_client/examples/all-in-one/pages/landing.jac,sha256=jxnH_keYDrSVTDUBjo14cOst8-8Ty120DQnTDYrlR14,5259
24
+ jac_client/examples/all-in-one/pages/layout.jac,sha256=z6OAulH9O1cnBNJUrJrs3n0U390QIJHhQlVDpnNx0tA,510
25
+ jac_client/examples/all-in-one/pages/(auth)/index.jac,sha256=eUMqTonmLKOtXLWmp71lcgWhi3aZ9zUsvBRetBU6d8w,11132
26
+ jac_client/examples/all-in-one/pages/(auth)/nested.jac,sha256=0DYTalcZ71T2inB3LhVPVvMnJ08oIK4Sj_dBivwheg8,1405
27
+ jac_client/examples/all-in-one/pages/(public)/login.jac,sha256=YIyXhBu-TgrDMits6JJMXsTl1PExb-zAOdiOC11v4Dc,4501
28
+ jac_client/examples/all-in-one/pages/(public)/signup.jac,sha256=s155Arbc0iLVyIQukflGn_rjUy96RtBuKcGzu8qod8Q,4549
27
29
  jac_client/examples/all-in-one/utils/formatters.jac,sha256=QfOdGgFf2PWcg6ALbHKk5bAO0P4zqBLoM_2nJltCXGY,1544
28
30
  jac_client/examples/asset-serving/css-with-image/main.jac,sha256=eSYYyyY7S5BcioeVtEoGKTOAINAck2oycOEKD3kq_3E,3140
29
31
  jac_client/examples/asset-serving/image-asset/main.jac,sha256=r4FgBiO_Tg4MRxvXVbbpmrY8x_tqr9YUtYcPgNJmQI4,1764
@@ -42,61 +44,64 @@ jac_client/examples/full-stack-with-auth/main.jac,sha256=16n-w20Uf3R2RsD5WLPxjKP
42
44
  jac_client/examples/little-x/main.jac,sha256=XQiFsuzMYPIr3nky0pDtesylDzMjoA7gokVLI1eDZEA,19704
43
45
  jac_client/examples/little-x/src/submit-button.jac,sha256=2FUBiTkZwvZpPQA1YFcjtso4bpvLniit35vliT5rrXY,430
44
46
  jac_client/examples/nested-folders/nested-advance/main.jac,sha256=EvkJeEkCX2lGTSC_VlD6I7He5IwZe4aoyCa6opb5P_M,775
45
- jac_client/examples/nested-folders/nested-advance/src/ButtonRoot.jac,sha256=MhNU_hQgksEdz6QMPf9T58KmG2H2Hiy4U8bIbWFc7vo,190
46
- jac_client/examples/nested-folders/nested-advance/src/level1/ButtonSecondL.jac,sha256=W85gvda3tysc6O-tZuDv_TeQczAnNSa1FVuOVJ6dAqQ,407
47
+ jac_client/examples/nested-folders/nested-advance/src/ButtonRoot.jac,sha256=OljvOh5mXxeYtv8cw2E2EzYp78DIEgyVKdLpmKi4vEI,197
48
+ jac_client/examples/nested-folders/nested-advance/src/level1/ButtonSecondL.jac,sha256=5o9czFZ245wKLN_ts0RavF_np1K3LwbYaJ6qOqQ59pE,414
47
49
  jac_client/examples/nested-folders/nested-advance/src/level1/Card.jac,sha256=GWsVPHPpF5gxlkhB4rSPOxaLRT-usEjs0ELoHVvKL9g,1076
48
- jac_client/examples/nested-folders/nested-advance/src/level1/level2/ButtonThirdL.jac,sha256=SRTEvSY5N5bbK_wlk0xawNzdF1XCmokvitUdkKEJuNY,576
50
+ jac_client/examples/nested-folders/nested-advance/src/level1/level2/ButtonThirdL.jac,sha256=bAnL52jkE87U7zxGTrYhpn3JhWett2FBI_4iPoelNc8,583
49
51
  jac_client/examples/nested-folders/nested-basic/main.jac,sha256=fV3UymEAORR_1RsU5z2JeNZ4yFr7B9MmlolQ2MhpIgw,298
50
52
  jac_client/examples/nested-folders/nested-basic/src/button.jac,sha256=BUaKr2Pm6RsgQCRVTZXojMfY8HoIB4S3YiItEpjoxCs,139
51
53
  jac_client/examples/nested-folders/nested-basic/src/components/button.jac,sha256=mvAbsu5Q6DQY4Jfo375k3dBm0rMmKAk6E-o3m5-YmNc,135
52
54
  jac_client/examples/ts-support/main.jac,sha256=KcNOi0fZj7tBhWJvusbZ_q3z0cHjlYYfDd_0Mjf6E-k,983
53
55
  jac_client/examples/with-router/main.jac,sha256=Aanl3a880KQ-ki8SfskRu8QJRvvm-_pQIvxcfOHB52k,8460
54
- jac_client/plugin/cli.jac,sha256=JTk5G9aAXLgFsCv_DSLFWrWfV90Rba5XF53gQuATKl0,20114
56
+ jac_client/plugin/cli.jac,sha256=54qGU_7WOKIlE9ltY-0V33Yfu1LkBFs4SSJwCsgQstg,20161
55
57
  jac_client/plugin/client.jac,sha256=WVn8IwQO2Kgr8XLDI8D4FSVj9kdewBXB3Mgi9ifCVTI,2095
56
- jac_client/plugin/client_runtime.cl.jac,sha256=2CZDu01HZ_wgumNq80I62cjeosD8r_8lEjAuBJmFXeI,1969
57
- jac_client/plugin/plugin_config.jac,sha256=sijvX5C7-5c2T8VWgbGW6G6IYi1k6AP_bdbagfd9jNc,13308
58
+ jac_client/plugin/client_runtime.cl.jac,sha256=njf4m86QGS1uZNFuHGg1Carj7cumzt2Ex57_fS5HGXs,2109
59
+ jac_client/plugin/plugin_config.jac,sha256=el5h0z2cTfqg0WUhTuyZw0BHJncvUPa2rNXrW2iQ4HM,13185
58
60
  jac_client/plugin/vite_client_bundle.jac,sha256=l8EY8O2sdsqhtO8I32Of01dgShRQBfMBNWXyl-y-vtY,1016
59
61
  jac_client/plugin/impl/client.impl.jac,sha256=UOmY3Pzi00Cvqdze_BnoIX1QS5_QWEPDQATNp5VDh4k,8956
60
- jac_client/plugin/impl/client_runtime.impl.jac,sha256=-BGeqJsHkYTcZ80fWbkSLb9Q8EEmXOXIFEoPbwQk_q4,10681
62
+ jac_client/plugin/impl/client_runtime.impl.jac,sha256=_YlTwJd3cd4sqHwkYgn_ujFWEDg4N7TPYpKODj46n1Y,11524
61
63
  jac_client/plugin/impl/vite_client_bundle.impl.jac,sha256=KXFqXSZaa08Z6CrEqebfdjo7TvdakTNJHVnGOhj4e0s,2620
62
64
  jac_client/plugin/src/__init__.jac,sha256=pdkHciVYLG1UnE-Pez1X4SULUG2ACMYrUYwWq-CZ3Sw,727
63
65
  jac_client/plugin/src/asset_processor.jac,sha256=Qpm1a174PPJl32nH_eDZYR-6vx59V2NEWfj0knUMwXY,961
64
- jac_client/plugin/src/compiler.jac,sha256=Gt6b9yJ9M93lhLqwhz1iJiWKJ-HGuSYAPvEf5V7hQfw,2319
65
- jac_client/plugin/src/config_loader.jac,sha256=-UJsqmaddZZ2dOJuvqjOXBreAU-DdQccqWodGvcLzRE,1302
66
+ jac_client/plugin/src/compiler.jac,sha256=cH6rd8DCbHSeHc8iNwRAkBvwDBL3YZTyeC1mJthVJUA,3059
67
+ jac_client/plugin/src/config_loader.jac,sha256=kgVpeiQdEzMs5vgdHyfAR08N55AJjOobJonaotRaJdU,1367
66
68
  jac_client/plugin/src/desktop_config.jac,sha256=bFGW5lnLeUZgjbjd1BMHvf38Qbsb8VZ0YcbUf78LZ1Q,1249
67
69
  jac_client/plugin/src/import_processor.jac,sha256=wYg8bD5qHxpvFyXkQxNpqUIV3ei5aMoevA2bWyq9VG8,589
68
70
  jac_client/plugin/src/jac_to_js.jac,sha256=U2_v95tdsbw1oMPGPY0HOhDcAsHg3uQIcGWzLmFdWyc,1115
69
71
  jac_client/plugin/src/package_installer.jac,sha256=5maePqEe3xIys9Ufn54m423tAr54z-urtXc84Ki3bIY,850
70
- jac_client/plugin/src/vite_bundler.jac,sha256=7Sx7Mmyg6VAwdzcQ9y7lGWqb_4mI82b5mEK9bff4idM,1969
72
+ jac_client/plugin/src/route_scanner.jac,sha256=UtMYbXzR7YF-DMQEGnzdinsZn_cHox22QccqOP1YAiI,1472
73
+ jac_client/plugin/src/vite_bundler.jac,sha256=3Xk6mesoOp76d31qG_xQJfB_a8wI6xydM-rBsSIzdqU,2390
71
74
  jac_client/plugin/src/impl/asset_processor.impl.jac,sha256=-ljWYzKLKyAdfJybr8sjJlYSK57KzueeNvTo_WjAFAY,4256
72
- jac_client/plugin/src/impl/compiler.impl.jac,sha256=ZJnxbzYUca7aOrb8GA2qLq0U4HrwXgjlt2swpmSuZ54,13519
73
- jac_client/plugin/src/impl/config_loader.impl.jac,sha256=pTGfdh3g-nQmUiEr6N_mVLqTKpT9-seGv7BpWFtNSxQ,4459
75
+ jac_client/plugin/src/impl/compiler.impl.jac,sha256=gLd2VeLgHhDIDiRq081DYlRU-3Y2tW43MvFRU5S1wIg,19458
76
+ jac_client/plugin/src/impl/config_loader.impl.jac,sha256=F-blKeVWtuh382cazxrMdmpA8lpDFjVawkZBhKRtMhI,4731
74
77
  jac_client/plugin/src/impl/desktop_config.impl.jac,sha256=mitiS3RfHjMstUqPJs2OnB6lFk27GGSrKXCrJK5Sceg,6758
75
78
  jac_client/plugin/src/impl/import_processor.impl.jac,sha256=BMkkZXlF-6jbC-r3tuFj8PDFvDZrbfzuhnaw8qraWIQ,1214
76
79
  jac_client/plugin/src/impl/jac_to_js.impl.jac,sha256=KHblc0PloMJqsX2DRdp3tyJ0k5d39ArPxBLKXsw7mjA,1692
77
- jac_client/plugin/src/impl/package_installer.impl.jac,sha256=YbXlzqmrzNtNSyfDcVY3-975Pqbc9H9wxQ1LQxO6ypE,4020
78
- jac_client/plugin/src/impl/vite_bundler.impl.jac,sha256=DqFgC2vkAw5udxPv1qN3WqOx_KiVLWCjrSibUaSnFhM,29538
79
- jac_client/plugin/src/targets/desktop_target.jac,sha256=TxDdpActsLAvrOZ_QpeQ1F22PehctAraz3zuo4CZ0Lk,1286
80
+ jac_client/plugin/src/impl/package_installer.impl.jac,sha256=rnY4uCzLTMMJ1LvCwGEZyyin4eJOeHDFM-aCqFggWjw,4060
81
+ jac_client/plugin/src/impl/route_scanner.impl.jac,sha256=iRKp819wq303Bnawc_9DW37Xyj7YCMlFJ0w51AgwWSs,7088
82
+ jac_client/plugin/src/impl/vite_bundler.impl.jac,sha256=ivmt1Cs-LLsUsCcWKSSdbY2lc4Xa5VXUqWt8hK4ejpU,30888
83
+ jac_client/plugin/src/targets/desktop_target.jac,sha256=dtfVf6ZirIi4ghTON3Touv_0LGcH2-6-IJP1xzTb_ug,1344
80
84
  jac_client/plugin/src/targets/register.jac,sha256=tiHmOKEgOWlYdY5DYko6M0Ktp2kZr7TZFWKq18Tmp24,835
81
85
  jac_client/plugin/src/targets/registry.jac,sha256=wl1QJEWAyI7KAfTSjIw3PdxpYgtUCpaj7D0c09jZxFM,2664
82
86
  jac_client/plugin/src/targets/web_target.jac,sha256=jstJZEHE0YERW_e5LiHeVZurB9WsuPnm5HMWWdQP3f0,1135
83
- jac_client/plugin/src/targets/desktop/sidecar/main.py,sha256=PVmHvXg2Gta2UzD1O3H6EzFTWzkYQo3n_08rzCKCWHg,4499
84
- jac_client/plugin/src/targets/impl/desktop_target.impl.jac,sha256=7a-lem6Qvlghl6MPiT8_YYYw73xExsrgulir8S-t5Ls,83003
87
+ jac_client/plugin/src/targets/desktop/sidecar/main.py,sha256=JWHqzUlKmUCBypA6A3U9SLflBWtIogO4HpQhf6YwsD4,5371
88
+ jac_client/plugin/src/targets/impl/desktop_target.impl.jac,sha256=5N1izThX5i81YksYzd_D3oRJZ_sBaIWkjrfbZwG3NXI,91361
85
89
  jac_client/plugin/src/targets/impl/registry.impl.jac,sha256=2PUw_cZ9Us6PJRxO9o4aSOwYW_5_VEi6WXbIVS_6fN8,1691
86
90
  jac_client/plugin/src/targets/impl/web_target.impl.jac,sha256=fQQ1zahAnvsD4BFr8JrbF52xZxSJL_K3yE0litbJdBg,5110
87
91
  jac_client/plugin/utils/__init__.jac,sha256=u_rH9sxR8EgLUsbaNpv0tgYmt5sLlrb41LhPRk0w0g4,166
88
92
  jac_client/plugin/utils/bun_installer.jac,sha256=irvOnt2WF6sB_aOH5v6L9Jde-NoP39JDjysXB2V0nv0,473
89
93
  jac_client/plugin/utils/client_deps.jac,sha256=BLJ7UaBi2aC-V-Vl4IsfGYfnRI75QtaO1JNYo_ut0UI,569
90
- jac_client/plugin/utils/impl/bun_installer.impl.jac,sha256=S6yqaxNvQ6HYgSfO7bRu8NiNsYvG8mvK8j4d1_Vf_FM,3483
91
- jac_client/plugin/utils/impl/client_deps.impl.jac,sha256=u2APi7hYTTCzDuiG2wTlsM4Dfi1QPY9FNO6xAIq_gPw,2774
94
+ jac_client/plugin/utils/impl/bun_installer.impl.jac,sha256=AdO65jsrdndbD5ru8xUG_IOQRtSG_N8mnq4Xu7fIPiY,3379
95
+ jac_client/plugin/utils/impl/client_deps.impl.jac,sha256=bcxnv6h8QO6hVdZaoIaTxB4LgaVSp0GwIlQgR_GV4g8,2697
92
96
  jac_client/templates/client.jacpack,sha256=o3aVPZTI1T52gvLHv5bGK0czX8cAx0GgWfMjQP5yA3w,4187
93
- jac_client/templates/fullstack.jacpack,sha256=qS5vlhHjpInxVFkAD8T0FftqWFVW6hAbexl9LufW0eE,23109
97
+ jac_client/templates/fullstack.jacpack,sha256=XjyEO5WJtgWSvZssD680SFrZORDR-Wy9FCRSAHLeoFs,23279
94
98
  jac_client/tests/__init__.py,sha256=HSr78dvKyvNmP7bLmAssfYItAn4puFwAe1oWnV8l7pA,36
95
99
  jac_client/tests/conftest.py,sha256=PU-eYPagFRXSKeXaGadES3s2LlNjzy5VSsXuUPse8_4,11136
96
- jac_client/tests/test_cli.py,sha256=EWpvBNgUfKk7RW5TW1wkM8g6WD0vDRsF3B7mFiOdG48,35318
97
- jac_client/tests/test_e2e.py,sha256=MqMXiUnLl8qwsW-OQFN1GK-5hbCKKzxT2SewmVWEsow,8197
100
+ jac_client/tests/test_cli.py,sha256=YtpFzdQca264ZIXO9RBfvV6LVBGaeZ2B5iKFsvVMx4E,37995
101
+ jac_client/tests/test_desktop_api_url.py,sha256=x81jMYxSnIFheU2dvDyqqfoKnm3i0LxY5BBY8lObxfU,32513
102
+ jac_client/tests/test_e2e.py,sha256=icRlO6LYBdsS7p7HqaPQj9n6C2TMviggdiv7wmvrmvw,7874
98
103
  jac_client/tests/test_helpers.py,sha256=UqXYIl0Vi_8IDJ1efsJh1BcaJPudINfpLojhwDxxtNg,1615
99
- jac_client/tests/test_it.py,sha256=Wy8VeBLcchXZFDHUBoMEWeU4oUXxDwvWVCnMPvxlnFQ,37825
104
+ jac_client/tests/test_it.py,sha256=p8840vOmvhzS56BQIiAvpcK6gkavENoI5pxhFwDd5Ns,46381
100
105
  jac_client/tests/test_it_desktop.py,sha256=mzaDfFFhmN762FrFH1WEXQh99cq5bS-eZqwmI-ousvM,32143
101
106
  jac_client/tests/fixtures/basic-app/app.jac,sha256=sDup4PmtUm93oVOxIz874SSZfMimPv4Qn683iXm43TI,489
102
107
  jac_client/tests/fixtures/cl_file/app.cl.jac,sha256=fHJvjKWLhX5uVdZl12mPwcNRgMVFrCz8oY3oMoCWeuM,1157
@@ -108,8 +113,8 @@ jac_client/tests/fixtures/relative_import/button.jac,sha256=kCDNaHEcxMEFdezfnecy
108
113
  jac_client/tests/fixtures/spawn_test/app.jac,sha256=cooYrB7xhHMk9xWOZ6MIiY4I6kmodW2v-nyVnd1RR74,3863
109
114
  jac_client/tests/fixtures/test_fragments_spread/app.jac,sha256=CMzAz4Ydx_5eAV82-io8sJdy8_xy-mR7YOVc7FcozlU,1277
110
115
  jac_client/tests/fixtures/with-ts/app.jac,sha256=1j1IH_4mfgLtgPq2Xc5PrGHBvmLQl6U0ddbb2L5KwuA,981
111
- jac_client-0.2.12.dist-info/METADATA,sha256=odF-aHda-UyjLXi5xA460DkljU5gE98qB0PdEL1hIds,5552
112
- jac_client-0.2.12.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
113
- jac_client-0.2.12.dist-info/entry_points.txt,sha256=fVrlaJKcSa2DK2hcfR6bNaQDB9mszMpZeEa6pitMdt4,154
114
- jac_client-0.2.12.dist-info/top_level.txt,sha256=u1VEBfiqwRrZEopKraIh-Ym55qSnDZR3Q5xdw2HinhU,11
115
- jac_client-0.2.12.dist-info/RECORD,,
116
+ jac_client-0.2.14.dist-info/METADATA,sha256=ypYp-09-em17YgPMvusfREm-870m3IH_UWDzt3nwPfo,5552
117
+ jac_client-0.2.14.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
118
+ jac_client-0.2.14.dist-info/entry_points.txt,sha256=fVrlaJKcSa2DK2hcfR6bNaQDB9mszMpZeEa6pitMdt4,154
119
+ jac_client-0.2.14.dist-info/top_level.txt,sha256=u1VEBfiqwRrZEopKraIh-Ym55qSnDZR3Q5xdw2HinhU,11
120
+ jac_client-0.2.14.dist-info/RECORD,,