jac-client 0.2.11__py3-none-any.whl → 0.2.13__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.
@@ -144,14 +144,14 @@ class TestAuthenticationE2E:
144
144
 
145
145
  def _signup(self, page: Page, base_url: str, username: str, password: str) -> None:
146
146
  """Navigate to signup, fill form, and submit."""
147
- page.goto(f"{base_url}#/signup", wait_until="networkidle", timeout=60000)
147
+ page.goto(f"{base_url}/signup", wait_until="networkidle", timeout=60000)
148
148
  page.wait_for_selector('input[type="text"]', timeout=30000)
149
149
  self._fill_auth_form(page, username, password)
150
150
  self._submit_form(page)
151
151
 
152
152
  def _login(self, page: Page, base_url: str, username: str, password: str) -> None:
153
153
  """Navigate to login, fill form, and submit."""
154
- page.goto(f"{base_url}#/login", wait_until="networkidle", timeout=30000)
154
+ page.goto(f"{base_url}/login", wait_until="networkidle", timeout=30000)
155
155
  page.wait_for_selector('input[type="text"]', timeout=30000)
156
156
  self._fill_auth_form(page, username, password)
157
157
  self._submit_form(page)
@@ -166,10 +166,10 @@ class TestAuthenticationE2E:
166
166
  def test_navigate_without_auth(self, running_server: dict, page: Page) -> None:
167
167
  """Visiting protected route without auth should redirect to login."""
168
168
  page.goto(
169
- f"{running_server['url']}#/nested", wait_until="networkidle", timeout=60000
169
+ f"{running_server['url']}/nested", wait_until="networkidle", timeout=60000
170
170
  )
171
171
  page.wait_for_timeout(2000)
172
- assert "#/login" in page.url.lower()
172
+ assert "/login" in page.url.lower()
173
173
 
174
174
  def test_signup_form_submission(self, running_server: dict, page: Page) -> None:
175
175
  """Signup via UI should redirect away from signup page on success."""
@@ -179,7 +179,7 @@ class TestAuthenticationE2E:
179
179
  f"e2e_signup_{int(time.time())}",
180
180
  "test_pass_123",
181
181
  )
182
- assert "#/signup" not in page.url.lower()
182
+ assert "/signup" not in page.url.lower()
183
183
 
184
184
  def test_login_with_valid_credentials(
185
185
  self, running_server: dict, page: Page
@@ -192,7 +192,7 @@ class TestAuthenticationE2E:
192
192
  self._logout(page)
193
193
  self._login(page, base_url, username, password)
194
194
 
195
- assert "#/login" not in page.url.lower() and "#/signup" not in page.url.lower()
195
+ assert "/login" not in page.url.lower() and "/signup" not in page.url.lower()
196
196
 
197
197
  def test_login_with_invalid_credentials(
198
198
  self, running_server: dict, page: Page
@@ -200,7 +200,7 @@ class TestAuthenticationE2E:
200
200
  """Verify login fails for invalid credentials (stays or shows error)."""
201
201
  self._login(page, running_server["url"], "nonexistent_999", "wrong_pass")
202
202
 
203
- assert "#/login" in page.url.lower()
203
+ assert "/login" in page.url.lower()
204
204
  assert page.locator("text=/Invalid credentials/i").first.is_visible()
205
205
 
206
206
  def test_logout_functionality(self, running_server: dict, page: Page) -> None:
@@ -214,7 +214,7 @@ class TestAuthenticationE2E:
214
214
  logout_btn.click()
215
215
  page.wait_for_timeout(1500)
216
216
 
217
- assert "#/login" in page.url.lower() and not logout_btn.is_visible(timeout=5000)
217
+ assert "/login" in page.url.lower() and not logout_btn.is_visible(timeout=5000)
218
218
 
219
219
  def test_complete_auth_flow(self, running_server: dict, page: Page) -> None:
220
220
  """Integration: signup -> logout -> login -> access protected route."""
@@ -222,11 +222,11 @@ class TestAuthenticationE2E:
222
222
  username, password = f"e2e_complete_{int(time.time())}", "complete_pass_123"
223
223
 
224
224
  self._signup(page, base_url, username, password)
225
- assert "#/signup" not in page.url.lower()
225
+ assert "/signup" not in page.url.lower()
226
226
 
227
227
  self._logout(page)
228
228
  self._login(page, base_url, username, password)
229
- assert "#/login" not in page.url.lower()
229
+ assert "/login" not in page.url.lower()
230
230
 
231
- page.goto(f"{base_url}#/nested", wait_until="networkidle", timeout=30000)
232
- assert "#/nested" in page.url.lower()
231
+ page.goto(f"{base_url}/nested", wait_until="networkidle", timeout=30000)
232
+ 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.11
3
+ Version: 0.2.13
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.11
14
+ Requires-Dist: jaclang>=0.9.13
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"
@@ -51,50 +51,53 @@ jac_client/examples/nested-folders/nested-basic/src/button.jac,sha256=BUaKr2Pm6R
51
51
  jac_client/examples/nested-folders/nested-basic/src/components/button.jac,sha256=mvAbsu5Q6DQY4Jfo375k3dBm0rMmKAk6E-o3m5-YmNc,135
52
52
  jac_client/examples/ts-support/main.jac,sha256=KcNOi0fZj7tBhWJvusbZ_q3z0cHjlYYfDd_0Mjf6E-k,983
53
53
  jac_client/examples/with-router/main.jac,sha256=Aanl3a880KQ-ki8SfskRu8QJRvvm-_pQIvxcfOHB52k,8460
54
- jac_client/plugin/cli.jac,sha256=JTk5G9aAXLgFsCv_DSLFWrWfV90Rba5XF53gQuATKl0,20114
54
+ jac_client/plugin/cli.jac,sha256=54qGU_7WOKIlE9ltY-0V33Yfu1LkBFs4SSJwCsgQstg,20161
55
55
  jac_client/plugin/client.jac,sha256=WVn8IwQO2Kgr8XLDI8D4FSVj9kdewBXB3Mgi9ifCVTI,2095
56
- jac_client/plugin/client_runtime.cl.jac,sha256=2CZDu01HZ_wgumNq80I62cjeosD8r_8lEjAuBJmFXeI,1969
56
+ jac_client/plugin/client_runtime.cl.jac,sha256=K8u-XwGr998XO2o-dm0OkistqH_odY5GGzcua0VZUW0,2010
57
57
  jac_client/plugin/plugin_config.jac,sha256=sijvX5C7-5c2T8VWgbGW6G6IYi1k6AP_bdbagfd9jNc,13308
58
58
  jac_client/plugin/vite_client_bundle.jac,sha256=l8EY8O2sdsqhtO8I32Of01dgShRQBfMBNWXyl-y-vtY,1016
59
59
  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
60
+ jac_client/plugin/impl/client_runtime.impl.jac,sha256=FhBo_GrnjVBLmFw2-DFz4UwBiHDmQLbIWAHQ_qHbxww,11181
61
61
  jac_client/plugin/impl/vite_client_bundle.impl.jac,sha256=KXFqXSZaa08Z6CrEqebfdjo7TvdakTNJHVnGOhj4e0s,2620
62
62
  jac_client/plugin/src/__init__.jac,sha256=pdkHciVYLG1UnE-Pez1X4SULUG2ACMYrUYwWq-CZ3Sw,727
63
63
  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
64
+ jac_client/plugin/src/compiler.jac,sha256=vTkxjjFwykhWMvfGF9jY6XC5KHXJ-LjHUc6EsRqSjjs,2441
65
+ jac_client/plugin/src/config_loader.jac,sha256=kgVpeiQdEzMs5vgdHyfAR08N55AJjOobJonaotRaJdU,1367
66
66
  jac_client/plugin/src/desktop_config.jac,sha256=bFGW5lnLeUZgjbjd1BMHvf38Qbsb8VZ0YcbUf78LZ1Q,1249
67
67
  jac_client/plugin/src/import_processor.jac,sha256=wYg8bD5qHxpvFyXkQxNpqUIV3ei5aMoevA2bWyq9VG8,589
68
68
  jac_client/plugin/src/jac_to_js.jac,sha256=U2_v95tdsbw1oMPGPY0HOhDcAsHg3uQIcGWzLmFdWyc,1115
69
69
  jac_client/plugin/src/package_installer.jac,sha256=5maePqEe3xIys9Ufn54m423tAr54z-urtXc84Ki3bIY,850
70
- jac_client/plugin/src/vite_bundler.jac,sha256=7Sx7Mmyg6VAwdzcQ9y7lGWqb_4mI82b5mEK9bff4idM,1969
70
+ jac_client/plugin/src/vite_bundler.jac,sha256=3Xk6mesoOp76d31qG_xQJfB_a8wI6xydM-rBsSIzdqU,2390
71
71
  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
72
+ jac_client/plugin/src/impl/compiler.impl.jac,sha256=QPKV5UoBcScC6oSOceFM7Y9gsiID-pw_vkKeJXLs080,12054
73
+ jac_client/plugin/src/impl/config_loader.impl.jac,sha256=F-blKeVWtuh382cazxrMdmpA8lpDFjVawkZBhKRtMhI,4731
74
74
  jac_client/plugin/src/impl/desktop_config.impl.jac,sha256=mitiS3RfHjMstUqPJs2OnB6lFk27GGSrKXCrJK5Sceg,6758
75
75
  jac_client/plugin/src/impl/import_processor.impl.jac,sha256=BMkkZXlF-6jbC-r3tuFj8PDFvDZrbfzuhnaw8qraWIQ,1214
76
76
  jac_client/plugin/src/impl/jac_to_js.impl.jac,sha256=KHblc0PloMJqsX2DRdp3tyJ0k5d39ArPxBLKXsw7mjA,1692
77
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=KFEuPqqAAgS1IuWPBxGT5T9Rib6n0vbL3UcMX9UM-uE,28805
79
- jac_client/plugin/src/targets/desktop_target.jac,sha256=TxDdpActsLAvrOZ_QpeQ1F22PehctAraz3zuo4CZ0Lk,1286
78
+ jac_client/plugin/src/impl/vite_bundler.impl.jac,sha256=ANywKi6hQWYcFyXbEKovy05gaHCjEtzaf4VXRdUP8D4,30700
79
+ jac_client/plugin/src/targets/desktop_target.jac,sha256=dtfVf6ZirIi4ghTON3Touv_0LGcH2-6-IJP1xzTb_ug,1344
80
80
  jac_client/plugin/src/targets/register.jac,sha256=tiHmOKEgOWlYdY5DYko6M0Ktp2kZr7TZFWKq18Tmp24,835
81
81
  jac_client/plugin/src/targets/registry.jac,sha256=wl1QJEWAyI7KAfTSjIw3PdxpYgtUCpaj7D0c09jZxFM,2664
82
82
  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
83
+ jac_client/plugin/src/targets/desktop/sidecar/main.py,sha256=JWHqzUlKmUCBypA6A3U9SLflBWtIogO4HpQhf6YwsD4,5371
84
+ jac_client/plugin/src/targets/impl/desktop_target.impl.jac,sha256=5N1izThX5i81YksYzd_D3oRJZ_sBaIWkjrfbZwG3NXI,91361
85
85
  jac_client/plugin/src/targets/impl/registry.impl.jac,sha256=2PUw_cZ9Us6PJRxO9o4aSOwYW_5_VEi6WXbIVS_6fN8,1691
86
86
  jac_client/plugin/src/targets/impl/web_target.impl.jac,sha256=fQQ1zahAnvsD4BFr8JrbF52xZxSJL_K3yE0litbJdBg,5110
87
- jac_client/plugin/utils/__init__.jac,sha256=1s-8qMGXIdGfhlZD4XXb2lHcN9M6pIGllTK-AyHdeH0,118
87
+ jac_client/plugin/utils/__init__.jac,sha256=u_rH9sxR8EgLUsbaNpv0tgYmt5sLlrb41LhPRk0w0g4,166
88
88
  jac_client/plugin/utils/bun_installer.jac,sha256=irvOnt2WF6sB_aOH5v6L9Jde-NoP39JDjysXB2V0nv0,473
89
+ jac_client/plugin/utils/client_deps.jac,sha256=BLJ7UaBi2aC-V-Vl4IsfGYfnRI75QtaO1JNYo_ut0UI,569
89
90
  jac_client/plugin/utils/impl/bun_installer.impl.jac,sha256=S6yqaxNvQ6HYgSfO7bRu8NiNsYvG8mvK8j4d1_Vf_FM,3483
90
- jac_client/templates/client.jacpack,sha256=7Atks2Swszn-0Amcl7LfQWXuCw4sOoGOSArMKlKzGmI,4279
91
- jac_client/templates/fullstack.jacpack,sha256=wVHTQw13fWI_hy8gndteWL0ht9VidygupJ8dgNpdQ1g,23201
91
+ jac_client/plugin/utils/impl/client_deps.impl.jac,sha256=u2APi7hYTTCzDuiG2wTlsM4Dfi1QPY9FNO6xAIq_gPw,2774
92
+ jac_client/templates/client.jacpack,sha256=o3aVPZTI1T52gvLHv5bGK0czX8cAx0GgWfMjQP5yA3w,4187
93
+ jac_client/templates/fullstack.jacpack,sha256=qS5vlhHjpInxVFkAD8T0FftqWFVW6hAbexl9LufW0eE,23109
92
94
  jac_client/tests/__init__.py,sha256=HSr78dvKyvNmP7bLmAssfYItAn4puFwAe1oWnV8l7pA,36
93
95
  jac_client/tests/conftest.py,sha256=PU-eYPagFRXSKeXaGadES3s2LlNjzy5VSsXuUPse8_4,11136
94
- jac_client/tests/test_cli.py,sha256=lK2LlwqxzmZse-ewlaaMTqDkjwispMsVa9iEqCjilj4,32452
95
- jac_client/tests/test_e2e.py,sha256=MqMXiUnLl8qwsW-OQFN1GK-5hbCKKzxT2SewmVWEsow,8197
96
+ jac_client/tests/test_cli.py,sha256=YtpFzdQca264ZIXO9RBfvV6LVBGaeZ2B5iKFsvVMx4E,37995
97
+ jac_client/tests/test_desktop_api_url.py,sha256=x81jMYxSnIFheU2dvDyqqfoKnm3i0LxY5BBY8lObxfU,32513
98
+ jac_client/tests/test_e2e.py,sha256=QNVKkgwLY1WDmc6EKJ9Vznuu0Q2A64HZAfzDZe0dEaQ,8184
96
99
  jac_client/tests/test_helpers.py,sha256=UqXYIl0Vi_8IDJ1efsJh1BcaJPudINfpLojhwDxxtNg,1615
97
- jac_client/tests/test_it.py,sha256=Wy8VeBLcchXZFDHUBoMEWeU4oUXxDwvWVCnMPvxlnFQ,37825
100
+ jac_client/tests/test_it.py,sha256=p8840vOmvhzS56BQIiAvpcK6gkavENoI5pxhFwDd5Ns,46381
98
101
  jac_client/tests/test_it_desktop.py,sha256=mzaDfFFhmN762FrFH1WEXQh99cq5bS-eZqwmI-ousvM,32143
99
102
  jac_client/tests/fixtures/basic-app/app.jac,sha256=sDup4PmtUm93oVOxIz874SSZfMimPv4Qn683iXm43TI,489
100
103
  jac_client/tests/fixtures/cl_file/app.cl.jac,sha256=fHJvjKWLhX5uVdZl12mPwcNRgMVFrCz8oY3oMoCWeuM,1157
@@ -106,8 +109,8 @@ jac_client/tests/fixtures/relative_import/button.jac,sha256=kCDNaHEcxMEFdezfnecy
106
109
  jac_client/tests/fixtures/spawn_test/app.jac,sha256=cooYrB7xhHMk9xWOZ6MIiY4I6kmodW2v-nyVnd1RR74,3863
107
110
  jac_client/tests/fixtures/test_fragments_spread/app.jac,sha256=CMzAz4Ydx_5eAV82-io8sJdy8_xy-mR7YOVc7FcozlU,1277
108
111
  jac_client/tests/fixtures/with-ts/app.jac,sha256=1j1IH_4mfgLtgPq2Xc5PrGHBvmLQl6U0ddbb2L5KwuA,981
109
- jac_client-0.2.11.dist-info/METADATA,sha256=OKfil5EIrTpafAYyKF_cj6Q7DSAN2jkhZ_ic35rEAcQ,5552
110
- jac_client-0.2.11.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
111
- jac_client-0.2.11.dist-info/entry_points.txt,sha256=fVrlaJKcSa2DK2hcfR6bNaQDB9mszMpZeEa6pitMdt4,154
112
- jac_client-0.2.11.dist-info/top_level.txt,sha256=u1VEBfiqwRrZEopKraIh-Ym55qSnDZR3Q5xdw2HinhU,11
113
- jac_client-0.2.11.dist-info/RECORD,,
112
+ jac_client-0.2.13.dist-info/METADATA,sha256=husYWbw76gE444kA_UzCcenhK8FfAkFY0UeX_YFMpXs,5552
113
+ jac_client-0.2.13.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
114
+ jac_client-0.2.13.dist-info/entry_points.txt,sha256=fVrlaJKcSa2DK2hcfR6bNaQDB9mszMpZeEa6pitMdt4,154
115
+ jac_client-0.2.13.dist-info/top_level.txt,sha256=u1VEBfiqwRrZEopKraIh-Ym55qSnDZR3Q5xdw2HinhU,11
116
+ jac_client-0.2.13.dist-info/RECORD,,