@tscircuit/cli 0.0.393 → 0.1.1

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 (245) hide show
  1. package/.github/workflows/bun-formatcheck.yml +26 -0
  2. package/.github/workflows/bun-pver-release.yml +25 -0
  3. package/.github/workflows/{typecheck.yml → bun-typecheck.yml} +0 -3
  4. package/LICENSE +21 -0
  5. package/README.md +30 -36
  6. package/biome.json +9 -9
  7. package/bun.lockb +0 -0
  8. package/cli/CliContext.ts +8 -0
  9. package/cli/auth/login/register.ts +73 -0
  10. package/cli/auth/logout/register.ts +11 -0
  11. package/cli/auth/register.ts +5 -0
  12. package/cli/config/print/register.ts +12 -0
  13. package/cli/config/register.ts +5 -0
  14. package/cli/dev/register.ts +111 -0
  15. package/cli/main.ts +31 -0
  16. package/dist/main.js +473 -0
  17. package/docs/file-server-api-usage.md +57 -0
  18. package/docs/run-frame-usage.md +14 -0
  19. package/example-dir/manual-edits.json +1 -0
  20. package/example-dir/snippet.d.ts +13 -0
  21. package/example-dir/snippet.tsx +20 -0
  22. package/example-dir/types.d.ts +11 -0
  23. package/lib/cli-config/TypedConfigStore.ts +50 -0
  24. package/lib/cli-config/index.ts +16 -0
  25. package/lib/dependency-analysis/DependencyAnalyzer.ts +129 -0
  26. package/lib/dependency-analysis/getLocalFileDependencies.ts +101 -0
  27. package/lib/dependency-analysis/installNodeModuleTypes.ts +74 -0
  28. package/lib/index.ts +2 -0
  29. package/lib/project-config/index.ts +5 -0
  30. package/lib/registry-api/endpoint-types.ts +20 -0
  31. package/lib/registry-api/get-ky.ts +30 -0
  32. package/lib/server/EventsWatcher.ts +75 -0
  33. package/lib/server/createServer.ts +62 -0
  34. package/lib/site/getIndex.ts +18 -0
  35. package/package.json +27 -144
  36. package/tsconfig.json +25 -22
  37. package/.github/workflows/formatbot.yml +0 -63
  38. package/.github/workflows/release.yml +0 -40
  39. package/.github/workflows/test.yml +0 -32
  40. package/.github/workflows/windows-tests.yml +0 -32
  41. package/.prettierrc +0 -1
  42. package/DEVELOPMENT.md +0 -7
  43. package/api/README.md +0 -3
  44. package/api/db/generic-json-level.ts +0 -123
  45. package/api/db/get-db.ts +0 -26
  46. package/api/db/schema.ts +0 -65
  47. package/api/db/zod-level-db.ts +0 -148
  48. package/api/index.ts +0 -4
  49. package/api/lib/middlewares/with-db.ts +0 -18
  50. package/api/lib/middlewares/with-debug-request-logging.ts +0 -13
  51. package/api/lib/middlewares/with-error-response.ts +0 -37
  52. package/api/lib/with-winter-spec.ts +0 -9
  53. package/api/lib/zod/export_parameters.ts +0 -25
  54. package/api/routes/api/db/download.ts +0 -25
  55. package/api/routes/api/dev_package_examples/create.ts +0 -43
  56. package/api/routes/api/dev_package_examples/get.ts +0 -46
  57. package/api/routes/api/dev_package_examples/list.ts +0 -36
  58. package/api/routes/api/dev_package_examples/update.ts +0 -59
  59. package/api/routes/api/dev_server/reset.ts +0 -13
  60. package/api/routes/api/export_files/create.ts +0 -27
  61. package/api/routes/api/export_files/download.ts +0 -25
  62. package/api/routes/api/export_requests/create.ts +0 -30
  63. package/api/routes/api/export_requests/get.ts +0 -43
  64. package/api/routes/api/export_requests/list.ts +0 -26
  65. package/api/routes/api/export_requests/update.ts +0 -34
  66. package/api/routes/api/health.ts +0 -11
  67. package/api/routes/api/package_info/create.ts +0 -26
  68. package/api/routes/api/package_info/get.ts +0 -16
  69. package/api/routes/health.ts +0 -11
  70. package/api/routes/index.ts +0 -16
  71. package/api/server.ts +0 -20
  72. package/api/static-routes.ts +0 -24
  73. package/api/tests/fixtures/get-test-server.ts +0 -31
  74. package/api/tests/fixtures/start-server.ts +0 -41
  75. package/api/tests/routes/dev_package_examples/create.test.ts +0 -19
  76. package/api/tests/routes/dev_package_examples/get.test.ts +0 -25
  77. package/api/tests/routes/dev_package_examples/list.test.ts +0 -32
  78. package/api/tests/routes/dev_package_examples/update.test.ts +0 -38
  79. package/api/tests/routes/export_files/create.test.ts +0 -18
  80. package/api/tests/routes/export_files/download.test.ts +0 -29
  81. package/api/tests/routes/export_requests/create.test.ts +0 -24
  82. package/api/tests/routes/export_requests/get.test.ts +0 -41
  83. package/api/tests/routes/export_requests/list.test.ts +0 -35
  84. package/api/tests/routes/export_requests/update.test.ts +0 -50
  85. package/api/tests/routes/health.test.ts +0 -10
  86. package/bunfig.toml +0 -2
  87. package/cli/cli.ts +0 -13
  88. package/cli/lib/cmd-fns/add.ts +0 -34
  89. package/cli/lib/cmd-fns/auth-login.ts +0 -59
  90. package/cli/lib/cmd-fns/auth-logout.ts +0 -7
  91. package/cli/lib/cmd-fns/auth-sessions-create.ts +0 -3
  92. package/cli/lib/cmd-fns/auth-sessions-get.ts +0 -3
  93. package/cli/lib/cmd-fns/auth-sessions-list.ts +0 -5
  94. package/cli/lib/cmd-fns/config-clear.ts +0 -5
  95. package/cli/lib/cmd-fns/config-print-config.ts +0 -6
  96. package/cli/lib/cmd-fns/config-reveal-location.ts +0 -5
  97. package/cli/lib/cmd-fns/config-set-log-requests.ts +0 -7
  98. package/cli/lib/cmd-fns/config-set-registry.ts +0 -9
  99. package/cli/lib/cmd-fns/config-set-runtime.ts +0 -7
  100. package/cli/lib/cmd-fns/config-set-session.ts +0 -7
  101. package/cli/lib/cmd-fns/dev/check-if-initialized.ts +0 -22
  102. package/cli/lib/cmd-fns/dev/derive-selector-from-pcb-component-id.ts +0 -23
  103. package/cli/lib/cmd-fns/dev/dev-server-request-handler.ts +0 -61
  104. package/cli/lib/cmd-fns/dev/find-available-port.ts +0 -32
  105. package/cli/lib/cmd-fns/dev/fulfill-export-requests.ts +0 -162
  106. package/cli/lib/cmd-fns/dev/get-dev-server-axios.ts +0 -29
  107. package/cli/lib/cmd-fns/dev/index.ts +0 -168
  108. package/cli/lib/cmd-fns/dev/infer-export-name-from-source.ts +0 -17
  109. package/cli/lib/cmd-fns/dev/mark-all-examples-loading.ts +0 -18
  110. package/cli/lib/cmd-fns/dev/soupify-and-upload-example-file.ts +0 -62
  111. package/cli/lib/cmd-fns/dev/start-dev-server.ts +0 -34
  112. package/cli/lib/cmd-fns/dev/start-edit-event-watcher.ts +0 -347
  113. package/cli/lib/cmd-fns/dev/start-export-request-watcher.ts +0 -33
  114. package/cli/lib/cmd-fns/dev/start-fs-watcher.ts +0 -54
  115. package/cli/lib/cmd-fns/dev/upload-examples-from-directory.ts +0 -42
  116. package/cli/lib/cmd-fns/dev-server-fulfill-export-requests.ts +0 -43
  117. package/cli/lib/cmd-fns/dev-server-upload.ts +0 -56
  118. package/cli/lib/cmd-fns/export-gerbers.ts +0 -28
  119. package/cli/lib/cmd-fns/export-kicad-pcb.ts +0 -36
  120. package/cli/lib/cmd-fns/export-pnp-csv.ts +0 -32
  121. package/cli/lib/cmd-fns/gen-jlcpcb-component.ts +0 -64
  122. package/cli/lib/cmd-fns/go.ts +0 -14
  123. package/cli/lib/cmd-fns/index.ts +0 -46
  124. package/cli/lib/cmd-fns/init/create-or-modify-npmrc.ts +0 -21
  125. package/cli/lib/cmd-fns/init/get-generated-npmrc.ts +0 -8
  126. package/cli/lib/cmd-fns/init/get-generated-readme.ts +0 -41
  127. package/cli/lib/cmd-fns/init/get-generated-tsconfig.ts +0 -34
  128. package/cli/lib/cmd-fns/init/index.ts +0 -193
  129. package/cli/lib/cmd-fns/install.ts +0 -34
  130. package/cli/lib/cmd-fns/lint.ts +0 -43
  131. package/cli/lib/cmd-fns/open.ts +0 -19
  132. package/cli/lib/cmd-fns/package-examples-create.ts +0 -36
  133. package/cli/lib/cmd-fns/package-examples-get.ts +0 -20
  134. package/cli/lib/cmd-fns/package-examples-list.ts +0 -18
  135. package/cli/lib/cmd-fns/package-files-create.ts +0 -31
  136. package/cli/lib/cmd-fns/package-files-download.ts +0 -29
  137. package/cli/lib/cmd-fns/package-files-get.ts +0 -3
  138. package/cli/lib/cmd-fns/package-files-list.ts +0 -28
  139. package/cli/lib/cmd-fns/package-files-upload-directory.ts +0 -6
  140. package/cli/lib/cmd-fns/package-releases-create.ts +0 -35
  141. package/cli/lib/cmd-fns/package-releases-get.ts +0 -3
  142. package/cli/lib/cmd-fns/package-releases-list.ts +0 -32
  143. package/cli/lib/cmd-fns/package-releases-update.ts +0 -45
  144. package/cli/lib/cmd-fns/packages-create.ts +0 -16
  145. package/cli/lib/cmd-fns/packages-get.ts +0 -16
  146. package/cli/lib/cmd-fns/packages-list.ts +0 -16
  147. package/cli/lib/cmd-fns/publish/index.ts +0 -336
  148. package/cli/lib/cmd-fns/remove.ts +0 -31
  149. package/cli/lib/cmd-fns/render.ts +0 -45
  150. package/cli/lib/cmd-fns/soupify.ts +0 -31
  151. package/cli/lib/cmd-fns/uninstall.ts +0 -31
  152. package/cli/lib/cmd-fns/version.ts +0 -38
  153. package/cli/lib/create-config-manager.ts +0 -97
  154. package/cli/lib/export-fns/export-bom-csv.ts +0 -32
  155. package/cli/lib/export-fns/export-gerbers.ts +0 -108
  156. package/cli/lib/export-fns/export-kicad-pcb.ts +0 -32
  157. package/cli/lib/export-fns/export-pnp-csv.ts +0 -31
  158. package/cli/lib/get-program.ts +0 -387
  159. package/cli/lib/param-handlers/index.ts +0 -21
  160. package/cli/lib/param-handlers/interact-for-local-directory.ts +0 -58
  161. package/cli/lib/param-handlers/interact-for-local-file.ts +0 -59
  162. package/cli/lib/param-handlers/interact-for-package-example-id.ts +0 -25
  163. package/cli/lib/param-handlers/interact-for-package-name-with-version.ts +0 -63
  164. package/cli/lib/param-handlers/interact-for-package-name.ts +0 -45
  165. package/cli/lib/param-handlers/interact-for-package-release-id.ts +0 -15
  166. package/cli/lib/param-handlers/interact-for-registry-url.ts +0 -27
  167. package/cli/lib/param-handlers/interact-for-runtime.ts +0 -33
  168. package/cli/lib/param-handlers/param-handler-type.ts +0 -7
  169. package/cli/lib/posthog.ts +0 -23
  170. package/cli/lib/soupify/get-export-name-from-file.ts +0 -29
  171. package/cli/lib/soupify/get-tmp-entrpoint-filepath.ts +0 -15
  172. package/cli/lib/soupify/index.ts +0 -1
  173. package/cli/lib/soupify/run-entrypoint-file.ts +0 -59
  174. package/cli/lib/soupify/soupify-with-core.ts +0 -74
  175. package/cli/lib/soupify/soupify.ts +0 -6
  176. package/cli/lib/util/app-context.ts +0 -17
  177. package/cli/lib/util/create-context-and-run-program.ts +0 -168
  178. package/cli/lib/util/get-all-package-files.ts +0 -66
  179. package/cli/lib/util/lint-project.ts +0 -137
  180. package/cli/tests/export-gerber-keyboard.test.ts +0 -16
  181. package/cli/tests/export-gerber.test.ts +0 -49
  182. package/cli/tests/export-kicad-pcb.test.ts +0 -23
  183. package/cli/tests/export-pnp-csv.test.ts +0 -24
  184. package/cli/tests/fixtures/preload.ts +0 -54
  185. package/cli/tests/init.test.ts +0 -9
  186. package/cli/tests/open.test.ts +0 -9
  187. package/cli/tests/soupify-builder.test.ts +0 -9
  188. package/cli/tests/soupify-core.test.ts +0 -9
  189. package/dist/cli.js +0 -3676
  190. package/docs/EDIT_EVENT_PIPELINE.md +0 -34
  191. package/example-project/README.md +0 -18
  192. package/example-project/examples/basic-capacitor.tsx +0 -5
  193. package/example-project/examples/basic-chip.tsx +0 -26
  194. package/example-project/examples/basic-resistor.tsx +0 -3
  195. package/example-project/examples/macrokeypad.tsx +0 -59
  196. package/example-project/index.ts +0 -1
  197. package/example-project/package.json +0 -5
  198. package/example-project/src/ArduinoProMicroBreakout.tsx +0 -37
  199. package/example-project/src/Key.tsx +0 -46
  200. package/example-project/src/Keyswitch.tsx +0 -26
  201. package/example-project/src/KeyswitchSocket.tsx +0 -56
  202. package/example-project/src/MyCircuit.tsx +0 -38
  203. package/example-project/src/manual-edits.ts +0 -93
  204. package/frontend/README.md +0 -3
  205. package/frontend/bun.lockb +0 -0
  206. package/frontend/components/command-k.tsx +0 -86
  207. package/frontend/components/dialogs/generic-export-dialog.tsx +0 -189
  208. package/frontend/components/dialogs/gerber-export-dialog.tsx +0 -168
  209. package/frontend/components/global-context-providers.tsx +0 -11
  210. package/frontend/components/select-example-search.tsx +0 -118
  211. package/frontend/components/ui/alert-dialog.tsx +0 -139
  212. package/frontend/components/ui/alert.tsx +0 -59
  213. package/frontend/components/ui/breadcrumb.tsx +0 -115
  214. package/frontend/components/ui/button.tsx +0 -57
  215. package/frontend/components/ui/card.tsx +0 -76
  216. package/frontend/components/ui/command.tsx +0 -153
  217. package/frontend/components/ui/context-menu.tsx +0 -202
  218. package/frontend/components/ui/dialog.tsx +0 -120
  219. package/frontend/components/ui/menubar.tsx +0 -238
  220. package/frontend/components/ui/navigation-menu.tsx +0 -128
  221. package/frontend/components/ui/popover.tsx +0 -31
  222. package/frontend/components/ui/select.tsx +0 -162
  223. package/frontend/components/ui/tabs.tsx +0 -53
  224. package/frontend/components/ui/toggle-group.tsx +0 -59
  225. package/frontend/components/ui/toggle.tsx +0 -43
  226. package/frontend/components/ui/tooltip.tsx +0 -28
  227. package/frontend/components.json +0 -17
  228. package/frontend/hooks/toast-if-api-not-connected.ts +0 -23
  229. package/frontend/hooks/use-active-dev-package-example-lite.ts +0 -39
  230. package/frontend/hooks/use-dev-package-examples.tsx +0 -18
  231. package/frontend/hooks/use-global-store.ts +0 -42
  232. package/frontend/index.css +0 -76
  233. package/frontend/index.html +0 -13
  234. package/frontend/lib/utils.ts +0 -6
  235. package/frontend/main.tsx +0 -13
  236. package/frontend/tailwind.config.js +0 -74
  237. package/frontend/views/App.tsx +0 -22
  238. package/frontend/views/Header.tsx +0 -55
  239. package/frontend/views/HeaderMenu.tsx +0 -326
  240. package/frontend/views/MainContentView.tsx +0 -172
  241. package/frontend/vite-env.d.ts +0 -1
  242. package/frontend/vite.config.ts +0 -50
  243. package/renovate.json +0 -15
  244. package/scripts/build-cli.ts +0 -12
  245. package/tsup.config.ts +0 -7
@@ -1,11 +0,0 @@
1
- import { withWinterSpec } from "api/lib/with-winter-spec"
2
- import { z } from "zod"
3
-
4
- export default withWinterSpec({
5
- methods: ["GET", "POST"],
6
- jsonResponse: z.object({
7
- ok: z.boolean(),
8
- }),
9
- })(async (req, ctx) => {
10
- return ctx.json({ ok: true })
11
- })
@@ -1,26 +0,0 @@
1
- import { withWinterSpec } from "api/lib/with-winter-spec"
2
- import { z } from "zod"
3
-
4
- export default withWinterSpec({
5
- methods: ["POST"],
6
- jsonBody: z.object({
7
- package_name: z.string(),
8
- }),
9
- jsonResponse: z.object({
10
- package_info: z.object({
11
- name: z.string(),
12
- }),
13
- }),
14
- auth: "none",
15
- })(async (req, ctx) => {
16
- const package_name = req.jsonBody.package_name
17
-
18
- const package_info = await ctx.db.put("package_info", {
19
- package_info_id: 1,
20
- name: package_name,
21
- })
22
-
23
- return ctx.json({
24
- package_info,
25
- })
26
- })
@@ -1,16 +0,0 @@
1
- import { PackageInfoSchema } from "api/db/schema"
2
-
3
- import { withWinterSpec } from "api/lib/with-winter-spec"
4
- import { z } from "zod"
5
-
6
- export default withWinterSpec({
7
- methods: ["GET"],
8
- jsonResponse: z.object({
9
- package_info: PackageInfoSchema,
10
- }),
11
- auth: "none",
12
- })(async (req, ctx) => {
13
- const package_info = await ctx.db.get("package_info", 1)
14
-
15
- return ctx.json({ package_info: package_info! })
16
- })
@@ -1,11 +0,0 @@
1
- import { withWinterSpec } from "api/lib/with-winter-spec"
2
- import { z } from "zod"
3
-
4
- export default withWinterSpec({
5
- methods: ["GET", "POST"],
6
- jsonResponse: z.object({
7
- ok: z.boolean(),
8
- }),
9
- })(async (req, ctx) => {
10
- return ctx.json({ ok: true })
11
- })
@@ -1,16 +0,0 @@
1
- import { withWinterSpec } from "api/lib/with-winter-spec"
2
- import { z } from "zod"
3
-
4
- export default withWinterSpec({
5
- methods: ["GET"],
6
- auth: "none",
7
- })(async (req, ctx) => {
8
- return new Response(
9
- `<html><body>This is the dev server API <a href="/api/db/download">view database</a></body></html>`,
10
- {
11
- headers: {
12
- "content-type": "text/html",
13
- },
14
- },
15
- )
16
- })
package/api/server.ts DELETED
@@ -1,20 +0,0 @@
1
- import { createFetchHandlerFromDir } from "winterspec/adapters/node"
2
- import { Request as EdgeRuntimeRequest } from "@edge-runtime/primitives"
3
- import { join } from "node:path"
4
-
5
- const serverFetch = await createFetchHandlerFromDir(
6
- join(import.meta.dir, "./routes"),
7
- )
8
-
9
- console.log("starting dev server api on http://127.0.0.1:3021")
10
- Bun.serve({
11
- fetch: (bunReq) => {
12
- const req = new EdgeRuntimeRequest(bunReq.url, {
13
- headers: bunReq.headers,
14
- method: bunReq.method,
15
- body: bunReq.body,
16
- })
17
- return serverFetch(req as any)
18
- },
19
- port: 3021,
20
- })
@@ -1,24 +0,0 @@
1
-
2
- // import { WinterSpecRouteMap } from "@winterspec/types"
3
-
4
- const routeMap = {
5
- "/api/db/download": (await import('./routes/api/db/download.ts')).default,
6
- "/api/dev_package_examples/create": (await import('./routes/api/dev_package_examples/create.ts')).default,
7
- "/api/dev_package_examples/get": (await import('./routes/api/dev_package_examples/get.ts')).default,
8
- "/api/dev_package_examples/list": (await import('./routes/api/dev_package_examples/list.ts')).default,
9
- "/api/dev_package_examples/update": (await import('./routes/api/dev_package_examples/update.ts')).default,
10
- "/api/dev_server/reset": (await import('./routes/api/dev_server/reset.ts')).default,
11
- "/api/export_files/create": (await import('./routes/api/export_files/create.ts')).default,
12
- "/api/export_files/download": (await import('./routes/api/export_files/download.ts')).default,
13
- "/api/export_requests/create": (await import('./routes/api/export_requests/create.ts')).default,
14
- "/api/export_requests/get": (await import('./routes/api/export_requests/get.ts')).default,
15
- "/api/export_requests/list": (await import('./routes/api/export_requests/list.ts')).default,
16
- "/api/export_requests/update": (await import('./routes/api/export_requests/update.ts')).default,
17
- "/api/health": (await import('./routes/api/health.ts')).default,
18
- "/api/package_info/create": (await import('./routes/api/package_info/create.ts')).default,
19
- "/api/package_info/get": (await import('./routes/api/package_info/get.ts')).default,
20
- "/health": (await import('./routes/health.ts')).default,
21
- "/": (await import('./routes/index.ts')).default
22
- }
23
-
24
- export default routeMap
@@ -1,31 +0,0 @@
1
- import { afterEach } from "bun:test"
2
- import { tmpdir } from "node:os"
3
- import defaultAxios from "redaxios"
4
- import { startServer } from "./start-server"
5
-
6
- interface TestFixture {
7
- url: string
8
- server: any
9
- axios: typeof defaultAxios
10
- }
11
-
12
- export const getTestFixture = async (): Promise<TestFixture> => {
13
- process.env.TSCI_DEV_SERVER_DB = tmpdir() + `/${Math.random()}` + "/devdb"
14
- const port = 3001 + Math.floor(Math.random() * 999)
15
- const testInstanceId = Math.random().toString(36).substring(2, 15)
16
- const server = await startServer({ port })
17
- const url = `http://127.0.0.1:${port}`
18
- const axios = defaultAxios.create({
19
- baseURL: url,
20
- })
21
-
22
- afterEach(() => {
23
- server.stop()
24
- })
25
-
26
- return {
27
- url,
28
- server,
29
- axios,
30
- }
31
- }
@@ -1,41 +0,0 @@
1
- import {
2
- createFetchHandlerFromDir,
3
- createWinterSpecBundleFromDir,
4
- } from "winterspec/adapters/node"
5
- import { Request as EdgeRuntimeRequest } from "@edge-runtime/primitives"
6
- import { join } from "node:path"
7
- import { ZodLevelDatabase } from "api/db/zod-level-db"
8
- import os from "node:os"
9
- import { Middleware } from "winterspec"
10
-
11
- export const startServer = async ({ port }: { port: number }) => {
12
- const db = new ZodLevelDatabase(os.tmpdir() + "/devdb")
13
-
14
- const winterspecBundle = await createWinterSpecBundleFromDir(
15
- join(import.meta.dir, "../../routes"),
16
- )
17
-
18
- const middleware: Middleware[] = [
19
- async (req: any, ctx: any, next: any) => {
20
- ;(ctx as any).db = db
21
-
22
- return next(req, ctx)
23
- },
24
- ]
25
-
26
- const server = Bun.serve({
27
- fetch: (bunReq) => {
28
- const req = new EdgeRuntimeRequest(bunReq.url, {
29
- headers: bunReq.headers,
30
- method: bunReq.method,
31
- body: bunReq.body,
32
- })
33
- return winterspecBundle.makeRequest(req as any, {
34
- middleware,
35
- })
36
- },
37
- port,
38
- })
39
-
40
- return server
41
- }
@@ -1,19 +0,0 @@
1
- import { it, expect } from "bun:test"
2
- import { getTestFixture } from "api/tests/fixtures/get-test-server"
3
-
4
- it("POST /api/dev_package_examples/create", async () => {
5
- const { axios } = await getTestFixture()
6
-
7
- const res = await axios
8
- .post("/api/dev_package_examples/create", {
9
- file_path: "examples/basic-resistor.tsx",
10
- export_name: "default",
11
- tscircuit_soup: [],
12
- is_loading: true,
13
- })
14
- .then((r) => r.data)
15
-
16
- expect(res.dev_package_example.file_path).toEqual(
17
- "examples/basic-resistor.tsx",
18
- )
19
- })
@@ -1,25 +0,0 @@
1
- import { it, expect } from "bun:test"
2
- import { getTestFixture } from "api/tests/fixtures/get-test-server"
3
-
4
- it("POST /api/dev_package_examples/create", async () => {
5
- const { axios } = await getTestFixture()
6
-
7
- await axios
8
- .post("/api/dev_package_examples/create", {
9
- file_path: "examples/basic-resistor.tsx",
10
- export_name: "default",
11
- tscircuit_soup: [],
12
- is_loading: true,
13
- })
14
- .then((r) => r.data)
15
-
16
- const res = await axios
17
- .post("/api/dev_package_examples/get", {
18
- dev_package_example_id: 1,
19
- })
20
- .then((r) => r.data)
21
-
22
- expect(res.dev_package_example.file_path).toEqual(
23
- "examples/basic-resistor.tsx",
24
- )
25
- })
@@ -1,32 +0,0 @@
1
- import { it, expect } from "bun:test"
2
- import { getTestFixture } from "api/tests/fixtures/get-test-server"
3
-
4
- it("GET /api/dev_package_examples/list", async () => {
5
- const { axios } = await getTestFixture()
6
-
7
- // First, create a dev package example
8
- await axios.post("/api/dev_package_examples/create", {
9
- file_path: "examples/test-example.tsx",
10
- export_name: "default",
11
- tscircuit_soup: [],
12
- is_loading: false,
13
- })
14
-
15
- // Then, list all dev package examples
16
- const res = await axios
17
- .post("/api/dev_package_examples/list")
18
- .then((r) => r.data)
19
-
20
- expect(res.dev_package_examples).toBeDefined()
21
- expect(Array.isArray(res.dev_package_examples)).toBe(true)
22
- expect(res.dev_package_examples.length).toBeGreaterThan(0)
23
-
24
- const example = res.dev_package_examples.find(
25
- (e: any) => e.file_path === "examples/test-example.tsx",
26
- )
27
- expect(example).toBeDefined()
28
- expect(example.export_name).toBe("default")
29
- expect(example.is_loading).toBe(false)
30
- expect(example.dev_package_example_id).toBeDefined()
31
- expect(example.last_updated_at).toBeDefined()
32
- })
@@ -1,38 +0,0 @@
1
- import { it, expect } from "bun:test"
2
- import { getTestFixture } from "api/tests/fixtures/get-test-server"
3
-
4
- it("POST /api/dev_package_examples/update", async () => {
5
- const { axios } = await getTestFixture()
6
-
7
- await axios
8
- .post("/api/dev_package_examples/create", {
9
- file_path: "examples/basic-resistor.tsx",
10
- export_name: "default",
11
- tscircuit_soup: [],
12
- is_loading: true,
13
- })
14
- .then((r) => r.data)
15
-
16
- const res = await axios
17
- .post("/api/dev_package_examples/update", {
18
- dev_package_example_id: 1,
19
- completed_edit_events: [],
20
- edit_events_last_applied_at: "2023-01-01T00:00:00.000Z",
21
- })
22
- .then((r) => r.data)
23
-
24
- expect(res.dev_package_example.completed_edit_events).toEqual([])
25
- expect(res.dev_package_example.edit_events_last_applied_at).toEqual(
26
- "2023-01-01T00:00:00.000Z",
27
- )
28
-
29
- const getRes = await axios.post("/api/dev_package_examples/get", {
30
- dev_package_example_id: 1,
31
- })
32
-
33
- expect(getRes.status).toBe(200)
34
- expect(getRes.data.dev_package_example.completed_edit_events).toEqual([])
35
- expect(getRes.data.dev_package_example.edit_events_last_applied_at).toEqual(
36
- "2023-01-01T00:00:00.000Z",
37
- )
38
- })
@@ -1,18 +0,0 @@
1
- import { it, expect } from "bun:test"
2
- import { getTestFixture } from "api/tests/fixtures/get-test-server"
3
-
4
- it("POST /api/export_files/create", async () => {
5
- const { axios } = await getTestFixture()
6
-
7
- const res = await axios
8
- .post("/api/export_files/create", {
9
- export_request_id: 1,
10
- file_name: "test.png",
11
- file_content_base64:
12
- "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg==",
13
- })
14
- .then((r) => r.data)
15
-
16
- expect(res.export_file.export_request_id).toEqual(1)
17
- expect(res.export_file.file_name).toEqual("test.png")
18
- })
@@ -1,29 +0,0 @@
1
- import { it, expect } from "bun:test"
2
- import { getTestFixture } from "api/tests/fixtures/get-test-server"
3
-
4
- it("GET /api/export_files/download", async () => {
5
- const { axios } = await getTestFixture()
6
-
7
- const exampleBase64 = Buffer.from("example").toString("base64")
8
-
9
- const res = await axios
10
- .post("/api/export_files/create", {
11
- export_request_id: 1,
12
- file_name: "test.png",
13
- file_content_base64: exampleBase64,
14
- })
15
- .then((r) => r.data)
16
-
17
- const downloadRes = await axios
18
- .get(
19
- `/api/export_files/download?export_file_id=${res.export_file.export_file_id}`,
20
- )
21
- .then((r) => r.data)
22
-
23
- // Convert downloadRes to base64 string
24
- const downloadResBase64 = Buffer.from(downloadRes, "binary").toString(
25
- "base64",
26
- )
27
-
28
- expect(downloadResBase64).toEqual(exampleBase64)
29
- })
@@ -1,24 +0,0 @@
1
- import { it, expect } from "bun:test"
2
- import { getTestFixture } from "api/tests/fixtures/get-test-server"
3
-
4
- it("POST /api/export_requests/create", async () => {
5
- const { axios } = await getTestFixture()
6
-
7
- const res = await axios.post("/api/export_requests/create", {
8
- example_file_path: "examples/test-example.tsx",
9
- export_name: "default",
10
- export_parameters: { should_export_gerber_zip: true },
11
- })
12
-
13
- expect(res.status).toBe(200)
14
- expect(res.data.export_request).toBeDefined()
15
- expect(res.data.export_request.example_file_path).toBe(
16
- "examples/test-example.tsx",
17
- )
18
- expect(res.data.export_request.export_name).toBe("default")
19
- expect(res.data.export_request.export_parameters).toMatchObject({
20
- should_export_gerber_zip: true,
21
- })
22
- expect(res.data.export_request.is_complete).toBe(false)
23
- expect(res.data.export_request.has_error).toBe(false)
24
- })
@@ -1,41 +0,0 @@
1
- import { it, expect } from "bun:test"
2
- import { getTestFixture } from "api/tests/fixtures/get-test-server"
3
-
4
- it("GET /api/export_requests/get", async () => {
5
- const { axios } = await getTestFixture()
6
-
7
- // First, create an export request
8
- const createRes = await axios.post("/api/export_requests/create", {
9
- example_file_path: "examples/test-example.tsx",
10
- export_name: "default",
11
- export_parameters: { should_export_gerber_zip: true },
12
- })
13
-
14
- const exportRequestId = createRes.data.export_request.export_request_id
15
-
16
- // Now, get the export request
17
- const getRes = await axios.post(`/api/export_requests/get`, {
18
- export_request_id: exportRequestId,
19
- })
20
-
21
- expect(getRes.status).toBe(200)
22
- expect(getRes.data.export_request).toBeDefined()
23
- expect(getRes.data.export_request.export_request_id).toBe(exportRequestId)
24
- expect(getRes.data.export_request.example_file_path).toBe(
25
- "examples/test-example.tsx",
26
- )
27
- expect(getRes.data.export_request.export_name).toBe("default")
28
- expect(getRes.data.export_request.export_parameters).toMatchObject({
29
- should_export_gerber_zip: true,
30
- })
31
- })
32
-
33
- it("GET /api/export_requests/get - Not Found", async () => {
34
- const { axios } = await getTestFixture()
35
-
36
- try {
37
- await axios.post("/api/export_requests/get", { export_request_id: 999999 })
38
- } catch (error: any) {
39
- expect(error.status).toBe(404)
40
- }
41
- })
@@ -1,35 +0,0 @@
1
- import { it, expect } from "bun:test"
2
- import { getTestFixture } from "api/tests/fixtures/get-test-server"
3
-
4
- it("GET /api/export_requests/list", async () => {
5
- const { axios } = await getTestFixture()
6
-
7
- // Create two export requests
8
- await axios.post("/api/export_requests/create", {
9
- example_file_path: "examples/test-example1.tsx",
10
- export_name: "default",
11
- export_parameters: { format: "gerber" },
12
- })
13
-
14
- await axios.post("/api/export_requests/create", {
15
- example_file_path: "examples/test-example2.tsx",
16
- export_name: "default",
17
- export_parameters: { format: "svg" },
18
- })
19
-
20
- // List all export requests
21
- const listRes = await axios.post("/api/export_requests/list", {})
22
-
23
- expect(listRes.status).toBe(200)
24
- expect(listRes.data.export_requests).toBeDefined()
25
- expect(Array.isArray(listRes.data.export_requests)).toBe(true)
26
-
27
- // List completed export requests (should be empty)
28
- const completedRes = await axios.post("/api/export_requests/list", {
29
- is_complete: true,
30
- })
31
-
32
- expect(completedRes.status).toBe(200)
33
- expect(completedRes.data.export_requests).toBeDefined()
34
- expect(Array.isArray(completedRes.data.export_requests)).toBe(true)
35
- })
@@ -1,50 +0,0 @@
1
- import { it, expect } from "bun:test"
2
- import { getTestFixture } from "api/tests/fixtures/get-test-server"
3
-
4
- it("POST /api/export_requests/update", async () => {
5
- const { axios } = await getTestFixture()
6
-
7
- // First, create an export request
8
- const createRes = await axios.post("/api/export_requests/create", {
9
- example_file_path: "examples/test-example.tsx",
10
- export_name: "default",
11
- export_parameters: { format: "gerber", should_export_gerber_zip: true },
12
- })
13
-
14
- const exportRequestId = createRes.data.export_request.export_request_id
15
-
16
- // Now, update the export request
17
- const updateRes = await axios.post("/api/export_requests/update", {
18
- export_request_id: exportRequestId,
19
- is_complete: true,
20
- has_error: false,
21
- })
22
-
23
- expect(updateRes.status).toBe(200)
24
- expect(updateRes.data.export_request).toBeDefined()
25
- expect(updateRes.data.export_request.export_request_id).toBe(exportRequestId)
26
- expect(updateRes.data.export_request.is_complete).toBe(true)
27
- expect(updateRes.data.export_request.has_error).toBe(false)
28
-
29
- // // Verify the update
30
- const getRes = await axios.post(`/api/export_requests/get`, {
31
- export_request_id: exportRequestId,
32
- })
33
-
34
- expect(getRes.status).toBe(200)
35
- expect(getRes.data.export_request.is_complete).toBe(true)
36
- expect(getRes.data.export_request.has_error).toBe(false)
37
- })
38
-
39
- it("POST /api/export_requests/update - Not Found", async () => {
40
- const { axios } = await getTestFixture()
41
-
42
- try {
43
- await axios.post("/api/export_requests/update", {
44
- export_request_id: 999999,
45
- is_complete: true,
46
- })
47
- } catch (error: any) {
48
- expect(error.status).toBe(404)
49
- }
50
- })
@@ -1,10 +0,0 @@
1
- import { it, expect } from "bun:test"
2
- import { getTestFixture } from "../fixtures/get-test-server"
3
-
4
- it("GET /health", async () => {
5
- const { axios } = await getTestFixture()
6
-
7
- expect(await axios.get("/health").then((r) => r.data)).toMatchObject({
8
- ok: true,
9
- })
10
- })
package/bunfig.toml DELETED
@@ -1,2 +0,0 @@
1
- [test]
2
- preload = ["./cli/tests/fixtures/preload.ts"]
package/cli/cli.ts DELETED
@@ -1,13 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- import kleur from "kleur"
4
- import { createContextAndRunProgram } from "./lib/util/create-context-and-run-program"
5
-
6
- async function main() {
7
- await createContextAndRunProgram(process.argv)
8
- }
9
-
10
- main().catch((e: Error) => {
11
- console.log(kleur.gray(e.stack ?? ""))
12
- console.log(kleur.red(`Error running CLI: ${e.toString()}`))
13
- })
@@ -1,34 +0,0 @@
1
- import kleur from "kleur"
2
- import { AppContext } from "cli/lib/util/app-context"
3
- import { z } from "zod"
4
- import { createOrModifyNpmrc } from "./init/create-or-modify-npmrc"
5
- import $ from "dax-sh"
6
-
7
- export const addCmd = async (ctx: AppContext, args: any) => {
8
- const params = z
9
- .object({
10
- packages: z.array(z.string()),
11
- flags: z
12
- .object({ dev: z.boolean().optional().default(false) })
13
- .optional()
14
- .default({}),
15
- })
16
- .parse(args)
17
-
18
- params.packages = params.packages.map((p) => p.replace(/^@/, ""))
19
-
20
- await createOrModifyNpmrc({ quiet: true }, ctx)
21
-
22
- $.cd(ctx.cwd)
23
-
24
- const flagsString = params.flags.dev ? "--dev" : ""
25
-
26
- const cmd = `npm add ${flagsString} ${params.packages
27
- .map((p) => `@tsci/${p.replace(/\//, ".")}`)
28
- .join(" ")}`
29
- console.log(kleur.gray(`> ${cmd}`))
30
-
31
- await $`npm add ${flagsString} ${params.packages.map(
32
- (p) => `@tsci/${p.replace(/\//, ".")}`,
33
- )}`
34
- }
@@ -1,59 +0,0 @@
1
- import { AppContext } from "../util/app-context"
2
- import delay from "delay"
3
-
4
- export const authLogin = async (ctx: AppContext, args: any) => {
5
- const {
6
- data: { login_page },
7
- } = await ctx.axios.post("/sessions/login_page/create", {})
8
-
9
- console.log("Please visit the following URL to log in:")
10
- console.log(login_page.url)
11
-
12
- // Wait until we receive confirmation
13
- while (true) {
14
- const {
15
- data: { login_page: new_login_page },
16
- } = await ctx.axios.post(
17
- "/sessions/login_page/get",
18
- {
19
- login_page_id: login_page.login_page_id,
20
- },
21
- {
22
- headers: {
23
- Authorization: `Bearer ${login_page.login_page_auth_token}`,
24
- },
25
- },
26
- )
27
-
28
- if (new_login_page.was_login_successful) {
29
- console.log("Logged in! Generating token...")
30
- break
31
- }
32
-
33
- if (new_login_page.is_expired) {
34
- throw new Error("Login page expired")
35
- }
36
-
37
- await delay(1000)
38
- }
39
-
40
- const {
41
- data: { session },
42
- } = await ctx.axios.post(
43
- "/sessions/login_page/exchange_for_cli_session",
44
- {
45
- login_page_id: login_page.login_page_id,
46
- },
47
- {
48
- headers: {
49
- Authorization: `Bearer ${login_page.login_page_auth_token}`,
50
- },
51
- },
52
- )
53
-
54
- ctx.profile_config.set("session_token", session.token)
55
-
56
- // TODO test query
57
-
58
- console.log("Ready to use!")
59
- }
@@ -1,7 +0,0 @@
1
- import kleur from "kleur"
2
- import { AppContext } from "../util/app-context"
3
-
4
- export const authLogout = async (ctx: AppContext, args: any) => {
5
- ctx.profile_config.delete("session_token")
6
- console.log(kleur.green("Logged out!"))
7
- }
@@ -1,3 +0,0 @@
1
- import { AppContext } from "../util/app-context"
2
-
3
- export const authSessionsCreate = async (ctx: AppContext, args: any) => {}