From a3b217b1e51f02d6c32ef1615d2d57a7b264ccae Mon Sep 17 00:00:00 2001 From: seveibar Date: Tue, 10 Dec 2024 04:47:48 -0800 Subject: [PATCH 1/6] cli branch --- .github/workflows/bun-formatcheck.yml | 26 ++++++++++++++++++++++++++ .github/workflows/bun-pver-release.yml | 25 +++++++++++++++++++++++++ .github/workflows/bun-typecheck.yml | 26 ++++++++++++++++++++++++++ package.json | 1 + renovate.json | 15 +++++++++++++++ 5 files changed, 93 insertions(+) create mode 100644 .github/workflows/bun-formatcheck.yml create mode 100644 .github/workflows/bun-pver-release.yml create mode 100644 .github/workflows/bun-typecheck.yml create mode 100644 renovate.json diff --git a/.github/workflows/bun-formatcheck.yml b/.github/workflows/bun-formatcheck.yml new file mode 100644 index 0000000..2d36363 --- /dev/null +++ b/.github/workflows/bun-formatcheck.yml @@ -0,0 +1,26 @@ +# Created using @tscircuit/plop (npm install -g @tscircuit/plop) +name: Format Check + +on: + push: + branches: [main] + pull_request: + branches: [main] + +jobs: + format-check: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Setup bun + uses: oven-sh/setup-bun@v1 + with: + bun-version: latest + + - name: Install dependencies + run: bun install + + - name: Run format check + run: bun run format:check diff --git a/.github/workflows/bun-pver-release.yml b/.github/workflows/bun-pver-release.yml new file mode 100644 index 0000000..14c7fd6 --- /dev/null +++ b/.github/workflows/bun-pver-release.yml @@ -0,0 +1,25 @@ +# Created using @tscircuit/plop (npm install -g @tscircuit/plop) +name: Publish to npm +on: + push: + branches: + - main +jobs: + publish: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Setup bun + uses: oven-sh/setup-bun@v1 + with: + bun-version: latest + - uses: actions/setup-node@v3 + with: + node-version: 20 + registry-url: https://registry.npmjs.org/ + - run: npm install -g pver + - run: bun install --frozen-lockfile + - run: bun run build + - run: pver release + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/.github/workflows/bun-typecheck.yml b/.github/workflows/bun-typecheck.yml new file mode 100644 index 0000000..22b3f96 --- /dev/null +++ b/.github/workflows/bun-typecheck.yml @@ -0,0 +1,26 @@ +# Created using @tscircuit/plop (npm install -g @tscircuit/plop) +name: Type Check + +on: + push: + branches: [main] + pull_request: + branches: [main] + +jobs: + type-check: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Setup bun + uses: oven-sh/setup-bun@v1 + with: + bun-version: latest + + - name: Install dependencies + run: bun i + + - name: Run type check + run: bunx tsc --noEmit diff --git a/package.json b/package.json index 9e765be..9e17a04 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "start": "cosmos", "build:css": "bun run scripts/build-css.ts", "build:site": "cosmos-export", + "build:cli": "vite build", "vercel-build": "bun run build:css && cosmos-export" }, "devDependencies": { diff --git a/renovate.json b/renovate.json new file mode 100644 index 0000000..183732e --- /dev/null +++ b/renovate.json @@ -0,0 +1,15 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "extends": ["config:base"], + "packageRules": [ + { + "packagePatterns": ["*"], + "excludePackagePatterns": ["@tscircuit/*", "circuit-to-svg"], + "enabled": false + }, + { + "matchUpdateTypes": ["major", "minor", "patch"], + "automerge": true + } + ] +} From 504a580b0a58edeadc862d3dd9ee675def589b9d Mon Sep 17 00:00:00 2001 From: seveibar Date: Wed, 11 Dec 2024 03:54:22 -0800 Subject: [PATCH 2/6] initial runframe implementation --- bun.lockb | Bin 265993 -> 266327 bytes examples/runframe1-basic.fixture.tsx | 14 +++++++ lib/components/RunFrame.tsx | 56 ++++++++++++++++++++++++++- package.json | 3 +- 4 files changed, 70 insertions(+), 3 deletions(-) create mode 100644 examples/runframe1-basic.fixture.tsx diff --git a/bun.lockb b/bun.lockb index 85878f8c6bd9f375e7cdf94e94d5aba3395fa006..733184701b7feb6048b2676497b8f05132214a6a 100755 GIT binary patch delta 41875 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 Xt)==}7x{_3qpel9emBqh=KKE#ZA86q delta 41096 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 diff --git a/examples/runframe1-basic.fixture.tsx b/examples/runframe1-basic.fixture.tsx new file mode 100644 index 0000000..20d6cac --- /dev/null +++ b/examples/runframe1-basic.fixture.tsx @@ -0,0 +1,14 @@ +import { RunFrame } from "lib/components/RunFrame" + +export default () => ( + +) +`, + }} + entrypoint="main.tsx" + /> +) diff --git a/lib/components/RunFrame.tsx b/lib/components/RunFrame.tsx index cebb439..0339179 100644 --- a/lib/components/RunFrame.tsx +++ b/lib/components/RunFrame.tsx @@ -1,3 +1,55 @@ -export const RunFrame = () => { - return
hello
+import { createCircuitWebWorker } from "@tscircuit/eval-webworker" +import { CircuitJsonPreview } from "./CircuitJsonPreview" +import { useEffect, useState } from "react" + +interface Props { + /** + * Map of filenames to file contents that will be available in the worker + */ + fsMap: { [filename: string]: string } + + /** + * The entry point file that will be executed first + */ + entrypoint: string + + /** + * Called when the circuit JSON changes + */ + onCircuitJsonChange?: (circuitJson: any) => void + + /** + * Called when rendering is finished + */ + onRenderingFinished?: (params: { circuitJson: any }) => void + + /** + * Called for each render event + */ + onRenderEvent?: (event: any) => void + + /** + * Called when an error occurs + */ + onError?: (error: Error) => void +} + +export const RunFrame = (props: Props) => { + const [circuitJson, setCircuitJson] = useState(null) + + useEffect(() => { + async function runWorker() { + const worker = await createCircuitWebWorker({}) + const $finished = worker.executeWithFsMap({ + entrypoint: props.entrypoint, + fsMap: props.fsMap, + }) + setCircuitJson(await worker.getCircuitJson()) + await $finished + setCircuitJson(await worker.getCircuitJson()) + } + runWorker() + }, [props.fsMap]) + + return } diff --git a/package.json b/package.json index 9e17a04..8ec0ad2 100644 --- a/package.json +++ b/package.json @@ -31,9 +31,10 @@ "@radix-ui/react-icons": "^1.3.2", "@radix-ui/react-tabs": "^1.1.1", "@tscircuit/3d-viewer": "^0.0.46", - "@tscircuit/eval-webworker": "^0.0.4", + "@tscircuit/eval-webworker": "^0.0.8", "@tscircuit/pcb-viewer": "^1.10.21", "@tscircuit/schematic-viewer": "2.0.3", + "comlink": "^4.4.2", "cssnano": "^7.0.6", "lucide-react": "^0.468.0", "react-cosmos-plugin-vite": "^6.2.0", From 28f8a8bea381f81a0536a642ee448965359ad2cd Mon Sep 17 00:00:00 2001 From: seveibar Date: Thu, 12 Dec 2024 19:21:02 -0800 Subject: [PATCH 3/6] eval webworker working, main RunFrame api implemented --- bun.lockb | Bin 266327 -> 266328 bytes examples/runframe1-basic.fixture.tsx | 7 ++++++- lib/components/RunFrame.tsx | 17 +++++++++++++++-- package.json | 4 ++-- 4 files changed, 23 insertions(+), 5 deletions(-) diff --git a/bun.lockb b/bun.lockb index 733184701b7feb6048b2676497b8f05132214a6a..54b868bdbe924506135af7ca7be949c9331c3a8c 100755 GIT binary patch delta 12400 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 delta 12381 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 ( + + + + + ) `, }} diff --git a/lib/components/RunFrame.tsx b/lib/components/RunFrame.tsx index 0339179..d4319e0 100644 --- a/lib/components/RunFrame.tsx +++ b/lib/components/RunFrame.tsx @@ -2,6 +2,9 @@ import { createCircuitWebWorker } from "@tscircuit/eval-webworker" import { CircuitJsonPreview } from "./CircuitJsonPreview" import { useEffect, useState } from "react" +// @ts-ignore +import evalWebWorkerBlobUrl from "@tscircuit/eval-webworker/blob-url" + interface Props { /** * Map of filenames to file contents that will be available in the worker @@ -39,17 +42,27 @@ export const RunFrame = (props: Props) => { useEffect(() => { async function runWorker() { - const worker = await createCircuitWebWorker({}) + const worker = await createCircuitWebWorker({ + webWorkerUrl: evalWebWorkerBlobUrl, + verbose: true, + }) const $finished = worker.executeWithFsMap({ entrypoint: props.entrypoint, fsMap: props.fsMap, }) - setCircuitJson(await worker.getCircuitJson()) + console.log("waiting for execution to finish...") await $finished + console.log("waiting for initial circuit json...") + setCircuitJson(await worker.getCircuitJson()) + console.log("got initial circuit json") + await $finished.catch((e) => { + console.error(e) + }) setCircuitJson(await worker.getCircuitJson()) } runWorker() }, [props.fsMap]) + console.log({ circuitJson }) return } diff --git a/package.json b/package.json index 8ec0ad2..55d6aaa 100644 --- a/package.json +++ b/package.json @@ -31,8 +31,8 @@ "@radix-ui/react-icons": "^1.3.2", "@radix-ui/react-tabs": "^1.1.1", "@tscircuit/3d-viewer": "^0.0.46", - "@tscircuit/eval-webworker": "^0.0.8", - "@tscircuit/pcb-viewer": "^1.10.21", + "@tscircuit/eval-webworker": "^0.0.20", + "@tscircuit/pcb-viewer": "^1.10.22", "@tscircuit/schematic-viewer": "2.0.3", "comlink": "^4.4.2", "cssnano": "^7.0.6", From b187300bb80c5ed204e4891c0cd4cff516976a17 Mon Sep 17 00:00:00 2001 From: seveibar Date: Thu, 12 Dec 2024 22:59:09 -0800 Subject: [PATCH 4/6] add includes directories --- tsconfig.json | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/tsconfig.json b/tsconfig.json index 1be19ce..b039572 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -29,5 +29,15 @@ "noUnusedLocals": false, "noUnusedParameters": false, "noPropertyAccessFromIndexSignature": false - } + }, + "include": [ + "lib/**/*.ts", + "lib/**/*.tsx", + "examples/**/*.ts", + "examples/**/*.tsx", + "cli/**/*.ts", + "cli/**/*.tsx", + "scripts/**/*.ts", + "scripts/**/*.tsx" + ] } From ba69113d6dd7132fc2d65fa8d214b8085bd8857c Mon Sep 17 00:00:00 2001 From: seveibar Date: Thu, 12 Dec 2024 23:01:46 -0800 Subject: [PATCH 5/6] remove unused file --- lib/utils/getSyntaxError.ts | 13 ------------- package.json | 2 ++ 2 files changed, 2 insertions(+), 13 deletions(-) delete mode 100644 lib/utils/getSyntaxError.ts diff --git a/lib/utils/getSyntaxError.ts b/lib/utils/getSyntaxError.ts deleted file mode 100644 index 0ec9f43..0000000 --- a/lib/utils/getSyntaxError.ts +++ /dev/null @@ -1,13 +0,0 @@ -import * as Babel from "@babel/standalone" - -export function getSyntaxError(code: string): string | null { - try { - Babel.transform(code, { - filename: "index.tsx", - presets: ["react", "typescript"], - }) - return null - } catch (error: unknown) { - return (error as Error).message - } -} diff --git a/package.json b/package.json index 55d6aaa..f66810f 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,8 @@ "build:css": "bun run scripts/build-css.ts", "build:site": "cosmos-export", "build:cli": "vite build", + "format:check": "biome format .", + "format": "biome format --write .", "vercel-build": "bun run build:css && cosmos-export" }, "devDependencies": { From 9e0ef029c11cd8bd28ff9a2208cfa7dcf4820409 Mon Sep 17 00:00:00 2001 From: seveibar Date: Thu, 12 Dec 2024 23:10:45 -0800 Subject: [PATCH 6/6] format files --- lib/components/ErrorFallback.tsx | 46 ++++++++++++++++---------------- postcss.config.js | 12 ++++----- tailwind.config.js | 6 ++--- 3 files changed, 31 insertions(+), 33 deletions(-) diff --git a/lib/components/ErrorFallback.tsx b/lib/components/ErrorFallback.tsx index 60707ec..8516607 100644 --- a/lib/components/ErrorFallback.tsx +++ b/lib/components/ErrorFallback.tsx @@ -1,25 +1,25 @@ -import React from "react"; +import React from "react" export const ErrorFallback = ({ error }: { error: Error }) => { - return ( -
-
-

- Error Loading 3D Viewer -

-

- {error.message} -

-
- {error.stack} -
-
-
- ); -}; + return ( +
+
+

+ Error Loading 3D Viewer +

+

+ {error.message} +

+
+ {error.stack} +
+
+
+ ) +} diff --git a/postcss.config.js b/postcss.config.js index 14a604b..fdef43b 100644 --- a/postcss.config.js +++ b/postcss.config.js @@ -1,8 +1,8 @@ export default { plugins: { - 'tailwindcss': {}, - 'cssnano': { - preset: 'default' - } - } -} \ No newline at end of file + tailwindcss: {}, + cssnano: { + preset: "default", + }, + }, +} diff --git a/tailwind.config.js b/tailwind.config.js index 80f1f83..1d48ce6 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -1,5 +1,3 @@ export default { - content: [ - './lib/**/*.{js,jsx,ts,tsx}', - ], -} \ No newline at end of file + content: ["./lib/**/*.{js,jsx,ts,tsx}"], +}