This commit is contained in:
Igor Lobanov 2023-11-04 14:09:15 +01:00
parent b03b59002a
commit 88a5be0ec1
12 changed files with 121 additions and 81 deletions

View File

@ -1,4 +1,4 @@
import { renderPage } from 'vite-plugin-ssr/server' import { renderPage } from 'vike/server'
export default async function handler(req, res) { export default async function handler(req, res) {
const { url, cookies } = req const { url, cookies } = req

178
package-lock.json generated
View File

@ -126,11 +126,11 @@
"typescript": "5.2.2", "typescript": "5.2.2",
"typograf": "7.1.0", "typograf": "7.1.0",
"uniqolor": "1.1.0", "uniqolor": "1.1.0",
"vike": "0.4.144",
"vite": "4.3.9", "vite": "4.3.9",
"vite-plugin-mkcert": "1.16.0", "vite-plugin-mkcert": "1.16.0",
"vite-plugin-sass-dts": "1.3.11", "vite-plugin-sass-dts": "1.3.11",
"vite-plugin-solid": "2.7.0", "vite-plugin-solid": "2.7.0",
"vite-plugin-ssr": "0.4.123",
"y-prosemirror": "1.2.1", "y-prosemirror": "1.2.1",
"yjs": "13.6.0" "yjs": "13.6.0"
} }
@ -1454,9 +1454,9 @@
"dev": true "dev": true
}, },
"node_modules/@brillout/json-serializer": { "node_modules/@brillout/json-serializer": {
"version": "0.5.6", "version": "0.5.8",
"resolved": "https://registry.npmjs.org/@brillout/json-serializer/-/json-serializer-0.5.6.tgz", "resolved": "https://registry.npmjs.org/@brillout/json-serializer/-/json-serializer-0.5.8.tgz",
"integrity": "sha512-48u+Wthh0muDueyooi/Or59DDFCPitnuCN9OkMWoj7MQAbDn5pS/cVBB7ds6ENmtC1Qb0spI4PfKZxQSBEkubg==", "integrity": "sha512-vEuXw30ok+mJfJutOxXKBb4lBJ0HymA7lev9PcYK6W/hzjhCTPk9Bdk85HrcNcKZWRQiwoWtw0F2Di4TRJ7ssQ==",
"dev": true "dev": true
}, },
"node_modules/@brillout/picocolors": { "node_modules/@brillout/picocolors": {
@ -1465,10 +1465,16 @@
"integrity": "sha512-Lt/W5JsA75hcDJ2cOAlE4TqSMl6c9K+rXGRo/cU2fApnmhbRcNdkR4UHQDAwtWfZyUKWaxdwSui+jp+74J1pZg==", "integrity": "sha512-Lt/W5JsA75hcDJ2cOAlE4TqSMl6c9K+rXGRo/cU2fApnmhbRcNdkR4UHQDAwtWfZyUKWaxdwSui+jp+74J1pZg==",
"dev": true "dev": true
}, },
"node_modules/@brillout/require-shim": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/@brillout/require-shim/-/require-shim-0.1.2.tgz",
"integrity": "sha512-3I4LRHnVZXoSAsEoni5mosq9l6eiJED58d9V954W4CIZ88AUfYBanWGBGbJG3NztaRTpFHEA6wB3Hn93BmmJdg==",
"dev": true
},
"node_modules/@brillout/vite-plugin-import-build": { "node_modules/@brillout/vite-plugin-import-build": {
"version": "0.2.18", "version": "0.2.20",
"resolved": "https://registry.npmjs.org/@brillout/vite-plugin-import-build/-/vite-plugin-import-build-0.2.18.tgz", "resolved": "https://registry.npmjs.org/@brillout/vite-plugin-import-build/-/vite-plugin-import-build-0.2.20.tgz",
"integrity": "sha512-sedZNrqIboHCeSnN7hwo34xRyP8egfMHcifixQ2YGNnQVb93884drTVE3b0vlSGz7LWumVDochKuHdWQljup9A==", "integrity": "sha512-/bdw1dg+H1nOYSy2PzYInQoZlIFP2uwyaF2GX64fyBqVAEWGopiMlnx294CbysjmP9Z+fJe48TkMzyogkyIDLw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@brillout/import": "^0.2.3" "@brillout/import": "^0.2.3"
@ -8021,9 +8027,9 @@
} }
}, },
"node_modules/es-module-lexer": { "node_modules/es-module-lexer": {
"version": "0.10.5", "version": "1.3.1",
"resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.10.5.tgz", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.1.tgz",
"integrity": "sha512-+7IwY/kiGAacQfY+YBhKMvEmyAJnw5grTUgjG85Pe7vcUI/6b7pZjZG8nQ7+48YhzEAEqrEgD2dCz/JIK+AYvw==", "integrity": "sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==",
"dev": true "dev": true
}, },
"node_modules/es-set-tostringtag": { "node_modules/es-set-tostringtag": {
@ -18077,6 +18083,51 @@
"node": ">=12" "node": ">=12"
} }
}, },
"node_modules/vike": {
"version": "0.4.144",
"resolved": "https://registry.npmjs.org/vike/-/vike-0.4.144.tgz",
"integrity": "sha512-smvBXv33IhP5FHOvoBYZuir/Zip93AoBGqiIdmWHva1RYeQDFlXQMbs/YZ5HqFc7OrL8cL3K7iUsEC6t/pF+/Q==",
"dev": true,
"dependencies": {
"@brillout/import": "0.2.3",
"@brillout/json-serializer": "^0.5.6",
"@brillout/picocolors": "^1.0.9",
"@brillout/require-shim": "^0.1.2",
"@brillout/vite-plugin-import-build": "^0.2.20",
"acorn": "^8.8.2",
"cac": "^6.7.14",
"es-module-lexer": "^1.3.0",
"esbuild": "^0.17.18",
"fast-glob": "^3.2.12",
"sirv": "^2.0.2",
"source-map-support": "^0.5.21"
},
"bin": {
"vike": "node/cli/bin-entry.js"
},
"engines": {
"node": ">=16.0.0"
},
"peerDependencies": {
"react-streaming": ">=0.3.5",
"vite": ">=3.1.0"
},
"peerDependenciesMeta": {
"react-streaming": {
"optional": true
}
}
},
"node_modules/vike/node_modules/source-map-support": {
"version": "0.5.21",
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
"integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
"dev": true,
"dependencies": {
"buffer-from": "^1.0.0",
"source-map": "^0.6.0"
}
},
"node_modules/vite": { "node_modules/vite": {
"version": "4.3.9", "version": "4.3.9",
"resolved": "https://registry.npmjs.org/vite/-/vite-4.3.9.tgz", "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.9.tgz",
@ -18180,39 +18231,6 @@
"vite": "^3.0.0 || ^4.0.0" "vite": "^3.0.0 || ^4.0.0"
} }
}, },
"node_modules/vite-plugin-ssr": {
"version": "0.4.123",
"resolved": "https://registry.npmjs.org/vite-plugin-ssr/-/vite-plugin-ssr-0.4.123.tgz",
"integrity": "sha512-lIHmvsS7xINxk8AiMn9O9q6dTeLDay0q3iRCMZd4MlzhyMcEUUuEYyx/vWevXIO7+CTt5cOVcTsojeAU+eUMNw==",
"dev": true,
"dependencies": {
"@brillout/import": "0.2.3",
"@brillout/json-serializer": "^0.5.3",
"@brillout/picocolors": "^1.0.4",
"@brillout/vite-plugin-import-build": "^0.2.16",
"acorn": "^8.0.0",
"cac": "^6.0.0",
"es-module-lexer": "^0.10.0",
"esbuild": "^0.17.0",
"fast-glob": "^3.0.0",
"sirv": "^2.0.0"
},
"bin": {
"vite-plugin-ssr": "node/cli/bin-entry.js"
},
"engines": {
"node": ">=12.19.0"
},
"peerDependencies": {
"react-streaming": ">=0.3.5",
"vite": ">=3.1.0"
},
"peerDependenciesMeta": {
"react-streaming": {
"optional": true
}
}
},
"node_modules/vitefu": { "node_modules/vitefu": {
"version": "0.2.4", "version": "0.2.4",
"resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.4.tgz", "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.4.tgz",
@ -19561,9 +19579,9 @@
"dev": true "dev": true
}, },
"@brillout/json-serializer": { "@brillout/json-serializer": {
"version": "0.5.6", "version": "0.5.8",
"resolved": "https://registry.npmjs.org/@brillout/json-serializer/-/json-serializer-0.5.6.tgz", "resolved": "https://registry.npmjs.org/@brillout/json-serializer/-/json-serializer-0.5.8.tgz",
"integrity": "sha512-48u+Wthh0muDueyooi/Or59DDFCPitnuCN9OkMWoj7MQAbDn5pS/cVBB7ds6ENmtC1Qb0spI4PfKZxQSBEkubg==", "integrity": "sha512-vEuXw30ok+mJfJutOxXKBb4lBJ0HymA7lev9PcYK6W/hzjhCTPk9Bdk85HrcNcKZWRQiwoWtw0F2Di4TRJ7ssQ==",
"dev": true "dev": true
}, },
"@brillout/picocolors": { "@brillout/picocolors": {
@ -19572,10 +19590,16 @@
"integrity": "sha512-Lt/W5JsA75hcDJ2cOAlE4TqSMl6c9K+rXGRo/cU2fApnmhbRcNdkR4UHQDAwtWfZyUKWaxdwSui+jp+74J1pZg==", "integrity": "sha512-Lt/W5JsA75hcDJ2cOAlE4TqSMl6c9K+rXGRo/cU2fApnmhbRcNdkR4UHQDAwtWfZyUKWaxdwSui+jp+74J1pZg==",
"dev": true "dev": true
}, },
"@brillout/require-shim": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/@brillout/require-shim/-/require-shim-0.1.2.tgz",
"integrity": "sha512-3I4LRHnVZXoSAsEoni5mosq9l6eiJED58d9V954W4CIZ88AUfYBanWGBGbJG3NztaRTpFHEA6wB3Hn93BmmJdg==",
"dev": true
},
"@brillout/vite-plugin-import-build": { "@brillout/vite-plugin-import-build": {
"version": "0.2.18", "version": "0.2.20",
"resolved": "https://registry.npmjs.org/@brillout/vite-plugin-import-build/-/vite-plugin-import-build-0.2.18.tgz", "resolved": "https://registry.npmjs.org/@brillout/vite-plugin-import-build/-/vite-plugin-import-build-0.2.20.tgz",
"integrity": "sha512-sedZNrqIboHCeSnN7hwo34xRyP8egfMHcifixQ2YGNnQVb93884drTVE3b0vlSGz7LWumVDochKuHdWQljup9A==", "integrity": "sha512-/bdw1dg+H1nOYSy2PzYInQoZlIFP2uwyaF2GX64fyBqVAEWGopiMlnx294CbysjmP9Z+fJe48TkMzyogkyIDLw==",
"dev": true, "dev": true,
"requires": { "requires": {
"@brillout/import": "^0.2.3" "@brillout/import": "^0.2.3"
@ -24267,9 +24291,9 @@
} }
}, },
"es-module-lexer": { "es-module-lexer": {
"version": "0.10.5", "version": "1.3.1",
"resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.10.5.tgz", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.1.tgz",
"integrity": "sha512-+7IwY/kiGAacQfY+YBhKMvEmyAJnw5grTUgjG85Pe7vcUI/6b7pZjZG8nQ7+48YhzEAEqrEgD2dCz/JIK+AYvw==", "integrity": "sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==",
"dev": true "dev": true
}, },
"es-set-tostringtag": { "es-set-tostringtag": {
@ -31660,6 +31684,38 @@
"integrity": "sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==", "integrity": "sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==",
"dev": true "dev": true
}, },
"vike": {
"version": "0.4.144",
"resolved": "https://registry.npmjs.org/vike/-/vike-0.4.144.tgz",
"integrity": "sha512-smvBXv33IhP5FHOvoBYZuir/Zip93AoBGqiIdmWHva1RYeQDFlXQMbs/YZ5HqFc7OrL8cL3K7iUsEC6t/pF+/Q==",
"dev": true,
"requires": {
"@brillout/import": "0.2.3",
"@brillout/json-serializer": "^0.5.6",
"@brillout/picocolors": "^1.0.9",
"@brillout/require-shim": "^0.1.2",
"@brillout/vite-plugin-import-build": "^0.2.20",
"acorn": "^8.8.2",
"cac": "^6.7.14",
"es-module-lexer": "^1.3.0",
"esbuild": "^0.17.18",
"fast-glob": "^3.2.12",
"sirv": "^2.0.2",
"source-map-support": "^0.5.21"
},
"dependencies": {
"source-map-support": {
"version": "0.5.21",
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
"integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
"dev": true,
"requires": {
"buffer-from": "^1.0.0",
"source-map": "^0.6.0"
}
}
}
},
"vite": { "vite": {
"version": "4.3.9", "version": "4.3.9",
"resolved": "https://registry.npmjs.org/vite/-/vite-4.3.9.tgz", "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.9.tgz",
@ -31708,24 +31764,6 @@
"vitefu": "^0.2.3" "vitefu": "^0.2.3"
} }
}, },
"vite-plugin-ssr": {
"version": "0.4.123",
"resolved": "https://registry.npmjs.org/vite-plugin-ssr/-/vite-plugin-ssr-0.4.123.tgz",
"integrity": "sha512-lIHmvsS7xINxk8AiMn9O9q6dTeLDay0q3iRCMZd4MlzhyMcEUUuEYyx/vWevXIO7+CTt5cOVcTsojeAU+eUMNw==",
"dev": true,
"requires": {
"@brillout/import": "0.2.3",
"@brillout/json-serializer": "^0.5.3",
"@brillout/picocolors": "^1.0.4",
"@brillout/vite-plugin-import-build": "^0.2.16",
"acorn": "^8.0.0",
"cac": "^6.0.0",
"es-module-lexer": "^0.10.0",
"esbuild": "^0.17.0",
"fast-glob": "^3.0.0",
"sirv": "^2.0.0"
}
},
"vitefu": { "vitefu": {
"version": "0.2.4", "version": "0.2.4",
"resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.4.tgz", "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.4.tgz",

View File

@ -3,6 +3,7 @@
"version": "0.8.0", "version": "0.8.0",
"private": true, "private": true,
"license": "MIT", "license": "MIT",
"type": "module",
"scripts": { "scripts": {
"build": "vite build", "build": "vite build",
"check": "npm run lint && npm run typecheck", "check": "npm run lint && npm run typecheck",
@ -146,11 +147,11 @@
"typescript": "5.2.2", "typescript": "5.2.2",
"typograf": "7.1.0", "typograf": "7.1.0",
"uniqolor": "1.1.0", "uniqolor": "1.1.0",
"vike": "0.4.144",
"vite": "4.3.9", "vite": "4.3.9",
"vite-plugin-mkcert": "1.16.0", "vite-plugin-mkcert": "1.16.0",
"vite-plugin-sass-dts": "1.3.11", "vite-plugin-sass-dts": "1.3.11",
"vite-plugin-solid": "2.7.0", "vite-plugin-solid": "2.7.0",
"vite-plugin-ssr": "0.4.123",
"y-prosemirror": "1.2.1", "y-prosemirror": "1.2.1",
"yjs": "13.6.0" "yjs": "13.6.0"
}, },

View File

@ -158,7 +158,7 @@ export const ArticleCard = (props: ArticleCardProps) => {
[styles.shoutCardTitlesContainerFeedMode]: props.settings?.isFeedMode [styles.shoutCardTitlesContainerFeedMode]: props.settings?.isFeedMode
})} })}
> >
<a href={`/${props.article.slug || ''}`}> <a href={`/${props.article.slug || ''}1111`}>
<div class={styles.shoutCardTitle}> <div class={styles.shoutCardTitle}>
<span class={styles.shoutCardLinkWrapper}> <span class={styles.shoutCardLinkWrapper}>
<span class={styles.shoutCardLinkContainer}>{title}</span> <span class={styles.shoutCardLinkContainer}>{title}</span>

View File

@ -1,14 +1,14 @@
import type { PageContext } from '../renderer/types' import type { PageContext } from '../renderer/types'
import type { PageProps } from './types' import type { PageProps } from './types'
import { apiClient } from '../utils/apiClient' import { apiClient } from '../utils/apiClient'
import { RenderErrorPage } from 'vite-plugin-ssr/RenderErrorPage' import { render } from 'vike/abort'
export const onBeforeRender = async (pageContext: PageContext) => { export const onBeforeRender = async (pageContext: PageContext) => {
const { slug } = pageContext.routeParams const { slug } = pageContext.routeParams
const article = await apiClient.getShoutBySlug(slug) const article = await apiClient.getShoutBySlug(slug)
if (!article) { if (!article) {
throw RenderErrorPage({ pageContext: {} }) throw render(404, '/404')
} }
const pageProps: PageProps = { article } const pageProps: PageProps = { article }

View File

@ -28,6 +28,7 @@ export const ArticlePage = (props: PageProps) => {
const loadShoutPromise = loadShout(slug()) const loadShoutPromise = loadShout(slug())
setPageLoadManagerPromise(loadShoutPromise) setPageLoadManagerPromise(loadShoutPromise)
await loadShoutPromise await loadShoutPromise
// тут видимо тоже что-то нужно написать
} }
}) })

View File

@ -1,6 +1,6 @@
import { App } from '../components/App' import { App } from '../components/App'
import { hydrate } from 'solid-js/web' import { hydrate } from 'solid-js/web'
import type { PageContextBuiltInClientWithClientRouting } from 'vite-plugin-ssr/types' import type { PageContextBuiltInClientWithClientRouting } from 'vike/types'
import type { PageContext } from './types' import type { PageContext } from './types'
import { MetaProvider } from '@solidjs/meta' import { MetaProvider } from '@solidjs/meta'
import i18next, { use as useI18next } from 'i18next' import i18next, { use as useI18next } from 'i18next'

View File

@ -1,5 +1,5 @@
import { generateHydrationScript, renderToString } from 'solid-js/web' import { generateHydrationScript, renderToString } from 'solid-js/web'
import { escapeInject, dangerouslySkipEscape } from 'vite-plugin-ssr/server' import { escapeInject, dangerouslySkipEscape } from 'vike/server'
import { App } from '../components/App' import { App } from '../components/App'
import { initRouter } from '../stores/router' import { initRouter } from '../stores/router'
import type { PageContext } from './types' import type { PageContext } from './types'

View File

@ -1,4 +1,4 @@
// this file is required by vite-plugin-ssr to show something after an error occurred // this file is required by vike to show something after an error occurred
// it's empty because error handling logic lives in _default.page.server.tsx and _default.page.client.tsx // it's empty because error handling logic lives in _default.page.server.tsx and _default.page.client.tsx
// eslint-disable-next-line unicorn/no-empty-file // eslint-disable-next-line unicorn/no-empty-file

View File

@ -1,4 +1,4 @@
import type { PageContextBuiltIn } from 'vite-plugin-ssr/types' import type { PageContextBuiltIn } from 'vike/types'
import type { PageProps } from '../pages/types' import type { PageProps } from '../pages/types'
import type { Component } from 'solid-js' import type { Component } from 'solid-js'

View File

@ -1,4 +1,4 @@
// /:slug -> /@slug // /:slug -> /@slug
// https://vite-plugin-ssr.com/routing // https://vike.dev/routing
// https://www.npmjs.com/package/@nanostores/router // https://www.npmjs.com/package/@nanostores/router
export const getServerRoute = (clientRoute: string) => clientRoute.replaceAll(':', '@') export const getServerRoute = (clientRoute: string) => clientRoute.replaceAll(':', '@')

View File

@ -1,6 +1,6 @@
import { defineConfig } from 'vite' import { defineConfig } from 'vite'
import solidPlugin from 'vite-plugin-solid' import solidPlugin from 'vite-plugin-solid'
import ssrPlugin from 'vite-plugin-ssr/plugin' import ssrPlugin from 'vike/plugin'
import sassDts from 'vite-plugin-sass-dts' import sassDts from 'vite-plugin-sass-dts'
import mkcert from 'vite-plugin-mkcert' import mkcert from 'vite-plugin-mkcert'