From 5ffedca96cfe659527ef7cc8e77d3456208b55d6 Mon Sep 17 00:00:00 2001 From: Brian Kim Date: Wed, 22 Mar 2023 00:01:28 -0700 Subject: [PATCH] Make a Wish Foundation. Shovel hear my plea. --- website/package-lock.json | 43 ++++++++++++++++++++++----- website/package.json | 4 +-- website/src/{serve.ts => app.ts} | 19 ++++++++++-- website/src/components/code-editor.ts | 3 +- website/src/views/blog.ts | 1 - 5 files changed, 55 insertions(+), 15 deletions(-) rename website/src/{serve.ts => app.ts} (71%) diff --git a/website/package-lock.json b/website/package-lock.json index ee431450..2dc15899 100644 --- a/website/package-lock.json +++ b/website/package-lock.json @@ -7,7 +7,7 @@ "dependencies": { "@b9g/crank": "file:../dist", "@b9g/revise": "file:../../revise/dist", - "@b9g/shovel": "^0.1.1", + "@b9g/shovel": "^0.1.2", "@babel/core": "^7.21.0", "@babel/preset-react": "^7.18.6", "@babel/preset-typescript": "^7.21.0", @@ -121,13 +121,16 @@ "link": true }, "node_modules/@b9g/shovel": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@b9g/shovel/-/shovel-0.1.1.tgz", - "integrity": "sha512-ERhoCTqXCnYTkeOYRZqswkrxweUXt3r1h6A6qwb/dYYDKHb//0K4PnAInSArnuZ2jZcX8Xo0bNyD67l3ZKWE2A==", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@b9g/shovel/-/shovel-0.1.2.tgz", + "integrity": "sha512-JYJBNd3nyCVInF/lqGK7KtesQWTPxaju49QHinNV1QiN8iBDpr0uaqB4mPYMw36DxuHpT8BQ7ahkL+1qYXL2dA==", "dependencies": { "@b9g/crank": "^0.5.3", + "@emotion/css": "^11.10.6", "@pkgjs/parseargs": "^0.11.0", + "@repeaterjs/repeater": "^3.0.4", "chokidar": "^3.5.3", + "commander": "^10.0.0", "esbuild": "^0.17.11", "is-core-module": "^2.11.0", "magic-string": "^0.30.0", @@ -143,6 +146,14 @@ "resolved": "https://registry.npmjs.org/@b9g/crank/-/crank-0.5.3.tgz", "integrity": "sha512-oD/zELm1ldGiQyyjLb0VrsvIbmGTGb0f5BlgSeTpkg73dyKfY/8Fu6aCix85pWsyk84f9aO8kpNonaglHtwDrg==" }, + "node_modules/@b9g/shovel/node_modules/commander": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.0.tgz", + "integrity": "sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==", + "engines": { + "node": ">=14" + } + }, "node_modules/@b9g/shovel/node_modules/magic-string": { "version": "0.30.0", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz", @@ -1792,6 +1803,11 @@ "web-streams-polyfill": "^3.1.1" } }, + "node_modules/@repeaterjs/repeater": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@repeaterjs/repeater/-/repeater-3.0.4.tgz", + "integrity": "sha512-AW8PKd6iX3vAZ0vA43nOUOnbq/X5ihgU+mSXXqunMkeQADGiqw/PY0JNeYtD5sr0PAy51YPgAPbDoeapv9r8WA==" + }, "node_modules/@tanstack/virtual-core": { "version": "3.0.0-beta.30", "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.0.0-beta.30.tgz", @@ -5101,13 +5117,16 @@ } }, "@b9g/shovel": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@b9g/shovel/-/shovel-0.1.1.tgz", - "integrity": "sha512-ERhoCTqXCnYTkeOYRZqswkrxweUXt3r1h6A6qwb/dYYDKHb//0K4PnAInSArnuZ2jZcX8Xo0bNyD67l3ZKWE2A==", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@b9g/shovel/-/shovel-0.1.2.tgz", + "integrity": "sha512-JYJBNd3nyCVInF/lqGK7KtesQWTPxaju49QHinNV1QiN8iBDpr0uaqB4mPYMw36DxuHpT8BQ7ahkL+1qYXL2dA==", "requires": { "@b9g/crank": "^0.5.3", + "@emotion/css": "^11.10.6", "@pkgjs/parseargs": "^0.11.0", + "@repeaterjs/repeater": "^3.0.4", "chokidar": "^3.5.3", + "commander": "^10.0.0", "esbuild": "^0.17.11", "is-core-module": "^2.11.0", "magic-string": "^0.30.0", @@ -5120,6 +5139,11 @@ "resolved": "https://registry.npmjs.org/@b9g/crank/-/crank-0.5.3.tgz", "integrity": "sha512-oD/zELm1ldGiQyyjLb0VrsvIbmGTGb0f5BlgSeTpkg73dyKfY/8Fu6aCix85pWsyk84f9aO8kpNonaglHtwDrg==" }, + "commander": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.0.tgz", + "integrity": "sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==" + }, "magic-string": { "version": "0.30.0", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz", @@ -6108,6 +6132,11 @@ "web-streams-polyfill": "^3.1.1" } }, + "@repeaterjs/repeater": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@repeaterjs/repeater/-/repeater-3.0.4.tgz", + "integrity": "sha512-AW8PKd6iX3vAZ0vA43nOUOnbq/X5ihgU+mSXXqunMkeQADGiqw/PY0JNeYtD5sr0PAy51YPgAPbDoeapv9r8WA==" + }, "@tanstack/virtual-core": { "version": "3.0.0-beta.30", "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.0.0-beta.30.tgz", diff --git a/website/package.json b/website/package.json index 7b962990..ecaf78d1 100644 --- a/website/package.json +++ b/website/package.json @@ -4,7 +4,7 @@ "scripts": { "build": "ts-node-esm src/build.ts && echo crank.js.org > dist/CNAME", "watch": "nodemon --exec ts-node-esm src/build.ts -e 'js,ts,css,md' --ignore dist", - "serve": "shovel src/serve.ts --port 1338", + "serve": "shovel develop src/app.ts --port 1338", "static": "http-server dist -p 1337 -c-1", "predeploy": "npm run build", "deploy": "gh-pages -d dist" @@ -12,7 +12,7 @@ "dependencies": { "@b9g/crank": "file:../dist", "@b9g/revise": "file:../../revise/dist", - "@b9g/shovel": "^0.1.1", + "@b9g/shovel": "^0.1.2", "@babel/core": "^7.21.0", "@babel/preset-react": "^7.18.6", "@babel/preset-typescript": "^7.21.0", diff --git a/website/src/serve.ts b/website/src/app.ts similarity index 71% rename from website/src/serve.ts rename to website/src/app.ts index 1dd57fdf..322bba84 100644 --- a/website/src/serve.ts +++ b/website/src/app.ts @@ -5,10 +5,9 @@ import {jsx} from "@b9g/crank/standalone"; import {renderer} from "@b9g/crank/html"; import {renderStylesToString} from "@emotion/server"; -//import {Request, Response} from "@remix-run/web-fetch"; - import {router} from "./routes.js"; import {Storage} from "./components/esbuild.js"; +import {collectDocuments} from "./models/document.js"; const __dirname = new URL(".", import.meta.url).pathname; const storage = new Storage({ @@ -17,7 +16,7 @@ const storage = new Storage({ }); export default { - fetch: async (req: Request) => { + async fetch(req: Request) { console.info("serving", req.url); const path = new URL(req.url).pathname; if (path.startsWith(storage.publicPath)) { @@ -55,4 +54,18 @@ export default { headers: {"Content-Type": "text/html"}, }); }, + + async staticPaths() { + const blogDocs = await collectDocuments( + Path.join(__dirname, "../documents/blog"), + Path.join(__dirname, "../documents"), + ); + const guideDocs = await collectDocuments( + Path.join(__dirname, "../documents/guides"), + Path.join(__dirname, "../documents"), + ); + const blogURLs = blogDocs.map((doc) => doc.url); + const guideURLs = guideDocs.map((doc) => doc.url); + return ["/", "/blog", "/playground", ...guideURLs, ...blogURLs]; + }, }; diff --git a/website/src/components/code-editor.ts b/website/src/components/code-editor.ts index af26a541..275b5e35 100644 --- a/website/src/components/code-editor.ts +++ b/website/src/components/code-editor.ts @@ -1,11 +1,10 @@ import {jsx} from "@b9g/crank/standalone"; import type {Context, Element as CrankElement} from "@b9g/crank"; import {css} from "@emotion/css"; - import {Edit} from "@b9g/revise/edit.js"; + import {Keyer} from "@b9g/revise/keyer.js"; import {EditHistory} from "@b9g/revise/history.js"; - import type {ContentAreaElement} from "@b9g/revise/contentarea.js"; import type {Token} from "prismjs"; diff --git a/website/src/views/blog.ts b/website/src/views/blog.ts index 702cb974..02a68e38 100644 --- a/website/src/views/blog.ts +++ b/website/src/views/blog.ts @@ -11,7 +11,6 @@ import type {ViewProps} from "../router.js"; import {collectDocuments} from "../models/document.js"; const __dirname = new URL(".", import.meta.url).pathname; - export default async function BlogPage({url, context: {storage}}: ViewProps) { const posts = await collectDocuments( path.join(__dirname, "../../documents/blog"),