@tscircuit/fake-snippets 0.0.110 → 0.0.112

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 (48) hide show
  1. package/bun-tests/fake-snippets-api/fixtures/get-test-server.ts +1 -0
  2. package/bun-tests/fake-snippets-api/routes/orgs/create.test.ts +2 -2
  3. package/bun-tests/fake-snippets-api/routes/orgs/get.test.ts +3 -2
  4. package/bun-tests/fake-snippets-api/routes/orgs/update.test.ts +52 -0
  5. package/bun-tests/fake-snippets-api/routes/packages/list_latest.test.ts +4 -4
  6. package/bun.lock +19 -7
  7. package/dist/bundle.js +85 -36
  8. package/dist/index.d.ts +33 -13
  9. package/dist/index.js +13 -6
  10. package/dist/schema.d.ts +27 -8
  11. package/dist/schema.js +6 -3
  12. package/fake-snippets-api/lib/db/db-client.ts +7 -3
  13. package/fake-snippets-api/lib/db/schema.ts +4 -2
  14. package/fake-snippets-api/lib/db/seed.ts +2 -0
  15. package/fake-snippets-api/lib/middleware/with-session-auth.ts +59 -7
  16. package/fake-snippets-api/lib/public-mapping/public-map-org.ts +4 -2
  17. package/fake-snippets-api/routes/api/orgs/create.ts +4 -2
  18. package/fake-snippets-api/routes/api/orgs/get.ts +1 -1
  19. package/fake-snippets-api/routes/api/orgs/list_members.ts +1 -8
  20. package/fake-snippets-api/routes/api/orgs/update.ts +31 -6
  21. package/fake-snippets-api/routes/api/packages/create.ts +5 -2
  22. package/package.json +7 -5
  23. package/src/App.tsx +3 -5
  24. package/src/components/CmdKMenu.tsx +1 -1
  25. package/src/components/DownloadButtonAndMenu.tsx +14 -1
  26. package/src/components/GithubAvatarWithFallback.tsx +33 -0
  27. package/src/components/PackageCard.tsx +2 -5
  28. package/src/components/PackagesList.tsx +2 -2
  29. package/src/components/ProfileRouter.tsx +2 -2
  30. package/src/components/SentryNotFoundReporter.tsx +44 -0
  31. package/src/components/TrendingPackagesCarousel.tsx +2 -2
  32. package/src/components/ViewPackagePage/components/sidebar-releases-section.tsx +2 -2
  33. package/src/components/organization/OrganizationCard.tsx +15 -18
  34. package/src/components/organization/OrganizationHeader.tsx +14 -32
  35. package/src/components/organization/OrganizationMembers.tsx +1 -3
  36. package/src/components/preview/ConnectedPackagesList.tsx +1 -1
  37. package/src/hooks/use-hydration.ts +30 -0
  38. package/src/hooks/use-org-by-github-handle.ts +1 -3
  39. package/src/hooks/use-org-by-org-name.ts +24 -0
  40. package/src/lib/download-fns/download-kicad-files.ts +10 -0
  41. package/src/lib/download-fns/download-step.ts +12 -0
  42. package/src/pages/create-organization.tsx +1 -0
  43. package/src/pages/editor.tsx +1 -3
  44. package/src/pages/organization-settings.tsx +4 -1
  45. package/src/pages/search.tsx +7 -2
  46. package/src/pages/user-profile.tsx +1 -1
  47. package/src/pages/user-settings.tsx +161 -0
  48. package/src/pages/view-package.tsx +23 -3
@@ -126,6 +126,7 @@ const seedDatabase = (db: DbClient) => {
126
126
  // Seed a organization for account2
127
127
  const organization = db.addOrganization({
128
128
  name: "jane",
129
+ github_handle: "jane",
129
130
  owner_account_id: account2.account_id,
130
131
  })
131
132
 
@@ -23,8 +23,8 @@ test("POST /api/orgs/create - should create a new org for the user", async () =>
23
23
  test("POST /api/orgs/create - should reject duplicate org names", async () => {
24
24
  const { axios, seed } = await getTestServer()
25
25
  try {
26
- const orgResponse = await axios.post("/api/orgs/create", {
27
- name: seed.organization.github_handle,
26
+ await axios.post("/api/orgs/create", {
27
+ name: seed.organization.org_name,
28
28
  })
29
29
  throw new Error("Expected request to fail")
30
30
  } catch (error: any) {
@@ -1,7 +1,7 @@
1
1
  import { getTestServer } from "bun-tests/fake-snippets-api/fixtures/get-test-server"
2
2
  import { expect, test } from "bun:test"
3
3
 
4
- test("GET /api/orgs/get - should return org by org_id", async () => {
4
+ test("GET /api/orgs/get - should return org by org_id 69", async () => {
5
5
  const { axios, jane_axios, seed } = await getTestServer()
6
6
 
7
7
  const getResponse = await jane_axios.get("/api/orgs/get", {
@@ -17,7 +17,8 @@ test("GET /api/orgs/get - should return org by org_id", async () => {
17
17
  const responseBody2 = getNotOwnerResponse.data
18
18
  expect(responseBody.org).toBeDefined()
19
19
  expect(responseBody.org.org_id).toBe(seed.organization.org_id)
20
- expect(responseBody.org.name).toBe(seed.organization.github_handle)
20
+ expect(responseBody.org.name).toBe(seed.organization.org_name)
21
+ expect(responseBody.org.github_handle).toBe(seed.organization.github_handle)
21
22
  expect(responseBody.org.user_permissions?.can_manage_org).toBe(true)
22
23
  expect(responseBody2.org.user_permissions?.can_manage_org).not.toBe(true)
23
24
  })
@@ -97,3 +97,55 @@ test("POST /api/orgs/update - should reject duplicate name", async () => {
97
97
  )
98
98
  }
99
99
  })
100
+
101
+ test("POST /api/orgs/update - should update github_handle when owner", async () => {
102
+ const { axios, db } = await getTestServer()
103
+
104
+ const createResponse = await axios.post("/api/orgs/create", {
105
+ name: "handle-owner",
106
+ })
107
+ const org = createResponse.data.org
108
+
109
+ const updateResponse = await axios.post("/api/orgs/update", {
110
+ org_id: org.org_id,
111
+ github_handle: "handle-owner",
112
+ })
113
+
114
+ expect(updateResponse.status).toBe(200)
115
+
116
+ const state = db.getState()
117
+ const updatedOrg = state.organizations.find(
118
+ (o: any) => o.org_id === org.org_id,
119
+ )
120
+ expect(updatedOrg?.github_handle).toBe("handle-owner")
121
+ })
122
+
123
+ test("POST /api/orgs/update - should reject duplicate github_handle", async () => {
124
+ const { axios } = await getTestServer()
125
+
126
+ const orgAResponse = await axios.post("/api/orgs/create", {
127
+ name: "dup-handle-a",
128
+ })
129
+ const orgA = orgAResponse.data.org
130
+
131
+ await axios.post("/api/orgs/update", {
132
+ org_id: orgA.org_id,
133
+ github_handle: "duplicate-handle",
134
+ })
135
+
136
+ const orgBResponse = await axios.post("/api/orgs/create", {
137
+ name: "dup-handle-b",
138
+ })
139
+ const orgB = orgBResponse.data.org
140
+
141
+ try {
142
+ await axios.post("/api/orgs/update", {
143
+ org_id: orgB.org_id,
144
+ github_handle: "duplicate-handle",
145
+ })
146
+ throw new Error("Expected request to fail")
147
+ } catch (error: any) {
148
+ expect(error.status).toBe(400)
149
+ expect(error.data.error.error_code).toBe("org_github_handle_already_exists")
150
+ }
151
+ })
@@ -7,7 +7,7 @@ test("list latest packages", async () => {
7
7
  // Add some test packages
8
8
  const packages = [
9
9
  {
10
- name: "Package1",
10
+ name: "user1/Package1",
11
11
  unscoped_name: "Package1",
12
12
  owner_github_username: "user1",
13
13
  creator_account_id: "creator1",
@@ -23,7 +23,7 @@ test("list latest packages", async () => {
23
23
  is_snippet: false,
24
24
  },
25
25
  {
26
- name: "Package2",
26
+ name: "user2/Package2",
27
27
  unscoped_name: "Package2",
28
28
  owner_github_username: "user2",
29
29
  creator_account_id: "creator2",
@@ -39,7 +39,7 @@ test("list latest packages", async () => {
39
39
  is_snippet: false,
40
40
  },
41
41
  {
42
- name: "Package3",
42
+ name: "user3/Package3",
43
43
  unscoped_name: "Package3",
44
44
  owner_github_username: "user3",
45
45
  creator_account_id: "creator3",
@@ -56,7 +56,7 @@ test("list latest packages", async () => {
56
56
  },
57
57
  // Add a snippet to verify it's filtered out
58
58
  {
59
- name: "Snippet1",
59
+ name: "user4/Snippet1",
60
60
  unscoped_name: "Snippet1",
61
61
  owner_github_username: "user4",
62
62
  creator_account_id: "creator4",
package/bun.lock CHANGED
@@ -48,7 +48,7 @@
48
48
  "@resvg/resvg-wasm": "^2.6.2",
49
49
  "@sentry/react": "^10.10.0",
50
50
  "@tailwindcss/typography": "^0.5.16",
51
- "@tscircuit/3d-viewer": "^0.0.402",
51
+ "@tscircuit/3d-viewer": "^0.0.407",
52
52
  "@tscircuit/assembly-viewer": "^0.0.5",
53
53
  "@tscircuit/create-snippet-url": "^0.0.8",
54
54
  "@tscircuit/eval": "^0.0.325",
@@ -80,11 +80,12 @@
80
80
  "circuit-json-to-bom-csv": "^0.0.7",
81
81
  "circuit-json-to-gerber": "^0.0.29",
82
82
  "circuit-json-to-gltf": "^0.0.14",
83
- "circuit-json-to-kicad": "^0.0.3",
83
+ "circuit-json-to-kicad": "^0.0.22",
84
84
  "circuit-json-to-pnp-csv": "^0.0.7",
85
85
  "circuit-json-to-readable-netlist": "^0.0.13",
86
86
  "circuit-json-to-simple-3d": "^0.0.7",
87
87
  "circuit-json-to-spice": "^0.0.6",
88
+ "circuit-json-to-step": "^0.0.2",
88
89
  "circuit-json-to-tscircuit": "^0.0.9",
89
90
  "circuit-to-svg": "^0.0.202",
90
91
  "class-variance-authority": "^0.7.1",
@@ -110,7 +111,7 @@
110
111
  "jscad-electronics": "^0.0.25",
111
112
  "jszip": "^3.10.1",
112
113
  "kicad-converter": "^0.0.17",
113
- "kicadts": "^0.0.9",
114
+ "kicadts": "^0.0.10",
114
115
  "ky": "^1.7.5",
115
116
  "lucide-react": "^0.488.0",
116
117
  "lz-string": "^1.5.0",
@@ -144,6 +145,7 @@
144
145
  "sitemap": "^8.0.0",
145
146
  "sonner": "^1.5.0",
146
147
  "states-us": "^1.1.1",
148
+ "stepts": "^0.0.1",
147
149
  "svgo": "^4.0.0",
148
150
  "tailwind-merge": "^2.5.2",
149
151
  "tailwindcss": "^3.4.13",
@@ -743,7 +745,7 @@
743
745
 
744
746
  "@ts-morph/common": ["@ts-morph/common@0.22.0", "", { "dependencies": { "fast-glob": "^3.3.2", "minimatch": "^9.0.3", "mkdirp": "^3.0.1", "path-browserify": "^1.0.1" } }, "sha512-HqNBuV/oIlMKdkLshXd1zKBqNQCsuPEsgQOkfFQ/eUKjRlwndXW1AjN9LVkBEIukm00gGXSRmfkl0Wv5VXLnlw=="],
745
747
 
746
- "@tscircuit/3d-viewer": ["@tscircuit/3d-viewer@0.0.402", "", { "dependencies": { "@jscad/regl-renderer": "^2.6.12", "@jscad/stl-serializer": "^2.1.20", "three": "^0.165.0", "three-stdlib": "^2.36.0", "troika-three-text": "^0.52.4" }, "peerDependencies": { "@tscircuit/circuit-json-util": "*", "@tscircuit/core": "*", "react": "19.1.0", "react-dom": "19.1.0", "zod": "3" } }, "sha512-yub93VFxS4qjHJ86xaxQL+/atoCeJ+HsG96rg8iEkmihnpHQMk/M8Apll+UxjP4s/1cCe3k5MFmMJ4B0AMj88g=="],
748
+ "@tscircuit/3d-viewer": ["@tscircuit/3d-viewer@0.0.407", "", { "dependencies": { "@jscad/regl-renderer": "^2.6.12", "@jscad/stl-serializer": "^2.1.20", "three": "^0.165.0", "three-stdlib": "^2.36.0", "troika-three-text": "^0.52.4" }, "peerDependencies": { "@tscircuit/circuit-json-util": "*", "@tscircuit/core": "*", "react": "19.1.0", "react-dom": "19.1.0", "zod": "3" } }, "sha512-cC7zgBg/7jzqoYFDiagl9/uWgXddp5DcUvuFzoarxXbBViAwKnEC8pv/6VXxVF1Bu7iHZscK5jdHiRXEvMCJYA=="],
747
749
 
748
750
  "@tscircuit/alphabet": ["@tscircuit/alphabet@0.0.2", "", { "peerDependencies": { "typescript": "^5.0.0" } }, "sha512-vLdnx3iJqBQhnFb7mf5IREemtQYidJzGBtYVvzxd3u1WOwgtXkrj9VY2hDjaPNozMVC4zjKOG87z0SHLO74uAQ=="],
749
751
 
@@ -755,7 +757,7 @@
755
757
 
756
758
  "@tscircuit/circuit-json-flex": ["@tscircuit/circuit-json-flex@0.0.3", "", { "dependencies": { "@tscircuit/miniflex": "^0.0.3" }, "peerDependencies": { "tscircuit": "*", "typescript": "^5" } }, "sha512-8az7FWP8Y2THen5QYn62Ny2lNvdFeELuN3KPp1BVJ8yn5ClAVqnLh8WL/NMtde50629aus3zQTTvpqYfw1bRpg=="],
757
759
 
758
- "@tscircuit/circuit-json-util": ["@tscircuit/circuit-json-util@0.0.67", "", { "dependencies": { "parsel-js": "^1.1.2" }, "peerDependencies": { "circuit-json": "*", "transformation-matrix": "*", "zod": "3" } }, "sha512-ErTCyrW/zOBq+Ulqan8weUNNgcJNpelJ7gIq2G3OZGcI3xUrZBB+BE7oZeritvDtG1ofKrVMgvHTnENdxXjIug=="],
760
+ "@tscircuit/circuit-json-util": ["@tscircuit/circuit-json-util@0.0.72", "", { "dependencies": { "parsel-js": "^1.1.2" }, "peerDependencies": { "circuit-json": "*", "transformation-matrix": "*", "zod": "3" } }, "sha512-8KqdPYz1Q+rYgPuP9VBBxusLgq0MmpVw4FjLORNHYr2qfWmM1m/1OQEokZHZZZLTUbfcn86zUOcv69+LqHa0FA=="],
759
761
 
760
762
  "@tscircuit/cli": ["@tscircuit/cli@0.1.269", "", { "peerDependencies": { "tscircuit": "*" }, "bin": { "tscircuit-cli": "cli/entrypoint.js" } }, "sha512-f0j7OZKHqZBMn4MD0QDNdXPg5r0NO3HFHnCEZzolZpoGPdPknFcK1TpVA+TR5hbKgGBFrvIe8v8NtBs8mCAnmA=="],
761
763
 
@@ -1077,7 +1079,7 @@
1077
1079
 
1078
1080
  "circuit-json-to-gltf": ["circuit-json-to-gltf@0.0.14", "", { "peerDependencies": { "@resvg/resvg-js": "2", "@resvg/resvg-wasm": "2", "@tscircuit/circuit-json-util": "*", "circuit-json": "*", "circuit-to-svg": "*", "typescript": "^5" }, "optionalPeers": ["@resvg/resvg-wasm"] }, "sha512-z+O7vlCpe5zhmsbZXdvG73S0t4XDwXyvCe4q+imR7oMMCqMv4xhIqSyHdazYnHuHrA/taTTrGQwWrFtFr18dTA=="],
1079
1081
 
1080
- "circuit-json-to-kicad": ["circuit-json-to-kicad@0.0.3", "", { "peerDependencies": { "typescript": "^5" } }, "sha512-WrX1rUaRGOdsitKBk/fU9wgwpzxv7iZpVf7ORTWMUkui1iZ3gbXUNGAgKgrH0390SWFm0zGEiHlkLEqxWgu7ww=="],
1082
+ "circuit-json-to-kicad": ["circuit-json-to-kicad@0.0.22", "", { "peerDependencies": { "typescript": "^5" } }, "sha512-4iNb4TH1lfvYqw5vmB18X1/yxpgbgbxmuEkjmLB7zYy2GxROtbIbctau3mVW9ftuWU36K+Z30hzK3Qd53PEQKQ=="],
1081
1083
 
1082
1084
  "circuit-json-to-pnp-csv": ["circuit-json-to-pnp-csv@0.0.7", "", { "dependencies": { "papaparse": "^5.4.1" }, "peerDependencies": { "@tscircuit/soup-util": "*", "typescript": "^5.0.0" } }, "sha512-WAdNRHtaPhQM8X5NN/43WMBKDCEKQSLShg/mHIZxMUzJviymnfbq6rJj/2WvDqm/bogey34PyTEHwF3mC7zxlQ=="],
1083
1085
 
@@ -1087,6 +1089,8 @@
1087
1089
 
1088
1090
  "circuit-json-to-spice": ["circuit-json-to-spice@0.0.6", "", { "peerDependencies": { "typescript": "^5.0.0" } }, "sha512-rrjXZbbh3FFFJvExnJMJuVXEJZo3AuiQRaabBdonAEIccd05PTxmTvRCLNCrTTph71+NC4Q87mCgL7WFWBdtEw=="],
1089
1091
 
1092
+ "circuit-json-to-step": ["circuit-json-to-step@0.0.2", "", { "dependencies": { "@tscircuit/circuit-json-util": "^0.0.72", "circuit-json-to-connectivity-map": "^0.0.22", "circuit-json-to-gltf": "^0.0.19", "circuit-to-svg": "^0.0.226", "schematic-symbols": "^0.0.202" }, "peerDependencies": { "typescript": "^5" } }, "sha512-x5U91w89mZ+EVDnMnAR11JNaZ1ys118DKxHL799MJupAzKaeVgMZdruUObjFGIX03zm5FvOuz00CF8J3lxREZA=="],
1093
+
1090
1094
  "circuit-json-to-tscircuit": ["circuit-json-to-tscircuit@0.0.9", "", { "peerDependencies": { "typescript": "^5.0.0" } }, "sha512-2B4E3kOU9zFbJ6SyCKcp9ktlay/Xf2gbLuGcWE8rBL3uuypJU3uX4MFjHVfwx8cbvB/0LTF5v3gHTYbxpiZMOg=="],
1091
1095
 
1092
1096
  "circuit-to-svg": ["circuit-to-svg@0.0.202", "", { "dependencies": { "@types/node": "^22.5.5", "bun-types": "^1.1.40", "calculate-elbow": "0.0.12", "svgson": "^5.3.1", "transformation-matrix": "^2.16.1" }, "peerDependencies": { "tscircuit": "*" } }, "sha512-NrhxmQw5TB6yaf3W6fJkSu0lFWBC7F2DVTLsTx2GrJwvcpuQvJIbsLVVNrQbh1/r8z4BOJeORteaQQ6ZGolIpQ=="],
@@ -1569,7 +1573,7 @@
1569
1573
 
1570
1574
  "kicad-converter": ["kicad-converter@0.0.17", "", { "peerDependencies": { "tscircuit": "*", "typescript": "^5.0.0", "zod": "*" } }, "sha512-fb8B8frGrMkm52WRUo3XIhqkUSKERjNABtPAEP58Nyrcop0ux8++PlOptj6B6LzXWw3Rkt3EgjDillqGjoPfAg=="],
1571
1575
 
1572
- "kicadts": ["kicadts@0.0.9", "", { "peerDependencies": { "typescript": "^5" } }, "sha512-IfMcQxZ6+sTFLynI+5htPPZPeLCDHNMcMqkJFe9YQg+z2swattZK8KQAn4u0auhzNtwVqy+3MmzPV7MBstrrrQ=="],
1576
+ "kicadts": ["kicadts@0.0.10", "", { "peerDependencies": { "typescript": "^5" } }, "sha512-IREWrfp7IOjAiptHLodWH6WYip+PfMlM2s4q9GwWr8hxrG0UOgUeosisUcOudDOv0/2ZH+XzIzDNksNSmU6AwQ=="],
1573
1577
 
1574
1578
  "kind-of": ["kind-of@3.2.2", "", { "dependencies": { "is-buffer": "^1.1.5" } }, "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ=="],
1575
1579
 
@@ -2111,6 +2115,8 @@
2111
2115
 
2112
2116
  "stdin-discarder": ["stdin-discarder@0.2.2", "", {}, "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ=="],
2113
2117
 
2118
+ "stepts": ["stepts@0.0.1", "", { "peerDependencies": { "typescript": "^5" } }, "sha512-yMt4V8v4KqcLL81jqUjCjkllBFFKpZJFDF1KDugcyCsXCXRCvQogf3N2lyQpauSWR2Ai6GZt8oMa4YwCO8nNbw=="],
2119
+
2114
2120
  "stream-shift": ["stream-shift@1.0.3", "", {}, "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ=="],
2115
2121
 
2116
2122
  "streamx": ["streamx@2.23.0", "", { "dependencies": { "events-universal": "^1.0.0", "fast-fifo": "^1.3.2", "text-decoder": "^1.1.0" } }, "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg=="],
@@ -2389,6 +2395,10 @@
2389
2395
 
2390
2396
  "circuit-json-to-gerber/transformation-matrix": ["transformation-matrix@3.1.0", "", {}, "sha512-oYubRWTi2tYFHAL2J8DLvPIqIYcYZ0fSOi2vmSy042Ho4jBW2ce6VP7QfD44t65WQz6bw5w1Pk22J7lcUpaTKA=="],
2391
2397
 
2398
+ "circuit-json-to-step/circuit-json-to-gltf": ["circuit-json-to-gltf@0.0.19", "", { "dependencies": { "@jscad/modeling": "^2.12.6" }, "peerDependencies": { "@resvg/resvg-js": "2", "@resvg/resvg-wasm": "2", "@tscircuit/circuit-json-util": "*", "circuit-json": "*", "circuit-to-svg": "*", "typescript": "^5" }, "optionalPeers": ["@resvg/resvg-js", "@resvg/resvg-wasm"] }, "sha512-PvGcOJlttUu1hRVUQ4NLYqu9FbmfJBiyrahxyguPwT1x9Vvt6ht+LzZcX2thUQ4S+e6+1iiT1queiRqKKOMEjA=="],
2399
+
2400
+ "circuit-json-to-step/circuit-to-svg": ["circuit-to-svg@0.0.226", "", { "dependencies": { "@types/node": "^22.5.5", "bun-types": "^1.1.40", "calculate-elbow": "0.0.12", "svgson": "^5.3.1", "transformation-matrix": "^2.16.1" } }, "sha512-sd43kbLcpRQJriWndI9sCh5N/aWwp5u+dX1qybEDhjxYAcC6nHjO5KZjArHob5SoHKYfZwDU5Rtxh5+w11Im1g=="],
2401
+
2392
2402
  "cliui/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
2393
2403
 
2394
2404
  "connectivity-map/@biomejs/biome": ["@biomejs/biome@2.2.5", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "2.2.5", "@biomejs/cli-darwin-x64": "2.2.5", "@biomejs/cli-linux-arm64": "2.2.5", "@biomejs/cli-linux-arm64-musl": "2.2.5", "@biomejs/cli-linux-x64": "2.2.5", "@biomejs/cli-linux-x64-musl": "2.2.5", "@biomejs/cli-win32-arm64": "2.2.5", "@biomejs/cli-win32-x64": "2.2.5" }, "bin": { "biome": "bin/biome" } }, "sha512-zcIi+163Rc3HtyHbEO7CjeHq8DjQRs40HsGbW6vx2WI0tg8mYQOPouhvHSyEnCBAorfYNnKdR64/IxO7xQ5faw=="],
@@ -2495,6 +2505,8 @@
2495
2505
 
2496
2506
  "three-stdlib/fflate": ["fflate@0.6.10", "", {}, "sha512-IQrh3lEPM93wVCEczc9SaAOvkmcoQn/G8Bo1e8ZPlY3X3bnAxWaBdvTdvM1hP62iZp0BXWDy4vTAy4fF0+Dlpg=="],
2497
2507
 
2508
+ "tscircuit/@tscircuit/circuit-json-util": ["@tscircuit/circuit-json-util@0.0.67", "", { "dependencies": { "parsel-js": "^1.1.2" }, "peerDependencies": { "circuit-json": "*", "transformation-matrix": "*", "zod": "3" } }, "sha512-ErTCyrW/zOBq+Ulqan8weUNNgcJNpelJ7gIq2G3OZGcI3xUrZBB+BE7oZeritvDtG1ofKrVMgvHTnENdxXjIug=="],
2509
+
2498
2510
  "tscircuit/@tscircuit/footprinter": ["@tscircuit/footprinter@0.0.236", "", { "dependencies": { "@tscircuit/mm": "^0.0.8", "zod": "^3.23.8" }, "peerDependencies": { "circuit-json": "*" } }, "sha512-SE03ZCNp9FxzSa3LdbQOMBHjT16Q86ZwN6iLu+RPsAbFrdE1RwtM7dv5lOb6lkh78mL3e7yyuyay+QrERiLcYQ=="],
2499
2511
 
2500
2512
  "tscircuit/@tscircuit/runframe": ["@tscircuit/runframe@0.0.945", "", {}, "sha512-mDLiR7belMSVbo2pbCrNX9xXtsK58HbjQCc1D+TSK55DeKRyxU3adJEEFobRz6y8MJ9twTcfeoXLWalelyZZZA=="],