From c884f41fdc16e1d467908dac3c2bd2497d3486e6 Mon Sep 17 00:00:00 2001 From: Nikhil Saraf Date: Thu, 27 Jul 2023 00:57:00 +0530 Subject: [PATCH] added solid start example with common server plugins for dev and prod --- examples/solid/ssr/solid-start/.gitignore | 1 + examples/solid/ssr/solid-start/app.js | 91 ++++++++++++++ examples/solid/ssr/solid-start/package.json | 24 ++++ .../solid/ssr/solid-start/postcss.config.cjs | 6 + .../solid/ssr/solid-start/public/favicon.ico | Bin 0 -> 370070 bytes .../solid/ssr/solid-start/src/Counter.tsx | 12 ++ examples/solid/ssr/solid-start/src/db.tsx | 37 ++++++ .../ssr/solid-start/src/entry-client.tsx | 60 ++++++++++ .../ssr/solid-start/src/entry-server.tsx | 113 ++++++++++++++++++ examples/solid/ssr/solid-start/src/error.tsx | 1 + examples/solid/ssr/solid-start/src/root.tsx | 29 +++++ examples/solid/ssr/solid-start/src/routes.ts | 33 +++++ .../solid/ssr/solid-start/src/routes/[id].tsx | 19 +++ .../ssr/solid-start/src/routes/hello.css | 3 + .../ssr/solid-start/src/routes/hello.tsx | 11 ++ .../ssr/solid-start/src/routes/index.tsx | 38 ++++++ .../ssr/solid-start/src/routes/posts.tsx | 64 ++++++++++ .../solid-start/src/routes/posts/[postId].tsx | 21 ++++ .../solid-start/src/routes/posts/index.tsx | 3 + .../ssr/solid-start/src/routes/white.css | 3 + examples/solid/ssr/solid-start/src/style.css | 7 ++ .../solid/ssr/solid-start/tailwind.config.cjs | 8 ++ examples/solid/ssr/solid-start/tsconfig.json | 16 +++ packages/vinxi/lib/app-fetch.js | 15 +++ packages/vinxi/lib/app-manifest.js | 9 ++ packages/vinxi/lib/app-worker.js | 4 +- packages/vinxi/lib/app.js | 6 + packages/vinxi/lib/build.js | 101 +++++++--------- packages/vinxi/lib/dev-server.js | 29 +++-- packages/vinxi/lib/nitro-dev.js | 13 +- packages/vinxi/lib/prod-manifest.js | 5 - 31 files changed, 701 insertions(+), 81 deletions(-) create mode 100644 examples/solid/ssr/solid-start/.gitignore create mode 100644 examples/solid/ssr/solid-start/app.js create mode 100644 examples/solid/ssr/solid-start/package.json create mode 100644 examples/solid/ssr/solid-start/postcss.config.cjs create mode 100644 examples/solid/ssr/solid-start/public/favicon.ico create mode 100644 examples/solid/ssr/solid-start/src/Counter.tsx create mode 100644 examples/solid/ssr/solid-start/src/db.tsx create mode 100644 examples/solid/ssr/solid-start/src/entry-client.tsx create mode 100644 examples/solid/ssr/solid-start/src/entry-server.tsx create mode 100644 examples/solid/ssr/solid-start/src/error.tsx create mode 100644 examples/solid/ssr/solid-start/src/root.tsx create mode 100644 examples/solid/ssr/solid-start/src/routes.ts create mode 100644 examples/solid/ssr/solid-start/src/routes/[id].tsx create mode 100644 examples/solid/ssr/solid-start/src/routes/hello.css create mode 100644 examples/solid/ssr/solid-start/src/routes/hello.tsx create mode 100644 examples/solid/ssr/solid-start/src/routes/index.tsx create mode 100644 examples/solid/ssr/solid-start/src/routes/posts.tsx create mode 100644 examples/solid/ssr/solid-start/src/routes/posts/[postId].tsx create mode 100644 examples/solid/ssr/solid-start/src/routes/posts/index.tsx create mode 100644 examples/solid/ssr/solid-start/src/routes/white.css create mode 100644 examples/solid/ssr/solid-start/src/style.css create mode 100644 examples/solid/ssr/solid-start/tailwind.config.cjs create mode 100644 examples/solid/ssr/solid-start/tsconfig.json create mode 100644 packages/vinxi/lib/app-fetch.js create mode 100644 packages/vinxi/lib/app-manifest.js delete mode 100644 packages/vinxi/lib/prod-manifest.js diff --git a/examples/solid/ssr/solid-start/.gitignore b/examples/solid/ssr/solid-start/.gitignore new file mode 100644 index 00000000..e985853e --- /dev/null +++ b/examples/solid/ssr/solid-start/.gitignore @@ -0,0 +1 @@ +.vercel diff --git a/examples/solid/ssr/solid-start/app.js b/examples/solid/ssr/solid-start/app.js new file mode 100644 index 00000000..4588a055 --- /dev/null +++ b/examples/solid/ssr/solid-start/app.js @@ -0,0 +1,91 @@ +import fs from "fs"; +import { createApp } from "vinxi"; +import { + BaseFileSystemRouter, + analyzeModule, + cleanPath, +} from "vinxi/file-system-router"; +import solid from "vite-plugin-solid"; + +class SolidStartFileSystemRouter extends BaseFileSystemRouter { + toPath(src) { + const routePath = cleanPath(src, this.config) + // remove the initial slash + .slice(1) + .replace(/index$/, "") + .replace(/\[([^\/]+)\]/g, (_, m) => { + if (m.length > 3 && m.startsWith("...")) { + return `*${m.slice(3)}`; + } + if (m.length > 2 && m.startsWith("[") && m.endsWith("]")) { + return `:${m.slice(1, -1)}?`; + } + return `:${m}`; + }); + + return routePath?.length > 0 ? `/${routePath}` : "/"; + } + + toRoute(src) { + let path = this.toPath(src); + + const [_, exports] = analyzeModule(src); + const hasRouteData = exports.find((e) => e.n === "routeData"); + return { + $component: { + src: src, + pick: ["default", "$css"], + }, + $$data: hasRouteData + ? { + src: src, + pick: ["routeData"], + } + : undefined, + path, + filePath: src, + }; + } +} + +function createSolidStartApp({ client = {}, server = {} } = {}) { + return createApp({ + routers: [ + { + name: "public", + mode: "static", + dir: "./public", + base: "/", + }, + { + name: "client", + mode: "build", + handler: "./src/entry-client.tsx", + style: SolidStartFileSystemRouter, + dir: "./src/routes", + build: { + target: "browser", + plugins: () => [ + solid({ + ssr: true, + }), + ], + }, + base: "/_build", + }, + { + name: "ssr", + mode: "handler", + handler: "./src/entry-server.tsx", + dir: "./src/routes", + style: SolidStartFileSystemRouter, + build: { + target: "node", + plugins: () => [solid({ ssr: true })], + }, + }, + ], + }); +} + +export default createSolidStartApp(); diff --git a/examples/solid/ssr/solid-start/package.json b/examples/solid/ssr/solid-start/package.json new file mode 100644 index 00000000..0d30c22f --- /dev/null +++ b/examples/solid/ssr/solid-start/package.json @@ -0,0 +1,24 @@ +{ + "type": "module", + "scripts": { + "dev": "vinxi dev", + "build": "vinxi build", + "start": "vinxi start" + }, + "dependencies": { + "@babel/core": "^7.22.8", + "@picocss/pico": "^1.5.7", + "@solidjs/meta": "^0.28.5", + "@solidjs/router": "^0.8.2", + "@types/babel__core": "^7.20.1", + "@vinxi/solid": "workspace:^", + "autoprefixer": "^10.4.14", + "solid-js": "^1.7.8", + "tailwindcss": "^3.3.2", + "vinxi": "workspace:^", + "vite-plugin-solid": "^2.7.0" + }, + "devDependencies": { + "axios": "^1.4.0" + } +} diff --git a/examples/solid/ssr/solid-start/postcss.config.cjs b/examples/solid/ssr/solid-start/postcss.config.cjs new file mode 100644 index 00000000..33ad091d --- /dev/null +++ b/examples/solid/ssr/solid-start/postcss.config.cjs @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/examples/solid/ssr/solid-start/public/favicon.ico b/examples/solid/ssr/solid-start/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..129ee136870848270517aeee93fed8b4d148e065 GIT binary patch literal 370070 zcmeF42iP4&)%XL1g!GU`3MDs6QxuS*0xF<1=}mg?y`xftO6VPebVBc;ccgb|N>Qyz|aGyL)!;?tSmQ**wpiy?5{Klrv|}oPGujm~X(K0i#C`kbhGL z>^pG4fW7%NHU55++<#T>t+2wJ?@JCCaP;^A1J+zK{=UrG0|qR<`hWq`r_cGm(0l{d zJ)Y0}n>t{bsRIWbeDZt)mXU9CF;)KNGyh8)(ysq++O%m=S$`j2c4~C_j8V~5r;Uuh z{KYAA+x_y|Q=+R+9~oVG@~CK;rKirl@AvzyBgRBKY(6Ra^h%3ISDrdDI^$~#N2eS$ z#=N_#+}nMdMWW*m8k_k34d;xA7=vy1fh&eak6b-;?)T-FTOzvV%#m}y+vn`{l5dTQ zR$FCp^ZS9jOo%QzX>@eKiK8Pv^UP=EH=eQ2yVuWucCqN*ONT|z-Mmor^o>KJ@83Hp zy6&tI(e-DKh~BzyQ1s;WL!xJHTqwHp;^EO}R*w7N{f|s*m_DwRaeZauNzqN`jfif$ zV0g6prx%MhUUy2g;g_aFUs!Fi=%#Z=L^sOc&Rb55ZkA`x`1-;!jz)CY9^<30?mKSo znC`e}cy#^=qod8%pB(+)+XJHil|S0J_#305+bO~#ZVeefZEUvQN<9cj5HW zX5RbmxQKavO@Slp>AvHBX04X{n8lxl!JUV$?7^RvS6Cvt;*@0k`R3tcqMf#wC~LR4 zS@&-oHa0r>$T88ZGe#Pm-fO!>qGR^&fwkK=pFbwJdztK!%VZC&^Z7;Rj&uFBrkFhi z?k%%)WA1(b{UYB742Ys;{-85c-vvg*

1-*`B!9Y^U^z?`1sUl*R3Z;I|}}M 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 + + + ); +} diff --git a/examples/solid/ssr/solid-start/src/db.tsx b/examples/solid/ssr/solid-start/src/db.tsx new file mode 100644 index 00000000..b5150371 --- /dev/null +++ b/examples/solid/ssr/solid-start/src/db.tsx @@ -0,0 +1,37 @@ +import axios from "axios"; + +import { NotFoundError } from "./error"; + +type PostType = { + id: string; + title: string; + body: string; +}; + +export const fetchPosts = async () => { + console.log("Fetching posts..."); + await new Promise((r) => setTimeout(r, 500)); + return axios + .get("https://jsonplaceholder.typicode.com/posts") + .then((r) => r.data.slice(0, 10)); +}; + +export const fetchPost = async (postId: string) => { + console.log(`Fetching post with id ${postId}...`); + await new Promise((r) => setTimeout(r, 500)); + const post = await axios + .get(`https://jsonplaceholder.typicode.com/posts/${postId}`) + .then((r) => r.data) + .catch((e) => { + if (e.response.status === 404) { + return null; + } + throw e; + }); + + if (!post) { + throw new NotFoundError(`Post with id "${postId}" not found!`); + } + + return post; +}; diff --git a/examples/solid/ssr/solid-start/src/entry-client.tsx b/examples/solid/ssr/solid-start/src/entry-client.tsx new file mode 100644 index 00000000..4cf01b6a --- /dev/null +++ b/examples/solid/ssr/solid-start/src/entry-client.tsx @@ -0,0 +1,60 @@ +/// +import { MetaProvider } from "@solidjs/meta"; +import { Router, Routes } from "@solidjs/router"; +import { createAssets, lazyRoute } from "@vinxi/solid"; +import { NoHydration, Suspense, hydrate } from "solid-js/web"; +import fileRoutes from "vinxi/routes"; +import "vinxi/runtime/client"; + +import App from "./root"; + +const Assets = createAssets( + import.meta.env.MANIFEST["client"].handler, + import.meta.env.MANIFEST["client"], +); + +function createRoute(route) { + return { + path: route.path, + component: lazyRoute(route.$component, import.meta.env.MANIFEST["client"]), + data: route.$$data ? route.$$data.require().routeData : null, + children: route.children ? route.children.map(createRoute) : null, + }; +} + +const routes = fileRoutes.map(createRoute); + +function FileRoutes() { + return routes as any; +} + +hydrate( + () => ( + + + + + + + + + } + scripts={ + <> + + + } + > + + + + + + + + + ), + document, +); diff --git a/examples/solid/ssr/solid-start/src/entry-server.tsx b/examples/solid/ssr/solid-start/src/entry-server.tsx new file mode 100644 index 00000000..0e8fe8fb --- /dev/null +++ b/examples/solid/ssr/solid-start/src/entry-server.tsx @@ -0,0 +1,113 @@ +/// +import { MetaProvider, renderTags } from "@solidjs/meta"; +import { Router, Routes } from "@solidjs/router"; +import { lazyRoute, renderAsset } from "@vinxi/solid"; +import { + HydrationScript, + NoHydration, + Suspense, + renderToStream, + ssr, + useAssets, +} from "solid-js/web"; +import { eventHandler } from "vinxi/runtime/server"; + +import { join } from "node:path"; + +import App from "./root"; +import { routes } from "./routes"; + +export default eventHandler(async (event) => { + const events = {}; + + const clientManifest = import.meta.env.MANIFEST["client"]; + const serverManifest = import.meta.env.MANIFEST["ssr"]; + + const assets = await clientManifest.inputs[clientManifest.handler].assets(); + + function createRoute(route) { + return { + ...route, + component: lazyRoute(route.$component, clientManifest, serverManifest), + data: route.$$data ? route.$$data.require().routeData : undefined, + children: route.children ? route.children.map(createRoute) : undefined, + }; + } + + const pageRoutes = routes.map(createRoute); + + const FileRoutes = () => { + return pageRoutes as any; + }; + console.log(routes); + const tags = []; + function Meta() { + useAssets(() => ssr(renderTags(tags)) as any); + return null; + } + + const manifestJson = await clientManifest.json(); + const stream = renderToStream( + () => ( + + + + + + + {assets.map((m) => renderAsset(m))} + + } + scripts={ + <> + + + +