From a0d51c7df4c463bc3664b3d68b2a5f02b4f7d378 Mon Sep 17 00:00:00 2001 From: "moxey.eth" Date: Tue, 13 Feb 2024 08:45:08 +1100 Subject: [PATCH] wip --- bun.lockb | Bin 204120 -> 282904 bytes examples/_dev/package.json | 2 +- examples/_dev/src/index.tsx | 1 + examples/_dev/tsconfig.json | 28 ++++++++++-- examples/vercel-edge/.gitignore | 3 ++ examples/vercel-edge/README.md | 11 +++++ examples/vercel-edge/api/index.tsx | 66 +++++++++++++++++++++++++++ examples/vercel-edge/package.json | 15 ++++++ examples/vercel-edge/tsconfig.json | 21 +++++++++ examples/vercel-edge/vercel.json | 8 ++++ src/dev/utils.test.ts | 11 +++-- src/dev/utils.ts | 35 +++++++------- src/farc.tsx | 3 ++ src/jsx/jsx-dev-runtime/index.ts | 1 + src/jsx/jsx-dev-runtime/package.json | 6 +++ src/jsx/jsx-runtime/index.ts | 1 + src/jsx/jsx-runtime/package.json | 6 +++ src/package.json | 16 ++++++- tsconfig.base.json | 6 ++- 19 files changed, 210 insertions(+), 30 deletions(-) create mode 100644 examples/vercel-edge/.gitignore create mode 100644 examples/vercel-edge/README.md create mode 100644 examples/vercel-edge/api/index.tsx create mode 100644 examples/vercel-edge/package.json create mode 100644 examples/vercel-edge/tsconfig.json create mode 100644 examples/vercel-edge/vercel.json create mode 100644 src/jsx/jsx-dev-runtime/index.ts create mode 100644 src/jsx/jsx-dev-runtime/package.json create mode 100644 src/jsx/jsx-runtime/index.ts create mode 100644 src/jsx/jsx-runtime/package.json diff --git a/bun.lockb b/bun.lockb index 64e2c430f6cce1a7dc5215e2e241c4e680b5c750..c785cb2bf2f136c73b64d2f537605d0d7b37f0cc 100755 GIT binary patch delta 82769 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 A&Hw-a diff --git a/examples/_dev/package.json b/examples/_dev/package.json index 3eef70eb..23dfd6f6 100644 --- a/examples/_dev/package.json +++ b/examples/_dev/package.json @@ -1,5 +1,5 @@ { - "name": "example", + "name": "example-dev", "private": true, "scripts": { "dev": "bun run --hot src/index.tsx" diff --git a/examples/_dev/src/index.tsx b/examples/_dev/src/index.tsx index 41a81dae..2f5f6cf8 100644 --- a/examples/_dev/src/index.tsx +++ b/examples/_dev/src/index.tsx @@ -1,4 +1,5 @@ import { Button, Farc, TextInput } from 'farc' + import { app as todoApp } from './todos' const app = new Farc({ diff --git a/examples/_dev/tsconfig.json b/examples/_dev/tsconfig.json index c442b33f..a2accb51 100644 --- a/examples/_dev/tsconfig.json +++ b/examples/_dev/tsconfig.json @@ -1,7 +1,27 @@ { "compilerOptions": { - "strict": true, + "target": "ESNext", + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, "jsx": "react-jsx", - "jsxImportSource": "hono/jsx" - } -} \ No newline at end of file + "jsxImportSource": "farc/jsx", + "paths": { + "farc/jsx/jsx-runtime": ["../../src/jsx/jsx-runtime/index.ts"], + "farc/jsx/jsx-dev-runtime": ["../../src/jsx/jsx-dev-runtime/index.ts"] + }, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["**/*.ts", "**/*.tsx"] +} diff --git a/examples/vercel-edge/.gitignore b/examples/vercel-edge/.gitignore new file mode 100644 index 00000000..0192dfa7 --- /dev/null +++ b/examples/vercel-edge/.gitignore @@ -0,0 +1,3 @@ +node_modules + +.vercel diff --git a/examples/vercel-edge/README.md b/examples/vercel-edge/README.md new file mode 100644 index 00000000..6dd13e7c --- /dev/null +++ b/examples/vercel-edge/README.md @@ -0,0 +1,11 @@ +To install dependencies: +```sh +bun install +``` + +To run: +```sh +bun run dev +``` + +open http://localhost:3000 diff --git a/examples/vercel-edge/api/index.tsx b/examples/vercel-edge/api/index.tsx new file mode 100644 index 00000000..25a502a1 --- /dev/null +++ b/examples/vercel-edge/api/index.tsx @@ -0,0 +1,66 @@ +/** @jsx jsx */ +/** @jsxImportSource hono/jsx */ + +import { Button, Farc, TextInput } from 'farc' +// @ts-ignore +import { jsx } from 'hono/jsx' +import { handle } from 'hono/vercel' + +export const config = { + runtime: 'edge', +} + +const app = new Farc({ basePath: '/api' }) + +app.frame('/', (context) => { + const { buttonValue, inputText, status } = context + const fruit = inputText || buttonValue + return { + image: ( +

+
+ {status === 'response' + ? `Nice choice.${fruit ? ` ${fruit.toUpperCase()}!!` : ''}` + : 'Welcome!'} +
+
+ ), + intents: [ + , + , + , + , + status === 'response' && Reset, + ], + } +}) + +export const GET = handle(app.hono) +export const POST = handle(app.hono) diff --git a/examples/vercel-edge/package.json b/examples/vercel-edge/package.json new file mode 100644 index 00000000..187c0381 --- /dev/null +++ b/examples/vercel-edge/package.json @@ -0,0 +1,15 @@ +{ + "name": "example-vercel-edge", + "type": "module", + "scripts": { + "start": "vercel dev", + "deploy": "vercel" + }, + "dependencies": { + "farc": "file:../../src", + "hono": "^4.0.1" + }, + "devDependencies": { + "vercel": "^32.4.1" + } +} diff --git a/examples/vercel-edge/tsconfig.json b/examples/vercel-edge/tsconfig.json new file mode 100644 index 00000000..9296f061 --- /dev/null +++ b/examples/vercel-edge/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "target": "ESNext", + "module": "ESNext", + "skipLibCheck": true, + + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + "jsxImportSource": "hono/jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["**/*.ts", "**/*.tsx"] +} diff --git a/examples/vercel-edge/vercel.json b/examples/vercel-edge/vercel.json new file mode 100644 index 00000000..6dfcb40a --- /dev/null +++ b/examples/vercel-edge/vercel.json @@ -0,0 +1,8 @@ +{ + "rewrites": [ + { + "source": "/api/(.*)", + "destination": "/api" + } + ] +} diff --git a/src/dev/utils.test.ts b/src/dev/utils.test.ts index 4bbbab19..4570c1eb 100644 --- a/src/dev/utils.test.ts +++ b/src/dev/utils.test.ts @@ -28,17 +28,18 @@ const html = ` ` -const selector = 'meta[property^="fc:"], meta[property^="og:"]' -const metaTags = htmlToMetaTags(html, selector) +const prefix = ['fc', 'og'] +const metaTags = htmlToMetaTags(html, prefix) test('htmlToMetaTags', () => { const html = ` foo + bar ` - expect(htmlToMetaTags(html, selector).length).toEqual(2) + expect(htmlToMetaTags(html, prefix).length).toEqual(2) }) test('parseFrameProperties', () => { @@ -100,7 +101,7 @@ describe('validateFrameButtons', () => { ` - const metaTags = htmlToMetaTags(html, selector) + const metaTags = htmlToMetaTags(html, prefix) const buttons = parseButtons(metaTags) const result = validateButtons(buttons) expect(result).toEqual({ @@ -114,7 +115,7 @@ describe('validateFrameButtons', () => { ` - const metaTags = htmlToMetaTags(html, selector) + const metaTags = htmlToMetaTags(html, prefix) const buttons = parseButtons(metaTags) const result = validateButtons(buttons) expect(result).toEqual({ diff --git a/src/dev/utils.ts b/src/dev/utils.ts index 65aa47d4..6fa8c8d7 100644 --- a/src/dev/utils.ts +++ b/src/dev/utils.ts @@ -1,4 +1,4 @@ -import { Window } from 'happy-dom' +import { type Node, parseFromString } from 'dom-parser' import { inspectRoutes } from 'hono/dev' import { @@ -15,16 +15,17 @@ import { type FrameMetaTagPropertyName, } from './types.js' -export function htmlToMetaTags(html: string, selector: string) { - const window = new Window() - window.document.write(html) - const document = window.document - return document.querySelectorAll( - selector, - ) as unknown as readonly HTMLMetaElement[] +export function htmlToMetaTags(html: string, prefix?: string[]) { + const dom = parseFromString(html) + const nodes = dom.getElementsByTagName('meta') + if (!prefix) return nodes + return nodes.filter((node) => { + const property = node.getAttribute('property') + return property && prefix.some((x) => property.startsWith(x)) + }) } -export function parseProperties(metaTags: readonly HTMLMetaElement[]) { +export function parseProperties(metaTags: readonly Node[]) { const validPropertyNames = new Set([ 'fc:frame', 'fc:frame:image', @@ -54,8 +55,11 @@ export function parseProperties(metaTags: readonly HTMLMetaElement[]) { const imageAspectRatio = (properties['fc:frame:image:aspect_ratio'] as FrameImageAspectRatio) ?? '1.91:1' - const imageUrl = properties['fc:frame:image'] ?? '' - const postUrl = properties['fc:frame:post_url'] ?? '' + const imageUrl = (properties['fc:frame:image'] ?? '').replaceAll('&', '&') + const postUrl = (properties['fc:frame:post_url'] ?? '').replaceAll( + '&', + '&', + ) const title = properties['og:title'] ?? '' const version = (properties['fc:frame'] as FrameVersion) ?? 'vNext' @@ -70,7 +74,7 @@ export function parseProperties(metaTags: readonly HTMLMetaElement[]) { } } -export function parseButtons(metaTags: readonly HTMLMetaElement[]) { +export function parseButtons(metaTags: readonly Node[]) { // https://regexr.com/7rlm0 const buttonRegex = /fc:frame:button:(1|2|3|4)(?::(action|target))?$/ @@ -152,7 +156,7 @@ export type State = { } export function htmlToState(html: string) { - const metaTags = htmlToMetaTags(html, 'meta[property^="farc:"]') + const metaTags = htmlToMetaTags(html, ['farc']) const properties: Partial> = {} for (const metaTag of metaTags) { @@ -174,10 +178,7 @@ export function htmlToState(html: string) { } export function htmlToFrame(html: string) { - const metaTags = htmlToMetaTags( - html, - 'meta[property^="fc:"], meta[property^="og:"]', - ) + const metaTags = htmlToMetaTags(html, ['fc', 'og']) const properties = parseProperties(metaTags) const buttons = parseButtons(metaTags) diff --git a/src/farc.tsx b/src/farc.tsx index 493cfdcc..f4c65650 100644 --- a/src/farc.tsx +++ b/src/farc.tsx @@ -1,3 +1,4 @@ +import { Buffer } from 'node:buffer' import { FrameActionBody, Message, @@ -28,6 +29,8 @@ import { parsePath } from './utils/parsePath.js' import { requestToContext } from './utils/requestToContext.js' import { serializeJson } from './utils/serializeJson.js' +globalThis.Buffer = Buffer + export type FarcConstructorParameters< state = undefined, env extends Env = Env, diff --git a/src/jsx/jsx-dev-runtime/index.ts b/src/jsx/jsx-dev-runtime/index.ts new file mode 100644 index 00000000..dd9b7aa7 --- /dev/null +++ b/src/jsx/jsx-dev-runtime/index.ts @@ -0,0 +1 @@ +export * from 'hono/jsx/jsx-dev-runtime' diff --git a/src/jsx/jsx-dev-runtime/package.json b/src/jsx/jsx-dev-runtime/package.json new file mode 100644 index 00000000..0c6d3b52 --- /dev/null +++ b/src/jsx/jsx-dev-runtime/package.json @@ -0,0 +1,6 @@ +{ + "type": "module", + "types": "../../_lib/jsx/jsx-dev-runtime/index.d.ts", + "module": "../../_lib/jsx/jsx-dev-runtime/index.js", + "main": "../../_lib/jsx/jsx-dev-runtime/index.js" +} diff --git a/src/jsx/jsx-runtime/index.ts b/src/jsx/jsx-runtime/index.ts new file mode 100644 index 00000000..d50577b7 --- /dev/null +++ b/src/jsx/jsx-runtime/index.ts @@ -0,0 +1 @@ +export * from 'hono/jsx/jsx-runtime' diff --git a/src/jsx/jsx-runtime/package.json b/src/jsx/jsx-runtime/package.json new file mode 100644 index 00000000..ef21cfb8 --- /dev/null +++ b/src/jsx/jsx-runtime/package.json @@ -0,0 +1,6 @@ +{ + "type": "module", + "types": "../../_lib/jsx/jsx-runtime/index.d.ts", + "module": "../../_lib/jsx/jsx-runtime/index.js", + "main": "../../_lib/jsx/jsx-runtime/index.js" +} diff --git a/src/package.json b/src/package.json index 054ed371..97daeb22 100644 --- a/src/package.json +++ b/src/package.json @@ -7,7 +7,18 @@ "typings": "_lib/index.d.ts", "sideEffects": false, "exports": { - ".": "./_lib/index.js" + ".": { + "types": "./_lib/index.d.ts", + "default": "./_lib/index.js" + }, + "./jsx/jsx-runtime": { + "types": "./_lib/jsx/jsx-runtime/index.d.ts", + "default": "./_lib/jsx/jsx-runtime/index.js" + }, + "./jsx/jsx-dev-runtime": { + "types": "./_lib/jsx/jsx-dev-runtime/index.d.ts", + "default": "./_lib/jsx/jsx-dev-runtime/index.js" + } }, "peerDependencies": { "hono": "^4" @@ -16,7 +27,8 @@ "@farcaster/core": "^0.13.7", "@noble/curves": "^1.3.0", "happy-dom": "^13.3.8", - "hono-og": "~0.0.3", + "dom-parser": "1.1.5", + "hono-og": "~0.0.5", "immer": "^10.0.3", "lz-string": "^1.5.0", "shiki": "^1.0.0" diff --git a/tsconfig.base.json b/tsconfig.base.json index addcfb96..7e1a7dea 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -32,8 +32,12 @@ "target": "ES2021", // Setting this to `ES2021` enables native support for `Node v16+`: https://github.com/microsoft/TypeScript/wiki/Node-Target-Mapping. "lib": ["ES2022", "DOM"], "jsx": "react-jsx", - "jsxImportSource": "hono/jsx", + "jsxImportSource": "farc/jsx", "types": ["@types/bun", "typed-htmx"], + "paths": { + "farc/jsx/jsx-runtime": ["./src/jsx/jsx-runtime/index.ts"], + "farc/jsx/jsx-dev-runtime": ["./src/jsx/jsx-dev-runtime/index.ts"] + }, // Skip type checking for node modules "skipLibCheck": true