From d5b7bc16e03351c0ad229e4f9c5f6cd376ed4c59 Mon Sep 17 00:00:00 2001 From: Chris Wanstrath Date: Wed, 5 Nov 2025 14:23:39 -0800 Subject: [PATCH] improve layout --- src/ribbit.ts | 9 ++++----- src/server.ts | 25 +++++++++++++------------ 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/ribbit.ts b/src/ribbit.ts index 34b39f2..97d4a9c 100644 --- a/src/ribbit.ts +++ b/src/ribbit.ts @@ -1,5 +1,3 @@ -import { runCode } from 'shrimp' - const buffer: string[] = [] const NOSPACE_TOKEN = '!!ribbit-nospace!!' const TAG_TOKEN = '!!ribbit-tag!!' @@ -20,8 +18,8 @@ const HTML5_TAGS = [ "time", "title", "tr", "track", "u", "ul", "var", "video", "wbr" ] -export async function wrapAndRunCode(code: string, globals?: Record): Promise { - return await runCode("ribbit do:\n " + code + "\nend", Object.assign({}, ribbitGlobals, globals)) +export function wrapCode(code: string): string { + return "ribbit do:\n " + code + "\nend" } export const ribbitGlobals = { @@ -34,7 +32,8 @@ export const ribbitGlobals = { tag: async (tagFn: Function, atDefaults = {}) => (atNamed = {}, ...args: any[]) => tagFn(Object.assign({}, atDefaults, atNamed), ...args), nospace: () => NOSPACE_TOKEN, - echo: (...args: any[]) => console.log(...args) + echo: (...args: any[]) => console.log(...args), + 'page-title': '🦐' } for (const name of HTML5_TAGS) { diff --git a/src/server.ts b/src/server.ts index 1743e1c..29200d6 100644 --- a/src/server.ts +++ b/src/server.ts @@ -1,8 +1,9 @@ +import { AnsiUp } from 'ansi_up' import { Hono } from 'hono' import { serveStatic } from 'hono/bun' import { join, resolve } from 'path' -import { wrapAndRunCode } from './ribbit' -import { AnsiUp } from 'ansi_up' +import { wrapCode, ribbitGlobals } from './ribbit' +import { Shrimp } from 'shrimp' export function startWeb(rootPath: string) { const root = resolve(rootPath) @@ -31,25 +32,25 @@ export function startWeb(rootPath: string) { const layoutFile = Bun.file(layoutPath) let layoutCode = await layoutFile.exists() ? await layoutFile.text() : '' + const vm = new Shrimp(Object.assign({}, ribbitGlobals, { params })) + if (await file.exists()) { let content = '' try { - content = await wrapAndRunCode(await file.text(), { params }) + const code = wrapCode(await file.text()) + content = await vm.run(code) } catch (err) { return c.html(shrimpError(path, err), 500) } - if (layoutCode) { - try { - return c.html(await wrapAndRunCode(layoutCode, { params, content })) - } catch (err) { - return c.html(shrimpError(layoutPath, err), 500) - } - } else { - return c.html(content) - } + if (!layoutCode) return c.html(content) + try { + return c.html(await vm.run(wrapCode(layoutCode), { content })) + } catch (err) { + return c.html(shrimpError(layoutPath, err), 500) + } } else { return c.text('404 Not Found', 404) }