From 62477bf8238fbf40e516f96a2693e1cf35b49997 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Tue, 18 Jan 2022 22:06:14 -0500 Subject: [PATCH 1/5] add hn.svelte.dev --- pnpm-lock.yaml | 94 ++++++++++------- sites/hn.svelte.dev/.gitignore | 8 ++ sites/hn.svelte.dev/.npmrc | 1 + sites/hn.svelte.dev/.prettierrc | 6 ++ sites/hn.svelte.dev/README.md | 38 +++++++ sites/hn.svelte.dev/jsconfig.json | 10 ++ sites/hn.svelte.dev/package.json | 20 ++++ sites/hn.svelte.dev/src/app.css | 52 ++++++++++ sites/hn.svelte.dev/src/app.html | 13 +++ sites/hn.svelte.dev/src/global.d.ts | 1 + sites/hn.svelte.dev/src/lib/Nav.svelte | 95 ++++++++++++++++++ .../src/lib/PreloadingIndicator.svelte | 67 ++++++++++++ .../hn.svelte.dev/src/lib/ThemeToggler.svelte | 87 ++++++++++++++++ .../src/routes/[list]/[page].svelte | 58 +++++++++++ .../src/routes/[list]/_ItemSummary.svelte | 73 ++++++++++++++ sites/hn.svelte.dev/src/routes/[list]/rss.js | 50 +++++++++ sites/hn.svelte.dev/src/routes/__error.svelte | 52 ++++++++++ .../hn.svelte.dev/src/routes/__layout.svelte | 31 ++++++ sites/hn.svelte.dev/src/routes/about.svelte | 27 +++++ sites/hn.svelte.dev/src/routes/index.svelte | 9 ++ .../hn.svelte.dev/src/routes/item/[id].svelte | 79 +++++++++++++++ .../src/routes/item/_Comment.svelte | 84 ++++++++++++++++ .../src/routes/item/_icons/fold.svg | 5 + .../src/routes/item/_icons/unfold.svg | 5 + sites/hn.svelte.dev/src/routes/rss.js | 10 ++ .../src/routes/user/[name].svelte | 45 +++++++++ sites/hn.svelte.dev/static/favicon.png | Bin 0 -> 1571 bytes sites/hn.svelte.dev/svelte.config.js | 13 +++ 28 files changed, 998 insertions(+), 35 deletions(-) create mode 100644 sites/hn.svelte.dev/.gitignore create mode 100644 sites/hn.svelte.dev/.npmrc create mode 100644 sites/hn.svelte.dev/.prettierrc create mode 100644 sites/hn.svelte.dev/README.md create mode 100644 sites/hn.svelte.dev/jsconfig.json create mode 100644 sites/hn.svelte.dev/package.json create mode 100644 sites/hn.svelte.dev/src/app.css create mode 100644 sites/hn.svelte.dev/src/app.html create mode 100644 sites/hn.svelte.dev/src/global.d.ts create mode 100644 sites/hn.svelte.dev/src/lib/Nav.svelte create mode 100644 sites/hn.svelte.dev/src/lib/PreloadingIndicator.svelte create mode 100644 sites/hn.svelte.dev/src/lib/ThemeToggler.svelte create mode 100644 sites/hn.svelte.dev/src/routes/[list]/[page].svelte create mode 100644 sites/hn.svelte.dev/src/routes/[list]/_ItemSummary.svelte create mode 100644 sites/hn.svelte.dev/src/routes/[list]/rss.js create mode 100644 sites/hn.svelte.dev/src/routes/__error.svelte create mode 100644 sites/hn.svelte.dev/src/routes/__layout.svelte create mode 100644 sites/hn.svelte.dev/src/routes/about.svelte create mode 100644 sites/hn.svelte.dev/src/routes/index.svelte create mode 100644 sites/hn.svelte.dev/src/routes/item/[id].svelte create mode 100644 sites/hn.svelte.dev/src/routes/item/_Comment.svelte create mode 100644 sites/hn.svelte.dev/src/routes/item/_icons/fold.svg create mode 100644 sites/hn.svelte.dev/src/routes/item/_icons/unfold.svg create mode 100644 sites/hn.svelte.dev/src/routes/rss.js create mode 100644 sites/hn.svelte.dev/src/routes/user/[name].svelte create mode 100644 sites/hn.svelte.dev/static/favicon.png create mode 100644 sites/hn.svelte.dev/svelte.config.js diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a399a094..9f32c013 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -36,8 +36,8 @@ importers: svelte-json-tree: 0.1.0 yootils: 0.3.1 devDependencies: - '@sveltejs/adapter-auto': 1.0.0-next.4 - '@sveltejs/kit': 1.0.0-next.202_svelte@3.44.2 + '@sveltejs/adapter-auto': 1.0.0-next.11 + '@sveltejs/kit': 1.0.0-next.232_svelte@3.44.2 eslint: 7.32.0 eslint-config-prettier: 8.3.0_eslint@7.32.0 eslint-plugin-svelte3: 3.2.1_eslint@7.32.0+svelte@3.44.2 @@ -57,11 +57,25 @@ importers: dependencies: golden-fleece: 1.0.9 devDependencies: - '@sveltejs/kit': 1.0.0-next.202_svelte@3.44.2 + '@sveltejs/kit': 1.0.0-next.232_svelte@3.44.2 svelte: 3.44.2 svelte2tsx: 0.4.11_svelte@3.44.2+typescript@4.5.3 typescript: 4.5.3 + sites/hn.svelte.dev: + specifiers: + '@sveltejs/adapter-auto': next + '@sveltejs/kit': next + prettier: ^2.4.1 + prettier-plugin-svelte: ^2.4.0 + svelte: ^3.44.0 + devDependencies: + '@sveltejs/adapter-auto': 1.0.0-next.11 + '@sveltejs/kit': 1.0.0-next.232_svelte@3.44.2 + prettier: 2.5.1 + prettier-plugin-svelte: 2.5.0_prettier@2.5.1+svelte@3.44.2 + svelte: 3.44.2 + sites/kit.svelte.dev: specifiers: '@sveltejs/adapter-netlify': next @@ -71,8 +85,8 @@ importers: svelte: ^3.43.0 vite-imagetools: ^4.0.3 devDependencies: - '@sveltejs/adapter-netlify': 1.0.0-next.36 - '@sveltejs/kit': 1.0.0-next.202_svelte@3.44.2 + '@sveltejs/adapter-netlify': 1.0.0-next.39 + '@sveltejs/kit': 1.0.0-next.232_svelte@3.44.2 '@sveltejs/site-kit': link:../../packages/site-kit '@types/node': 16.11.12 svelte: 3.44.2 @@ -114,7 +128,7 @@ importers: devDependencies: '@sindresorhus/slugify': 0.9.1 '@sveltejs/adapter-auto': 1.0.0-next.3 - '@sveltejs/kit': 1.0.0-next.202_svelte@3.44.2 + '@sveltejs/kit': 1.0.0-next.232_svelte@3.44.2 '@sveltejs/site-kit': link:../../packages/site-kit degit: 2.8.4 dotenv: 10.0.0 @@ -779,6 +793,14 @@ packages: '@supabase/storage-js': 1.5.0 dev: false + /@sveltejs/adapter-auto/1.0.0-next.11: + resolution: {integrity: sha512-VvFB5E/5y2aKr/XBS6fghT7aZF/D/Tm9/muscGIGtZK0mojL6SDdAhI3hqoWuHfBKz0D7YzLh4mlWEmERdmt/w==} + dependencies: + '@sveltejs/adapter-cloudflare': 1.0.0-next.7 + '@sveltejs/adapter-netlify': 1.0.0-next.39 + '@sveltejs/adapter-vercel': 1.0.0-next.37 + dev: true + /@sveltejs/adapter-auto/1.0.0-next.3: resolution: {integrity: sha512-FVNLtr0bj/slQqA0TuoylnVsGrvBYdYL+hpp2Qy5Kg3q1m8i9bJ0aifKnaGn7m01II2KUSnpnhuRbX/HwKVDcA==} dependencies: @@ -787,22 +809,14 @@ packages: '@sveltejs/adapter-vercel': 1.0.0-next.31 dev: true - /@sveltejs/adapter-auto/1.0.0-next.4: - resolution: {integrity: sha512-kfygrjF2uIgVVDsySl7I9oWSekU6adJCr/3qzLQDLM4FJ98FWmfhj4OOWsmF9X4JRPSm97t3RPugYsN3NLwKMQ==} - dependencies: - '@sveltejs/adapter-cloudflare': 1.0.0-next.3 - '@sveltejs/adapter-netlify': 1.0.0-next.36 - '@sveltejs/adapter-vercel': 1.0.0-next.32 - dev: true - /@sveltejs/adapter-cloudflare/1.0.0-next.2: resolution: {integrity: sha512-4Q7ZuoMck7wwzIO7gd8gqnm7gWflztTDHU/C1DzLr8V2UprQFQwsUE/padtQhFPXkgAiXJ8AwLksey4A8qjOsA==} dependencies: esbuild: 0.13.15 dev: true - /@sveltejs/adapter-cloudflare/1.0.0-next.3: - resolution: {integrity: sha512-LauvvkBFCE8myGMLWOncv97/xU8JJn9OMl1miy8f/q8qs0CrduvR1sv2uCM9AylqT/FNPy3mony5wpe3w1v7sg==} + /@sveltejs/adapter-cloudflare/1.0.0-next.7: + resolution: {integrity: sha512-P2rq+Tdvv9IKX4SVrIRqgZ2DnjmpPjp/bhAISs6cgbMzc2AmLMCeN++DXAZAVWugIjF1freLmtXcCl3/0HByNg==} dependencies: esbuild: 0.13.15 dev: true @@ -814,11 +828,12 @@ packages: esbuild: 0.13.15 dev: true - /@sveltejs/adapter-netlify/1.0.0-next.36: - resolution: {integrity: sha512-LdrIXCTBnIubtt/lthcnyt5VljuHpZlVzUqpWXk9Eu6bpNKblqQLMHkTBQfIbPfanmNSDZXJQVsdcFLqF2/+Cw==} + /@sveltejs/adapter-netlify/1.0.0-next.39: + resolution: {integrity: sha512-uBRscFmse2PkRZzIbRkG2sUNSIUveliiWFWUkIvxClfsT9x7JxVHgr1zsBwbIdrWs4EE7PvTAlUnv2wlEBEijQ==} dependencies: '@iarna/toml': 2.2.5 esbuild: 0.13.15 + tiny-glob: 0.2.9 dev: true /@sveltejs/adapter-vercel/1.0.0-next.31: @@ -827,21 +842,20 @@ packages: esbuild: 0.13.15 dev: true - /@sveltejs/adapter-vercel/1.0.0-next.32: - resolution: {integrity: sha512-ZcltaS5bAobGD5P0z7xJIjPHSlGpF7padMIkqTzJxwMEb/acGgdO5yzDS8XUEaSNgj+prpD2oG8+gm33ds8x0A==} + /@sveltejs/adapter-vercel/1.0.0-next.37: + resolution: {integrity: sha512-SfaaakXjk6sBmSGozdrUQIsB3cFdo47ZFFEHMlPOScvXuAY8VPc1jCbGEQPadKW9Txf9xDuu6trm41OYztC+RA==} dependencies: esbuild: 0.13.15 dev: true - /@sveltejs/kit/1.0.0-next.202_svelte@3.44.2: - resolution: {integrity: sha512-rXmJ0FplkWvD1CaeCfejRYhOJYrlmeUm5Fkw7gIKDdWPQev5rqOhd9B9ZvRpq35oMqCAwaOfK+e5S6k+83feEQ==} + /@sveltejs/kit/1.0.0-next.232_svelte@3.44.2: + resolution: {integrity: sha512-STQ0hnJozIop8k9I313nwVasBIQ45Z2K1pUOkDVjCSOGijgsj+De5q0prQBtL1ZlqqisfkYlOf8W9gvDSyTLEA==} engines: {node: '>=14.13'} hasBin: true peerDependencies: svelte: ^3.44.0 dependencies: - '@sveltejs/vite-plugin-svelte': 1.0.0-next.31_svelte@3.44.2+vite@2.7.2 - cheap-watch: 1.0.4 + '@sveltejs/vite-plugin-svelte': 1.0.0-next.34_svelte@3.44.2+vite@2.7.2 sade: 1.7.4 svelte: 3.44.2 vite: 2.7.2 @@ -853,13 +867,13 @@ packages: - supports-color dev: true - /@sveltejs/vite-plugin-svelte/1.0.0-next.31_svelte@3.44.2+vite@2.7.2: - resolution: {integrity: sha512-8K3DcGP1V+XBv389u32S6wt8xiun6hHd5wn28AKLSoNTIhOmJOA2RJUJzp0seTRI86Shme4lzHI2Fgq4qz1wXQ==} + /@sveltejs/vite-plugin-svelte/1.0.0-next.34_svelte@3.44.2+vite@2.7.2: + resolution: {integrity: sha512-qZH2jndijrdkvevgbO7OH3iQsviM5Kz7h5APiNP4yEMZTrwq9bifzYvco6BprwtPvLb5wYlRVFZUOdusY6AovQ==} engines: {node: ^14.13.1 || >= 16} peerDependencies: diff-match-patch: ^1.0.5 svelte: ^3.44.0 - vite: ^2.6.0 + vite: ^2.7.0 peerDependenciesMeta: diff-match-patch: optional: true @@ -870,7 +884,7 @@ packages: magic-string: 0.25.7 require-relative: 0.8.7 svelte: 3.44.2 - svelte-hmr: 0.14.7_svelte@3.44.2 + svelte-hmr: 0.14.9_svelte@3.44.2 vite: 2.7.2 transitivePeerDependencies: - supports-color @@ -1148,11 +1162,6 @@ packages: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} dev: true - /cheap-watch/1.0.4: - resolution: {integrity: sha512-QR/9FrtRL5fjfUJBhAKCdi0lSRQ3rVRRum3GF9wDKp2TJbEIMGhUEr2yU8lORzm9Isdjx7/k9S0DFDx+z5VGtw==} - engines: {node: '>=8'} - dev: true - /chownr/1.1.4: resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} dev: true @@ -2008,6 +2017,10 @@ packages: type-fest: 0.20.2 dev: true + /globalyzer/0.1.0: + resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} + dev: true + /globby/11.0.4: resolution: {integrity: sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==} engines: {node: '>=10'} @@ -2020,6 +2033,10 @@ packages: slash: 3.0.0 dev: true + /globrex/0.1.2: + resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} + dev: true + /golden-fleece/1.0.9: resolution: {integrity: sha512-YSwLaGMOgSBx9roJlNLL12c+FRiw7VECphinc6mGucphc/ZxTHgdEz6gmJqH6NOzYEd/yr64hwjom5pZ+tJVpg==} dev: false @@ -3319,8 +3336,8 @@ packages: has-flag: 4.0.0 dev: true - /svelte-hmr/0.14.7_svelte@3.44.2: - resolution: {integrity: sha512-pDrzgcWSoMaK6AJkBWkmgIsecW0GChxYZSZieIYfCP0v2oPyx2CYU/zm7TBIcjLVUPP714WxmViE9Thht4etog==} + /svelte-hmr/0.14.9_svelte@3.44.2: + resolution: {integrity: sha512-bKE9+4qb4sAnA+TKHiYurUl970rjA0XmlP9TEP7K/ncyWz3m81kA4HOgmlZK/7irGK7gzZlaPDI3cmf8fp/+tg==} peerDependencies: svelte: '>=3.19.0' dependencies: @@ -3399,6 +3416,13 @@ packages: resolution: {integrity: sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==} dev: true + /tiny-glob/0.2.9: + resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} + dependencies: + globalyzer: 0.1.0 + globrex: 0.1.2 + dev: true + /tinycolor2/1.4.2: resolution: {integrity: sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==} dev: true diff --git a/sites/hn.svelte.dev/.gitignore b/sites/hn.svelte.dev/.gitignore new file mode 100644 index 00000000..f4401a32 --- /dev/null +++ b/sites/hn.svelte.dev/.gitignore @@ -0,0 +1,8 @@ +.DS_Store +node_modules +/build +/.svelte-kit +/package +.env +.env.* +!.env.example diff --git a/sites/hn.svelte.dev/.npmrc b/sites/hn.svelte.dev/.npmrc new file mode 100644 index 00000000..b6f27f13 --- /dev/null +++ b/sites/hn.svelte.dev/.npmrc @@ -0,0 +1 @@ +engine-strict=true diff --git a/sites/hn.svelte.dev/.prettierrc b/sites/hn.svelte.dev/.prettierrc new file mode 100644 index 00000000..ff2677ef --- /dev/null +++ b/sites/hn.svelte.dev/.prettierrc @@ -0,0 +1,6 @@ +{ + "useTabs": true, + "singleQuote": true, + "trailingComma": "none", + "printWidth": 100 +} diff --git a/sites/hn.svelte.dev/README.md b/sites/hn.svelte.dev/README.md new file mode 100644 index 00000000..82510ca0 --- /dev/null +++ b/sites/hn.svelte.dev/README.md @@ -0,0 +1,38 @@ +# create-svelte + +Everything you need to build a Svelte project, powered by [`create-svelte`](https://github.com/sveltejs/kit/tree/master/packages/create-svelte); + +## Creating a project + +If you're seeing this, you've probably already done this step. Congrats! + +```bash +# create a new project in the current directory +npm init svelte@next + +# create a new project in my-app +npm init svelte@next my-app +``` + +> Note: the `@next` is temporary + +## Developing + +Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server: + +```bash +npm run dev + +# or start the server and open the app in a new browser tab +npm run dev -- --open +``` + +## Building + +Before creating a production version of your app, install an [adapter](https://kit.svelte.dev/docs#adapters) for your target environment. Then: + +```bash +npm run build +``` + +> You can preview the built app with `npm run preview`, regardless of whether you installed an adapter. This should _not_ be used to serve your app in production. diff --git a/sites/hn.svelte.dev/jsconfig.json b/sites/hn.svelte.dev/jsconfig.json new file mode 100644 index 00000000..3757b0e2 --- /dev/null +++ b/sites/hn.svelte.dev/jsconfig.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "paths": { + "$lib": ["src/lib"], + "$lib/*": ["src/lib/*"] + } + }, + "include": ["src/**/*.d.ts", "src/**/*.js", "src/**/*.svelte"] +} diff --git a/sites/hn.svelte.dev/package.json b/sites/hn.svelte.dev/package.json new file mode 100644 index 00000000..af145971 --- /dev/null +++ b/sites/hn.svelte.dev/package.json @@ -0,0 +1,20 @@ +{ + "name": "hn.svelte.dev", + "version": "0.0.1", + "scripts": { + "dev": "svelte-kit dev", + "build": "svelte-kit build", + "package": "svelte-kit package", + "preview": "svelte-kit preview", + "lint": "prettier --ignore-path .gitignore --check --plugin-search-dir=. .", + "format": "prettier --ignore-path .gitignore --write --plugin-search-dir=. ." + }, + "devDependencies": { + "@sveltejs/adapter-auto": "next", + "@sveltejs/kit": "next", + "prettier": "^2.4.1", + "prettier-plugin-svelte": "^2.4.0", + "svelte": "^3.44.0" + }, + "type": "module" +} \ No newline at end of file diff --git a/sites/hn.svelte.dev/src/app.css b/sites/hn.svelte.dev/src/app.css new file mode 100644 index 00000000..8e313480 --- /dev/null +++ b/sites/hn.svelte.dev/src/app.css @@ -0,0 +1,52 @@ +html { + --bg: white; + --fg: #333; + --fg-light: #666; +} + +html.dark { + --bg: #333; + --fg: #eee; + --fg-light: #aaa; +} + +body { + margin: 0; + font-family: Roboto, -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; + font-size: 14px; + line-height: 1.5; + background-color: var(--bg); + color: var(--fg); + transition: background-color 0.6s; +} + +@media (prefers-reduced-motion: reduce) { + body { + transition: none; + } +} + +h1, h2, h3, h4, h5, h6 { + margin: 0 0 0.5em 0; + font-weight: 400; + line-height: 1.2; +} + +h1 { + font-size: 2em; +} + +a { + color: inherit; +} + +code { + font-family: menlo, inconsolata, monospace; + font-size: calc(1em - 3px); +} + +@media (min-width: 400px) { + body { + font-size: 16px; + } +} \ No newline at end of file diff --git a/sites/hn.svelte.dev/src/app.html b/sites/hn.svelte.dev/src/app.html new file mode 100644 index 00000000..f4996dae --- /dev/null +++ b/sites/hn.svelte.dev/src/app.html @@ -0,0 +1,13 @@ + + + + + + + + %svelte.head% + + +
%svelte.body%
+ + diff --git a/sites/hn.svelte.dev/src/global.d.ts b/sites/hn.svelte.dev/src/global.d.ts new file mode 100644 index 00000000..63908c66 --- /dev/null +++ b/sites/hn.svelte.dev/src/global.d.ts @@ -0,0 +1 @@ +/// diff --git a/sites/hn.svelte.dev/src/lib/Nav.svelte b/sites/hn.svelte.dev/src/lib/Nav.svelte new file mode 100644 index 00000000..cf36b9e6 --- /dev/null +++ b/sites/hn.svelte.dev/src/lib/Nav.svelte @@ -0,0 +1,95 @@ + + + + + diff --git a/sites/hn.svelte.dev/src/lib/PreloadingIndicator.svelte b/sites/hn.svelte.dev/src/lib/PreloadingIndicator.svelte new file mode 100644 index 00000000..d79355b9 --- /dev/null +++ b/sites/hn.svelte.dev/src/lib/PreloadingIndicator.svelte @@ -0,0 +1,67 @@ + + +{#if visible} +
+
+
+{/if} + +{#if p >= 0.4} +
+{/if} + + diff --git a/sites/hn.svelte.dev/src/lib/ThemeToggler.svelte b/sites/hn.svelte.dev/src/lib/ThemeToggler.svelte new file mode 100644 index 00000000..3745198d --- /dev/null +++ b/sites/hn.svelte.dev/src/lib/ThemeToggler.svelte @@ -0,0 +1,87 @@ + + + + + diff --git a/sites/hn.svelte.dev/src/routes/[list]/[page].svelte b/sites/hn.svelte.dev/src/routes/[list]/[page].svelte new file mode 100644 index 00000000..44b661e0 --- /dev/null +++ b/sites/hn.svelte.dev/src/routes/[list]/[page].svelte @@ -0,0 +1,58 @@ + + + + + + Svelte Hacker News + + + +{#each items as item, i} + {#if item} + + + {/if} +{/each} + +{#if next} + More... +{/if} diff --git a/sites/hn.svelte.dev/src/routes/[list]/_ItemSummary.svelte b/sites/hn.svelte.dev/src/routes/[list]/_ItemSummary.svelte new file mode 100644 index 00000000..895a76a6 --- /dev/null +++ b/sites/hn.svelte.dev/src/routes/[list]/_ItemSummary.svelte @@ -0,0 +1,73 @@ + + + + + diff --git a/sites/hn.svelte.dev/src/routes/[list]/rss.js b/sites/hn.svelte.dev/src/routes/[list]/rss.js new file mode 100644 index 00000000..d7d91b39 --- /dev/null +++ b/sites/hn.svelte.dev/src/routes/[list]/rss.js @@ -0,0 +1,50 @@ +/** + * @param {string} list + * @param {Record[]} items + */ +const render = (list, items) => ` + + + Svelte HN (${list}) + https://hn.svelte.dev/${list}/1 + Links from the orange site + + https://hn.svelte.dev/favicon.png + Svelte HN (${list}) + https://hn.svelte.dev/${list}/1 + + ${items + .map( + (item) => ` + + ${item.title}${item.domain ? ` (${item.domain})` : ''} + https://hn.svelte.dev/item/${item.id} + link / ` : '' + }comments + ]]> + ${new Date(item.time * 1000).toUTCString()} + + ` + ) + .join('\n')} + +`; + +/** + * @type {import('@sveltejs/kit').RequestHandler} + */ +export async function get({ params }) { + const list = + params.list === 'top' ? 'news' : params.list === 'new' ? 'newest' : params.list; + const res = await fetch(`https://api.hnpwa.com/v0/${list}/1.json`); + const items = await res.json(); + const feed = render(list, items); + return { + body: feed, + headers: { + 'Cache-Control': `max-age=0, s-max-age=${600}`, // 10 minutes + 'Content-Type': 'application/rss+xml' + } + }; +} diff --git a/sites/hn.svelte.dev/src/routes/__error.svelte b/sites/hn.svelte.dev/src/routes/__error.svelte new file mode 100644 index 00000000..67e22517 --- /dev/null +++ b/sites/hn.svelte.dev/src/routes/__error.svelte @@ -0,0 +1,52 @@ + + + + + + {title} + + +

{title}

+ +
{message}
+ +{#if dev && error.frame} +
{error.frame}
+{/if} +{#if dev && error.stack} +
{error.stack}
+{/if} + + diff --git a/sites/hn.svelte.dev/src/routes/__layout.svelte b/sites/hn.svelte.dev/src/routes/__layout.svelte new file mode 100644 index 00000000..03047b24 --- /dev/null +++ b/sites/hn.svelte.dev/src/routes/__layout.svelte @@ -0,0 +1,31 @@ + + +