From 142d9ddf9b196ffcf2e806b1dfda6a0b9e8a6625 Mon Sep 17 00:00:00 2001 From: Chris Wanstrath Date: Tue, 7 Oct 2025 19:26:16 -0700 Subject: [PATCH] no more --- .../use-bun-instead-of-node-vite-npm-pnpm.mdc | 1 - packages/sneaker/.gitignore | 34 ------ packages/sneaker/CLAUDE.md | 111 ----------------- packages/sneaker/README.md | 3 - packages/sneaker/package.json | 21 ---- packages/sneaker/src/server.tsx | 115 ------------------ packages/sneaker/tsconfig.json | 28 ----- 7 files changed, 313 deletions(-) delete mode 120000 packages/sneaker/.cursor/rules/use-bun-instead-of-node-vite-npm-pnpm.mdc delete mode 100644 packages/sneaker/.gitignore delete mode 100644 packages/sneaker/CLAUDE.md delete mode 100644 packages/sneaker/README.md delete mode 100644 packages/sneaker/package.json delete mode 100644 packages/sneaker/src/server.tsx delete mode 100644 packages/sneaker/tsconfig.json diff --git a/packages/sneaker/.cursor/rules/use-bun-instead-of-node-vite-npm-pnpm.mdc b/packages/sneaker/.cursor/rules/use-bun-instead-of-node-vite-npm-pnpm.mdc deleted file mode 120000 index 6100270..0000000 --- a/packages/sneaker/.cursor/rules/use-bun-instead-of-node-vite-npm-pnpm.mdc +++ /dev/null @@ -1 +0,0 @@ -../../CLAUDE.md \ No newline at end of file diff --git a/packages/sneaker/.gitignore b/packages/sneaker/.gitignore deleted file mode 100644 index a14702c..0000000 --- a/packages/sneaker/.gitignore +++ /dev/null @@ -1,34 +0,0 @@ -# dependencies (bun install) -node_modules - -# output -out -dist -*.tgz - -# code coverage -coverage -*.lcov - -# logs -logs -_.log -report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json - -# dotenv environment variable files -.env -.env.development.local -.env.test.local -.env.production.local -.env.local - -# caches -.eslintcache -.cache -*.tsbuildinfo - -# IntelliJ based IDEs -.idea - -# Finder (MacOS) folder config -.DS_Store diff --git a/packages/sneaker/CLAUDE.md b/packages/sneaker/CLAUDE.md deleted file mode 100644 index b8100b7..0000000 --- a/packages/sneaker/CLAUDE.md +++ /dev/null @@ -1,111 +0,0 @@ ---- -description: Use Bun instead of Node.js, npm, pnpm, or vite. -globs: "*.ts, *.tsx, *.html, *.css, *.js, *.jsx, package.json" -alwaysApply: false ---- - -Default to using Bun instead of Node.js. - -- Use `bun ` instead of `node ` or `ts-node ` -- Use `bun test` instead of `jest` or `vitest` -- Use `bun build ` instead of `webpack` or `esbuild` -- Use `bun install` instead of `npm install` or `yarn install` or `pnpm install` -- Use `bun run - - -``` - -With the following `frontend.tsx`: - -```tsx#frontend.tsx -import React from "react"; - -// import .css files directly and it works -import './index.css'; - -import { createRoot } from "react-dom/client"; - -const root = createRoot(document.body); - -export default function Frontend() { - return

Hello, world!

; -} - -root.render(); -``` - -Then, run index.ts - -```sh -bun --hot ./index.ts -``` - -For more information, read the Bun API docs in `node_modules/bun-types/docs/**.md`. diff --git a/packages/sneaker/README.md b/packages/sneaker/README.md deleted file mode 100644 index 8d9b10d..0000000 --- a/packages/sneaker/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# 👟 sneaker - -don't ask \ No newline at end of file diff --git a/packages/sneaker/package.json b/packages/sneaker/package.json deleted file mode 100644 index 70049f1..0000000 --- a/packages/sneaker/package.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "sneaker", - "module": "src/server.tsx", - "type": "module", - "private": true, - "scripts": { - "dev": "bun subdomain:dev", - "subdomain:start": "bun run src/server.tsx", - "subdomain:dev": "bun run --hot src/server.tsx" - }, - "dependencies": { - "hono": "catalog:", - "unique-names-generator": "^4.7.1" - }, - "devDependencies": { - "@types/bun": "latest" - }, - "peerDependencies": { - "typescript": "^5" - } -} diff --git a/packages/sneaker/src/server.tsx b/packages/sneaker/src/server.tsx deleted file mode 100644 index a9032d1..0000000 --- a/packages/sneaker/src/server.tsx +++ /dev/null @@ -1,115 +0,0 @@ -import { Hono } from "hono" -import { upgradeWebSocket, websocket } from "hono/bun" -import { uniqueNamesGenerator, adjectives, animals, colors } from "unique-names-generator" - -type Request = { - id: string - app: string - method: string - path: string - headers: Record, - body: string -} - -type Response = { - id: string - status: number - headers: Record, - body: string -} - -type Connection = { app: string, ws: any } -let connections: Record = {} -const pending = new Map void> - -function send(connection: any, msg: Request) { - console.log("sending", msg) - connection.send(JSON.stringify(msg)) -} - -const app = new Hono - -app.get("/tunnel", c => { - const app = c.req.query("app") - if (!app) { - return c.text("need ?app name", 502) - } - - return upgradeWebSocket(c, { - async onOpen(_event, ws) { - const name = randomName() - connections[name] = { app, ws } - console.log(`connection opened: ${name} -> ${app}`) - }, - onClose: (_event, ws) => { - for (const name of Object.keys(connections)) - if (connections[name]?.ws === ws) { - console.log("connection closed:", name) - delete connections[name] - break - } - }, - async onMessage(event, _ws) { - const msg = JSON.parse(event.data.toString()) - const resolve = pending.get(msg.id) - if (resolve) { - resolve(msg) - pending.delete(msg.id) - } - }, - }) -}) - -app.get("*", async c => { - const url = new URL(c.req.url) - const localhost = url.hostname.endsWith("localhost") - const domains = url.hostname.split(".") - let subdomain = "" - - if (domains.length > (localhost ? 1 : 2)) - subdomain = domains[0]! - - const connection = connections[subdomain] - if (!connection) - return c.text("No tunnel", 502) - - const id = randomID() - const headers = Object.fromEntries(c.req.raw.headers) - const body = await c.req.text() - const app = connection.app - - const result = await new Promise(resolve => { - pending.set(id, resolve) - send(connection.ws, { - id, - app, - method: c.req.method, - path: c.req.path, - headers, - body - }) - }) - - return new Response(result.body, { - status: result.status, - headers: result.headers, - }) -}) - -function randomID(): string { - return Math.random().toString(36).slice(2, 10) -} - -function randomName(): string { - return uniqueNamesGenerator({ - dictionaries: [adjectives, animals], - separator: "-", - style: "lowerCase", - }) -} - -export default { - port: process.env.PORT || 3100, - websocket, - fetch: app.fetch, -} \ No newline at end of file diff --git a/packages/sneaker/tsconfig.json b/packages/sneaker/tsconfig.json deleted file mode 100644 index 42edcc8..0000000 --- a/packages/sneaker/tsconfig.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "compilerOptions": { - // Environment setup & latest features - "lib": ["ESNext"], - "target": "ESNext", - "module": "Preserve", - "moduleDetection": "force", - "jsx": "react-jsx", - "jsxImportSource": "hono/jsx", - "allowJs": true, - // Bundler mode - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "verbatimModuleSyntax": true, - "noEmit": true, - // Best practices - "strict": true, - "skipLibCheck": true, - "noFallthroughCasesInSwitch": true, - "noUncheckedIndexedAccess": true, - "noImplicitOverride": true, - // Some stricter flags (disabled by default) - "noUnusedLocals": false, - "noUnusedParameters": false, - "noPropertyAccessFromIndexSignature": false, - "baseUrl": "." - } -}