From 29bdce0be2e971615b2523dd36a935294da0edcf Mon Sep 17 00:00:00 2001 From: "Greg Willard (r3pwn)" Date: Thu, 22 May 2025 22:54:48 -0400 Subject: [PATCH 1/6] feat: migrate to astro + preact --- .github/workflows/deploy.yml | 2 +- .gitignore | 3 + astro.config.mjs | 29 +++ bun.lockb | Bin 153364 -> 209436 bytes package.json | 35 +-- postcss.config.js | 6 - src/app/icon.svg => public/favicon.svg | 0 src/app/App.test.jsx | 10 - src/app/favicon.ico | Bin 867 -> 0 bytes src/app/icon.png | Bin 1389 -> 0 bytes src/app/index.jsx | 174 --------------- src/components/copy-text.astro | 13 ++ src/{app/Flash.jsx => components/flash.jsx} | 52 ++--- src/components/platform-gate.tsx | 15 ++ index.html => src/layouts/base-layout.astro | 17 +- src/main.jsx | 14 -- src/pages/index.astro | 227 ++++++++++++++++++++ src/test/setup.js | 1 - src/utils/image.js | 2 +- src/utils/platform.js | 25 ++- tailwind.config.js | 7 +- tsconfig.json | 14 ++ vite.config.js | 12 -- 23 files changed, 365 insertions(+), 293 deletions(-) create mode 100644 astro.config.mjs delete mode 100644 postcss.config.js rename src/app/icon.svg => public/favicon.svg (100%) delete mode 100644 src/app/App.test.jsx delete mode 100644 src/app/favicon.ico delete mode 100644 src/app/icon.png delete mode 100644 src/app/index.jsx create mode 100644 src/components/copy-text.astro rename src/{app/Flash.jsx => components/flash.jsx} (90%) create mode 100644 src/components/platform-gate.tsx rename index.html => src/layouts/base-layout.astro (54%) delete mode 100644 src/main.jsx create mode 100644 src/pages/index.astro delete mode 100644 src/test/setup.js create mode 100644 tsconfig.json delete mode 100644 vite.config.js diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index ea98db74..5570dc77 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -26,7 +26,7 @@ jobs: - run: bun install - run: bun run build env: - VITE_PUBLIC_GIT_SHA: ${{ steps.vars.outputs.sha_short }} + ASTRO_PUBLIC_GIT_SHA: ${{ steps.vars.outputs.sha_short }} - uses: actions/upload-pages-artifact@v3 with: diff --git a/.gitignore b/.gitignore index 08c27c0c..014c7756 100644 --- a/.gitignore +++ b/.gitignore @@ -41,3 +41,6 @@ yarn-error.log* # typescript *.tsbuildinfo next-env.d.ts + +# generated types +.astro/ \ No newline at end of file diff --git a/astro.config.mjs b/astro.config.mjs new file mode 100644 index 00000000..eefc6b20 --- /dev/null +++ b/astro.config.mjs @@ -0,0 +1,29 @@ +// @ts-check +import { defineConfig, fontProviders } from 'astro/config'; + +import preact from '@astrojs/preact'; +import tailwind from '@astrojs/tailwind'; + +export default defineConfig({ + integrations: [preact(), tailwind()], + experimental: { + fonts: [{ + provider: fontProviders.fontsource(), + name: "Inter", + cssVariable: "--font-inter", + weights: ["100 900"], + styles: ["normal"], + subsets: ["latin"], + display: "swap" + }, + { + provider: fontProviders.fontsource(), + name: "JetBrains Mono", + cssVariable: "--font-jetbrains-mono", + weights: ["100 900"], + styles: ["normal"], + subsets: ["latin"], + display: "swap" + }] + }, +}); \ No newline at end of file diff --git a/bun.lockb b/bun.lockb index 5724689e5fd81a9b79d462669c0a96d71bdbc61a..acf716b9c864e400018678f01949b45fd7b59a1e 100755 GIT binary patch literal 209436 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 literal 153364 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%0D_iBrs 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 diff --git a/package.json b/package.json index 50f195cd..99b66ba5 100644 --- a/package.json +++ b/package.json @@ -4,40 +4,27 @@ "private": true, "type": "module", "scripts": { - "dev": "vite", - "build": "vite build", - "start": "vite preview", - "test": "vitest" + "dev": "astro dev", + "build": "astro build", + "start": "astro preview", + "astro": "astro" }, "engines": { "node": ">=20.11.0" }, "dependencies": { + "@astrojs/preact": "^4.1.0", + "@astrojs/tailwind": "^6.0.2", "@commaai/qdl": "git+https://github.com/commaai/qdl.js.git#52021f0b1ace58673ebca1fae740f6900ebff707", - "@fontsource-variable/inter": "^5.2.5", - "@fontsource-variable/jetbrains-mono": "^5.2.5", - "react": "^18.3.1", - "react-dom": "^18.3.1", - "xz-decompress": "^0.2.2" - }, - "devDependencies": { "@tailwindcss/typography": "^0.5.16", - "@testing-library/jest-dom": "^6.6.3", - "@testing-library/react": "^16.3.0", - "@types/react": "^18.3.20", - "@types/react-dom": "^18.3.6", - "@vitejs/plugin-react": "^4.3.4", - "autoprefixer": "10.4.21", - "jsdom": "^26.0.0", - "postcss": "^8.5.3", - "tailwindcss": "^3.4.17", - "vite": "^6.2.6", - "vite-svg-loader": "^5.1.0", - "vitest": "^3.1.1" + "astro": "^5.8.0", + "preact": "^10.26.6", + "tailwindcss": "3", + "xz-decompress": "^0.2.2" }, "trustedDependencies": [ "@commaai/qdl", "esbuild", "usb" ] -} +} \ No newline at end of file diff --git a/postcss.config.js b/postcss.config.js deleted file mode 100644 index 2e7af2b7..00000000 --- a/postcss.config.js +++ /dev/null @@ -1,6 +0,0 @@ -export default { - plugins: { - tailwindcss: {}, - autoprefixer: {}, - }, -} diff --git a/src/app/icon.svg b/public/favicon.svg similarity index 100% rename from src/app/icon.svg rename to public/favicon.svg diff --git a/src/app/App.test.jsx b/src/app/App.test.jsx deleted file mode 100644 index 206de720..00000000 --- a/src/app/App.test.jsx +++ /dev/null @@ -1,10 +0,0 @@ -import { Suspense } from 'react' -import { expect, test } from 'vitest' -import { render, screen } from '@testing-library/react' - -import App from '.' - -test('renders without crashing', () => { - render() - expect(screen.getByText('flash.comma.ai')).toBeInTheDocument() -}) diff --git a/src/app/favicon.ico b/src/app/favicon.ico deleted file mode 100644 index fad53e899245ec68a53112f8f7b4a5149f24372b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 867 zcmV-p1DyN-0096205C8R0096508Ik`02TlM0EtjeM-2)Z3IG5A4M|8uQUCw|FaQ7m zFbD;6hRdK?QuD|gOgy0L?ensNFizDih!gM>?H^m z7D5U^EG-1BwY2mP5bXl7HN~|GrZ`NlFytD)F&~5+7+gZuV%_Z5?96-fUi1gc-p;*! z^SP)JK=Yi|3^7;>85Qf#LwtK}wnb}N#=B@_bp^Hu zA=d6!|35M+pChY8Rsogp>EE^g-@c?VOA1vF^q+><>e^`}6pnfubKG=(YAMC}?J1ZbHa|wJZjtS%> zc3En;;a*`A#1+RcX^T+nM#BM(PEv6S2!K=pQ9}m+J3Ti|a}v0^ES>2Hy8D6On{JxU zBJD_#h@1z+aP0>aDoz$h5mPe_aVM}1&9>)UvxzH{S*&K%( z=5fV}lZDj-B?1ae9+37p6)4G8mBcJ1OeIv>;}~F+Nu>%EOQ>?i0X)CZBriGpq%+s! zD;VQ#$ceB>ogtCW%!nkS}{sBol4P#20KOq1B002ovPDHLkV1m-$gi8Pb diff --git a/src/app/icon.png b/src/app/icon.png deleted file mode 100644 index d5a6bf263a6ddfd3577fcaa1338e21f914785a96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1389 zcmV-z1(N!SP)pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H11o}xt zK~!jgy_#KY6jc<*e`j`UN&$lbjI9l#flz%=A&50bBEI+tWl0gCq%px7BxsBn9~43~ z8UxWpV?skhq7V!Xt<*$cj3D6wh!r#{77Eml5c#lt^oum@?(t!ExBE3Scjiv~C4Jbr z=bn51y?4%>J9k7?v85TgCk@XiJPtGnJfJWWn3gpe78p>t2=pqPsDdLM=w;inC8~gx z$V_0ZLW{uSh~xhtuvcM!7djBdL1+Ofq+a25U;|JSWze!9U?c;(t6*mbdMQ+2Qvq#A z)m7Li@Gg@}BW^|ocHD;dzd^@LIv5F9jx0#P0pJna2o3oOSlxx53o>+q44RNs0($uW zf(LjM=t&_>L599F(1f%K>;{rH(cI{PYu`=&p3?%=bw*v&z@{#AmzRO3fE3cE;MviX z@mp~CVHo{u^4hcgP&3!uhrs4e^pi?$6_-#Gl2Z6IRHPpKys0>NNy3!+a6S}1YC=|2 zYAX}49GNGu2S|h)rksBc!QcCeuT80UMT8_Fuy+;GP})!=pc%O%0SAFQLl05H*i|^) zR(?Iq(kWqD8uqs#RfQLe1Wdqd#F1?jPQBoYD8)hm0t>IfD}~qc0-BL~1>TD8evq%_Z|!!^S6mZKz5}(2U!6MEw)Z?o`&9c{B5E<1AJHy zAS;zxg-d`$^^_TdBagx0FaCBlbKR$KOlTTv9bg$2!2|sEW^nKj&+;iilJK;X-3CTx z;22!^*vvL&0c4;t36wpaO&PxhJ?q@;W5VbkaPEU(yXrc(VhuuIK@yl}Hhejyg<25* ze((PIk*J2Jj+*%snC}2H%tM%@QlVyzz@j~H*Ag>xg&7VJ_P1Vznk^4*gZee0x=at; zQkLOUsM%1Lf`+Z(`#HdHm=1o0T2y8%g2kT^C7BO7zztLDph7JQ)wR&r4T%V4q`*xF zxL{&zQmBO`Q4NiUqL&v6eGbrTVr){Vg(76esf5DWq{0b-%|XU9m%@|ZdbeLc4!?)E z2^+SC&N!7gp3K1E1SkQw(5$8Yo`%ktk6M>G=Fful}0dIk5*n-wGH&Fm~PPAMn5 z(JKzFuf4Y3hWmnTY%)$MxtMbsn*9PJHV%gaX23S%6e2L9?#pIZKo>fYao>SPLMPz% zpZ+7-W}HGYuq$^Uk}oByU}w}>80m-1xOaPm8pn^JD%hF(kr&W`UQ!6y)mFyu298?e zcp+3%uNkwtE=_o>Dd;D+E3VrpFeR8G`~XUjO+VM#rqH zkojpiAh0mD@ccQIhSl9@V1;G0Cq9Vw-Gn6yuL3b{Y04NC*q($ZOoE4KpBmIEY!P@d zj`IY_*Ea1**b(*v5UYZGG v@_t}81)tjh*MNS7UI$Jn9O*)>U(WmoAwiys6^&pO00000NkvXXu0mjf$=PlK diff --git a/src/app/index.jsx b/src/app/index.jsx deleted file mode 100644 index 9be48f10..00000000 --- a/src/app/index.jsx +++ /dev/null @@ -1,174 +0,0 @@ -import { Suspense, lazy } from 'react' - -import comma from '../assets/comma.svg' -import qdlPorts from '../assets/qdl-ports.svg' -import zadigCreateNewDevice from '../assets/zadig_create_new_device.png' -import zadigForm from '../assets/zadig_form.png' - -import { isLinux, isWindows } from '../utils/platform' - -const Flash = lazy(() => import('./Flash')) - -const VENDOR_ID = '05C6' -const PRODUCT_ID = '9008' -const DETACH_SCRIPT = 'for d in /sys/bus/usb/drivers/qcserial/*-*; do [ -e "$d" ] && echo -n "$(basename $d)" | sudo tee /sys/bus/usb/drivers/qcserial/unbind > /dev/null; done'; - -function CopyText({ children: text }) { - return
-
{text}
- -
; -} - -export default function App() { - const version = import.meta.env.VITE_PUBLIC_GIT_SHA || 'dev' - console.info(`flash.comma.ai version: ${version}`) - return ( -
-
-
- comma -

flash.comma.ai

-

- This tool allows you to flash AGNOS onto your comma device. AGNOS is the Ubuntu-based operating system for - your comma 3/3X. -

-
-
- -
-

Requirements

-
    -
  • - A web browser which supports WebUSB - {" "}(such as Google Chrome, Microsoft Edge, Opera), running on Windows, macOS, Linux, or Android. -
  • -
  • - A good quality USB-C cable to connect the device to your computer. USB 3 - {" "}is recommended for faster flashing speed. -
  • -
  • - Another USB-C cable and a charger, to power the device outside your car. -
  • -
- {isWindows && (<> -

USB Driver

-

You need additional driver software for Windows before you connect your device.

-
    -
  1. - Download and run Zadig. -
  2. -
  3. - Under Device in the menu bar, select Create New Device. - Zadig Create New Device -
  4. -
  5. - Fill in three fields. The first field is just a description and you can fill in anything. The next two - fields are very important. Fill them in with {VENDOR_ID} and {PRODUCT_ID} - respectively. Press "Install Driver" and give it a few minutes to install. - Zadig Form -
  6. -
-

No additional software is required for macOS, Linux or Android.

- )} -
-
- -
-

Flashing

-

Follow these steps to put your device into QDL mode:

-
    -
  1. Unplug the device and wait for the LED to switch off.
  2. -
  3. First, connect the device to your computer using the lower USB-C port (port 1).
  4. -
  5. Second, connect power to the upper OBD-C port (port 2).
  6. -
- image showing comma three and two ports. the lower port is labeled 1. the upper port is labeled 2. -

Your device's screen will remain blank for the entire flashing process. This is normal.

- {isLinux && (<> - Note for Linux users -

- On Linux systems, devices in QDL mode are automatically bound to the kernel's qcserial driver, and - need to be unbound before we can access the device. Copy the script below into your terminal and run it - after plugging in your device. -

- {DETACH_SCRIPT} - )} -

- Next, click the button to start flashing. From the prompt select the device which starts with - “QUSB_BULK”. -

-

- The process can take 30+ minutes depending on your internet connection and system performance. Do not - unplug the device until all steps are complete. -

-
-
- -
-

Troubleshooting

-

Lost connection

-

- Try using high quality USB 3 cables. You should also try different USB ports on the front or back of your - computer. If you're using a USB hub, try connecting directly to your computer instead. -

-

My device's screen is blank

-

- This is normal in QDL mode. You can verify that the “QUSB_BULK” device shows up when you press - the Flash button to know that it is working correctly. -

-

My device says “fastboot mode”

-

- You may have followed outdated instructions for flashing. Please read the instructions above for putting - your device into QDL mode. -

-

General Tips

-
    -
  • Try another computer or OS
  • -
  • Try different USB ports on your computer
  • -
  • Try different USB-C cables; low quality cables are often the source of problems. Note that the included OBD-C cable will not work.
  • -
-

Other questions

-

- If you need help, join our Discord server and go to - the #hw-three-3x channel. -

-
- -
-
- flash.comma.ai version: {version} -
-
- -
- Loading...

}> - -
-
- -
- flash.comma.ai version: {version} -
-
- ) -} diff --git a/src/components/copy-text.astro b/src/components/copy-text.astro new file mode 100644 index 00000000..6e42affc --- /dev/null +++ b/src/components/copy-text.astro @@ -0,0 +1,13 @@ +--- +const { text } = Astro.props; +--- + +
+
{text}
+ +
diff --git a/src/app/Flash.jsx b/src/components/flash.jsx similarity index 90% rename from src/app/Flash.jsx rename to src/components/flash.jsx index 7b3ad764..08248c56 100644 --- a/src/app/Flash.jsx +++ b/src/components/flash.jsx @@ -1,66 +1,57 @@ -import { useEffect, useRef, useState } from 'react' +import { useEffect, useRef, useState } from 'preact/hooks' import { FlashManager, StepCode, ErrorCode } from '../utils/manager' import { useImageManager } from '../utils/image' import { isLinux } from '../utils/platform' import config from '../config' -import bolt from '../assets/bolt.svg' -import cable from '../assets/cable.svg' -import deviceExclamation from '../assets/device_exclamation_c3.svg' -import deviceQuestion from '../assets/device_question_c3.svg' -import done from '../assets/done.svg' -import exclamation from '../assets/exclamation.svg' -import systemUpdate from '../assets/system_update_c3.svg' - - const steps = { [StepCode.INITIALIZING]: { status: 'Initializing...', bgColor: 'bg-gray-400 dark:bg-gray-700', - icon: bolt, + icon: 'bolt', }, [StepCode.READY]: { status: 'Tap to start', bgColor: 'bg-[#51ff00]', - icon: bolt, + icon: 'bolt', iconStyle: '', }, [StepCode.CONNECTING]: { status: 'Waiting for connection', description: 'Follow the instructions to connect your device to your computer', bgColor: 'bg-yellow-500', - icon: cable, + icon: 'cable', }, [StepCode.REPAIR_PARTITION_TABLES]: { status: 'Repairing partition tables...', description: 'Do not unplug your device until the process is complete', bgColor: 'bg-lime-400', - icon: systemUpdate, + icon: 'systemUpdate', }, [StepCode.ERASE_DEVICE]: { status: 'Erasing device...', description: 'Do not unplug your device until the process is complete', bgColor: 'bg-lime-400', - icon: systemUpdate, + icon: 'systemUpdate', }, [StepCode.FLASH_SYSTEM]: { status: 'Flashing device...', description: 'Do not unplug your device until the process is complete', bgColor: 'bg-lime-400', - icon: systemUpdate, + icon: 'systemUpdate', }, [StepCode.FINALIZING]: { status: 'Finalizing...', description: 'Do not unplug your device until the process is complete', bgColor: 'bg-lime-400', - icon: systemUpdate, + icon: 'systemUpdate', }, [StepCode.DONE]: { status: 'Done', description: 'Your device was flashed successfully. It should now boot into the openpilot setup.', bgColor: 'bg-green-500', - icon: done, + icon: 'done', }, } @@ -69,7 +60,7 @@ const errors = { status: 'Unknown error', description: 'An unknown error has occurred. Unplug your device, restart your browser and try again.', bgColor: 'bg-red-500', - icon: exclamation, + icon: 'exclamation', }, [ErrorCode.REQUIREMENTS_NOT_MET]: { status: 'Requirements not met', @@ -85,30 +76,30 @@ const errors = { description: 'The device connected to your computer is not supported. Try using a different cable, USB port, or ' + 'computer. If the problem persists, join the #hw-three-3x channel on Discord for help.', bgColor: 'bg-yellow-500', - icon: deviceQuestion, + icon: 'deviceQuestion', }, [ErrorCode.LOST_CONNECTION]: { status: 'Lost connection', description: 'The connection to your device was lost. Unplug your device and try again.', - icon: cable, + icon: 'cable', }, [ErrorCode.REPAIR_PARTITION_TABLES_FAILED]: { status: 'Repairing partition tables failed', description: 'Your device\'s partition tables could not be repaired. Try using a different cable, USB port, or ' + 'computer. If the problem persists, join the #hw-three-3x channel on Discord for help.', - icon: deviceExclamation, + icon: 'deviceExclamation', }, [ErrorCode.ERASE_FAILED]: { status: 'Erase failed', description: 'The device could not be erased. Try using a different cable, USB port, or computer. If the problem ' + 'persists, join the #hw-three-3x channel on Discord for help.', - icon: deviceExclamation, + icon: 'deviceExclamation', }, [ErrorCode.FLASH_SYSTEM_FAILED]: { status: 'Flash failed', description: 'AGNOS could not be flashed to your device. Try using a different cable, USB port, or computer. If ' + 'the problem persists, join the #hw-three-3x channel on Discord for help.', - icon: deviceExclamation, + icon: 'deviceExclamation', }, } @@ -171,7 +162,7 @@ function beforeUnloadListener(event) { } -export default function Flash() { +export default function Flash () { const [step, setStep] = useState(StepCode.INITIALIZING) const [message, setMessage] = useState('') const [progress, setProgress] = useState(-1) @@ -183,7 +174,7 @@ export default function Flash() { const imageManager = useImageManager() useEffect(() => { - if (!imageManager.current) return + if (!imageManager.current || imageManager.current.root) return fetch(config.loader.url) .then((res) => res.arrayBuffer()) @@ -246,13 +237,12 @@ export default function Flash() { style={{ cursor: canStart ? 'pointer' : 'default' }} onClick={canStart ? handleStart : null} > - cable + className={`${iconStyle} ${!error && step !== StepCode.DONE ? 'animate-pulse' : ''}`}> + +
diff --git a/src/components/platform-gate.tsx b/src/components/platform-gate.tsx new file mode 100644 index 00000000..705848ce --- /dev/null +++ b/src/components/platform-gate.tsx @@ -0,0 +1,15 @@ +import { platform as currentPlatform } from "../utils/platform"; + +type PlatformGateProps = { + platform: string; + children: preact.ComponentChildren; +}; + +const PlatformGate = ({ platform: targetPlatform, children }: PlatformGateProps) => { + if ((currentPlatform as string).toLowerCase() === targetPlatform.toLowerCase()) { + return <>{children}; + } + return null; +}; + +export default PlatformGate; \ No newline at end of file diff --git a/index.html b/src/layouts/base-layout.astro similarity index 54% rename from index.html rename to src/layouts/base-layout.astro index 33a000a3..fbc0f0db 100644 --- a/index.html +++ b/src/layouts/base-layout.astro @@ -1,22 +1,29 @@ +--- +import "../index.css"; + +import { Font } from "astro:assets"; +--- + - + flash.comma.ai + + + -
- + + src="https://plausible.io/js/script.outbound-links.js"> diff --git a/src/main.jsx b/src/main.jsx deleted file mode 100644 index 40fea3ef..00000000 --- a/src/main.jsx +++ /dev/null @@ -1,14 +0,0 @@ -import React from 'react' -import ReactDOM from 'react-dom/client' - -import '@fontsource-variable/inter' -import '@fontsource-variable/jetbrains-mono' - -import './index.css' -import App from './app' - -ReactDOM.createRoot(document.getElementById('root')).render( - - - , -) diff --git a/src/pages/index.astro b/src/pages/index.astro new file mode 100644 index 00000000..cd1ee29e --- /dev/null +++ b/src/pages/index.astro @@ -0,0 +1,227 @@ +--- +import BaseLayout from "../layouts/base-layout.astro"; +import CommaLogo from "../assets/comma.svg"; +import QDLPorts from "../assets/qdl-ports.svg"; +import Bolt from "../assets/bolt.svg"; +import Cable from "../assets/cable.svg"; +import DeviceExclamation from "../assets/device_exclamation_c3.svg"; +import DeviceQuestion from "../assets/device_question_c3.svg"; +import Done from "../assets/done.svg"; +import Exclamation from "../assets/exclamation.svg"; +import SystemUpdate from "../assets/system_update_c3.svg"; + +import zadigCreateNewDevice from "../assets/zadig_create_new_device.png"; +import zadigForm from "../assets/zadig_form.png"; + +import PlatformGate from "../components/platform-gate"; +import Flash from "../components/flash"; +import CopyText from "../components/copy-text.astro"; + +const version = import.meta.env.ASTRO_PUBLIC_GIT_SHA || "dev"; +const VENDOR_ID = "0x2b3c"; +const PRODUCT_ID = "0x0001"; +const DETACH_SCRIPT = + 'for d in /sys/bus/usb/drivers/qcserial/*-*; do [ -e "$d" ] && echo -n "$(basename $d)" | sudo tee /sys/bus/usb/drivers/qcserial/unbind > /dev/null; done'; +--- + + +
+
+
+ +

flash.comma.ai

+

+ This tool allows you to flash AGNOS onto your comma device. AGNOS is + the Ubuntu-based operating system for your comma 3/3X. +

+
+
+ +
+

Requirements

+
    +
  • + A web browser which supports WebUSB + {" "}(such as Google Chrome, Microsoft Edge, Opera), running on + Windows, macOS, Linux, or Android. +
  • +
  • + A good quality USB-C cable to connect the device to your computer. USB 3 + {" "}is recommended for faster flashing speed. +
  • +
  • + Another USB-C cable and a charger, to power the device outside your + car. +
  • +
+ + <> +

USB Driver

+

+ You need additional driver software for Windows before you connect + your device. +

+
    +
  1. + Download and run{" "} + Zadig + . +
  2. +
  3. + Under Device in the menu bar, select{" "} + Create New Device. + Zadig Create New Device +
  4. +
  5. + Fill in three fields. The first field is just a description and + you can fill in anything. The next two fields are very + important. Fill them in with {VENDOR_ID} and{" "} + {PRODUCT_ID} + respectively. Press "Install Driver" and give it a few + minutes to install. + Zadig Form +
  6. +
+

+ No additional software is required for macOS, Linux or Android. +

+ +
+
+
+ +
+

Flashing

+

Follow these steps to put your device into QDL mode:

+
    +
  1. Unplug the device and wait for the LED to switch off.
  2. +
  3. + First, connect the device to your computer using the lower + USB-C port (port 1). +
  4. +
  5. + Second, connect power to the upper + OBD-C port (port 2). +
  6. +
+ +

+ Your device's screen will remain blank for the entire flashing + process. This is normal. +

+ + <> + Note for Linux users +

+ On Linux systems, devices in QDL mode are automatically bound to + the kernel's qcserial driver, and need to be unbound before + we can access the device. Copy the script below into your terminal + and run it after plugging in your device. +

+ + +
+

+ Next, click the button to start flashing. From the prompt select the + device which starts with “QUSB_BULK”. +

+

+ The process can take 30+ minutes depending on your internet connection + and system performance. Do not unplug the device until all steps are + complete. +

+
+
+ +
+

Troubleshooting

+

Lost connection

+

+ Try using high quality USB 3 cables. You should also try different USB + ports on the front or back of your computer. If you're using a + USB hub, try connecting directly to your computer instead. +

+

My device's screen is blank

+

+ This is normal in QDL mode. You can verify that the + “QUSB_BULK” device shows up when you press the Flash + button to know that it is working correctly. +

+

My device says “fastboot mode”

+

+ You may have followed outdated instructions for flashing. Please read + the instructions above for putting your device into QDL mode. +

+

General Tips

+
    +
  • Try another computer or OS
  • +
  • Try different USB ports on your computer
  • +
  • + Try different USB-C cables; low quality cables are often the source + of problems. Note that the included OBD-C cable will not work. +
  • +
+

Other questions

+

+ If you need help, join our Discord server and go to the #hw-three-3x channel. +

+
+ + +
+ +
+ +
+ +
+ flash.comma.ai version: {version} +
+
+ +
diff --git a/src/test/setup.js b/src/test/setup.js deleted file mode 100644 index c44951a6..00000000 --- a/src/test/setup.js +++ /dev/null @@ -1 +0,0 @@ -import '@testing-library/jest-dom' diff --git a/src/utils/image.js b/src/utils/image.js index e1977f97..d7d88c82 100644 --- a/src/utils/image.js +++ b/src/utils/image.js @@ -1,4 +1,4 @@ -import { useEffect, useRef } from 'react' +import { useEffect, useRef } from 'preact/hooks' import { XzReadableStream } from 'xz-decompress' import { fetchStream } from './stream' diff --git a/src/utils/platform.js b/src/utils/platform.js index f022d8da..2addc60e 100644 --- a/src/utils/platform.js +++ b/src/utils/platform.js @@ -1,12 +1,17 @@ -const platform = (() => { - if ('userAgentData' in navigator && 'platform' in navigator.userAgentData && navigator.userAgentData.platform) { - return navigator.userAgentData.platform +export const platform = (() => { + if ( + "userAgentData" in navigator && + "platform" in navigator.userAgentData && + navigator.userAgentData.platform + ) { + return navigator.userAgentData.platform; } - const userAgent = navigator.userAgent.toLowerCase() - if (userAgent.includes('linux')) return 'Linux' // includes Android - if (userAgent.includes('win32') || userAgent.includes('windows')) return 'Windows' - return null -})() + const userAgent = navigator.userAgent.toLowerCase(); + if (userAgent.includes("linux")) return "Linux"; // includes Android + if (userAgent.includes("win32") || userAgent.includes("windows")) + return "Windows"; + return null; +})(); -export const isWindows = !platform || platform === 'Windows' -export const isLinux = platform === 'Linux' +export const isWindows = !platform || platform === "Windows"; +export const isLinux = platform === "Linux"; diff --git a/tailwind.config.js b/tailwind.config.js index f1f20e20..9f037d52 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -1,8 +1,7 @@ /** @type {import('tailwindcss').Config} */ export default { content: [ - './index.html', - './src/**/*.{js,jsx}', + './src/**/*.{astro,js,jsx,ts,tsx}', ], theme: { extend: { @@ -12,8 +11,8 @@ export default { 'conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))', }, fontFamily: { - sans: ['Inter Variable', 'sans-serif'], - monospace: ['JetBrains Mono Variable', 'monospace'], + sans: ['var(--font-inter)'], + monospace: ['var(--font-jetbrains-mono)'], }, }, }, diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 00000000..3832a3d4 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,14 @@ +{ + "extends": "astro/tsconfigs/strict", + "include": [ + ".astro/types.d.ts", + "**/*" + ], + "exclude": [ + "dist" + ], + "compilerOptions": { + "jsx": "react-jsx", + "jsxImportSource": "preact" + } +} \ No newline at end of file diff --git a/vite.config.js b/vite.config.js deleted file mode 100644 index 17ac32a0..00000000 --- a/vite.config.js +++ /dev/null @@ -1,12 +0,0 @@ -import { defineConfig } from 'vite' -import react from '@vitejs/plugin-react' - -// https://vitejs.dev/config/ -export default defineConfig({ - plugins: [react()], - test: { - globals: true, - environment: 'jsdom', - setupFiles: './src/test/setup.js', - }, -}) From ad61c30a54c1eca2f2c309e26bc2d4cc4a4679ce Mon Sep 17 00:00:00 2001 From: "Greg Willard (r3pwn)" Date: Fri, 23 May 2025 00:01:56 -0400 Subject: [PATCH 2/6] test: add back unit tests --- bun.lockb | Bin 209436 -> 237620 bytes package.json | 8 +++++++- src/test/index.test.ts | 19 +++++++++++++++++++ src/test/setup.ts | 25 +++++++++++++++++++++++++ vitest.config.ts | 9 +++++++++ 5 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 src/test/index.test.ts create mode 100644 src/test/setup.ts create mode 100644 vitest.config.ts diff --git a/bun.lockb b/bun.lockb index acf716b9c864e400018678f01949b45fd7b59a1e..7344ffd5de2796d6ffa32b5fb937ee20d870fca5 100755 GIT binary patch delta 47238 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 Fe*?HW1?|0w(-TTjV|6Dw?X4b4(vu4fg*|U#3 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%0D%_f>Fhz{wrKZB+*C?cI74(|?}F znK(y!1&_vvc_kv#V1qkgvD)n4`_wdYGAGdi0OXbEd~x!IZk;5}d~L11ASQZlT-xn&L3S z5b{5RV`#~-i+I5fG@b>_0LS6N(gkN62FJT1_TTGqCiSAn8TX?7becOM(g#debNP~H zJnoHx9EJ*~Q_<$RMIPs#MbZLGlkPBMgva@$kowT0B)9VvxL&A*g%P0<=QW2QEXG-Gl+&caLNcwolh;b{msx(o3M1uvWaOFWKO zmvT|V3gCQcnd~N(6}aa-I0h`nHN>qKH~p7-98WCgtmPK&MWk9-way^L^`)43Wr5pK zVg>UnPm6MNMhfdT^e#b)k!WpL9jC#yvho90$`-6;*U=pumNBeJ^N<>BrHZY>tg})H zNDZZ4=Ut?zP0q`(TsceO);exSBDjH;{9&Z9g20XvtF2W1D7~kdv(jVSUu~XW8I89| z{;NFBiEHGJ3jW3Vbr>AGV!6lp0NfMcFtTB8XOFdZ1T*M!!O;jA9~Z#MdVF3fyH0X2 z3DGhf94DT&DRis>*M`q$j&H3L_hj{7lJXdFY$@XvXPrZ zg9c-aW5Y3~|5}gpE99{eYg^~6x(v4k0@YP= zk3#Bc$RMF0)(Gn=h&pmYK|}v%a`30Ph^GeiYJoq0b&DK z2DBoe{vcijk?t7?qWmC*gMqvTYw>m>9}6QnOtKcTff0%)QehH^3bDzxu7b$?6qQdj z%-!zJ})<(~yHf4cSR zRVJ*0SxEDG2+fH*D_Y@zdyaMeCm4;I$3UC~UsziHx3HR3rC>$c|0Rg{714b4!-}Pm z(7q)H`i_hlyQ`w*<7+DSI&*P73Jv7n1QBn6sO2_@7m=ZKhYT(v%kL`u4aln?vizR4 zlE?(hnZb8?njcCjP@4bz328uC?uUG0tdbk3_ z2dETC22vnRA%73bSvwYp|FmcD4=o>0Mj=;4FL>6U1}qMo52VNfmH(pR7cmnTk;!a< ze;Mf;fK>2`DtJ{Pe=*AjwJwff%s25!+#VanXP?- zf7!#&fK+rD$g%tm$cDcM@**<0egv||zXDlwNAZ6EsizPsQLY$}29*Lbs4FNw0Lc1* zK)cg zz^OorJgel0ET0bK8oW&9{|6}N-+xdM&HiT%`=j1=W$<=G&HwxiOK$;z|I2)Ko+bZz zLjkCILg^tghCWh!LFBBupz>|ZwiAy+j`3%z0+IYh#S@vltau`mR}^0mS?>##Ph=2( z1B9W`+EpZ2c8&l11+wUdDldq-8T(0~bql+VQVRT}qzWRN{~7tjf2s0EA&Y*+KlBrA zBX7`|e?sQ_sC=Ldp#m9Jg@QaAcAx^Wu)-n=eU+kuNI9p(z)H6UGBLt!lz;`%$} zf?Z$9H&pUAX4?rO*TFC#Wtu3#MmO-vX8b9#;7hG5!x{NS+pds04{j zo>F*P?vm1_P$iWkl11*9S!$OZ}lX;4vBPGos8#S~ID ztN8M&oJe_IoK+-V!0i9mPvch4LuC7SD6cM4%%Fv#3jcW;x7;yExnnSp*FR6=(hsu; z|2&P;3;#TgTQlXKr}2ND#{YR5|L1A^|KxF=%jy4C{ePau=`s7^`=6(AdP6>?b2t9a z)40F&l=JAPbME%@p2C$}z&}sp1)sthOyv0#_s`RK!KZL~hCGAlfAVQOk%|jGh1)zE z`X7B7e?9hM{8qDP%{q%V=p7s@uwE1uaYyw=V!{U9tDhHtY|v{PUdN8qz50CvGCrct zEBY?St2oj26QlR)^UV1*eM&^(L(S423K!Mt=n6YE<7X3Tj z(WpMo2=Z#{eZ`e+dRfP@1~{{k-^R30sU6E)eR-&GzB z?gZk+_h0zWdYQLVHB4u-F}}np0{74;W-yN(^XJ`y1{f-{9MX@o6qgT>3VGzo9|y34 zL*?@!m4gXr1>KQmia2V$B@nh@p39TZuy?Ja^QcyrDG#>=~$In9C_@33uGSz z@+}_aDuHMW75k~Y%1Dm`QAcT&R|RQI4J)sV%Il^hfomBp!BwWf78PWYhC3X#&uXsvG+uXZvTW$#4!F3@feqje8xA80@50O%m-5a>P7VGupT zc;L7)2Iz8*Ed#MMh(kpWaY#6%bUBBS9^!B_z8J7PSl-Mx7>v|ypf^C_j}B5?-v3Fs8)9Ox|Q1n4yABhWF>hoDjjgx`UGfEW}y$PlAD8)f_XBFS~ID5yB- zUy%3(^ec$(BLYEHLEJWR(iH<02bBPo1o?qVgMNcN-@Nd}&>bk|n<+kO+yUJ+#N*wJ zfNZ`ls{pD9;w!YmAiiY$5!4s;_`dTa(8r+Dpie-bg3f}@gUUgsDRg%OwFb2U@rD}$ z;@RtL&`?kuXb5O9C;=1?>dza~03>2TAEDv1Aijh70(2boBZ!+eZfUPUW-{mp5P!JS z1&wzFbqDnTwFX6kxU5HkqCu^ghHNuXb5KiAD-c)I(x5VYFJ2aja-i}c{`le==sJkE zW!{E)+vRO`I%pm`9cUDYZ!Bwq`0Ji1C~gPhes?5j1Sk{4 zJKI>$C=lOT@dnlq3g1AT?Vuf?w?Ml<{7p<2=xI8TBfb!XEK-t6=@D z=f6)i^nu~Qp}`1!e~~-P@OM#7aR|7_ecgKMTS=V^U#?%U+&fd88D?~Ltpr;PY{xtA zCp&&v)63Aqki+X`(R{dZ)x~JVR?HjfSzB|$)Y1WHA}ly87&EMsXgR|0*L#Wn02ha< zDCDlC99-J>+wMm#Q$m8_z!72|1S0qYD+;(aW?z2o+wGbXK)g*r32j(0eP`*2X7hv;=M#8K<^~3BpRJ%ac5l`?6N;uSpUqL z^ixUO20&XVw87vZV(Um~ds-YFX>^V_fQ=%pTQlC`> z+VyQqLrAb2w`9>d$q3WSi^)l7w}Lp41bvIeRdUtEzEq=J;V`zeM08I^$>$;oP|5!E zV7*2ie!tVd+>g-bmVUTaOsq;a9&_0r9o*Ak>G`PMk9AZwV@xNAkCV~jKv5(G!)||+ z@Obggr~7UHp{}9Bxu>@9%H7UkYeS+|$LeBnr zVVhE0)@RN=`JACoq9(X}p~y%z!d!uf&(iSD&^d2DmH63;o0fO1v9tQ=uevLKNHrXP zGteDGsWdoZkf@u6UW^d2Y4FrDViPl4h=!v8oy28weZ}20qrNj2jWY7B!mvvAHw^a% z)GWMn(BRKu1{};7`?ZXiFbb~YUXD@ttlxm-bDGxSH;A6b04_$T)t zv_2DV30OU`KeO0vQu40Pw!Z!fN;ob}a6b`$jDn$qM5oa(?G2GI+Gy*%Q{LJjddrCJ zuNvhY4A3LuI0Rhw7Z>|(~H?dLZ>Co_|Z~-D(JtjN%N3yo{bz>1~+FdM!vHML`xBW zA%Lj1KdE$mXusYUo9%6bs*$qlC6PiS?GHo_8C|1!i(;iBA;9oM)e0gP0(xPwlX8#r zgC(bWYk!impT6uuyI)t1Qbt0N6wp5w%`>6M{=#I;drf+L-|_Bs$YB9uXI6>P5YV@a z*@TlK_5-70p>Qoy>;WHPe`)e=>4c>F;m31OFEkiSaJUv)RmOeMu1CEeth(65>H@+k zL~A8VWI+{6!oq#oB(9_0beV4fMG(?Vy8>g{g z1&=Yp^|NB;b;kRS`M~a?PsCPe7g7He&v}ORq-z=orx8a4egB#bw%%1%WD1)FE|koBK&V7xM*7 zRr2P()!Uks`FdS`$yTv>A{O_P5J1d$gM3P@y4-8)7x@CWs*4E|jmHdyuD_O)sv`cn zt-rQUcHnP%C|#hZi%ydeG^<569Ma@(CaO!`?oai7`Q#Hnul(AY8P@V}v%dIn5~8(* z_;wPa`~Fs?kLsBJNGaoD2}Lv!JH2=sw-3PzB*;e|vOy^?e~vOq=#Bc5PU7a5K~Th^^Bg zI#e75xa^Ot9y+^e>FlH*Yvjw#77r-5L`;4b@K6IjXyCZ`CED->l)=(R;H{Ifpbx7tN4_) zj)>7qG4Z~{;}18c{-s_VSbXGj1!~=RT(p>pNR=Za3g@B+a(ImIqC~eG6lr4LOv|d= zCHYWGOkN01IZ?GOee9B-i^W$a6R#95aknV%3*p#LV?9(}yCgQvGQy0T9`X4sY)e|V zuuh=7*C(Ca9DC}wX^?LWd4x@CQT93XVvuN0P|>qnWY0#^?~BbGzlSrGJxXM@2&JSD zoo1u@L-j<3ZRn}WY9zibAfRGZ>UWK8Eq5|LUoPHXqvf=ZtG`-f*&mTT7UbWe@_Q*A@@+UP zMn4Y?SHx_9%l-;(#-S2sPEV6>$NU$u9c~y$2(o=u$=h2J_qQlZiMU}F?3$hfJEUH_6RN)t z_g;y}vOI&7sO$$Ge@-CEUG_(Q;~sy|zWJw@j_2DTyQ9A>D#M0K_Q!$W9$BxHSDV6_ zt^EIRfAx!Evp~1+cM_{ibX$(j-*olQedOHBGx_0e{mH@qy+Zoz(fS^ptIrXoc$ZPp zs-TyMMW$;=SGgO1BYybB!c{V};03k5se2QiX%=CORIQIh>E*aNTJ!PY=x-+C;3eGO z#smIl5=d|UP4uh9?RSws_0(;vt>}cimn)^a+?bqc6@P2o_@#XMRs%OzWJ90{KEG^z z8hFd&HTDFYJUc93!2UpUPjBsEo*Q4!$uGIpU3|D0dm1~qYY8hf|8{`>jZDGVR=xh~ z`H?sDR;`EUz{5tk{(8QuNhTvSFBnvAUJKT}K(1yk`@_=rXFfRe{Lai@@*Pr4v|NVq ztS0&cT=oa58_nFXZ`s=BB44hDm`6Do7%EJ}XUi~nYQcO&Nst(XD0-y8BQvS5d|~S; z{$ZtRrIeA#J9;=CRgSJGFyCa6%l=^Y^SRr4|1t4IZ`dCp7h4ru`MV!=H?VdOVd~ys z-0mw*t~46kw+gx9yX;T2Z}SiAw6ARSBG9V#g)KyPZVq~jB!KJRY$C#pN8Q**h@f0N zE-7>5MnweVz_I1U?p!EWTMkRkHdNiOyzu~ zN`m;Em8Ank$T|$E+}M`2zaqY}rnf=;XA_3_>6OKTbw-pPEsn1<>g$h-yX4e^WtW#w z(|WM1D3-irR4Th8PCoc8Xw+|Rt?kX5meX^@`!Auwe&JY;74AdPbiJ`%Rd-d#4vfc) zy$4@^@Z0>jU&>)!tU6&r)q&yfiRv4Su!xU`Sa0LJJIhrl6FV;lkBQ;I;Z}&=L`fx7 z-TvVEk3|DMsF`0u=@T3B-Lqx$ z1*WKy$XnyPmh_u(D!(LGl-LN}2Ov-#RqqVUnH0Y4g9rHn--wnFz>gvNQ_lV@y1VwP zk&W-2Y?m+BLCk|dg#8`$g_A4AOnUlXb@B!5FRk~wv?q7Q&yxf4OE!s%)O~QMTz@N% z>#Bb};fyz5;EE{yGItO|MT3{Im$bj_J~Mr3?Ta&?D3LE%L=1vpg#AhKBSpH2cHgD! z=W}r52tMH2A1&_@eX@R~%B9!mm$VkIqN>aO%J~Xc$U7fjjqjH)kSwl104ECfC})2q zeZO|IeXXlTi+s6_qR}SUV1HKq!qj2yLKmIimoH#{czyN8Nh5Fi*8C{H~|*h@cRf`kU+)C@00 zP{ISd7oIwMc=cyvHlYO1f-D&$Za{-;76kZ~AZ5l>?W>M&EV2Z6KCLYlL9d~S%_0g= z_9MtufL#62tE0}nR&HxKOx5A989@;SUS06aPz;=%R=wM?7s~11K{Nn4ekkFgjCat0 zc}3QotZ7*lid9dmDRx7rD+~fWhP_uPbYYv(lgF0RqnpE*?%+_5xXreo5XClQHRvHc zgaIOh&{C`?q>Brijo~i)1NiHnnK$E) zT=rM;yVp3pu=B7CSN;NR9TQX(?`<_I*=wfVJ|1s8zKnFrcD0DI|dAm z`m(;a=AoB*)^?5LuJwk@z}1c2F#T9UeP5MUJ@tkp<3+ z&u-a-$~^7HL*``>_yz*}dkAn?uGc&_>}G85yOy2SsoXCpDT9)|*E4z!`Tb&uRT9o% z@f9g=;CbsWszSg|?1XOJlJnR7#19nz^KHP;>*1J!R~6BGJH+1;^><*4J8C=bLJl#T zS*66f?O5{dFYJdl%eikHe}Qj|)L!`!=e}?bjSLbc-bC2hAM1CVzt=Wp%keF!s`ekN zMN0_au&6)f9;wKBD9jS`AQ170qv}xj2~F95AE4Lfm8Tl`eg2(tA#9LU|3s9$~a9C>@PKlq>g{lU|}q-F6afG?yX@v8~( z>JIqY{)++ge_6Ncoyvu#Seo!A0?W6!w*!la{U-$0*1I%2>xsI2J)}Hp|8aoSyG`$O z9@&FaBRseXjkqW#;yszm{%ZoOPQ5egRLRumEdlEt$7Qh<0%iaFCecsV#l^RbAoZfH z;eXvuU`X7I$zluT1M%+1f>Xk-B)wDEW2aCosgSG54Sm81Y|)=L#uo{}G96QE_qaH}2xJq6crw!kfM( zu29WRaqpmQLqND{G;Q&TQj=yrDg5-Bi{;ML{^JrK%x}86)-P}Jog3~!T>WQ>iHD$P zu@HxFSldQCID|>tcZobzwEy73gcl-57fH$Cu?Lna)Ql)2I=_c*+JCvBUPS24eot+z zW9h{!B>a9uOoo8oSuA}IuWaqVBJoD*$TxkTs?6Ds7qXl`Q$?Y}M*SMkFO|#0*FfHr zwPEibyfJ_DXO=>1ar|wmc=rg7REmkD!)V$5Ll)r^<}Utm!nRA&G~AlCW@04;?7x7~ z{)^Jy9MF`?|Ldylo};sy&Seqo~`$DVYXee*k%9Wj)CWH1$S8$Fe|?s zO1H9qs@QV^uLbb4l85^9K7QM;?6AsHgE=PBa?i%@dI( z1(Y0g^!yOZ^Hjtet$5>ZmGkqxE8g;Bl!S6_R2R9>hZmPSsrJuuP%CGGwpIK9fr!KF zG+#P+M9<)6~yP8QSY)5x+C+lapGk> iGsr8mM^?|wwrz%bLowfQ%?TBwR~D)v7OyO{?0*6JDk)n4 diff --git a/package.json b/package.json index 99b66ba5..6082745c 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,8 @@ "dev": "astro dev", "build": "astro build", "start": "astro preview", - "astro": "astro" + "astro": "astro", + "test": "vitest" }, "engines": { "node": ">=20.11.0" @@ -22,6 +23,11 @@ "tailwindcss": "3", "xz-decompress": "^0.2.2" }, + "devDependencies": { + "@testing-library/jest-dom": "^6.6.3", + "jsdom": "^26.0.0", + "vitest": "^3.1.1" + }, "trustedDependencies": [ "@commaai/qdl", "esbuild", diff --git a/src/test/index.test.ts b/src/test/index.test.ts new file mode 100644 index 00000000..ee2534e3 --- /dev/null +++ b/src/test/index.test.ts @@ -0,0 +1,19 @@ +import { experimental_AstroContainer as AstroContainer } from "astro/container"; +import { expect, test } from "vitest"; +import preactRenderer from "@astrojs/preact/server.js"; +import HomePage from "../pages/index.astro"; + +test("renders without crashing", async () => { + const container = await AstroContainer.create(); + container.addServerRenderer({ + name: "@astrojs/preact", + renderer: preactRenderer, + }); + container.addClientRenderer({ + name: "@astrojs/preact", + entrypoint: "@astrojs/preact/client.js", + }); + const result = await container.renderToString(HomePage); + + expect(result).toContain("flash.comma.ai"); +}); diff --git a/src/test/setup.ts b/src/test/setup.ts new file mode 100644 index 00000000..0d51b9ce --- /dev/null +++ b/src/test/setup.ts @@ -0,0 +1,25 @@ +// JSDom + Vitest don't play well with each other. Long story short - default +// TextEncoder produces Uint8Array objects that are _different_ from the global +// Uint8Array objects, so some functions that compare their types explode. +// https://github.com/vitest-dev/vitest/issues/4043#issuecomment-1905172846 +class ESBuildAndJSDOMCompatibleTextEncoder extends TextEncoder { + constructor() { + super(); + } + + encode(input: string) { + if (typeof input !== "string") { + throw new TypeError("`input` must be a string"); + } + + const decodedURI = decodeURIComponent(encodeURIComponent(input)); + const arr = new Uint8Array(decodedURI.length); + const chars = decodedURI.split(""); + for (let i = 0; i < chars.length; i++) { + arr[i] = decodedURI[i].charCodeAt(0); + } + return arr; + } +} + +global.TextEncoder = ESBuildAndJSDOMCompatibleTextEncoder; diff --git a/vitest.config.ts b/vitest.config.ts new file mode 100644 index 00000000..17097e0f --- /dev/null +++ b/vitest.config.ts @@ -0,0 +1,9 @@ +/// +import { getViteConfig } from "astro/config"; + +export default getViteConfig({ + test: { + environment: "jsdom", + setupFiles: "./src/test/setup.ts", + }, +}); From 03a683006c02bf31d612dc418a07a442f7903ff5 Mon Sep 17 00:00:00 2001 From: "Greg Willard (r3pwn)" Date: Fri, 23 May 2025 00:10:12 -0400 Subject: [PATCH 3/6] feat: combine JS bundles using rollup --- astro.config.mjs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/astro.config.mjs b/astro.config.mjs index eefc6b20..a2e37047 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -6,6 +6,21 @@ import tailwind from '@astrojs/tailwind'; export default defineConfig({ integrations: [preact(), tailwind()], + vite: { + build: { + minify: true, + sourcemap: false, + cssCodeSplit: false, + rollupOptions: { + output: { + manualChunks: () => 'app', + entryFileNames: 'assets/app.[hash].js', + chunkFileNames: 'assets/app.[hash].js', + assetFileNames: 'assets/app.[hash].[ext]', + }, + }, + }, + }, experimental: { fonts: [{ provider: fontProviders.fontsource(), From f511d02c8bd87a8ba8b6bf49aca31faa709dd60f Mon Sep 17 00:00:00 2001 From: "Greg Willard (r3pwn)" Date: Fri, 23 May 2025 00:15:30 -0400 Subject: [PATCH 4/6] fix: don't rename static assets --- astro.config.mjs | 1 - 1 file changed, 1 deletion(-) diff --git a/astro.config.mjs b/astro.config.mjs index a2e37047..ba2bac65 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -16,7 +16,6 @@ export default defineConfig({ manualChunks: () => 'app', entryFileNames: 'assets/app.[hash].js', chunkFileNames: 'assets/app.[hash].js', - assetFileNames: 'assets/app.[hash].[ext]', }, }, }, From 9a9009f1c3ec6ed1f78324c918cb8fae9f708b63 Mon Sep 17 00:00:00 2001 From: "Greg Willard (r3pwn)" Date: Fri, 23 May 2025 00:35:45 -0400 Subject: [PATCH 5/6] chore: cleanup jetbrains-mono, as it is unused --- astro.config.mjs | 9 --------- src/layouts/base-layout.astro | 1 - tailwind.config.js | 1 - 3 files changed, 11 deletions(-) diff --git a/astro.config.mjs b/astro.config.mjs index ba2bac65..321dac7c 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -29,15 +29,6 @@ export default defineConfig({ styles: ["normal"], subsets: ["latin"], display: "swap" - }, - { - provider: fontProviders.fontsource(), - name: "JetBrains Mono", - cssVariable: "--font-jetbrains-mono", - weights: ["100 900"], - styles: ["normal"], - subsets: ["latin"], - display: "swap" }] }, }); \ No newline at end of file diff --git a/src/layouts/base-layout.astro b/src/layouts/base-layout.astro index fbc0f0db..51a019cc 100644 --- a/src/layouts/base-layout.astro +++ b/src/layouts/base-layout.astro @@ -17,7 +17,6 @@ import { Font } from "astro:assets"; flash.comma.ai - diff --git a/tailwind.config.js b/tailwind.config.js index 9f037d52..defcf3c3 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -12,7 +12,6 @@ export default { }, fontFamily: { sans: ['var(--font-inter)'], - monospace: ['var(--font-jetbrains-mono)'], }, }, }, From 751d2c0674ef1a09429f825b841a003f37326c85 Mon Sep 17 00:00:00 2001 From: "Greg Willard (r3pwn)" Date: Fri, 23 May 2025 00:36:15 -0400 Subject: [PATCH 6/6] docs(readme): update port number and main page file path --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f9f6ecb3..88f4bc62 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,6 @@ bun install bun dev ``` -Open [http://localhost:5173](http://localhost:5173) with your browser to see the result. +Open [http://localhost:4321](http://localhost:4321) with your browser to see the result. -You can start editing the page by modifying `src/app/index.jsx`. The page auto-updates as you edit the file. +You can start editing the page by modifying `src/pages/index.astro`. The page auto-updates as you edit the file.