From 67980b9171be64f37e2b81fc30c4b47b8cfa5e00 Mon Sep 17 00:00:00 2001 From: Puru Vijay Date: Sun, 2 Apr 2023 01:06:18 +0530 Subject: [PATCH] Try the pre-generate route --- sites/svelte.dev/.gitignore | 3 +- sites/svelte.dev/package.json | 110 +++++++++--------- sites/svelte.dev/scripts/generate_examples.js | 11 ++ .../src/routes/(authed)/+layout.server.js | 2 +- .../routes/(authed)/repl/[id].json/+server.js | 40 +++---- 5 files changed, 87 insertions(+), 79 deletions(-) create mode 100644 sites/svelte.dev/scripts/generate_examples.js diff --git a/sites/svelte.dev/.gitignore b/sites/svelte.dev/.gitignore index 27c994def1..4bc73a5cc2 100644 --- a/sites/svelte.dev/.gitignore +++ b/sites/svelte.dev/.gitignore @@ -9,4 +9,5 @@ /src/routes/_components/Supporters/contributors.js /src/routes/_components/Supporters/donors.jpg /src/routes/_components/Supporters/donors.js -.vercel \ No newline at end of file +.vercel +examples-data.js \ No newline at end of file diff --git a/sites/svelte.dev/package.json b/sites/svelte.dev/package.json index aec7f77326..cb2c54aa1b 100644 --- a/sites/svelte.dev/package.json +++ b/sites/svelte.dev/package.json @@ -1,57 +1,57 @@ { - "name": "svelte.dev", - "version": "1.0.0", - "description": "Docs and examples for Svelte", - "type": "module", - "scripts": { - "dev": "node scripts/update.js && vite dev", - "build": "node scripts/update.js && vite build", - "update": "node scripts/update.js --force=true", - "preview": "vite preview", - "start": "node build", - "check": "svelte-kit sync && svelte-check --tsconfig ./jsconfig.json", - "check:watch": "svelte-kit sync && svelte-check --tsconfig ./jsconfig.json --watch", - "format": "npm run check:format -- --write", - "check:format": "prettier --check . --ignore-path .gitignore --plugin-search-dir=.", - "test": "uvu -r ts-node/register src/lib/server/markdown" - }, - "dependencies": { - "@supabase/supabase-js": "^2.11.0", - "@sveltejs/adapter-vercel": "^2.4.1", - "@sveltejs/repl": "^0.2.0", - "cookie": "^0.5.0", - "devalue": "^4.3.0", - "do-not-zip": "^1.0.0", - "flexsearch": "^0.7.31", - "flru": "^1.0.2", - "sourcemap-codec": "^1.4.8", - "svelte-local-storage-store": "^0.4.0" - }, - "devDependencies": { - "@resvg/resvg-js": "^2.4.1", - "@sveltejs/kit": "^1.12.0", - "@sveltejs/site-kit": "^3.3.6", - "@sveltejs/vite-plugin-svelte": "^2.0.3", - "@types/marked": "^4.0.8", - "@types/prismjs": "^1.26.0", - "degit": "^2.8.4", - "dotenv": "^16.0.3", - "jimp": "^0.22.7", - "marked": "^4.2.12", - "node-fetch": "^3.3.1", - "prettier": "^2.8.4", - "prettier-plugin-svelte": "^2.9.0", - "prism-svelte": "^0.5.0", - "prismjs": "^1.29.0", - "satori": "^0.4.3", - "satori-html": "^0.3.2", - "shelljs": "^0.8.5", - "shiki": "^0.14.1", - "shiki-twoslash": "^3.1.1", - "svelte": "^3.57.0", - "svelte-check": "^3.1.4", - "typescript": "^5.0.2", - "vite": "^4.2.0", - "vite-imagetools": "^4.0.18" - } + "name": "svelte.dev", + "version": "1.0.0", + "description": "Docs and examples for Svelte", + "type": "module", + "scripts": { + "dev": "node scripts/generate_examples.js && node scripts/update.js && vite dev", + "build": "node scripts/generate_examples.js && node scripts/update.js && vite build", + "update": "node scripts/update.js --force=true", + "preview": "vite preview", + "start": "node build", + "check": "svelte-kit sync && svelte-check --tsconfig ./jsconfig.json", + "check:watch": "svelte-kit sync && svelte-check --tsconfig ./jsconfig.json --watch", + "format": "npm run check:format -- --write", + "check:format": "prettier --check . --ignore-path .gitignore --plugin-search-dir=.", + "test": "uvu -r ts-node/register src/lib/server/markdown" + }, + "dependencies": { + "@supabase/supabase-js": "^2.11.0", + "@sveltejs/adapter-vercel": "^2.4.1", + "@sveltejs/repl": "^0.2.0", + "cookie": "^0.5.0", + "devalue": "^4.3.0", + "do-not-zip": "^1.0.0", + "flexsearch": "^0.7.31", + "flru": "^1.0.2", + "sourcemap-codec": "^1.4.8", + "svelte-local-storage-store": "^0.4.0" + }, + "devDependencies": { + "@resvg/resvg-js": "^2.4.1", + "@sveltejs/kit": "^1.12.0", + "@sveltejs/site-kit": "^3.3.6", + "@sveltejs/vite-plugin-svelte": "^2.0.3", + "@types/marked": "^4.0.8", + "@types/prismjs": "^1.26.0", + "degit": "^2.8.4", + "dotenv": "^16.0.3", + "jimp": "^0.22.7", + "marked": "^4.2.12", + "node-fetch": "^3.3.1", + "prettier": "^2.8.4", + "prettier-plugin-svelte": "^2.9.0", + "prism-svelte": "^0.5.0", + "prismjs": "^1.29.0", + "satori": "^0.4.3", + "satori-html": "^0.3.2", + "shelljs": "^0.8.5", + "shiki": "^0.14.1", + "shiki-twoslash": "^3.1.1", + "svelte": "^3.57.0", + "svelte-check": "^3.1.4", + "typescript": "^5.0.2", + "vite": "^4.2.0", + "vite-imagetools": "^4.0.18" + } } diff --git a/sites/svelte.dev/scripts/generate_examples.js b/sites/svelte.dev/scripts/generate_examples.js new file mode 100644 index 0000000000..3ae9904d1d --- /dev/null +++ b/sites/svelte.dev/scripts/generate_examples.js @@ -0,0 +1,11 @@ +import { get_examples_data } from '../src/lib/server/examples/get-examples.js'; +import fs from 'node:fs'; + +const examples_data = get_examples_data( + new URL('../../../site/content/examples', import.meta.url).pathname +); + +fs.writeFileSync( + new URL('../src/routes/(authed)/repl/[id].json/examples-data.js', import.meta.url), + `export default ${JSON.stringify(examples_data)}` +); diff --git a/sites/svelte.dev/src/routes/(authed)/+layout.server.js b/sites/svelte.dev/src/routes/(authed)/+layout.server.js index d34b7084f6..5f4ba329ab 100644 --- a/sites/svelte.dev/src/routes/(authed)/+layout.server.js +++ b/sites/svelte.dev/src/routes/(authed)/+layout.server.js @@ -2,6 +2,6 @@ import * as session from '$lib/db/session'; export async function load({ request }) { return { - user: await session.from_cookie(request.headers.get('cookie')) + user: session.from_cookie(request.headers.get('cookie')), }; } diff --git a/sites/svelte.dev/src/routes/(authed)/repl/[id].json/+server.js b/sites/svelte.dev/src/routes/(authed)/repl/[id].json/+server.js index 7a76b7c382..a4521d5bb8 100644 --- a/sites/svelte.dev/src/routes/(authed)/repl/[id].json/+server.js +++ b/sites/svelte.dev/src/routes/(authed)/repl/[id].json/+server.js @@ -4,6 +4,7 @@ import * as gist from '$lib/db/gist'; import { get_example } from '$lib/server/examples'; import { get_examples_data, get_examples_list } from '$lib/server/examples/get-examples'; import { error, json } from '@sveltejs/kit'; +import examples_data from './examples-data.js'; export const prerender = 'auto'; @@ -39,28 +40,23 @@ export async function GET({ params }) { // We prerender examples pages during build time. That means, when something like `/repl/hello-world.json` // is accessed, this function won't be run at all, as it will be served from the filesystem - try { - const examples_data = get_examples_data(); - examples = new Set( - get_examples_list(examples_data) - .map((category) => category.examples) - .flat() - .map((example) => example.slug) - ); - - if (examples.has(params.id)) { - const example = get_example(examples_data, params.id); - - return json({ - id: params.id, - name: example.title, - owner: null, - relaxed: false, // TODO is this right? EDIT: It was example.relaxed before, which no example return to my knowledge. By @PuruVJ - components: munge(example.files), - }); - } - } catch (e) { - console.warn('Cant use filesystem'); + examples = new Set( + get_examples_list(examples_data) + .map((category) => category.examples) + .flat() + .map((example) => example.slug) + ); + + if (examples.has(params.id)) { + const example = get_example(examples_data, params.id); + + return json({ + id: params.id, + name: example.title, + owner: null, + relaxed: false, // TODO is this right? EDIT: It was example.relaxed before, which no example return to my knowledge. By @PuruVJ + components: munge(example.files), + }); } if (dev && !client) {