diff --git a/api/ssr.mjs b/api/ssr.mjs index 4a9d60d0..36ecb549 100644 --- a/api/ssr.mjs +++ b/api/ssr.mjs @@ -1,4 +1,4 @@ -import { renderPage } from 'vite-plugin-ssr/server' +import { renderPage } from 'vike/server' export default async function handler(req, res) { const { url, cookies } = req diff --git a/package-lock.json b/package-lock.json index fbdeb0c3..d66838f1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -126,11 +126,11 @@ "typescript": "5.2.2", "typograf": "7.1.0", "uniqolor": "1.1.0", + "vike": "0.4.144", "vite": "4.3.9", "vite-plugin-mkcert": "1.16.0", "vite-plugin-sass-dts": "1.3.11", "vite-plugin-solid": "2.7.0", - "vite-plugin-ssr": "0.4.123", "y-prosemirror": "1.2.1", "yjs": "13.6.0" } @@ -1454,9 +1454,9 @@ "dev": true }, "node_modules/@brillout/json-serializer": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/@brillout/json-serializer/-/json-serializer-0.5.6.tgz", - "integrity": "sha512-48u+Wthh0muDueyooi/Or59DDFCPitnuCN9OkMWoj7MQAbDn5pS/cVBB7ds6ENmtC1Qb0spI4PfKZxQSBEkubg==", + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/@brillout/json-serializer/-/json-serializer-0.5.8.tgz", + "integrity": "sha512-vEuXw30ok+mJfJutOxXKBb4lBJ0HymA7lev9PcYK6W/hzjhCTPk9Bdk85HrcNcKZWRQiwoWtw0F2Di4TRJ7ssQ==", "dev": true }, "node_modules/@brillout/picocolors": { @@ -1465,10 +1465,16 @@ "integrity": "sha512-Lt/W5JsA75hcDJ2cOAlE4TqSMl6c9K+rXGRo/cU2fApnmhbRcNdkR4UHQDAwtWfZyUKWaxdwSui+jp+74J1pZg==", "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": { - "version": "0.2.18", - "resolved": "https://registry.npmjs.org/@brillout/vite-plugin-import-build/-/vite-plugin-import-build-0.2.18.tgz", - "integrity": "sha512-sedZNrqIboHCeSnN7hwo34xRyP8egfMHcifixQ2YGNnQVb93884drTVE3b0vlSGz7LWumVDochKuHdWQljup9A==", + "version": "0.2.20", + "resolved": "https://registry.npmjs.org/@brillout/vite-plugin-import-build/-/vite-plugin-import-build-0.2.20.tgz", + "integrity": "sha512-/bdw1dg+H1nOYSy2PzYInQoZlIFP2uwyaF2GX64fyBqVAEWGopiMlnx294CbysjmP9Z+fJe48TkMzyogkyIDLw==", "dev": true, "dependencies": { "@brillout/import": "^0.2.3" @@ -8021,9 +8027,9 @@ } }, "node_modules/es-module-lexer": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.10.5.tgz", - "integrity": "sha512-+7IwY/kiGAacQfY+YBhKMvEmyAJnw5grTUgjG85Pe7vcUI/6b7pZjZG8nQ7+48YhzEAEqrEgD2dCz/JIK+AYvw==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.1.tgz", + "integrity": "sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==", "dev": true }, "node_modules/es-set-tostringtag": { @@ -18077,6 +18083,51 @@ "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": { "version": "4.3.9", "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.9.tgz", @@ -18180,39 +18231,6 @@ "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": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.4.tgz", @@ -19561,9 +19579,9 @@ "dev": true }, "@brillout/json-serializer": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/@brillout/json-serializer/-/json-serializer-0.5.6.tgz", - "integrity": "sha512-48u+Wthh0muDueyooi/Or59DDFCPitnuCN9OkMWoj7MQAbDn5pS/cVBB7ds6ENmtC1Qb0spI4PfKZxQSBEkubg==", + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/@brillout/json-serializer/-/json-serializer-0.5.8.tgz", + "integrity": "sha512-vEuXw30ok+mJfJutOxXKBb4lBJ0HymA7lev9PcYK6W/hzjhCTPk9Bdk85HrcNcKZWRQiwoWtw0F2Di4TRJ7ssQ==", "dev": true }, "@brillout/picocolors": { @@ -19572,10 +19590,16 @@ "integrity": "sha512-Lt/W5JsA75hcDJ2cOAlE4TqSMl6c9K+rXGRo/cU2fApnmhbRcNdkR4UHQDAwtWfZyUKWaxdwSui+jp+74J1pZg==", "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": { - "version": "0.2.18", - "resolved": "https://registry.npmjs.org/@brillout/vite-plugin-import-build/-/vite-plugin-import-build-0.2.18.tgz", - "integrity": "sha512-sedZNrqIboHCeSnN7hwo34xRyP8egfMHcifixQ2YGNnQVb93884drTVE3b0vlSGz7LWumVDochKuHdWQljup9A==", + "version": "0.2.20", + "resolved": "https://registry.npmjs.org/@brillout/vite-plugin-import-build/-/vite-plugin-import-build-0.2.20.tgz", + "integrity": "sha512-/bdw1dg+H1nOYSy2PzYInQoZlIFP2uwyaF2GX64fyBqVAEWGopiMlnx294CbysjmP9Z+fJe48TkMzyogkyIDLw==", "dev": true, "requires": { "@brillout/import": "^0.2.3" @@ -24267,9 +24291,9 @@ } }, "es-module-lexer": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.10.5.tgz", - "integrity": "sha512-+7IwY/kiGAacQfY+YBhKMvEmyAJnw5grTUgjG85Pe7vcUI/6b7pZjZG8nQ7+48YhzEAEqrEgD2dCz/JIK+AYvw==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.1.tgz", + "integrity": "sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==", "dev": true }, "es-set-tostringtag": { @@ -31660,6 +31684,38 @@ "integrity": "sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==", "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": { "version": "4.3.9", "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.9.tgz", @@ -31708,24 +31764,6 @@ "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": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.4.tgz", diff --git a/package.json b/package.json index 988290eb..b3eeeb07 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "version": "0.8.0", "private": true, "license": "MIT", + "type": "module", "scripts": { "build": "vite build", "check": "npm run lint && npm run typecheck", @@ -146,11 +147,11 @@ "typescript": "5.2.2", "typograf": "7.1.0", "uniqolor": "1.1.0", + "vike": "0.4.144", "vite": "4.3.9", "vite-plugin-mkcert": "1.16.0", "vite-plugin-sass-dts": "1.3.11", "vite-plugin-solid": "2.7.0", - "vite-plugin-ssr": "0.4.123", "y-prosemirror": "1.2.1", "yjs": "13.6.0" }, diff --git a/src/components/Feed/ArticleCard/ArticleCard.tsx b/src/components/Feed/ArticleCard/ArticleCard.tsx index 97f1b8ee..ff01fd06 100644 --- a/src/components/Feed/ArticleCard/ArticleCard.tsx +++ b/src/components/Feed/ArticleCard/ArticleCard.tsx @@ -158,7 +158,7 @@ export const ArticleCard = (props: ArticleCardProps) => { [styles.shoutCardTitlesContainerFeedMode]: props.settings?.isFeedMode })} > - +
{title} diff --git a/src/pages/article.page.server.ts b/src/pages/article.page.server.ts index fd439321..2889c1ee 100644 --- a/src/pages/article.page.server.ts +++ b/src/pages/article.page.server.ts @@ -1,14 +1,14 @@ import type { PageContext } from '../renderer/types' import type { PageProps } from './types' import { apiClient } from '../utils/apiClient' -import { RenderErrorPage } from 'vite-plugin-ssr/RenderErrorPage' +import { render } from 'vike/abort' export const onBeforeRender = async (pageContext: PageContext) => { const { slug } = pageContext.routeParams const article = await apiClient.getShoutBySlug(slug) if (!article) { - throw RenderErrorPage({ pageContext: {} }) + throw render(404, '/404') } const pageProps: PageProps = { article } diff --git a/src/pages/article.page.tsx b/src/pages/article.page.tsx index c5ed9aac..27164df8 100644 --- a/src/pages/article.page.tsx +++ b/src/pages/article.page.tsx @@ -28,6 +28,7 @@ export const ArticlePage = (props: PageProps) => { const loadShoutPromise = loadShout(slug()) setPageLoadManagerPromise(loadShoutPromise) await loadShoutPromise + // тут видимо тоже что-то нужно написать } }) diff --git a/src/renderer/_default.page.client.tsx b/src/renderer/_default.page.client.tsx index cbd78195..8ab73751 100644 --- a/src/renderer/_default.page.client.tsx +++ b/src/renderer/_default.page.client.tsx @@ -1,6 +1,6 @@ import { App } from '../components/App' 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 { MetaProvider } from '@solidjs/meta' import i18next, { use as useI18next } from 'i18next' diff --git a/src/renderer/_default.page.server.tsx b/src/renderer/_default.page.server.tsx index fa656cef..b185f863 100644 --- a/src/renderer/_default.page.server.tsx +++ b/src/renderer/_default.page.server.tsx @@ -1,5 +1,5 @@ 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 { initRouter } from '../stores/router' import type { PageContext } from './types' diff --git a/src/renderer/_error.page.ts b/src/renderer/_error.page.ts index f3733631..632ecd7e 100644 --- a/src/renderer/_error.page.ts +++ b/src/renderer/_error.page.ts @@ -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 // eslint-disable-next-line unicorn/no-empty-file diff --git a/src/renderer/types.ts b/src/renderer/types.ts index f7b03b9b..3038577c 100644 --- a/src/renderer/types.ts +++ b/src/renderer/types.ts @@ -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 { Component } from 'solid-js' diff --git a/src/utils/getServerRoute.ts b/src/utils/getServerRoute.ts index dc666b5c..4e10ccc8 100644 --- a/src/utils/getServerRoute.ts +++ b/src/utils/getServerRoute.ts @@ -1,4 +1,4 @@ // /:slug -> /@slug -// https://vite-plugin-ssr.com/routing +// https://vike.dev/routing // https://www.npmjs.com/package/@nanostores/router export const getServerRoute = (clientRoute: string) => clientRoute.replaceAll(':', '@') diff --git a/vite.config.ts b/vite.config.ts index 2c70ade4..b3f06529 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,6 +1,6 @@ import { defineConfig } from 'vite' 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 mkcert from 'vite-plugin-mkcert'