@tscircuit/cli 0.0.394 → 0.1.2

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 (246) 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 +33 -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/clone/register.ts +99 -0
  13. package/cli/config/print/register.ts +12 -0
  14. package/cli/config/register.ts +5 -0
  15. package/cli/dev/register.ts +111 -0
  16. package/cli/main.ts +33 -0
  17. package/dist/main.js +537 -0
  18. package/docs/file-server-api-usage.md +57 -0
  19. package/docs/run-frame-usage.md +14 -0
  20. package/example-dir/manual-edits.json +1 -0
  21. package/example-dir/snippet.d.ts +13 -0
  22. package/example-dir/snippet.tsx +20 -0
  23. package/example-dir/types.d.ts +11 -0
  24. package/lib/cli-config/TypedConfigStore.ts +50 -0
  25. package/lib/cli-config/index.ts +16 -0
  26. package/lib/dependency-analysis/DependencyAnalyzer.ts +129 -0
  27. package/lib/dependency-analysis/getLocalFileDependencies.ts +101 -0
  28. package/lib/dependency-analysis/installNodeModuleTypes.ts +74 -0
  29. package/lib/index.ts +2 -0
  30. package/lib/project-config/index.ts +5 -0
  31. package/lib/registry-api/endpoint-types.ts +20 -0
  32. package/lib/registry-api/get-ky.ts +30 -0
  33. package/lib/server/EventsWatcher.ts +75 -0
  34. package/lib/server/createServer.ts +62 -0
  35. package/lib/site/getIndex.ts +18 -0
  36. package/package.json +27 -144
  37. package/tsconfig.json +25 -22
  38. package/.github/workflows/formatbot.yml +0 -63
  39. package/.github/workflows/release.yml +0 -40
  40. package/.github/workflows/test.yml +0 -32
  41. package/.github/workflows/windows-tests.yml +0 -32
  42. package/.prettierrc +0 -1
  43. package/DEVELOPMENT.md +0 -7
  44. package/api/README.md +0 -3
  45. package/api/db/generic-json-level.ts +0 -123
  46. package/api/db/get-db.ts +0 -26
  47. package/api/db/schema.ts +0 -65
  48. package/api/db/zod-level-db.ts +0 -148
  49. package/api/index.ts +0 -4
  50. package/api/lib/middlewares/with-db.ts +0 -18
  51. package/api/lib/middlewares/with-debug-request-logging.ts +0 -13
  52. package/api/lib/middlewares/with-error-response.ts +0 -37
  53. package/api/lib/with-winter-spec.ts +0 -9
  54. package/api/lib/zod/export_parameters.ts +0 -25
  55. package/api/routes/api/db/download.ts +0 -25
  56. package/api/routes/api/dev_package_examples/create.ts +0 -43
  57. package/api/routes/api/dev_package_examples/get.ts +0 -46
  58. package/api/routes/api/dev_package_examples/list.ts +0 -36
  59. package/api/routes/api/dev_package_examples/update.ts +0 -59
  60. package/api/routes/api/dev_server/reset.ts +0 -13
  61. package/api/routes/api/export_files/create.ts +0 -27
  62. package/api/routes/api/export_files/download.ts +0 -25
  63. package/api/routes/api/export_requests/create.ts +0 -30
  64. package/api/routes/api/export_requests/get.ts +0 -43
  65. package/api/routes/api/export_requests/list.ts +0 -26
  66. package/api/routes/api/export_requests/update.ts +0 -34
  67. package/api/routes/api/health.ts +0 -11
  68. package/api/routes/api/package_info/create.ts +0 -26
  69. package/api/routes/api/package_info/get.ts +0 -16
  70. package/api/routes/health.ts +0 -11
  71. package/api/routes/index.ts +0 -16
  72. package/api/server.ts +0 -20
  73. package/api/static-routes.ts +0 -24
  74. package/api/tests/fixtures/get-test-server.ts +0 -31
  75. package/api/tests/fixtures/start-server.ts +0 -41
  76. package/api/tests/routes/dev_package_examples/create.test.ts +0 -19
  77. package/api/tests/routes/dev_package_examples/get.test.ts +0 -25
  78. package/api/tests/routes/dev_package_examples/list.test.ts +0 -32
  79. package/api/tests/routes/dev_package_examples/update.test.ts +0 -38
  80. package/api/tests/routes/export_files/create.test.ts +0 -18
  81. package/api/tests/routes/export_files/download.test.ts +0 -29
  82. package/api/tests/routes/export_requests/create.test.ts +0 -24
  83. package/api/tests/routes/export_requests/get.test.ts +0 -41
  84. package/api/tests/routes/export_requests/list.test.ts +0 -35
  85. package/api/tests/routes/export_requests/update.test.ts +0 -50
  86. package/api/tests/routes/health.test.ts +0 -10
  87. package/bunfig.toml +0 -2
  88. package/cli/cli.ts +0 -13
  89. package/cli/lib/cmd-fns/add.ts +0 -34
  90. package/cli/lib/cmd-fns/auth-login.ts +0 -59
  91. package/cli/lib/cmd-fns/auth-logout.ts +0 -7
  92. package/cli/lib/cmd-fns/auth-sessions-create.ts +0 -3
  93. package/cli/lib/cmd-fns/auth-sessions-get.ts +0 -3
  94. package/cli/lib/cmd-fns/auth-sessions-list.ts +0 -5
  95. package/cli/lib/cmd-fns/config-clear.ts +0 -5
  96. package/cli/lib/cmd-fns/config-print-config.ts +0 -6
  97. package/cli/lib/cmd-fns/config-reveal-location.ts +0 -5
  98. package/cli/lib/cmd-fns/config-set-log-requests.ts +0 -7
  99. package/cli/lib/cmd-fns/config-set-registry.ts +0 -9
  100. package/cli/lib/cmd-fns/config-set-runtime.ts +0 -7
  101. package/cli/lib/cmd-fns/config-set-session.ts +0 -7
  102. package/cli/lib/cmd-fns/dev/check-if-initialized.ts +0 -22
  103. package/cli/lib/cmd-fns/dev/derive-selector-from-pcb-component-id.ts +0 -23
  104. package/cli/lib/cmd-fns/dev/dev-server-request-handler.ts +0 -61
  105. package/cli/lib/cmd-fns/dev/find-available-port.ts +0 -32
  106. package/cli/lib/cmd-fns/dev/fulfill-export-requests.ts +0 -162
  107. package/cli/lib/cmd-fns/dev/get-dev-server-axios.ts +0 -29
  108. package/cli/lib/cmd-fns/dev/index.ts +0 -168
  109. package/cli/lib/cmd-fns/dev/infer-export-name-from-source.ts +0 -17
  110. package/cli/lib/cmd-fns/dev/mark-all-examples-loading.ts +0 -18
  111. package/cli/lib/cmd-fns/dev/soupify-and-upload-example-file.ts +0 -62
  112. package/cli/lib/cmd-fns/dev/start-dev-server.ts +0 -34
  113. package/cli/lib/cmd-fns/dev/start-edit-event-watcher.ts +0 -347
  114. package/cli/lib/cmd-fns/dev/start-export-request-watcher.ts +0 -33
  115. package/cli/lib/cmd-fns/dev/start-fs-watcher.ts +0 -54
  116. package/cli/lib/cmd-fns/dev/upload-examples-from-directory.ts +0 -42
  117. package/cli/lib/cmd-fns/dev-server-fulfill-export-requests.ts +0 -43
  118. package/cli/lib/cmd-fns/dev-server-upload.ts +0 -56
  119. package/cli/lib/cmd-fns/export-gerbers.ts +0 -28
  120. package/cli/lib/cmd-fns/export-kicad-pcb.ts +0 -36
  121. package/cli/lib/cmd-fns/export-pnp-csv.ts +0 -32
  122. package/cli/lib/cmd-fns/gen-jlcpcb-component.ts +0 -64
  123. package/cli/lib/cmd-fns/go.ts +0 -14
  124. package/cli/lib/cmd-fns/index.ts +0 -46
  125. package/cli/lib/cmd-fns/init/create-or-modify-npmrc.ts +0 -21
  126. package/cli/lib/cmd-fns/init/get-generated-npmrc.ts +0 -8
  127. package/cli/lib/cmd-fns/init/get-generated-readme.ts +0 -41
  128. package/cli/lib/cmd-fns/init/get-generated-tsconfig.ts +0 -34
  129. package/cli/lib/cmd-fns/init/index.ts +0 -193
  130. package/cli/lib/cmd-fns/install.ts +0 -34
  131. package/cli/lib/cmd-fns/lint.ts +0 -43
  132. package/cli/lib/cmd-fns/open.ts +0 -19
  133. package/cli/lib/cmd-fns/package-examples-create.ts +0 -36
  134. package/cli/lib/cmd-fns/package-examples-get.ts +0 -20
  135. package/cli/lib/cmd-fns/package-examples-list.ts +0 -18
  136. package/cli/lib/cmd-fns/package-files-create.ts +0 -31
  137. package/cli/lib/cmd-fns/package-files-download.ts +0 -29
  138. package/cli/lib/cmd-fns/package-files-get.ts +0 -3
  139. package/cli/lib/cmd-fns/package-files-list.ts +0 -28
  140. package/cli/lib/cmd-fns/package-files-upload-directory.ts +0 -6
  141. package/cli/lib/cmd-fns/package-releases-create.ts +0 -35
  142. package/cli/lib/cmd-fns/package-releases-get.ts +0 -3
  143. package/cli/lib/cmd-fns/package-releases-list.ts +0 -32
  144. package/cli/lib/cmd-fns/package-releases-update.ts +0 -45
  145. package/cli/lib/cmd-fns/packages-create.ts +0 -16
  146. package/cli/lib/cmd-fns/packages-get.ts +0 -16
  147. package/cli/lib/cmd-fns/packages-list.ts +0 -16
  148. package/cli/lib/cmd-fns/publish/index.ts +0 -336
  149. package/cli/lib/cmd-fns/remove.ts +0 -31
  150. package/cli/lib/cmd-fns/render.ts +0 -45
  151. package/cli/lib/cmd-fns/soupify.ts +0 -31
  152. package/cli/lib/cmd-fns/uninstall.ts +0 -31
  153. package/cli/lib/cmd-fns/version.ts +0 -38
  154. package/cli/lib/create-config-manager.ts +0 -97
  155. package/cli/lib/export-fns/export-bom-csv.ts +0 -32
  156. package/cli/lib/export-fns/export-gerbers.ts +0 -108
  157. package/cli/lib/export-fns/export-kicad-pcb.ts +0 -32
  158. package/cli/lib/export-fns/export-pnp-csv.ts +0 -31
  159. package/cli/lib/get-program.ts +0 -387
  160. package/cli/lib/param-handlers/index.ts +0 -21
  161. package/cli/lib/param-handlers/interact-for-local-directory.ts +0 -58
  162. package/cli/lib/param-handlers/interact-for-local-file.ts +0 -59
  163. package/cli/lib/param-handlers/interact-for-package-example-id.ts +0 -25
  164. package/cli/lib/param-handlers/interact-for-package-name-with-version.ts +0 -63
  165. package/cli/lib/param-handlers/interact-for-package-name.ts +0 -45
  166. package/cli/lib/param-handlers/interact-for-package-release-id.ts +0 -15
  167. package/cli/lib/param-handlers/interact-for-registry-url.ts +0 -27
  168. package/cli/lib/param-handlers/interact-for-runtime.ts +0 -33
  169. package/cli/lib/param-handlers/param-handler-type.ts +0 -7
  170. package/cli/lib/posthog.ts +0 -23
  171. package/cli/lib/soupify/get-export-name-from-file.ts +0 -29
  172. package/cli/lib/soupify/get-tmp-entrpoint-filepath.ts +0 -15
  173. package/cli/lib/soupify/index.ts +0 -1
  174. package/cli/lib/soupify/run-entrypoint-file.ts +0 -59
  175. package/cli/lib/soupify/soupify-with-core.ts +0 -74
  176. package/cli/lib/soupify/soupify.ts +0 -6
  177. package/cli/lib/util/app-context.ts +0 -17
  178. package/cli/lib/util/create-context-and-run-program.ts +0 -168
  179. package/cli/lib/util/get-all-package-files.ts +0 -66
  180. package/cli/lib/util/lint-project.ts +0 -137
  181. package/cli/tests/export-gerber-keyboard.test.ts +0 -16
  182. package/cli/tests/export-gerber.test.ts +0 -49
  183. package/cli/tests/export-kicad-pcb.test.ts +0 -23
  184. package/cli/tests/export-pnp-csv.test.ts +0 -24
  185. package/cli/tests/fixtures/preload.ts +0 -54
  186. package/cli/tests/init.test.ts +0 -9
  187. package/cli/tests/open.test.ts +0 -9
  188. package/cli/tests/soupify-builder.test.ts +0 -9
  189. package/cli/tests/soupify-core.test.ts +0 -9
  190. package/dist/cli.js +0 -3676
  191. package/docs/EDIT_EVENT_PIPELINE.md +0 -34
  192. package/example-project/README.md +0 -18
  193. package/example-project/examples/basic-capacitor.tsx +0 -5
  194. package/example-project/examples/basic-chip.tsx +0 -26
  195. package/example-project/examples/basic-resistor.tsx +0 -3
  196. package/example-project/examples/macrokeypad.tsx +0 -59
  197. package/example-project/index.ts +0 -1
  198. package/example-project/package.json +0 -5
  199. package/example-project/src/ArduinoProMicroBreakout.tsx +0 -37
  200. package/example-project/src/Key.tsx +0 -46
  201. package/example-project/src/Keyswitch.tsx +0 -26
  202. package/example-project/src/KeyswitchSocket.tsx +0 -56
  203. package/example-project/src/MyCircuit.tsx +0 -38
  204. package/example-project/src/manual-edits.ts +0 -93
  205. package/frontend/README.md +0 -3
  206. package/frontend/bun.lockb +0 -0
  207. package/frontend/components/command-k.tsx +0 -86
  208. package/frontend/components/dialogs/generic-export-dialog.tsx +0 -189
  209. package/frontend/components/dialogs/gerber-export-dialog.tsx +0 -168
  210. package/frontend/components/global-context-providers.tsx +0 -11
  211. package/frontend/components/select-example-search.tsx +0 -118
  212. package/frontend/components/ui/alert-dialog.tsx +0 -139
  213. package/frontend/components/ui/alert.tsx +0 -59
  214. package/frontend/components/ui/breadcrumb.tsx +0 -115
  215. package/frontend/components/ui/button.tsx +0 -57
  216. package/frontend/components/ui/card.tsx +0 -76
  217. package/frontend/components/ui/command.tsx +0 -153
  218. package/frontend/components/ui/context-menu.tsx +0 -202
  219. package/frontend/components/ui/dialog.tsx +0 -120
  220. package/frontend/components/ui/menubar.tsx +0 -238
  221. package/frontend/components/ui/navigation-menu.tsx +0 -128
  222. package/frontend/components/ui/popover.tsx +0 -31
  223. package/frontend/components/ui/select.tsx +0 -162
  224. package/frontend/components/ui/tabs.tsx +0 -53
  225. package/frontend/components/ui/toggle-group.tsx +0 -59
  226. package/frontend/components/ui/toggle.tsx +0 -43
  227. package/frontend/components/ui/tooltip.tsx +0 -28
  228. package/frontend/components.json +0 -17
  229. package/frontend/hooks/toast-if-api-not-connected.ts +0 -23
  230. package/frontend/hooks/use-active-dev-package-example-lite.ts +0 -39
  231. package/frontend/hooks/use-dev-package-examples.tsx +0 -18
  232. package/frontend/hooks/use-global-store.ts +0 -42
  233. package/frontend/index.css +0 -76
  234. package/frontend/index.html +0 -13
  235. package/frontend/lib/utils.ts +0 -6
  236. package/frontend/main.tsx +0 -13
  237. package/frontend/tailwind.config.js +0 -74
  238. package/frontend/views/App.tsx +0 -22
  239. package/frontend/views/Header.tsx +0 -55
  240. package/frontend/views/HeaderMenu.tsx +0 -326
  241. package/frontend/views/MainContentView.tsx +0 -172
  242. package/frontend/vite-env.d.ts +0 -1
  243. package/frontend/vite.config.ts +0 -50
  244. package/renovate.json +0 -16
  245. package/scripts/build-cli.ts +0 -12
  246. 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) => {}