├── .github ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── bug.yml │ ├── config.yml │ ├── feature.yml │ └── polish.yaml └── workflows │ ├── ci.yml │ ├── ci │ ├── .gitignore │ ├── getTestJobs.mjs │ ├── getTestJobs.spec.ts │ ├── package.json │ ├── tsconfig.json │ └── utils.mjs │ ├── discord.yml │ ├── docs.yml │ └── formatting.yml ├── .gitignore ├── .ignore ├── .npmrc ├── .prettierrc ├── CHANGELOG.md ├── CONTRIBUTING.md ├── FEATURES.md ├── LICENSE.md ├── README.md ├── biome.json ├── boilerplates ├── .gitignore ├── .npmignore ├── .testRun.ts ├── README.md ├── boilerplate-react-ts │ ├── .test-dev.test.ts │ ├── .test-prod.test.ts │ ├── .testCiJob.json │ ├── _gitignore │ ├── package.json │ ├── pages │ │ ├── _error │ │ │ └── +Page.tsx │ │ ├── about │ │ │ ├── +Page.tsx │ │ │ └── code.css │ │ ├── index │ │ │ ├── +Page.tsx │ │ │ └── Counter.tsx │ │ └── star-wars │ │ │ ├── @id │ │ │ ├── +Page.tsx │ │ │ └── +data.ts │ │ │ ├── index │ │ │ ├── +Page.tsx │ │ │ └── +data.ts │ │ │ └── types.ts │ ├── renderer │ │ ├── +config.ts │ │ ├── +onPageTransitionEnd.ts │ │ ├── +onPageTransitionStart.ts │ │ ├── +onRenderClient.tsx │ │ ├── +onRenderHtml.tsx │ │ ├── Layout.css │ │ ├── Layout.tsx │ │ ├── Link.tsx │ │ ├── css │ │ │ ├── code.css │ │ │ ├── index.css │ │ │ ├── links.css │ │ │ ├── page-transition-loading-animation.css │ │ │ ├── page-transition-loading-animation │ │ │ │ └── loading.svg │ │ │ └── reset.css │ │ ├── getPageTitle.ts │ │ ├── logo.svg │ │ ├── types.ts │ │ ├── useData.ts │ │ └── usePageContext.tsx │ ├── server │ │ ├── index.ts │ │ ├── root.ts │ │ └── tsconfig.json │ ├── tsconfig.json │ └── vite.config.ts ├── boilerplate-react │ ├── .test-dev.test.ts │ ├── .test-prod.test.ts │ ├── .testCiJob.json │ ├── _gitignore │ ├── package.json │ ├── pages │ │ ├── _error │ │ │ └── +Page.jsx │ │ ├── about │ │ │ ├── +Page.jsx │ │ │ └── code.css │ │ ├── index │ │ │ ├── +Page.jsx │ │ │ └── Counter.jsx │ │ └── star-wars │ │ │ ├── @id │ │ │ ├── +Page.jsx │ │ │ └── +data.js │ │ │ └── index │ │ │ ├── +Page.jsx │ │ │ └── +data.js │ ├── renderer │ │ ├── +config.js │ │ ├── +onPageTransitionEnd.js │ │ ├── +onPageTransitionStart.js │ │ ├── +onRenderClient.jsx │ │ ├── +onRenderHtml.jsx │ │ ├── Layout.css │ │ ├── Layout.jsx │ │ ├── Link.jsx │ │ ├── PropTypeValues.js │ │ ├── css │ │ │ ├── code.css │ │ │ ├── index.css │ │ │ ├── links.css │ │ │ ├── page-transition-loading-animation.css │ │ │ ├── page-transition-loading-animation │ │ │ │ └── loading.svg │ │ │ └── reset.css │ │ ├── getPageTitle.js │ │ ├── logo.svg │ │ ├── useData.js │ │ └── usePageContext.jsx │ ├── server │ │ ├── index.js │ │ └── root.js │ └── vite.config.js ├── boilerplate-vue-ts │ ├── .test-dev.test.ts │ ├── .test-prod.test.ts │ ├── .testCiJob.json │ ├── _gitignore │ ├── package.json │ ├── pages │ │ ├── _error │ │ │ └── +Page.vue │ │ ├── about │ │ │ └── +Page.vue │ │ ├── index │ │ │ ├── +Page.vue │ │ │ └── Counter.vue │ │ └── star-wars │ │ │ ├── @id │ │ │ ├── +Page.vue │ │ │ └── +data.ts │ │ │ ├── index │ │ │ ├── +Page.vue │ │ │ └── +data.ts │ │ │ └── types.ts │ ├── renderer │ │ ├── +config.ts │ │ ├── +onPageTransitionEnd.ts │ │ ├── +onPageTransitionStart.ts │ │ ├── +onRenderClient.ts │ │ ├── +onRenderHtml.ts │ │ ├── Layout.vue │ │ ├── Link.vue │ │ ├── createVueApp.ts │ │ ├── css │ │ │ ├── code.css │ │ │ ├── index.css │ │ │ ├── links.css │ │ │ ├── page-transition-loading-animation.css │ │ │ ├── page-transition-loading-animation │ │ │ │ └── loading.svg │ │ │ └── reset.css │ │ ├── getPageTitle.ts │ │ ├── logo.svg │ │ ├── types.ts │ │ ├── useData.ts │ │ ├── usePageContext.ts │ │ └── utils.ts │ ├── server │ │ ├── index.ts │ │ ├── root.ts │ │ └── tsconfig.json │ ├── tsconfig.json │ ├── vite.config.ts │ └── vue.d.ts ├── boilerplate-vue │ ├── .test-dev.test.ts │ ├── .test-prod.test.ts │ ├── .testCiJob.json │ ├── _gitignore │ ├── package.json │ ├── pages │ │ ├── _error │ │ │ └── +Page.vue │ │ ├── about │ │ │ └── +Page.vue │ │ ├── index │ │ │ ├── +Page.vue │ │ │ └── Counter.vue │ │ └── star-wars │ │ │ ├── @id │ │ │ ├── +Page.vue │ │ │ └── +data.js │ │ │ └── index │ │ │ ├── +Page.vue │ │ │ └── +data.js │ ├── renderer │ │ ├── +config.js │ │ ├── +onPageTransitionEnd.js │ │ ├── +onPageTransitionStart.js │ │ ├── +onRenderClient.js │ │ ├── +onRenderHtml.js │ │ ├── Layout.vue │ │ ├── Link.vue │ │ ├── createVueApp.js │ │ ├── css │ │ │ ├── code.css │ │ │ ├── index.css │ │ │ ├── links.css │ │ │ ├── page-transition-loading-animation.css │ │ │ ├── page-transition-loading-animation │ │ │ │ └── loading.svg │ │ │ └── reset.css │ │ ├── getPageTitle.js │ │ ├── logo.svg │ │ ├── useData.js │ │ └── usePageContext.js │ ├── server │ │ ├── index.js │ │ └── root.js │ └── vite.config.js ├── index.js └── package.json ├── docs ├── +docpress.ts ├── .gitignore ├── .test-dev.test.ts ├── .test-preview.test.ts ├── .testCiJob.json ├── .testRun.ts ├── CONTRIBUTING.md ├── assets │ └── logo │ │ ├── vike-dark.svg │ │ ├── vike-favicon.svg │ │ └── vike.svg ├── components │ ├── Advanced.mdx │ ├── CommunityNote.tsx │ ├── CustomIntegrationWarning.tsx │ ├── DefaultRouting.mdx │ ├── Example.tsx │ ├── Figure.tsx │ ├── GlobalNote.mdx │ ├── HookTypeScriptHints.tsx │ ├── IntegrationHelp.tsx │ ├── JustAMiddleware.mdx │ ├── JustAMiddlewareLink.tsx │ ├── OnlyHtmlNote.mdx │ ├── ProvidedBy.css │ ├── ProvidedBy.tsx │ ├── QuoteTeam.css │ ├── QuoteTeam.tsx │ ├── RecommendationRouterLibraries.tsx │ ├── UiFrameworkExtension.tsx │ ├── UseScaffolder.tsx │ ├── UseVikeExtensionUiFramework.tsx │ ├── ViteLazyTranspilingContradiction.tsx │ ├── createPropComponent.tsx │ ├── index.ts │ ├── static-host.tsx │ └── tabs.css ├── headings.ts ├── headingsDetached.ts ├── package.json ├── pages │ ├── +TopNavigation.tsx │ ├── +config.ts │ ├── AuthJS-old-1 │ │ ├── +Page.mdx │ │ └── +route.ts │ ├── AuthJS-old-2 │ │ ├── +Page.mdx │ │ └── +route.ts │ ├── AuthJS │ │ ├── +Page.mdx │ │ └── +route.ts │ ├── CJS │ │ └── +Page.mdx │ ├── ClientOnly-legacy │ │ ├── +Page.mdx │ │ ├── +route.ts │ │ ├── ClientOnlyCommon.tsx │ │ ├── ReactUsage.mdx │ │ ├── SolidUsage.mdx │ │ └── VueUsage.mdx │ ├── Head-setting │ │ └── +Page.mdx │ ├── Head │ │ └── +Page.mdx │ ├── Layout │ │ └── +Page.mdx │ ├── Loading │ │ ├── +Page.mdx │ │ ├── LoadingComponent.css │ │ └── LoadingComponent.tsx │ ├── MDXEditor │ │ └── +Page.mdx │ ├── NODE_ENV │ │ └── +Page.mdx │ ├── PM2 │ │ └── +Page.mdx │ ├── Page-client │ │ └── +Page.mdx │ ├── Page-server │ │ └── +Page.mdx │ ├── Page │ │ └── +Page.mdx │ ├── RPC │ │ └── +Page.mdx │ ├── RenderErrorPage │ │ └── +Page.mdx │ ├── SPA-vs-SSR-vs-HTML │ │ └── +Page.mdx │ ├── SPA-vs-SSR │ │ └── +Page.mdx │ ├── SR-vs-CR │ │ └── +Page.mdx │ ├── SSR_ │ │ ├── +Page.mdx │ │ └── +route.ts │ ├── Wrapper │ │ └── +Page.mdx │ ├── abort │ │ └── +Page.mdx │ ├── active-links │ │ └── +Page.mdx │ ├── add-ssr-to-vite-app │ │ └── +Page.mdx │ ├── add │ │ └── +Page.mdx │ ├── angular │ │ └── +Page.mdx │ ├── antd │ │ └── +Page.mdx │ ├── api-routes │ │ └── +Page.mdx │ ├── api │ │ └── +Page.mdx │ ├── apollo-graphql │ │ └── +Page.mdx │ ├── auth │ │ └── +Page.mdx │ ├── aws-lambda │ │ └── +Page.mdx │ ├── aws │ │ └── +Page.mdx │ ├── banner │ │ ├── +Page.tsx │ │ ├── +client.ts │ │ ├── +config.ts │ │ ├── +onRenderHtml.tsx │ │ ├── Banner.css │ │ ├── Banner.tsx │ │ └── cover │ │ │ └── +Page.tsx │ ├── base-url │ │ └── +Page.mdx │ ├── blog │ │ ├── globalContext │ │ │ └── +Page.mdx │ │ ├── vike-server │ │ │ └── +Page.mdx │ │ └── vite-6 │ │ │ └── +Page.mdx │ ├── bodyAttributes │ │ └── +Page.mdx │ ├── bodyHtmlBegin │ │ └── +Page.mdx │ ├── bodyHtmlEnd │ │ └── +Page.mdx │ ├── bootstrap │ │ └── +Page.mdx │ ├── broken-npm-package │ │ └── +Page.mdx │ ├── build-your-own-framework │ │ └── +Page.mdx │ ├── buy │ │ └── +Page.mdx │ ├── chakra │ │ └── +Page.mdx │ ├── cli │ │ └── +Page.mdx │ ├── client-only-components │ │ └── +Page.mdx │ ├── client-routing │ │ └── +Page.mdx │ ├── client-runtime-duplicated │ │ └── +Page.mdx │ ├── client-runtimes-conflict │ │ └── +Page.mdx │ ├── client │ │ └── +Page.mdx │ ├── clientHooks │ │ └── +Page.mdx │ ├── clientOnly │ │ └── +Page.mdx │ ├── clientRouting │ │ └── +Page.mdx │ ├── cloudflare-pages │ │ └── +Page.mdx │ ├── cloudflare-workers │ │ └── +Page.mdx │ ├── cloudflare │ │ ├── +Page.mdx │ │ └── Examples.mdx │ ├── common-issues │ │ └── +Page.mdx │ ├── common-problems │ │ └── +Page.mdx │ ├── compiled │ │ └── +Page.mdx │ ├── config-code-splitting │ │ └── +Page.mdx │ ├── config │ │ └── +Page.mdx │ ├── consulting │ │ └── +Page.mdx │ ├── content-vs-interactive │ │ └── +Page.mdx │ ├── createDevMiddleware │ │ └── +Page.mdx │ ├── createPageRenderer │ │ └── +Page.mdx │ ├── css-in-js │ │ └── +Page.mdx │ ├── css-tools │ │ └── +Page.mdx │ ├── daisyui │ │ └── +Page.mdx │ ├── data-fetching │ │ └── +Page.mdx │ ├── data-tools │ │ └── +Page.mdx │ ├── data │ │ └── +Page.mdx │ ├── debug │ │ └── +Page.mdx │ ├── deno │ │ └── +Page.mdx │ ├── deploy-sync │ │ └── +Page.mdx │ ├── deploy │ │ └── +Page.mdx │ ├── description │ │ └── +Page.mdx │ ├── disableAutoFullBuild │ │ └── +Page.mdx │ ├── doNotPrerender │ │ └── +Page.mdx │ ├── docker │ │ └── +Page.mdx │ ├── dot-env-files │ │ ├── +Page.mdx │ │ └── +route.ts │ ├── dot-page-dot-client-dot-js │ │ ├── +Page.mdx │ │ └── +route.ts │ ├── dot-page-dot-js │ │ ├── +Page.mdx │ │ └── +route.ts │ ├── dot-page-dot-route-dot-js │ │ ├── +Page.mdx │ │ └── +route.ts │ ├── dot-page-dot-server-dot-js │ │ ├── +Page.mdx │ │ └── +route.ts │ ├── dynamic-import │ │ └── +Page.mdx │ ├── effector │ │ └── +Page.mdx │ ├── eject │ │ └── +Page.mdx │ ├── env │ │ └── +Page.mdx │ ├── error-page │ │ └── +Page.mdx │ ├── error-tracking │ │ └── +Page.mdx │ ├── errors │ │ └── +Page.mdx │ ├── escapeInject │ │ └── +Page.mdx │ ├── exports │ │ └── +Page.mdx │ ├── express │ │ └── +Page.mdx │ ├── extends │ │ └── +Page.mdx │ ├── extension-vs-custom │ │ └── +Page.mdx │ ├── extensions │ │ └── +Page.mdx │ ├── faq │ │ └── +Page.mdx │ ├── fastify │ │ └── +Page.mdx │ ├── favicon │ │ └── +Page.mdx │ ├── file-env │ │ └── +Page.mdx │ ├── file-structure │ │ └── +Page.mdx │ ├── filesystem-routing │ │ └── +Page.mdx │ ├── filesystemRoutingRoot │ │ └── +Page.mdx │ ├── firebase │ │ └── +Page.mdx │ ├── free │ │ └── +Page.mdx │ ├── getGlobalContext │ │ └── +Page.mdx │ ├── getPageContext │ │ └── +Page.mdx │ ├── getPageContextClient │ │ └── +Page.mdx │ ├── getVikeConfig │ │ └── +Page.mdx │ ├── github-pages │ │ └── +Page.mdx │ ├── globalContext │ │ └── +Page.mdx │ ├── glossary │ │ └── +Page.mdx │ ├── grommet │ │ └── +Page.mdx │ ├── grpc │ │ └── +Page.mdx │ ├── guard │ │ └── +Page.mdx │ ├── h3 │ │ └── +Page.mdx │ ├── hapi │ │ └── +Page.mdx │ ├── hattip │ │ └── +Page.mdx │ ├── head-manual │ │ └── +Page.mdx │ ├── head-tags │ │ ├── +Page.mdx │ │ ├── TableStyle.css │ │ └── TableStyle.tsx │ ├── head_ │ │ ├── +Page.mdx │ │ └── +route.ts │ ├── header-file │ │ ├── +Page.mdx │ │ └── import-from-same-file │ │ │ └── +Page.mdx │ ├── headers │ │ └── +Page.mdx │ ├── hints │ │ └── +Page.mdx │ ├── hono │ │ └── +Page.mdx │ ├── hooks │ │ ├── +Page.mdx │ │ └── TextEnv.tsx │ ├── hooksTimeout │ │ └── +Page.mdx │ ├── host │ │ └── +Page.mdx │ ├── html-head │ │ └── +Page.mdx │ ├── html-streaming │ │ └── +Page.mdx │ ├── htmlAttributes │ │ └── +Page.mdx │ ├── https │ │ └── +Page.mdx │ ├── hydration-mismatch │ │ └── +Page.mdx │ ├── hydration │ │ └── +Page.mdx │ ├── hydrationCanBeAborted │ │ └── +Page.mdx │ ├── i18n │ │ └── +Page.mdx │ ├── image │ │ └── +Page.mdx │ ├── img │ │ └── +Page.mdx │ ├── importBuild-dot-cjs │ │ ├── +Page.mdx │ │ └── +route.ts │ ├── importBuild-dot-js │ │ ├── +Page.mdx │ │ └── +route.ts │ ├── includeAssetsImportedByServer │ │ └── +Page.mdx │ ├── index │ │ ├── +Page.tsx │ │ ├── Page.css │ │ ├── components │ │ │ ├── Grid.tsx │ │ │ ├── Icon.tsx │ │ │ ├── IllustrationNote.tsx │ │ │ ├── ParagraphTextCollection.tsx │ │ │ ├── SectionTextCollection.tsx │ │ │ ├── TextBox.tsx │ │ │ └── button │ │ │ │ ├── Button.css │ │ │ │ └── Button.tsx │ │ ├── global.d.ts │ │ ├── links.ts │ │ ├── primaryColor.tsx │ │ └── sections │ │ │ ├── end │ │ │ ├── End.css │ │ │ └── End.tsx │ │ │ ├── features │ │ │ ├── Features.css │ │ │ ├── Features.tsx │ │ │ └── chip │ │ │ │ ├── Chip.css │ │ │ │ ├── Chip.tsx │ │ │ │ ├── coreData.ts │ │ │ │ ├── ioData.ts │ │ │ │ └── vite.svg │ │ │ ├── flexible │ │ │ ├── Flexible.css │ │ │ ├── Flexible.tsx │ │ │ ├── crane.svg │ │ │ ├── origami.svg │ │ │ ├── sign.svg │ │ │ └── slot-machine │ │ │ │ ├── Slotmachine.tsx │ │ │ │ ├── logos │ │ │ │ ├── edge.tsx │ │ │ │ ├── elysia.tsx │ │ │ │ ├── express.tsx │ │ │ │ ├── fastify.tsx │ │ │ │ ├── graphql.tsx │ │ │ │ ├── hono.tsx │ │ │ │ ├── react.tsx │ │ │ │ ├── rest.tsx │ │ │ │ ├── server.tsx │ │ │ │ ├── solid.tsx │ │ │ │ ├── spa.tsx │ │ │ │ ├── ssg.tsx │ │ │ │ ├── ssr.tsx │ │ │ │ ├── static.tsx │ │ │ │ ├── telefunc.tsx │ │ │ │ ├── trpc.tsx │ │ │ │ ├── tsrest.tsx │ │ │ │ └── vue.tsx │ │ │ │ └── slotMachine.svg │ │ │ ├── hero │ │ │ ├── Hero.css │ │ │ ├── Hero.tsx │ │ │ ├── UsedBy.tsx │ │ │ └── UsedBy │ │ │ │ ├── usedby-bild.svg │ │ │ │ ├── usedby-chip.svg │ │ │ │ ├── usedby-contra.svg │ │ │ │ ├── usedby-dia.svg │ │ │ │ ├── usedby-ecosia.svg │ │ │ │ ├── usedby-name.svg │ │ │ │ └── usedby-spline.webp │ │ │ ├── philosophy │ │ │ ├── Philosophy.css │ │ │ ├── Philosophy.tsx │ │ │ ├── compass.svg │ │ │ ├── ear.svg │ │ │ ├── forest.svg │ │ │ └── separation.svg │ │ │ ├── reliable │ │ │ ├── BugFixSVG.tsx │ │ │ ├── Reliable.css │ │ │ ├── Reliable.tsx │ │ │ ├── forkable-extensions.svg │ │ │ ├── open-source-pricing.svg │ │ │ └── window.svg │ │ │ └── sponsors │ │ │ ├── Sponsors.css │ │ │ ├── Sponsors.tsx │ │ │ ├── handshake.svg │ │ │ ├── sponsorsList.ts │ │ │ └── sponsorsLogo │ │ │ ├── alignable.svg │ │ │ ├── bluefin.svg │ │ │ ├── burdaforward.png │ │ │ ├── contra.svg │ │ │ ├── crepe.svg │ │ │ ├── ecosia.svg │ │ │ ├── inlang.png │ │ │ ├── mfqs.svg │ │ │ ├── optimizers.svg │ │ │ ├── repora.svg │ │ │ └── sourcegraph.svg │ ├── injectAssets │ │ └── +Page.mdx │ ├── injectFilter │ │ └── +Page.mdx │ ├── injectScriptsAt │ │ └── +Page.mdx │ ├── integration │ │ └── +Page.mdx │ ├── keepScrollPosition │ │ └── +Page.mdx │ ├── koa │ │ └── +Page.mdx │ ├── lang │ │ └── +Page.mdx │ ├── languages │ │ └── +Page.mdx │ ├── layouts │ │ └── +Page.mdx │ ├── lazy-transpiling │ │ └── +Page.mdx │ ├── mantine │ │ └── +Page.mdx │ ├── markdown │ │ └── +Page.mdx │ ├── meta │ │ └── +Page.mdx │ ├── migration-0.4 │ │ └── +Page.mdx │ ├── migration │ │ ├── +Page.mdx │ │ ├── 0.4.134 │ │ │ └── +Page.mdx │ │ ├── 0.4.23 │ │ │ └── +Page.mdx │ │ ├── 0.4 │ │ │ └── +Page.mdx │ │ ├── 0.5 │ │ │ └── +Page.mdx │ │ ├── cli │ │ │ └── +Page.mdx │ │ ├── settings │ │ │ └── +Page.mdx │ │ ├── v1-design │ │ │ └── +Page.mdx │ │ ├── v1 │ │ │ └── +Page.mdx │ │ └── vike-cloudflare │ │ │ └── +Page.mdx │ ├── mode │ │ └── +Page.mdx │ ├── modifyUrl │ │ └── +Page.mdx │ ├── mui │ │ └── +Page.mdx │ ├── multiple-renderer │ │ └── +Page.mdx │ ├── naive-ui │ │ └── +Page.mdx │ ├── navigate │ │ └── +Page.mdx │ ├── netlify-functions │ │ └── +Page.mdx │ ├── netlify │ │ └── +Page.mdx │ ├── new │ │ ├── +Page.mdx │ │ ├── BatiNote.tsx │ │ ├── BatiWidget.tsx │ │ ├── bati-logo.svg │ │ └── core │ │ │ └── +Page.mdx │ ├── nextjs │ │ └── +Page.mdx │ ├── nextui │ │ └── +Page.mdx │ ├── nginx │ │ └── +Page.mdx │ ├── nitro │ │ └── +Page.mdx │ ├── no-side-exports │ │ └── +Page.mdx │ ├── onAfterRenderClient │ │ └── +Page.mdx │ ├── onAfterRenderHtml │ │ └── +Page.mdx │ ├── onBeforePrerenderStart │ │ └── +Page.mdx │ ├── onBeforeRender-multiple │ │ └── +Page.mdx │ ├── onBeforeRender │ │ └── +Page.mdx │ ├── onBeforeRenderClient │ │ └── +Page.mdx │ ├── onBeforeRenderHtml │ │ └── +Page.mdx │ ├── onBeforeRoute │ │ └── +Page.mdx │ ├── onCreateApp │ │ └── +Page.mdx │ ├── onCreateGlobalContext │ │ └── +Page.mdx │ ├── onCreatePageContext │ │ └── +Page.mdx │ ├── onData │ │ └── +Page.mdx │ ├── onHydrationEnd │ │ └── +Page.mdx │ ├── onPageTransitionEnd │ │ └── +Page.mdx │ ├── onPageTransitionStart │ │ └── +Page.mdx │ ├── onPrerenderStart │ │ └── +Page.mdx │ ├── onRenderClient │ │ └── +Page.mdx │ ├── onRenderHtml │ │ └── +Page.mdx │ ├── page-redirection │ │ └── +Page.mdx │ ├── pageContext-anywhere │ │ └── +Page.mdx │ ├── pageContext-json │ │ ├── +Page.mdx │ │ └── +route.ts │ ├── pageContext-manipulation │ │ └── +Page.mdx │ ├── pageContext │ │ └── +Page.mdx │ ├── panda-css │ │ └── +Page.mdx │ ├── passToClient │ │ └── +Page.mdx │ ├── path-aliases │ │ └── +Page.mdx │ ├── pinia │ │ └── +Page.mdx │ ├── port │ │ └── +Page.mdx │ ├── pre-rendering │ │ ├── +Page.mdx │ │ └── PreRenderDynamicRoutes.mdx │ ├── preact │ │ └── +Page.mdx │ ├── prefetch │ │ └── +Page.mdx │ ├── prefetchStaticAssets │ │ └── +Page.mdx │ ├── preload │ │ └── +Page.mdx │ ├── preloading │ │ └── +Page.mdx │ ├── prerender-config │ │ └── +Page.mdx │ ├── prerender │ │ └── +Page.mdx │ ├── press │ │ ├── +Page.mdx │ │ └── press.css │ ├── pricing │ │ ├── +Page.mdx │ │ ├── RecommendedAmountTable.css │ │ ├── RecommendedAmountTable.tsx │ │ ├── StateOfTheArt.css │ │ ├── StateOfTheArt.mdx │ │ ├── ValueList.tsx │ │ └── value-components.tsx │ ├── primereact │ │ └── +Page.mdx │ ├── pullstate │ │ └── +Page.mdx │ ├── react-query │ │ └── +Page.mdx │ ├── react-router │ │ └── +Page.mdx │ ├── react-setting │ │ └── +Page.mdx │ ├── react-tour │ │ └── +Page.mdx │ ├── react │ │ └── +Page.mdx │ ├── reactStrictMode │ │ └── +Page.mdx │ ├── redirect │ │ └── +Page.mdx │ ├── redirects │ │ └── +Page.mdx │ ├── redux │ │ └── +Page.mdx │ ├── relay │ │ └── +Page.mdx │ ├── releases │ │ ├── +Page.mdx │ │ ├── 2024-06 │ │ │ └── +Page.mdx │ │ ├── 2024-07 │ │ │ └── +Page.mdx │ │ ├── 2024-08 │ │ │ └── +Page.mdx │ │ ├── 2024-09 │ │ │ └── +Page.mdx │ │ └── 2024-10 │ │ │ └── +Page.mdx │ ├── reload │ │ └── +Page.mdx │ ├── render-as-you-fetch │ │ └── +Page.mdx │ ├── render-client │ │ └── +Page.mdx │ ├── render-hook │ │ └── +Page.mdx │ ├── render-modes │ │ └── +Page.mdx │ ├── render │ │ └── +Page.mdx │ ├── renderPage │ │ └── +Page.mdx │ ├── require │ │ └── +Page.mdx │ ├── route-function │ │ └── +Page.mdx │ ├── route-string │ │ └── +Page.mdx │ ├── route │ │ └── +Page.mdx │ ├── routing-precedence │ │ └── +Page.mdx │ ├── routing │ │ └── +Page.mdx │ ├── ruby-on-rails │ │ └── +Page.mdx │ ├── sass │ │ └── +Page.mdx │ ├── scaffold │ │ └── +Page.mdx │ ├── server-routing-vs-client-routing │ │ └── +Page.mdx │ ├── server-routing │ │ └── +Page.mdx │ ├── server-side-rendering │ │ └── +Page.mdx │ ├── server │ │ └── +Page.mdx │ ├── settings │ │ ├── +Page.mdx │ │ └── TextType.tsx │ ├── socket-io │ │ └── +Page.mdx │ ├── solid │ │ └── +Page.mdx │ ├── spa │ │ └── +Page.mdx │ ├── ssr │ │ └── +Page.mdx │ ├── start │ │ ├── +Page.mdx │ │ ├── BatiCmd.tsx │ │ ├── BatiCmd_bun.mdx │ │ ├── BatiCmd_npm.mdx │ │ ├── BatiCmd_pnpm.mdx │ │ ├── BatiCmd_yarn.mdx │ │ └── style.css │ ├── static-directory │ │ └── +Page.mdx │ ├── static-hosts │ │ └── +Page.mdx │ ├── store │ │ └── +Page.mdx │ ├── stream │ │ └── +Page.mdx │ ├── streaming │ │ ├── +Page.mdx │ │ └── progressive-rendering-demo.webm │ ├── styled-components │ │ └── +Page.mdx │ ├── styled-jsx │ │ └── +Page.mdx │ ├── svelte │ │ └── +Page.mdx │ ├── tRPC │ │ └── +Page.mdx │ ├── tailwind-css │ │ └── +Page.mdx │ ├── tanstack-query │ │ └── +Page.mdx │ ├── tauri │ │ └── +Page.mdx │ ├── team │ │ ├── +Page.mdx │ │ ├── Maintainers.tsx │ │ ├── maintainersList.tsx │ │ └── team.css │ ├── telefunc │ │ └── +Page.mdx │ ├── title │ │ └── +Page.mdx │ ├── tools │ │ └── +Page.mdx │ ├── tour │ │ └── +Page.mdx │ ├── typescript │ │ └── +Page.mdx │ ├── ui-frameworks │ │ └── +Page.mdx │ ├── url-normalization │ │ └── +Page.mdx │ ├── urql │ │ └── +Page.mdx │ ├── use-cases │ │ └── +Page.mdx │ ├── useClientRouter │ │ └── +Page.mdx │ ├── useConfig │ │ └── +Page.mdx │ ├── useData │ │ └── +Page.mdx │ ├── usePageContext │ │ └── +Page.mdx │ ├── v1-design │ │ └── +Page.mdx │ ├── vanjs │ │ └── +Page.mdx │ ├── vercel │ │ └── +Page.mdx │ ├── versioning │ │ └── +Page.mdx │ ├── viewport │ │ └── +Page.mdx │ ├── vike-packages │ │ └── +Page.mdx │ ├── vike-react │ │ └── +Page.mdx │ ├── vike-server │ │ └── +Page.mdx │ ├── vike-solid │ │ └── +Page.mdx │ ├── vike-vue │ │ └── +Page.mdx │ ├── vike │ │ └── +Page.mdx │ ├── vite-plugin │ │ └── +Page.mdx │ ├── vitest │ │ └── +Page.mdx │ ├── vue-i18n │ │ └── +Page.mdx │ ├── vue-query │ │ └── +Page.mdx │ ├── vue-router-and-react-router │ │ └── +Page.mdx │ ├── vue-router │ │ └── +Page.mdx │ ├── vue-tour │ │ └── +Page.mdx │ ├── vue │ │ └── +Page.mdx │ ├── vuetify │ │ └── +Page.mdx │ ├── vuex │ │ └── +Page.mdx │ ├── warning │ │ ├── global-config │ │ │ └── +Page.mdx │ │ └── version-mismatch │ │ │ └── +Page.mdx │ ├── why-the-v1-design │ │ └── +Page.mdx │ ├── why │ │ └── +Page.mdx │ └── wsl │ │ └── +Page.mdx ├── public │ └── banner.jpg ├── tsconfig.json ├── utils │ ├── PROJECT_VERSION.ts │ ├── index.ts │ └── projectInfo.tsx └── vite.config.ts ├── examples ├── README.md ├── auth │ ├── .gitignore │ ├── .test-dev.test.ts │ ├── .test-prod.test.ts │ ├── .testCiJob.json │ ├── .testRun.ts │ ├── README.md │ ├── components │ │ ├── Button.tsx │ │ └── Counter.tsx │ ├── layouts │ │ ├── LayoutDefault.css │ │ └── LayoutDefault.tsx │ ├── package.json │ ├── pages │ │ ├── +Layout.ts │ │ ├── +config.ts │ │ ├── PageContext.ts │ │ ├── _error │ │ │ └── +Page.tsx │ │ ├── account │ │ │ ├── +Page.tsx │ │ │ └── +guard.ts │ │ ├── admin │ │ │ ├── +Page.tsx │ │ │ └── +guard.ts │ │ ├── index │ │ │ └── +Page.tsx │ │ └── login │ │ │ └── +Page.tsx │ ├── server │ │ ├── index.js │ │ ├── root.js │ │ └── users.js │ ├── tsconfig.json │ └── vite.config.ts ├── base-url-cdn │ ├── .gitignore │ ├── .test.ts │ ├── .testCiJob.json │ ├── README.md │ ├── package.json │ ├── pages │ │ ├── about │ │ │ └── +Page.jsx │ │ └── index │ │ │ └── +Page.jsx │ ├── public │ │ └── manifest.json │ ├── renderer │ │ ├── +config.js │ │ ├── +onRenderClient.jsx │ │ ├── +onRenderHtml.jsx │ │ ├── Layout.css │ │ ├── Layout.jsx │ │ └── logo.svg │ ├── server │ │ ├── cdn.js │ │ ├── createExpressApp.js │ │ ├── root.js │ │ └── ssr.js │ └── vite.config.js ├── base-url-server │ ├── .gitignore │ ├── .test.ts │ ├── .testCiJob.json │ ├── README.md │ ├── base.js │ ├── components │ │ └── Link.jsx │ ├── package.json │ ├── pages │ │ ├── about │ │ │ └── +Page.jsx │ │ └── index │ │ │ └── +Page.jsx │ ├── public │ │ └── manifest.json │ ├── renderer │ │ ├── +config.js │ │ ├── +onRenderClient.jsx │ │ ├── +onRenderHtml.jsx │ │ ├── Layout.css │ │ ├── Layout.jsx │ │ └── logo.svg │ ├── server │ │ ├── cdn.js │ │ ├── createExpressApp.js │ │ ├── root.js │ │ └── ssr.js │ └── vite.config.js ├── base-url │ ├── .gitignore │ ├── .test-dev.test.ts │ ├── .test-preview.test.ts │ ├── .testCiJob.json │ ├── .testRun.ts │ ├── README.md │ ├── components │ │ └── Link.jsx │ ├── package.json │ ├── pages │ │ ├── about │ │ │ └── +Page.jsx │ │ └── index │ │ │ └── +Page.jsx │ ├── public │ │ └── manifest.json │ ├── renderer │ │ ├── +config.js │ │ ├── +onRenderClient.jsx │ │ ├── +onRenderHtml.jsx │ │ ├── Layout.css │ │ ├── Layout.jsx │ │ └── logo.svg │ └── vite.config.js ├── cloudflare-workers-react-full │ ├── .gitignore │ ├── .test-dev.test.ts │ ├── .test-wrangler.test.ts │ ├── .testCiJob.json │ ├── .testRun.ts │ ├── README.md │ ├── components │ │ └── Counter.jsx │ ├── dev-server │ │ ├── index.js │ │ └── root.js │ ├── package.json │ ├── pages │ │ ├── about │ │ │ └── +Page.tsx │ │ ├── index │ │ │ └── +Page.tsx │ │ └── star-wars │ │ │ └── +Page.tsx │ ├── renderer │ │ ├── +config.ts │ │ ├── +onRenderClient.jsx │ │ ├── +onRenderHtml.tsx │ │ ├── Layout.css │ │ ├── Layout.jsx │ │ ├── types.ts │ │ └── usePageContext.tsx │ ├── vite.config.ts │ ├── worker │ │ ├── index.js │ │ ├── ssr.ts │ │ └── static-assets.js │ └── wrangler.toml ├── cloudflare-workers-react │ ├── .gitignore │ ├── .test-dev.test.ts │ ├── .test-preview.test.ts │ ├── .testCiJob.json │ ├── README.md │ ├── package.json │ ├── pages │ │ ├── about │ │ │ └── +Page.jsx │ │ └── index │ │ │ ├── +Page.jsx │ │ │ └── Counter.jsx │ ├── renderer │ │ ├── +config.js │ │ ├── +onRenderClient.jsx │ │ ├── +onRenderHtml.jsx │ │ ├── Layout.css │ │ └── Layout.jsx │ ├── vite.config.js │ ├── worker │ │ ├── index.js │ │ ├── ssr.js │ │ └── static-assets.js │ └── wrangler.toml ├── cloudflare-workers-vue │ ├── .gitignore │ ├── .test-dev.test.ts │ ├── .test-wrangler.test.ts │ ├── .testCiJob.json │ ├── README.md │ ├── package.json │ ├── pages │ │ ├── about │ │ │ └── +Page.vue │ │ └── index │ │ │ ├── +Page.vue │ │ │ └── Counter.vue │ ├── renderer │ │ ├── +config.ts │ │ ├── +onRenderClient.js │ │ ├── +onRenderHtml.ts │ │ ├── Layout.vue │ │ └── createVueApp.js │ ├── vite.config.js │ ├── worker │ │ ├── index.js │ │ ├── ssr.js │ │ └── static-assets.js │ └── wrangler.toml ├── custom-preload │ ├── .gitignore │ ├── .test-preview.test.ts │ ├── .testCiJob.json │ ├── .testRun.ts │ ├── README.md │ ├── package.json │ ├── pages │ │ ├── index │ │ │ └── +Page.jsx │ │ ├── preload-disabled │ │ │ ├── +Page.jsx │ │ │ └── +config.js │ │ └── preload-images │ │ │ ├── +Page.jsx │ │ │ └── +config.js │ ├── renderer │ │ ├── +config.ts │ │ ├── +onRenderClient.jsx │ │ ├── +onRenderHtml.tsx │ │ ├── Layout.css │ │ ├── Layout.jsx │ │ ├── Sono-Light.ttf │ │ └── logo.svg │ └── vite.config.js ├── file-structure-domain-driven │ ├── (marketing) │ │ └── pages │ │ │ ├── about │ │ │ └── +Page.jsx │ │ │ └── index │ │ │ └── +Page.jsx │ ├── .gitignore │ ├── .test-dev.test.ts │ ├── .test-preview.test.ts │ ├── .testCiJob.json │ ├── .testRun.ts │ ├── README.md │ ├── auth │ │ └── pages │ │ │ ├── login │ │ │ └── +Page.jsx │ │ │ └── signup │ │ │ └── +Page.jsx │ ├── package.json │ ├── product │ │ └── pages │ │ │ ├── index │ │ │ ├── +Page.jsx │ │ │ └── +route.js │ │ │ └── list │ │ │ ├── +Page.jsx │ │ │ ├── +onBeforePrerenderStart.js │ │ │ └── +route.js │ ├── renderer │ │ ├── +config.js │ │ ├── +onRenderClient.jsx │ │ ├── +onRenderHtml.jsx │ │ ├── Layout.css │ │ └── Layout.jsx │ └── vite.config.js ├── html-fragments │ ├── .gitignore │ ├── .test-dev.test.ts │ ├── .test-preview.test.ts │ ├── .testCiJob.json │ ├── .testRun.ts │ ├── README.md │ ├── index │ │ ├── +config.ts │ │ └── +onRenderHtml.ts │ ├── package.json │ ├── tsconfig.json │ └── vite.config.js ├── i18n │ ├── .gitignore │ ├── .test-dev.test.ts │ ├── .test-preview.test.ts │ ├── .testCiJob.json │ ├── .testRun.ts │ ├── README.md │ ├── components │ │ └── Link.jsx │ ├── locales │ │ ├── extractLocale.js │ │ ├── index.js │ │ ├── locales.js │ │ ├── translate.js │ │ └── translations.js │ ├── package.json │ ├── pages │ │ ├── +onBeforeRoute.js │ │ ├── +onPrerenderStart.js │ │ ├── _error │ │ │ └── +Page.jsx │ │ ├── about │ │ │ └── +Page.jsx │ │ ├── index │ │ │ └── +Page.jsx │ │ └── movies │ │ │ ├── +Page.jsx │ │ │ └── +onBeforeRender.js │ ├── renderer │ │ ├── +config.js │ │ ├── +onRenderClient.jsx │ │ ├── +onRenderHtml.jsx │ │ ├── Layout.css │ │ ├── Layout.jsx │ │ ├── LocaleText.jsx │ │ └── usePageContext.jsx │ └── vite.config.js ├── path-aliases │ ├── .gitignore │ ├── .test-dev.test.ts │ ├── .test-prod-static.test.ts │ ├── .test-prod.test.ts │ ├── .testCiJob.json │ ├── .testRun.ts │ ├── README.md │ ├── components │ │ └── Counter.tsx │ ├── package.json │ ├── pages │ │ ├── about │ │ │ ├── +config.js │ │ │ ├── Page.tsx │ │ │ └── page_env.ts │ │ └── index │ │ │ └── +Page.tsx │ ├── renderer │ │ ├── +config.ts │ │ ├── Layout.css │ │ ├── Layout.tsx │ │ ├── onRenderClient.tsx │ │ └── onRenderHtml.tsx │ ├── server │ │ ├── index.js │ │ ├── msg.js │ │ └── root.js │ ├── styles │ │ └── magenta-text.css │ ├── tsconfig.json │ ├── types │ │ ├── PageContext.ts │ │ └── index.ts │ └── vite.config.ts ├── react-full │ ├── .gitignore │ ├── .test-dev.test.ts │ ├── .test-preview.test.ts │ ├── .testCiJob.json │ ├── .testRun.ts │ ├── README.md │ ├── components │ │ └── Counter.tsx │ ├── package.json │ ├── pages │ │ ├── _error │ │ │ └── +Page.tsx │ │ ├── hello │ │ │ ├── +Page.tsx │ │ │ ├── +data.ts │ │ │ ├── +guard.ts │ │ │ ├── +onBeforePrerenderStart.ts │ │ │ ├── +route.ts │ │ │ └── names.ts │ │ ├── index │ │ │ └── +Page.tsx │ │ ├── markdown │ │ │ ├── +Page.mdx │ │ │ ├── +client.ts │ │ │ └── +title.ts │ │ └── star-wars │ │ │ ├── @id │ │ │ ├── +Page.tsx │ │ │ ├── +data.tsx │ │ │ └── +dataIsomorph.ts │ │ │ ├── filterMovieData.ts │ │ │ ├── index │ │ │ ├── +Page.tsx │ │ │ ├── +data.ts │ │ │ ├── +onBeforePrerenderStart.ts │ │ │ └── getStarWarsMovies.ts │ │ │ └── types.ts │ ├── renderer │ │ ├── +config.ts │ │ ├── +onHydrationEnd.ts │ │ ├── +onPageTransitionEnd.ts │ │ ├── +onPageTransitionStart.ts │ │ ├── +onRenderClient.tsx │ │ ├── +onRenderHtml.tsx │ │ ├── Layout.css │ │ ├── Layout.tsx │ │ ├── Link.tsx │ │ ├── PageContext.ts │ │ ├── css │ │ │ ├── code.css │ │ │ ├── index.css │ │ │ ├── links.css │ │ │ ├── page-transition-loading-animation.css │ │ │ ├── page-transition-loading-animation │ │ │ │ └── loading.svg │ │ │ └── reset.css │ │ ├── getPageTitle.ts │ │ ├── logo.svg │ │ ├── useData.tsx │ │ └── usePageContext.tsx │ ├── tsconfig.json │ └── vite.config.ts ├── react-minimal │ ├── .gitignore │ ├── .test-dev.test.ts │ ├── .test-preview.test.ts │ ├── .testCiJob.json │ ├── README.md │ ├── package.json │ ├── pages │ │ ├── about │ │ │ └── +Page.jsx │ │ └── index │ │ │ ├── +Page.jsx │ │ │ └── Counter.jsx │ ├── renderer │ │ ├── +onRenderClient.jsx │ │ ├── +onRenderHtml.jsx │ │ ├── Layout.css │ │ └── Layout.jsx │ └── vite.config.js ├── react-streaming │ ├── .gitignore │ ├── .test-dev.test.ts │ ├── .test-prod.test.ts │ ├── .testCiJob.json │ ├── README.md │ ├── components │ │ └── Counter.jsx │ ├── package.json │ ├── pages │ │ ├── about │ │ │ └── +Page.jsx │ │ ├── index │ │ │ └── +Page.jsx │ │ └── star-wars │ │ │ └── index │ │ │ └── +Page.jsx │ ├── renderer │ │ ├── +config.js │ │ ├── +onRenderClient.jsx │ │ ├── +onRenderHtml.jsx │ │ ├── Layout.css │ │ ├── Layout.jsx │ │ └── usePageContext.jsx │ ├── server │ │ ├── index.js │ │ └── root.js │ └── vite.config.js ├── render-modes │ ├── .gitignore │ ├── .test-dev.test.ts │ ├── .test-prod.test.ts │ ├── .testCiJob.json │ ├── .testRun.ts │ ├── README.md │ ├── package.json │ ├── pages │ │ ├── html-js │ │ │ ├── +Page.jsx │ │ │ ├── +client.js │ │ │ ├── +renderMode.js │ │ │ └── index.css │ │ ├── html-only │ │ │ ├── +Page.jsx │ │ │ ├── +renderMode.js │ │ │ └── index.css │ │ ├── index │ │ │ ├── +Page.jsx │ │ │ └── +renderMode.js │ │ ├── spa │ │ │ ├── +Page.jsx │ │ │ ├── +renderMode.js │ │ │ └── index.css │ │ └── ssr │ │ │ ├── +Page.jsx │ │ │ ├── +renderMode.js │ │ │ ├── Counter.jsx │ │ │ └── index.css │ ├── renderer │ │ ├── +config.ts │ │ ├── +onRenderClient.jsx │ │ ├── +onRenderHtml.jsx │ │ ├── Layout.css │ │ └── Layout.jsx │ ├── server │ │ ├── index.js │ │ └── root.js │ └── vite.config.js ├── telefunc │ ├── .dev.test.ts │ ├── .gitignore │ ├── .prod.test.ts │ ├── .testCiJob.json │ ├── .testRun.ts │ ├── README.md │ ├── database │ │ └── todoItems.ts │ ├── package.json │ ├── pages │ │ ├── about │ │ │ └── +Page.tsx │ │ └── index │ │ │ ├── +Page.tsx │ │ │ ├── +onBeforeRender.ts │ │ │ ├── TodoList.telefunc.ts │ │ │ └── TodoList.tsx │ ├── renderer │ │ ├── +config.ts │ │ ├── +onRenderClient.tsx │ │ ├── +onRenderHtml.jsx │ │ ├── Layout.css │ │ ├── Layout.jsx │ │ └── types.ts │ ├── server │ │ ├── index.js │ │ └── root.js │ └── vite.config.js ├── vue-full │ ├── .gitignore │ ├── .test-dev.test.ts │ ├── .test-preview.test.ts │ ├── .testCiJob.json │ ├── README.md │ ├── components │ │ └── Counter.vue │ ├── package.json │ ├── pages │ │ ├── _error │ │ │ └── +Page.vue │ │ ├── hello │ │ │ ├── +Page.vue │ │ │ ├── +data.ts │ │ │ ├── +onBeforePrerenderStart.ts │ │ │ ├── +route.ts │ │ │ └── names.ts │ │ ├── index │ │ │ └── +Page.vue │ │ ├── markdown │ │ │ ├── +Page.md │ │ │ ├── +client.ts │ │ │ └── +config.ts │ │ └── star-wars │ │ │ ├── @id │ │ │ ├── +Page.vue │ │ │ └── +data.shared.ts │ │ │ ├── filterMovieData.ts │ │ │ ├── index │ │ │ ├── +Page.vue │ │ │ ├── +data.ts │ │ │ ├── +onBeforePrerenderStart.ts │ │ │ └── data.ts │ │ │ └── types.ts │ ├── renderer │ │ ├── +config.ts │ │ ├── +onHydrationEnd.ts │ │ ├── +onPageTransitionEnd.ts │ │ ├── +onPageTransitionStart.ts │ │ ├── +onRenderClient.ts │ │ ├── +onRenderHtml.ts │ │ ├── Layout.vue │ │ ├── Link.vue │ │ ├── createVueApp.ts │ │ ├── getPageTitle.ts │ │ ├── logo.svg │ │ ├── types.ts │ │ ├── useData.ts │ │ ├── usePageContext.ts │ │ └── utils.ts │ ├── tsconfig.json │ ├── types.d.ts │ └── vite.config.ts └── vue-minimal │ ├── .gitignore │ ├── .test-dev.test.ts │ ├── .test-preview.test.ts │ ├── .testCiJob.json │ ├── README.md │ ├── package.json │ ├── pages │ ├── about │ │ └── +Page.vue │ └── index │ │ ├── +Page.vue │ │ └── Counter.vue │ ├── renderer │ ├── +config.js │ ├── +onRenderClient.js │ ├── +onRenderHtml.js │ ├── Layout.vue │ └── createVueApp.js │ └── vite.config.js ├── package.json ├── pnpm-lock.yaml ├── pnpm-workspace.yaml ├── test-deprecated-design ├── base-url-cdn │ ├── .gitignore │ ├── .test.ts │ ├── .testCiJob.json │ ├── package.json │ ├── pages │ │ ├── about │ │ │ └── index.page.jsx │ │ └── index.page.jsx │ ├── public │ │ └── manifest.json │ ├── renderer │ │ ├── Layout.css │ │ ├── Layout.jsx │ │ ├── _default.page.client.jsx │ │ ├── _default.page.server.jsx │ │ └── logo.svg │ ├── server │ │ ├── cdn.js │ │ ├── createExpressApp.js │ │ ├── root.js │ │ └── ssr.js │ └── vite.config.js ├── base-url-server │ ├── .gitignore │ ├── .test.ts │ ├── .testCiJob.json │ ├── base.js │ ├── components │ │ └── Link.jsx │ ├── package.json │ ├── pages │ │ ├── about │ │ │ └── index.page.jsx │ │ └── index.page.jsx │ ├── public │ │ └── manifest.json │ ├── renderer │ │ ├── Layout.css │ │ ├── Layout.jsx │ │ ├── _default.page.client.jsx │ │ ├── _default.page.server.jsx │ │ └── logo.svg │ ├── server │ │ ├── cdn.js │ │ ├── createExpressApp.js │ │ ├── root.js │ │ └── ssr.js │ └── vite.config.js ├── base-url │ ├── .gitignore │ ├── .test-dev.test.ts │ ├── .test-preview.test.ts │ ├── .testCiJob.json │ ├── components │ │ └── Link.jsx │ ├── package.json │ ├── pages │ │ ├── about │ │ │ └── index.page.jsx │ │ └── index.page.jsx │ ├── public │ │ └── manifest.json │ ├── renderer │ │ ├── Layout.css │ │ ├── Layout.jsx │ │ ├── _default.page.client.jsx │ │ ├── _default.page.server.jsx │ │ └── logo.svg │ └── vite.config.js ├── cloudflare-workers-react-full │ ├── .gitignore │ ├── .test-dev.test.ts │ ├── .test-wrangler.test.ts │ ├── .testCiJob.json │ ├── components │ │ └── Counter.jsx │ ├── dev-server │ │ └── index.js │ ├── package.json │ ├── pages │ │ ├── about │ │ │ └── index.page.jsx │ │ ├── index.page.tsx │ │ └── star-wars.page.tsx │ ├── renderer │ │ ├── Layout.css │ │ ├── Layout.jsx │ │ ├── PageContext.d.ts │ │ ├── _default.page.client.jsx │ │ ├── _default.page.server.tsx │ │ └── usePageContext.tsx │ ├── vite.config.ts │ ├── worker │ │ ├── index.js │ │ ├── ssr.ts │ │ └── static-assets.js │ └── wrangler.toml ├── cloudflare-workers-react │ ├── .gitignore │ ├── .test-dev.test.ts │ ├── .test-preview.test.ts │ ├── .testCiJob.json │ ├── package.json │ ├── pages │ │ ├── about │ │ │ └── index.page.jsx │ │ └── index │ │ │ ├── Counter.jsx │ │ │ └── index.page.jsx │ ├── renderer │ │ ├── Layout.css │ │ ├── Layout.jsx │ │ ├── _default.page.client.jsx │ │ └── _default.page.server.jsx │ ├── vite.config.js │ ├── worker │ │ ├── index.js │ │ ├── ssr.js │ │ └── static-assets.js │ └── wrangler.toml ├── cloudflare-workers-vue │ ├── .gitignore │ ├── .test-dev.test.ts │ ├── .test-wrangler.test.ts │ ├── .testCiJob.json │ ├── package.json │ ├── pages │ │ ├── about │ │ │ └── index.page.vue │ │ └── index │ │ │ ├── Counter.vue │ │ │ └── index.page.vue │ ├── renderer │ │ ├── Layout.vue │ │ ├── _default.page.client.js │ │ ├── _default.page.server.ts │ │ └── createVueApp.js │ ├── vite.config.js │ ├── worker │ │ ├── index.js │ │ ├── ssr.js │ │ └── static-assets.js │ └── wrangler.toml ├── file-structure-domain-driven │ ├── .gitignore │ ├── .test-dev.test.ts │ ├── .test-preview.test.ts │ ├── .testCiJob.json │ ├── auth │ │ └── pages │ │ │ ├── login │ │ │ └── index.page.jsx │ │ │ └── signup │ │ │ └── index.page.jsx │ ├── marketing │ │ ├── _default.page.route.js │ │ └── pages │ │ │ ├── about │ │ │ └── index.page.jsx │ │ │ └── index │ │ │ └── index.page.jsx │ ├── package.json │ ├── product │ │ └── pages │ │ │ ├── index │ │ │ ├── index.page.jsx │ │ │ └── index.page.route.js │ │ │ └── list │ │ │ ├── index.page.jsx │ │ │ ├── index.page.route.js │ │ │ └── index.page.server.js │ ├── renderer │ │ ├── Layout.css │ │ ├── Layout.jsx │ │ ├── _default.page.client.jsx │ │ └── _default.page.server.jsx │ └── vite.config.js ├── html-fragments │ ├── .gitignore │ ├── .test.ts │ ├── .testCiJob.json │ ├── index.page.client.js │ ├── index.page.server.ts │ ├── package.json │ ├── tsconfig.json │ └── vite.config.js ├── i18n │ ├── .gitignore │ ├── .test-dev.test.ts │ ├── .test-preview.test.ts │ ├── .testCiJob.json │ ├── locales │ │ ├── extractLocale.js │ │ ├── index.js │ │ ├── locales.js │ │ ├── translate.js │ │ └── translations.js │ ├── package.json │ ├── pages │ │ ├── about.page.jsx │ │ ├── index.page.jsx │ │ └── movies │ │ │ ├── index.page.jsx │ │ │ └── index.page.server.js │ ├── renderer │ │ ├── Layout.css │ │ ├── Layout.jsx │ │ ├── Link.jsx │ │ ├── LocaleText.jsx │ │ ├── _default.page.client.jsx │ │ ├── _default.page.route.js │ │ ├── _default.page.server.jsx │ │ └── usePageContext.jsx │ └── vite.config.js ├── path-aliases │ ├── .gitignore │ ├── .test-dev.test.ts │ ├── .test-prod-static.test.ts │ ├── .test-prod.test.ts │ ├── .testCiJob.json │ ├── components │ │ └── Counter.tsx │ ├── package.json │ ├── pages │ │ ├── about.page.server.tsx │ │ └── index.page.tsx │ ├── renderer │ │ ├── Layout.css │ │ ├── Layout.tsx │ │ ├── _default.page.client.tsx │ │ └── _default.page.server.tsx │ ├── server │ │ ├── index.ts │ │ ├── msg.ts │ │ └── root.ts │ ├── styles │ │ └── magenta-text.css │ ├── tsconfig.json │ ├── types │ │ ├── PageContext.ts │ │ └── index.ts │ └── vite.config.ts ├── react-streaming │ ├── .gitignore │ ├── .test-dev.test.ts │ ├── .test-prod.test.ts │ ├── .testCiJob.json │ ├── package.json │ ├── pages │ │ ├── about │ │ │ └── index.page.jsx │ │ └── index │ │ │ ├── Counter.jsx │ │ │ └── index.page.jsx │ ├── renderer │ │ ├── Layout.css │ │ ├── Layout.jsx │ │ ├── _default.page.client.jsx │ │ └── _default.page.server.jsx │ ├── server │ │ ├── index.js │ │ └── root.js │ └── vite.config.js ├── react │ ├── .gitignore │ ├── .test-dev.test.ts │ ├── .test-preview.test.ts │ ├── .testCiJob.json │ ├── package.json │ ├── pages │ │ ├── about │ │ │ └── index.page.jsx │ │ └── index │ │ │ ├── Counter.jsx │ │ │ └── index.page.jsx │ ├── renderer │ │ ├── Layout.css │ │ ├── Layout.jsx │ │ ├── _default.page.client.jsx │ │ └── _default.page.server.jsx │ └── vite.config.js ├── render-modes │ ├── .gitignore │ ├── .test-dev.test.ts │ ├── .test-preview.test.ts │ ├── .testCiJob.json │ ├── package.json │ ├── pages │ │ ├── html-js │ │ │ ├── _default.page.client.js │ │ │ ├── index.css │ │ │ └── index.page.server.jsx │ │ ├── html-only │ │ │ ├── index.css │ │ │ └── index.page.server.jsx │ │ ├── index.page.server.jsx │ │ ├── spa │ │ │ ├── index.css │ │ │ └── index.page.client.jsx │ │ └── ssr │ │ │ ├── Counter.jsx │ │ │ ├── index.css │ │ │ └── index.page.jsx │ ├── renderer │ │ ├── Layout.css │ │ ├── Layout.jsx │ │ ├── _default.page.client.jsx │ │ └── _default.page.server.jsx │ └── vite.config.js ├── telefunc │ ├── .dev.test.ts │ ├── .gitignore │ ├── .prod.test.ts │ ├── .testCiJob.json │ ├── database │ │ └── todoItems.ts │ ├── package.json │ ├── pages │ │ ├── about │ │ │ └── index.page.tsx │ │ └── index │ │ │ ├── TodoList.telefunc.ts │ │ │ ├── TodoList.tsx │ │ │ ├── index.page.server.ts │ │ │ └── index.page.tsx │ ├── renderer │ │ ├── Layout.css │ │ ├── Layout.jsx │ │ ├── _default.page.client.tsx │ │ └── _default.page.server.jsx │ ├── server │ │ ├── index.js │ │ └── root.js │ └── vite.config.js ├── vue-full │ ├── .gitignore │ ├── .test-dev.test.ts │ ├── .test-preview.test.ts │ ├── .testCiJob.json │ ├── components │ │ └── Counter.vue │ ├── package.json │ ├── pages │ │ ├── hello │ │ │ ├── index.page.route.ts │ │ │ ├── index.page.server.ts │ │ │ ├── index.page.vue │ │ │ └── names.ts │ │ ├── index.page.vue │ │ ├── markdown.page.md │ │ └── star-wars │ │ │ ├── filterMovieData.ts │ │ │ ├── index │ │ │ ├── index.page.server.ts │ │ │ └── index.page.vue │ │ │ ├── movie │ │ │ ├── index.page.route.ts │ │ │ ├── index.page.vue │ │ │ └── onBeforeRender.ts │ │ │ └── types.ts │ ├── renderer │ │ ├── Layout.vue │ │ ├── Link.vue │ │ ├── _default.page.client.ts │ │ ├── _default.page.server.ts │ │ ├── _error.page.vue │ │ ├── createVueApp.ts │ │ ├── getPageTitle.ts │ │ ├── logo.svg │ │ ├── types.ts │ │ └── usePageContext.ts │ ├── tsconfig.json │ ├── types.d.ts │ └── vite.config.ts └── vue │ ├── .gitignore │ ├── .test-dev.test.ts │ ├── .test-preview.test.ts │ ├── .testCiJob.json │ ├── package.json │ ├── pages │ ├── about │ │ └── index.page.vue │ └── index │ │ ├── Counter.vue │ │ └── index.page.vue │ ├── renderer │ ├── Layout.vue │ ├── _default.page.client.js │ ├── _default.page.server.js │ └── createVueApp.js │ └── vite.config.js ├── test-e2e.config.mjs ├── test ├── abort │ ├── .gitignore │ ├── .testCiJob.json │ ├── README.md │ ├── package.json │ ├── pages │ │ ├── _error │ │ │ └── +Page.tsx │ │ ├── about │ │ │ └── +Page.tsx │ │ ├── index │ │ │ ├── +Page.tsx │ │ │ └── Counter.tsx │ │ ├── redirect-external │ │ │ ├── +Page.tsx │ │ │ └── +guard.ts │ │ ├── redirect │ │ │ ├── +Page.tsx │ │ │ └── +guard.ts │ │ ├── render-homepage │ │ │ ├── +Page.tsx │ │ │ └── +guard.ts │ │ └── show-error-page │ │ │ ├── +Page.tsx │ │ │ └── +guard.ts │ ├── renderer │ │ ├── +config.ts │ │ ├── +onRenderClient.tsx │ │ ├── +onRenderHtml.tsx │ │ ├── Layout.css │ │ ├── Layout.tsx │ │ ├── types.ts │ │ └── usePageContext.tsx │ ├── server │ │ ├── index.js │ │ └── root.js │ ├── test-dev-server.test.ts │ ├── test-dev.test.ts │ ├── test-preview.test.ts │ ├── test-prod.test.ts │ ├── test.ts │ ├── tsconfig.json │ └── vite.config.ts ├── assertFileEnv │ ├── .gitignore │ ├── .testCiJob.json │ ├── package.json │ ├── pages │ │ ├── +config.js │ │ └── index │ │ │ ├── +Page.jsx │ │ │ ├── Counter.client.jsx │ │ │ └── secret.server.js │ ├── test-build.spec.ts │ ├── test-dev.test.ts │ └── vite.config.js ├── cjs │ ├── .gitignore │ ├── .testCiJob.json │ ├── package.json │ ├── pages │ │ ├── about │ │ │ └── +Page.jsx │ │ └── index │ │ │ ├── +Page.jsx │ │ │ └── Counter.jsx │ ├── renderer │ │ ├── +onRenderClient.jsx │ │ ├── +onRenderHtml.jsx │ │ ├── Layout.css │ │ └── Layout.jsx │ ├── server │ │ └── index.js │ ├── test-dev.test.ts │ ├── test-prod.test.ts │ ├── testRun.ts │ └── vite.config.js ├── disableAutoImporter │ ├── .gitignore │ ├── .test-dev.test.ts │ ├── .test-preview.test.ts │ ├── .testCiJob.json │ ├── package.json │ ├── pages │ │ ├── about │ │ │ └── +Page.jsx │ │ └── index │ │ │ ├── +Page.jsx │ │ │ └── Counter.jsx │ ├── renderer │ │ ├── +onRenderClient.jsx │ │ ├── +onRenderHtml.jsx │ │ ├── Layout.css │ │ └── Layout.jsx │ └── vite.config.js ├── env │ ├── .env │ ├── .gitignore │ ├── .test-build.test.ts │ ├── .test-dev.test.ts │ ├── .testCiJob.json │ ├── package.json │ ├── pages │ │ ├── about │ │ │ └── +Page.jsx │ │ └── index │ │ │ ├── +Page.jsx │ │ │ ├── +onBeforeRender.js │ │ │ └── Counter.jsx │ ├── renderer │ │ ├── +config.js │ │ ├── +onRenderClient.jsx │ │ ├── +onRenderHtml.jsx │ │ ├── Layout.css │ │ └── Layout.jsx │ └── vite.config.js ├── environment-api │ ├── +config.ts │ ├── .gitignore │ ├── .testCiJob.json │ ├── build.js │ ├── buildApp.js │ ├── package.json │ ├── pages │ │ ├── +config.js │ │ ├── Layout.css │ │ ├── Layout.jsx │ │ ├── about │ │ │ └── +Page.jsx │ │ └── index │ │ │ ├── +Page.jsx │ │ │ └── Counter.jsx │ ├── test-dev.test.ts │ ├── test-preview.test.ts │ └── vite.config.js ├── hook-override │ ├── .gitignore │ ├── .testCiJob.json │ ├── package.json │ ├── pages │ │ ├── +config.ts │ │ ├── +data.tsx │ │ ├── +onBeforeRender.tsx │ │ ├── index │ │ │ ├── +Page.tsx │ │ │ └── README.md │ │ ├── page-2 │ │ │ ├── +Page.tsx │ │ │ ├── +config.ts │ │ │ ├── +onBeforeRender.tsx │ │ │ └── README.md │ │ ├── page-3 │ │ │ ├── +Page.tsx │ │ │ ├── +data.tsx │ │ │ └── README.md │ │ └── page-4 │ │ │ ├── +Page.tsx │ │ │ ├── +data.tsx │ │ │ ├── +meta.ts │ │ │ ├── +onBeforeRender.tsx │ │ │ └── README.md │ ├── renderer │ │ ├── +config.ts │ │ ├── +onRenderClient.tsx │ │ ├── +onRenderHtml.tsx │ │ ├── Layout.css │ │ ├── Layout.tsx │ │ ├── types.ts │ │ ├── useData.tsx │ │ └── usePageContext.tsx │ ├── test-dev.test.ts │ ├── test-preview.test.ts │ ├── test.ts │ ├── tsconfig.json │ └── vite.config.ts ├── includeAssetsImportedByServer │ ├── .gitignore │ ├── .test-dev.test.ts │ ├── .test-preview.test.ts │ ├── .testCiJob.json │ ├── .testRun.ts │ ├── package.json │ ├── pages │ │ └── index │ │ │ ├── +config.js │ │ │ ├── +onRenderHtml.jsx │ │ │ ├── logo-1.svg │ │ │ └── logo-2.svg │ └── vite.config.js ├── playground │ ├── +config.ts │ ├── +htmlAttributes.ts │ ├── +onCreateGlobalContext.client.ts │ ├── +onCreateGlobalContext.server.ts │ ├── +vite.ts │ ├── .gitignore │ ├── .testCiJob.json │ ├── README.md │ ├── components │ │ └── Counter.tsx │ ├── htmlAttrs.ts │ ├── onCreateGlobalContext.e2e-tests.ts │ ├── package.json │ ├── pages │ │ ├── +Head.tsx │ │ ├── +Layout.tsx │ │ ├── +config.ts │ │ ├── +onBeforeRenderClient.ts │ │ ├── +onBeforeRenderHtml.ts │ │ ├── +onCreateGlobalContext.server.ts │ │ ├── Layout.css │ │ ├── about-page │ │ │ ├── +Head.tsx │ │ │ ├── +config.ts │ │ │ ├── Page.jsx │ │ │ └── e2e-test.ts │ │ ├── config-meta │ │ │ ├── VikeConfig.d.ts │ │ │ ├── cumulative │ │ │ │ ├── +Page.tsx │ │ │ │ ├── +config.ts │ │ │ │ ├── e2e-test.ts │ │ │ │ ├── nested │ │ │ │ │ ├── +Page.tsx │ │ │ │ │ ├── +config.ts │ │ │ │ │ ├── deeply-nested │ │ │ │ │ │ ├── +Page.tsx │ │ │ │ │ │ └── +config.ts │ │ │ │ │ └── no-overrides │ │ │ │ │ │ └── +Page.tsx │ │ │ │ └── serializePageContext.ts │ │ │ ├── effect │ │ │ │ ├── +config.ts │ │ │ │ ├── e2e-test.ts │ │ │ │ ├── serializePageContext.ts │ │ │ │ ├── with-effect │ │ │ │ │ ├── +Page.tsx │ │ │ │ │ └── +config.ts │ │ │ │ └── without-effect │ │ │ │ │ └── +Page.tsx │ │ │ ├── env │ │ │ │ ├── +config.ts │ │ │ │ ├── client │ │ │ │ │ ├── +Page.tsx │ │ │ │ │ └── +config.ts │ │ │ │ ├── e2e-test.ts │ │ │ │ ├── serializePageContext.ts │ │ │ │ └── server │ │ │ │ │ └── +Page.tsx │ │ │ ├── retrievePageContext.ts │ │ │ └── serializePageContext.ts │ │ ├── dynamic-import-file-env │ │ │ ├── +Page.tsx │ │ │ ├── e2e-test.ts │ │ │ ├── hello.client.ts │ │ │ └── hello.server.ts │ │ ├── e2e-test.ts │ │ ├── index │ │ │ ├── +config.ts │ │ │ ├── Page.tsx │ │ │ └── prerender.ts │ │ ├── logo.svg │ │ ├── markdown │ │ │ ├── +Page.mdx │ │ │ ├── +client.ts │ │ │ ├── +title.ts │ │ │ ├── e2e-test.ts │ │ │ └── vike.d.ts │ │ ├── navigate-early │ │ │ ├── +Page.tsx │ │ │ ├── +client.js │ │ │ └── e2e-test.ts │ │ ├── nested-layout │ │ │ ├── @id │ │ │ │ ├── +Layout.jsx │ │ │ │ ├── +Page.tsx │ │ │ │ ├── +keepScrollPosition.js │ │ │ │ ├── +prerender.ts │ │ │ │ ├── pricing │ │ │ │ │ └── +Page.jsx │ │ │ │ └── reviews │ │ │ │ │ └── +Page.jsx │ │ │ └── e2e-test.ts │ │ ├── prerender.e2e-test.ts │ │ ├── pushState │ │ │ ├── +Page.jsx │ │ │ ├── +data.ts │ │ │ ├── +prerender.ts │ │ │ └── e2e-test.ts │ │ ├── redirects.e2e-tests.ts │ │ ├── someFn.ts │ │ └── star-wars │ │ │ ├── +config.ts │ │ │ ├── @id │ │ │ ├── +Page.tsx │ │ │ ├── +data.tsx │ │ │ └── +dataIsomorph.ts │ │ │ ├── e2e-test.ts │ │ │ ├── filterMovieData.ts │ │ │ ├── index │ │ │ ├── +Page.tsx │ │ │ ├── +data.ts │ │ │ ├── +onBeforePrerenderStart.ts │ │ │ ├── +onData.ts │ │ │ └── getStarWarsMovies.ts │ │ │ └── types.ts │ ├── scripts │ │ ├── build.js │ │ ├── dev.js │ │ ├── prerender.js │ │ └── preview.js │ ├── test-dev.test.ts │ ├── test-preview.test.ts │ ├── testRun.ts │ ├── tsconfig.json │ ├── types.d.ts │ ├── utils │ │ ├── assert.ts │ │ ├── checkType.ts │ │ └── isBrowser.ts │ └── vite.config.ts ├── preload │ ├── .gitignore │ ├── .testTypes.json │ ├── README.md │ ├── __snapshots__ │ │ ├── dev.spec.ts.snap │ │ └── prod.spec.ts.snap │ ├── dev.spec.ts │ ├── package.json │ ├── pages │ │ ├── index │ │ │ └── +Page.jsx │ │ ├── preload-disabled │ │ │ ├── +Page.jsx │ │ │ └── +config.js │ │ ├── preload-eager │ │ │ ├── +Page.jsx │ │ │ └── +config.js │ │ └── preload-images │ │ │ ├── +Page.jsx │ │ │ └── +config.js │ ├── prod.spec.ts │ ├── renderer │ │ ├── +config.js │ │ ├── +onRenderClient.jsx │ │ ├── +onRenderHtml.tsx │ │ ├── Layout.css │ │ ├── Layout.jsx │ │ ├── Sono-Light.ttf │ │ ├── Sono-Light.woff2 │ │ └── logo.svg │ ├── testRun.ts │ ├── tsconfig.json │ ├── utils │ │ ├── stabilizeHashs.spec.ts │ │ └── stabilizeHashs.ts │ └── vite.config.js ├── require-shim │ ├── .gitignore │ ├── .testCiJob.json │ ├── README.md │ ├── package.json │ ├── pages │ │ └── index │ │ │ └── +Page.jsx │ ├── renderer │ │ ├── +config.js │ │ ├── +onRenderClient.jsx │ │ ├── +onRenderHtml.jsx │ │ ├── App.css │ │ └── App.jsx │ ├── server │ │ ├── index.js │ │ └── root.js │ ├── test-prod.test.ts │ └── vite.config.js ├── stream-vue-onServerPrefetch │ ├── .gitignore │ ├── .testCiJob.json │ ├── README.md │ ├── package.json │ ├── pages │ │ ├── index │ │ │ └── +Page.vue │ │ └── todos │ │ │ ├── +Page.vue │ │ │ └── +route.js │ ├── renderer │ │ ├── +config.js │ │ ├── +onBeforeRender.js │ │ ├── +onRenderClient.js │ │ ├── +onRenderHtml.js │ │ ├── createVueApp.js │ │ └── usePageContext.js │ ├── stores │ │ ├── useCounter.js │ │ └── useTodos.js │ ├── test-dev.test.ts │ ├── test-preview.test.ts │ ├── test.ts │ └── vite.config.js ├── universal-middleware │ ├── .gitignore │ ├── .testCiJob.json │ ├── README.md │ ├── assets │ │ └── logo.svg │ ├── components │ │ └── Link.tsx │ ├── database │ │ └── todoItems.ts │ ├── express-entry.ts │ ├── global.d.ts │ ├── layouts │ │ ├── LayoutDefault.tsx │ │ └── style.css │ ├── package.json │ ├── pages │ │ ├── +Head.tsx │ │ ├── +config.ts │ │ ├── +middleware.ts │ │ ├── +onPageTransitionEnd.ts │ │ ├── +onPageTransitionStart.ts │ │ ├── Middleware.ts │ │ ├── _error │ │ │ └── +Page.tsx │ │ ├── index │ │ │ ├── +Page.tsx │ │ │ └── Counter.tsx │ │ ├── middlewareTelefunc.ts │ │ ├── middlewareVike.ts │ │ ├── star-wars │ │ │ ├── @id │ │ │ │ ├── +Page.tsx │ │ │ │ └── +data.ts │ │ │ ├── index │ │ │ │ ├── +Page.tsx │ │ │ │ └── +data.ts │ │ │ └── types.ts │ │ └── todo │ │ │ ├── +Page.tsx │ │ │ ├── +config.ts │ │ │ ├── +data.ts │ │ │ ├── TodoList.telefunc.ts │ │ │ └── TodoList.tsx │ ├── test-dev.test.ts │ ├── test-preview.test.ts │ ├── tsconfig.json │ └── vite.config.ts ├── utils.ts ├── vike-cloudflare │ ├── .gitignore │ ├── .test-dev.test.ts │ ├── .test-preview.test.ts │ ├── .testCiJob.json │ ├── .testRun.ts │ ├── README.md │ ├── assets │ │ └── logo.svg │ ├── components │ │ └── Link.tsx │ ├── database │ │ └── todoItems.ts │ ├── layouts │ │ ├── HeadDefault.tsx │ │ ├── LayoutDefault.tsx │ │ └── style.css │ ├── package.json │ ├── pages │ │ ├── +config.ts │ │ ├── +middleware.ts │ │ ├── _error │ │ │ └── +Page.tsx │ │ ├── index │ │ │ ├── +Page.tsx │ │ │ └── Counter.tsx │ │ ├── star-wars │ │ │ ├── @id │ │ │ │ ├── +Page.tsx │ │ │ │ ├── +data.ts │ │ │ │ └── +title.ts │ │ │ ├── index │ │ │ │ ├── +Page.tsx │ │ │ │ ├── +data.ts │ │ │ │ └── +title.ts │ │ │ └── types.ts │ │ └── todo │ │ │ ├── +Page.tsx │ │ │ ├── +config.ts │ │ │ ├── +data.ts │ │ │ └── TodoList.tsx │ ├── public │ │ └── logo.svg │ ├── tsconfig.json │ ├── vite.config.ts │ └── wrangler.toml ├── vike-react │ ├── .gitignore │ ├── .test-dev.test.ts │ ├── .test-preview.test.ts │ ├── .testCiJob.json │ ├── .testRun.ts │ ├── README.md │ ├── assets │ │ ├── logo-new.svg │ │ └── logo.svg │ ├── components │ │ ├── ClientOnlyComponent.tsx │ │ ├── Counter.tsx │ │ └── Link.tsx │ ├── package.json │ ├── pages │ │ ├── +Head.tsx │ │ ├── +Layout.tsx │ │ ├── +config.ts │ │ ├── _error │ │ │ └── +Page.tsx │ │ ├── client-only │ │ │ └── +Page.tsx │ │ ├── images │ │ │ └── +Page.tsx │ │ ├── index │ │ │ └── +Page.tsx │ │ ├── star-wars │ │ │ ├── @id │ │ │ │ ├── +Page.tsx │ │ │ │ └── +data.tsx │ │ │ ├── index │ │ │ │ ├── +Page.tsx │ │ │ │ └── +data.ts │ │ │ └── types.ts │ │ ├── starship │ │ │ ├── +Layout.tsx │ │ │ ├── +Page.tsx │ │ │ ├── reviews │ │ │ │ └── +Page.tsx │ │ │ └── spec │ │ │ │ └── +Page.tsx │ │ ├── streaming │ │ │ └── +Page.tsx │ │ ├── style.css │ │ └── without-ssr │ │ │ ├── +Page.tsx │ │ │ └── +config.ts │ ├── tsconfig.json │ └── vite.config.ts ├── vike-server │ ├── .gitignore │ ├── .test-dev.test.ts │ ├── .test-prod.test.ts │ ├── .testCiJob.json │ ├── package.json │ ├── pages │ │ ├── +config.js │ │ ├── Layout.css │ │ ├── Layout.jsx │ │ ├── about │ │ │ └── +Page.jsx │ │ └── index │ │ │ ├── +Page.jsx │ │ │ └── Counter.jsx │ ├── readme.md │ ├── server │ │ └── index.js │ └── vite.config.js ├── vike-solid │ ├── .gitignore │ ├── .test-dev.test.ts │ ├── .test-preview.test.ts │ ├── .testCiJob.json │ ├── .testRun.ts │ ├── README.md │ ├── assets │ │ ├── logo-new.svg │ │ └── logo.svg │ ├── components │ │ ├── Counter.tsx │ │ └── Link.tsx │ ├── layouts │ │ └── style.css │ ├── package.json │ ├── pages │ │ ├── +Head.tsx │ │ ├── +Layout.tsx │ │ ├── +config.ts │ │ ├── _error │ │ │ └── +Page.tsx │ │ ├── images │ │ │ └── +Page.tsx │ │ ├── index │ │ │ ├── +Page.tsx │ │ │ └── Counter.tsx │ │ ├── star-wars │ │ │ ├── @id │ │ │ │ ├── +Page.tsx │ │ │ │ └── +data.ts │ │ │ ├── index │ │ │ │ ├── +Page.tsx │ │ │ │ └── +data.ts │ │ │ └── types.ts │ │ ├── stardust │ │ │ ├── +Layout.tsx │ │ │ └── +Page.tsx │ │ ├── starship │ │ │ ├── +Layout.tsx │ │ │ ├── +Page.tsx │ │ │ ├── +config.ts │ │ │ ├── reviews │ │ │ │ └── +Page.tsx │ │ │ └── spec │ │ │ │ └── +Page.tsx │ │ └── without-ssr │ │ │ ├── +Page.tsx │ │ │ └── +config.ts │ ├── tsconfig.json │ └── vite.config.ts ├── vike-vercel │ ├── .gitignore │ ├── .test-dev.test.ts │ ├── .test-prod.test.ts │ ├── .testCiJob.json │ ├── README.md │ ├── express-entry.ts │ ├── package.json │ ├── pages │ │ ├── +config.js │ │ ├── Layout.css │ │ ├── Layout.jsx │ │ ├── about │ │ │ └── +Page.jsx │ │ └── index │ │ │ ├── +Page.jsx │ │ │ └── Counter.jsx │ ├── server │ │ └── vike-handler.ts │ ├── tsconfig.json │ └── vite.config.ts ├── vike-vue │ ├── .gitignore │ ├── .test-dev.test.ts │ ├── .test-preview.test.ts │ ├── .testCiJob.json │ ├── .testRun.ts │ ├── README.md │ ├── assets │ │ ├── logo-new.svg │ │ └── logo.svg │ ├── components │ │ ├── Counter.vue │ │ ├── Link.vue │ │ └── Toggler.vue │ ├── package.json │ ├── pages │ │ ├── +Head.vue │ │ ├── +Layout.vue │ │ ├── +config.ts │ │ ├── +onCreateApp.ts │ │ ├── _error │ │ │ └── +Page.vue │ │ ├── client-only │ │ │ └── +Page.vue │ │ ├── global.css │ │ ├── hello │ │ │ ├── +Page.vue │ │ │ ├── +data.ts │ │ │ ├── +route.ts │ │ │ └── names.ts │ │ ├── images │ │ │ ├── +Page.vue │ │ │ └── Image.vue │ │ ├── index │ │ │ └── +Page.vue │ │ ├── markdown │ │ │ ├── +Page.md │ │ │ └── +config.ts │ │ ├── star-wars │ │ │ ├── index │ │ │ │ ├── +Page.vue │ │ │ │ ├── +data.ts │ │ │ │ ├── +description.ts │ │ │ │ └── +title.ts │ │ │ ├── movie │ │ │ │ ├── +Page.vue │ │ │ │ ├── +data.ts │ │ │ │ └── +route.ts │ │ │ └── types.ts │ │ ├── starship │ │ │ ├── +Layout.vue │ │ │ ├── +Page.vue │ │ │ ├── Counter.vue │ │ │ ├── DummyText.vue │ │ │ ├── reviews │ │ │ │ └── +Page.vue │ │ │ └── spec │ │ │ │ └── +Page.vue │ │ └── without-ssr │ │ │ ├── +Page.vue │ │ │ └── +config.ts │ ├── tsconfig.json │ ├── vite.config.ts │ └── vue-shim.d.ts ├── vitest │ ├── .gitignore │ ├── dev.spec.ts │ ├── package.json │ ├── pages │ │ ├── +config.js │ │ ├── Layout.css │ │ ├── Layout.jsx │ │ ├── about │ │ │ └── +Page.jsx │ │ └── index │ │ │ ├── +Page.jsx │ │ │ └── Counter.jsx │ ├── preview.spec.ts │ ├── server │ │ └── index.js │ ├── testRun.ts │ ├── tsconfig.json │ └── vite.config.js └── webpack │ ├── .gitignore │ ├── .test-dev.test.ts │ ├── .test-preview.test.ts │ ├── .testCiJob.json │ ├── package.json │ ├── pages │ ├── about │ │ └── +Page.jsx │ └── index │ │ ├── +Page.jsx │ │ └── Counter.jsx │ ├── renderer │ ├── +onRenderClient.jsx │ ├── +onRenderHtml.jsx │ ├── Layout.css │ └── Layout.jsx │ ├── server │ └── main.mjs │ ├── vite.config.js │ └── webpack.config.js ├── vike ├── .gitignore ├── .npmignore ├── .npmrc ├── README.md ├── RenderErrorPage.js ├── TODO ├── __internal.js ├── __internal │ ├── index.ts │ └── setup.js ├── abort.js ├── api.js ├── biome.json ├── cli.js ├── client.js ├── client │ ├── client-routing-runtime │ │ ├── createPageContextClientSide.ts │ │ ├── entry.ts │ │ ├── getBaseServer.ts │ │ ├── getPageContext │ │ │ └── removeBuiltInOverrides.ts │ │ ├── getPageContextCurrent.ts │ │ ├── getPageContextFromHooks.ts │ │ ├── globalContext.ts │ │ ├── history.ts │ │ ├── index.ts │ │ ├── initClientRouter.ts │ │ ├── initOnLinkClick.ts │ │ ├── initOnPopState.ts │ │ ├── isClientSideRoutable.ts │ │ ├── navigate.ts │ │ ├── normalizeUrlArgument.ts │ │ ├── onLoad.ts │ │ ├── prefetch.ts │ │ ├── prefetch │ │ │ ├── PrefetchSetting.ts │ │ │ └── getPrefetchSettings.ts │ │ ├── preparePageContextForPublicUsageClient.ts │ │ ├── renderPageClientSide.ts │ │ ├── scrollRestoration.ts │ │ ├── setScrollPosition.ts │ │ ├── skipLink.ts │ │ └── utils.ts │ ├── index.ts │ ├── node.ts │ ├── router.js │ ├── server-routing-runtime │ │ ├── createPageContextClientSide.ts │ │ ├── entry.ts │ │ ├── globalContext.ts │ │ ├── index.ts │ │ ├── onLoad.ts │ │ ├── preparePageContextForPublicUsageClient.ts │ │ └── utils.ts │ └── shared │ │ ├── createGetGlobalContextClient.ts │ │ ├── executeOnRenderClientHook.ts │ │ ├── getCurrentUrl.ts │ │ ├── getJsonSerializedInHtml.ts │ │ ├── loadPageConfigsLazyClientSide.ts │ │ ├── normalizeClientSideUrl.ts │ │ ├── preparePageContextForPublicUsageClientShared.ts │ │ ├── removeFoucBuster.ts │ │ └── utils.ts ├── dist-cjs-fixup.mjs ├── getPageContext.js ├── modifyUrl.js ├── node │ ├── api │ │ ├── build.ts │ │ ├── context.ts │ │ ├── dev.ts │ │ ├── index.ts │ │ ├── onLoad.ts │ │ ├── prepareViteApiCall.ts │ │ ├── prerender.ts │ │ ├── preview.ts │ │ ├── types.ts │ │ └── utils.ts │ ├── cli │ │ ├── bin.js │ │ ├── context.ts │ │ ├── entry.ts │ │ ├── index.ts │ │ ├── onLoad.ts │ │ ├── parseCli.ts │ │ └── utils.ts │ ├── client │ │ └── router.ts │ ├── createPageRenderer.ts │ ├── importBuild.ts │ ├── plugin │ │ ├── index.ts │ │ ├── onLoad.ts │ │ ├── plugins │ │ │ ├── baseUrls.ts │ │ │ ├── build.ts │ │ │ ├── build │ │ │ │ ├── handleAssetsManifest.ts │ │ │ │ ├── pluginAutoFullBuild.ts │ │ │ │ ├── pluginBuildApp.ts │ │ │ │ ├── pluginBuildConfig.ts │ │ │ │ ├── pluginBuildEntry.ts │ │ │ │ ├── pluginDistFileNames.ts │ │ │ │ ├── pluginDistPackageJsonFile.ts │ │ │ │ ├── pluginModuleBanner.ts │ │ │ │ └── pluginSuppressRollupWarning.ts │ │ │ ├── commonConfig.ts │ │ │ ├── commonConfig │ │ │ │ └── assertResolveAlias.ts │ │ │ ├── devConfig │ │ │ │ ├── determineFsAllowList.ts │ │ │ │ ├── determineOptimizeDeps.ts │ │ │ │ └── index.ts │ │ │ ├── envVars.ts │ │ │ ├── extractAssetsPlugin.ts │ │ │ ├── extractExportNamesPlugin.ts │ │ │ ├── fileEnv.ts │ │ │ ├── importUserCode │ │ │ │ ├── getVirtualFileImportUserCode.ts │ │ │ │ ├── index.ts │ │ │ │ └── v1-design │ │ │ │ │ ├── getVikeConfig.ts │ │ │ │ │ ├── getVikeConfig │ │ │ │ │ ├── assertExtensions.ts │ │ │ │ │ ├── configDefinitionsBuiltIn.ts │ │ │ │ │ ├── crawlPlusFiles.ts │ │ │ │ │ ├── crawlPlusFiles │ │ │ │ │ │ ├── crawlPlusFiles.spec.ts │ │ │ │ │ │ ├── ignorePatternsBuiltIn.ts │ │ │ │ │ │ └── test-file-structure │ │ │ │ │ │ │ ├── +config.js │ │ │ │ │ │ │ ├── .gitignore │ │ │ │ │ │ │ └── pages │ │ │ │ │ │ │ ├── +config.js │ │ │ │ │ │ │ └── +some.telefunc.js │ │ │ │ │ ├── filesystemRouting.spec.ts │ │ │ │ │ ├── filesystemRouting.ts │ │ │ │ │ ├── getConfigFileExport.ts │ │ │ │ │ ├── getPlusFilesAll.ts │ │ │ │ │ ├── loadFileAtConfigTime.ts │ │ │ │ │ ├── pointerImports.spec.ts │ │ │ │ │ ├── pointerImports.ts │ │ │ │ │ ├── resolvePointerImport.ts │ │ │ │ │ └── transpileAndExecuteFile.ts │ │ │ │ │ └── virtual-files │ │ │ │ │ ├── debug.ts │ │ │ │ │ ├── getVirtualFilePageConfigValuesAll.ts │ │ │ │ │ ├── getVirtualFilePageConfigs.ts │ │ │ │ │ └── isRuntimeEnvMatch.ts │ │ │ ├── previewConfig.ts │ │ │ ├── replaceConstants.ts │ │ │ ├── setGlobalContext.ts │ │ │ ├── workaroundCssModuleHmr.ts │ │ │ └── workaroundVite6HmrRegression.ts │ │ ├── shared │ │ │ ├── addSsrMiddleware.ts │ │ │ ├── applyRegExWithMagicString.ts │ │ │ ├── findPageFiles.ts │ │ │ ├── getAssetsDir.ts │ │ │ ├── getEnvVarObject.ts │ │ │ ├── getFilePath.ts │ │ │ ├── getHttpRequestAsyncStore.ts │ │ │ ├── getOutDirs.ts │ │ │ ├── getViteConfigRuntime.ts │ │ │ ├── isAsset.ts │ │ │ ├── isViteCliCall.ts │ │ │ ├── isViteServerBuild.ts │ │ │ ├── loggerNotProd.ts │ │ │ ├── loggerNotProd │ │ │ │ ├── errorWithCodeSnippet.ts │ │ │ │ ├── errorWithCodeSnippet │ │ │ │ │ ├── fixture-errors │ │ │ │ │ │ ├── errBabelReact.ts │ │ │ │ │ │ ├── errBabelSolid.ts │ │ │ │ │ │ ├── errEsbuild.ts │ │ │ │ │ │ ├── errMdx1.ts │ │ │ │ │ │ ├── errMdx2.ts │ │ │ │ │ │ ├── errPostcss.ts │ │ │ │ │ │ ├── errSwc.ts │ │ │ │ │ │ ├── errSwcBig.ts │ │ │ │ │ │ ├── errVueCss.ts │ │ │ │ │ │ ├── errVueHtml.ts │ │ │ │ │ │ └── errVueJavascript.ts │ │ │ │ │ ├── getPrettyErrMessage.spec.ts │ │ │ │ │ └── getPrettyErrorWithCodeSnippet.spec.ts │ │ │ │ └── log.ts │ │ │ ├── loggerVite.ts │ │ │ ├── loggerVite │ │ │ │ └── removeSuperfluousViteLog.ts │ │ │ ├── normalizeId.ts │ │ │ ├── parseEsModule.ts │ │ │ ├── resolveClientEntriesDev.ts │ │ │ └── rollupIsEsm.ts │ │ └── utils.ts │ ├── prerender │ │ ├── context.ts │ │ ├── index.ts │ │ ├── resolvePrerenderConfig.ts │ │ ├── runPrerender.ts │ │ └── utils.ts │ ├── runtime-dev │ │ ├── createDevMiddleware.ts │ │ └── index.ts │ ├── runtime │ │ ├── globalContext.ts │ │ ├── html │ │ │ ├── injectAssets.ts │ │ │ ├── injectAssets │ │ │ │ ├── getHtmlTags.ts │ │ │ │ ├── getViteDevScript.ts │ │ │ │ ├── inferHtmlTags.ts │ │ │ │ ├── injectAssets__public.ts │ │ │ │ ├── injectHtmlTags.spec.ts │ │ │ │ ├── injectHtmlTags.ts │ │ │ │ ├── mergeScriptTags.ts │ │ │ │ └── sanitizeJson.ts │ │ │ ├── propKeys.spec.ts │ │ │ ├── propKeys.ts │ │ │ ├── renderHtml.ts │ │ │ ├── serializeContext.ts │ │ │ ├── stream.ts │ │ │ └── stream │ │ │ │ └── react-streaming.ts │ │ ├── index-deprecated.ts │ │ ├── index.ts │ │ ├── onLoad.ts │ │ ├── page-files │ │ │ └── setup.ts │ │ ├── renderPage.ts │ │ ├── renderPage │ │ │ ├── analyzePage.ts │ │ │ ├── assertArguments.ts │ │ │ ├── createHttpResponse.ts │ │ │ ├── createHttpResponse │ │ │ │ ├── assertNoInfiniteHttpRedirect.spec.ts │ │ │ │ ├── assertNoInfiniteHttpRedirect.ts │ │ │ │ └── getCacheControl.ts │ │ │ ├── createPageContextServerSide.ts │ │ │ ├── debugPageFiles.ts │ │ │ ├── execHookServer.ts │ │ │ ├── executeOnBeforeRenderAndDataHooks.ts │ │ │ ├── executeOnRenderHtmlHook.ts │ │ │ ├── getEarlyHints.ts │ │ │ ├── getHttpResponseBody.ts │ │ │ ├── getPageAssets.ts │ │ │ ├── getPageAssets │ │ │ │ ├── getManifestEntry.ts │ │ │ │ ├── retrieveAssetsDev.ts │ │ │ │ ├── retrieveAssetsProd.ts │ │ │ │ └── sortPageAssetsForEarlyHintsHeader.ts │ │ │ ├── handleErrorWithoutErrorPage.ts │ │ │ ├── handlePageContextRequestUrl.ts │ │ │ ├── inferMediaType.ts │ │ │ ├── isFontFallback.ts │ │ │ ├── isNewError.ts │ │ │ ├── isVikeConfigInvalid.ts │ │ │ ├── loadPageConfigsLazyServerSide.ts │ │ │ ├── log404 │ │ │ │ ├── index.spec.snapshot-1 │ │ │ │ ├── index.spec.snapshot-2 │ │ │ │ ├── index.spec.ts │ │ │ │ └── index.ts │ │ │ ├── logErrorHint.ts │ │ │ ├── logErrorHint │ │ │ │ ├── errors.ts │ │ │ │ └── getErrorHint.spec.ts │ │ │ ├── loggerProd.ts │ │ │ ├── loggerRuntime.ts │ │ │ ├── preparePageContextForPublicUsageServer.ts │ │ │ ├── renderPageAlreadyRouted.ts │ │ │ ├── resolveRedirects.spec.ts │ │ │ └── resolveRedirects.ts │ │ ├── universal-middleware.ts │ │ └── utils.ts │ └── shared │ │ ├── ViteManifest.ts │ │ ├── assertV1Design.ts │ │ ├── extractAssetsQuery.ts │ │ ├── isErrorDebug.ts │ │ ├── prependEntriesDir.ts │ │ ├── resolveBase.ts │ │ ├── utils.ts │ │ ├── virtual-files.ts │ │ └── virtual-files │ │ ├── virtualFileImportUserCode.ts │ │ └── virtualFilePageConfigValuesAll.ts ├── package.json ├── plugin.js ├── prerender.js ├── routing.js ├── server.js ├── shared │ ├── NOT_SERIALIZABLE.ts │ ├── RenderErrorPage.ts │ ├── VikeNamespace.ts │ ├── abort.ts │ ├── addIs404ToPageProps.ts │ ├── assertHookReturnedObject.ts │ ├── assertOnBeforeRenderHookReturn.ts │ ├── assertPageContextProvidedByUser.ts │ ├── createGlobalContextShared.ts │ ├── createPageContextShared.ts │ ├── determinePageIdOld.ts │ ├── error-page.ts │ ├── getPageContext.ts │ ├── getPageContextRequestUrl.ts │ ├── getPageContextUrlComputed.ts │ ├── getPageFiles.ts │ ├── getPageFiles │ │ ├── analyzeClientSide.ts │ │ ├── analyzePageClientSide.ts │ │ ├── analyzePageClientSide │ │ │ ├── ClientDependency.ts │ │ │ ├── analyzeExports.ts │ │ │ ├── determineClientEntry.ts │ │ │ └── getExportNames.ts │ │ ├── analyzePageServerSide.ts │ │ ├── assert_exports_old_design.ts │ │ ├── fileTypes.ts │ │ ├── getAllPageIdFiles.ts │ │ ├── getPageFileObject.ts │ │ └── parseGlobResults.ts │ ├── getProxyForPublicUsage.ts │ ├── hooks │ │ ├── execHook.ts │ │ └── getHook.ts │ ├── htmlElementIds.ts │ ├── misc │ │ ├── isServerSideError.ts │ │ └── pageContextInitIsPassedToClient.ts │ ├── modifyUrl.spec.ts │ ├── modifyUrl.ts │ ├── modifyUrlSameOrigin.ts │ ├── page-configs │ │ ├── Config.ts │ │ ├── Config │ │ │ ├── PageContextConfig.ts │ │ │ └── helpers.ts │ │ ├── FilePath.ts │ │ ├── PageConfig.ts │ │ ├── assertPlusFileExport.ts │ │ ├── findPageConfig.ts │ │ ├── getConfigDefinedAt.ts │ │ ├── getConfigValueBuildTime.ts │ │ ├── getConfigValueRuntime.ts │ │ ├── getConfigValueTyped.ts │ │ ├── getExportPath.spec.ts │ │ ├── getExportPath.ts │ │ ├── getUserFriendlyConfigs.ts │ │ ├── helpers.ts │ │ ├── loadConfigValues.ts │ │ └── serialize │ │ │ ├── PageConfigSerialized.ts │ │ │ ├── assertPageConfigsSerialized.ts │ │ │ ├── parsePageConfigs.ts │ │ │ └── serializeConfigValues.ts │ ├── prepareGlobalContextForPublicUsage.ts │ ├── preparePageContextForPublicUsage.ts │ ├── route │ │ ├── abort.ts │ │ ├── debug.ts │ │ ├── deduceRouteStringFromFilesystemPath.spec.ts │ │ ├── deduceRouteStringFromFilesystemPath.ts │ │ ├── executeGuardHook.ts │ │ ├── executeOnBeforeRouteHook.ts │ │ ├── index.ts │ │ ├── loadPageRoutes.ts │ │ ├── noRouteMatch.ts │ │ ├── resolvePrecedence.ts │ │ ├── resolvePrecedence │ │ │ ├── resolvePrecedence_overall.spec.ts │ │ │ └── resolvePrecedence_route-strings.spec.ts │ │ ├── resolveRoute.ts │ │ ├── resolveRouteFunction.ts │ │ ├── resolveRouteString.spec.ts │ │ ├── resolveRouteString.ts │ │ ├── resolveUrlPathname.spec.ts │ │ ├── resolveUrlPathname.ts │ │ ├── routing.ts │ │ └── utils.ts │ ├── types.ts │ └── utils.ts ├── tsconfig.cjs.json ├── tsconfig.json ├── types.js ├── types │ ├── defineConfig.ts │ ├── index-dreprecated.ts │ └── index.ts ├── universal-middleware.js └── utils │ ├── PROJECT_VERSION.ts │ ├── PromiseType.ts │ ├── assert.ts │ ├── assertIsBrowser.ts │ ├── assertIsNotBrowser.ts │ ├── assertKeys.ts │ ├── assertNodeVersion.ts │ ├── assertRoutingType.ts │ ├── assertSetup.ts │ ├── assertSingleInstance.ts │ ├── assertVersion.ts │ ├── augmentType.ts │ ├── capitalizeFirstLetter.ts │ ├── cast.ts │ ├── catchInfiniteLoop.ts │ ├── changeEnumerable.ts │ ├── checkType.ts │ ├── compareString.ts │ ├── createErrorWithCleanStackTrace.ts │ ├── debug.ts │ ├── debugGlob.ts │ ├── deepEqual.ts │ ├── escapeHtml.ts │ ├── escapeRegex.ts │ ├── findFile.ts │ ├── findPackageJson.ts │ ├── formatHintLog.ts │ ├── freezePartial.spec.ts │ ├── freezePartial.ts │ ├── genPromise.ts │ ├── getFileExtension.ts │ ├── getGlobalObject.ts │ ├── getMostSimilar.ts │ ├── getPropAccessNotation.ts │ ├── getRandomId.ts │ ├── getTerminWidth.ts │ ├── getValuePrintable.spec.ts │ ├── getValuePrintable.ts │ ├── hasProp.ts │ ├── humanizeTime.ts │ ├── includes.ts │ ├── injectRollupInputs.ts │ ├── isArray.ts │ ├── isArrayOfStrings.ts │ ├── isBrowser.ts │ ├── isCallable.ts │ ├── isDev.ts │ ├── isDocker.ts │ ├── isEqualStringList.ts │ ├── isFilePathAbsoluteFilesystem.ts │ ├── isHtml.spec.ts │ ├── isHtml.ts │ ├── isImportPath.ts │ ├── isNodeJS.ts │ ├── isNullish.ts │ ├── isObject.ts │ ├── isObjectOfStrings.ts │ ├── isObjectWithKeys.ts │ ├── isPlainObject.ts │ ├── isPromise.ts │ ├── isPropertyGetter.ts │ ├── isReact.ts │ ├── isSameErrorMessage.ts │ ├── isScriptFile.ts │ ├── isVikeReactApp.ts │ ├── isVitest.ts │ ├── joinEnglish.ts │ ├── normalizeHeaders.spec.ts │ ├── normalizeHeaders.ts │ ├── objectAssign.ts │ ├── objectAssignSafe.ts │ ├── objectDefineProperty.ts │ ├── objectEntries.ts │ ├── objectEntriesForEach.ts │ ├── objectFilter.ts │ ├── objectFromEntries.ts │ ├── objectKeys.ts │ ├── objectReplace.ts │ ├── onPageVisibilityChange.ts │ ├── pLimit.ts │ ├── parseNpmPackage.spec.ts │ ├── parseNpmPackage.ts │ ├── parseUrl-extras.spec.ts │ ├── parseUrl-extras.ts │ ├── parseUrl.spec.ts │ ├── parseUrl.ts │ ├── path.ts │ ├── pick.ts │ ├── preservePropertyGetters.spec.ts │ ├── preservePropertyGetters.ts │ ├── redirectHard.ts │ ├── removeEmptyLines.ts │ ├── removeFileExtention.ts │ ├── requireResolve.ts │ ├── rollupSourceMap.ts │ ├── sleep.ts │ ├── slice.ts │ ├── sorter.ts │ ├── stringifyStringArray.ts │ ├── stripAnsi.ts │ ├── styleFileRE.ts │ ├── throttle.ts │ ├── trackLogs.ts │ ├── trimWithAnsi.spec.ts │ ├── trimWithAnsi.ts │ ├── truncateString.ts │ ├── unique.ts │ ├── urlToFile.ts │ └── warnIfErrorIsNotObject.ts └── vitest.workspace.ts /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: vikejs 2 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug.yml: -------------------------------------------------------------------------------- 1 | name: "💥 Bug" 2 | description: Report a bug. 3 | labels: ["bug :boom:"] 4 | body: 5 | - type: textarea 6 | attributes: 7 | label: Description 8 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature.yml: -------------------------------------------------------------------------------- 1 | name: "🚀 Feature" 2 | description: Suggest a new feature. 3 | labels: ["enhancement :rocket:"] 4 | body: 5 | - type: textarea 6 | attributes: 7 | label: Description 8 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/polish.yaml: -------------------------------------------------------------------------------- 1 | name: "✨ Polish" 2 | description: Unclear API or docs? Let us know — we'll polish Vike's DX. 3 | labels: ["polish :sparkles:"] 4 | body: 5 | - type: textarea 6 | attributes: 7 | label: Description 8 | -------------------------------------------------------------------------------- /.github/workflows/ci/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | -------------------------------------------------------------------------------- /.github/workflows/ci/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "strict": true, 4 | "moduleResolution": "Node", 5 | "noImplicitAny": true, 6 | "checkJs": true, 7 | "esModuleInterop": true, 8 | "module": "ESNext", 9 | "skipLibCheck": true 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | # https://github.com/vikejs/vike/pull/1997 3 | /.pnpm-store/ 4 | -------------------------------------------------------------------------------- /.ignore: -------------------------------------------------------------------------------- 1 | /vite/ 2 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | semi: false 2 | tabWidth: 2 3 | singleQuote: true 4 | printWidth: 120 5 | trailingComma: none 6 | -------------------------------------------------------------------------------- /boilerplates/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | dist/ 3 | -------------------------------------------------------------------------------- /boilerplates/.npmignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | package-lock.json 4 | -------------------------------------------------------------------------------- /boilerplates/boilerplate-react-ts/.test-dev.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from '../.testRun' 2 | testRun('npm run dev', { uiFramewok: 'react', lang: 'ts' }) 3 | -------------------------------------------------------------------------------- /boilerplates/boilerplate-react-ts/.test-prod.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from '../.testRun' 2 | testRun('npm run prod', { uiFramewok: 'react', lang: 'ts' }) 3 | -------------------------------------------------------------------------------- /boilerplates/boilerplate-react-ts/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Boilerplates" } 2 | -------------------------------------------------------------------------------- /boilerplates/boilerplate-react-ts/_gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | dist/ 3 | -------------------------------------------------------------------------------- /boilerplates/boilerplate-react-ts/pages/about/+Page.tsx: -------------------------------------------------------------------------------- 1 | import './code.css' 2 | 3 | export { Page } 4 | 5 | function Page() { 6 | return ( 7 | <> 8 |

About

9 |

Example of using Vike.

10 | 11 | ) 12 | } 13 | -------------------------------------------------------------------------------- /boilerplates/boilerplate-react-ts/pages/about/code.css: -------------------------------------------------------------------------------- 1 | code { 2 | font-family: monospace; 3 | background-color: #eaeaea; 4 | padding: 3px 5px; 5 | border-radius: 4px; 6 | } 7 | -------------------------------------------------------------------------------- /boilerplates/boilerplate-react-ts/pages/star-wars/types.ts: -------------------------------------------------------------------------------- 1 | export type Movie = { 2 | id: string 3 | title: string 4 | release_date: string 5 | } 6 | export type MovieDetails = Movie & { 7 | director: string 8 | producer: string 9 | } 10 | -------------------------------------------------------------------------------- /boilerplates/boilerplate-react-ts/renderer/Layout.css: -------------------------------------------------------------------------------- 1 | #sidebar a { 2 | padding: 2px 10px; 3 | margin-left: -10px; 4 | } 5 | #sidebar a.is-active { 6 | background-color: #eee; 7 | } 8 | -------------------------------------------------------------------------------- /boilerplates/boilerplate-react-ts/renderer/css/code.css: -------------------------------------------------------------------------------- 1 | code { 2 | font-family: monospace; 3 | background-color: #eaeaea; 4 | padding: 3px 5px; 5 | border-radius: 4px; 6 | } 7 | -------------------------------------------------------------------------------- /boilerplates/boilerplate-react-ts/renderer/css/index.css: -------------------------------------------------------------------------------- 1 | @import './reset.css'; 2 | @import './links.css'; 3 | @import './code.css'; 4 | @import './page-transition-loading-animation.css'; 5 | -------------------------------------------------------------------------------- /boilerplates/boilerplate-react-ts/renderer/css/links.css: -------------------------------------------------------------------------------- 1 | a { 2 | text-decoration: none; 3 | } 4 | -------------------------------------------------------------------------------- /boilerplates/boilerplate-react-ts/renderer/css/reset.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | font-family: sans-serif; 4 | } 5 | * { 6 | box-sizing: border-box; 7 | } 8 | -------------------------------------------------------------------------------- /boilerplates/boilerplate-react-ts/vite.config.ts: -------------------------------------------------------------------------------- 1 | import react from '@vitejs/plugin-react' 2 | import vike from 'vike/plugin' 3 | import { UserConfig } from 'vite' 4 | 5 | const config: UserConfig = { 6 | plugins: [react(), vike()] 7 | } 8 | 9 | export default config 10 | -------------------------------------------------------------------------------- /boilerplates/boilerplate-react/.test-dev.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from '../.testRun' 2 | testRun('npm run dev', { uiFramewok: 'react' }) 3 | -------------------------------------------------------------------------------- /boilerplates/boilerplate-react/.test-prod.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from '../.testRun' 2 | testRun('npm run prod', { uiFramewok: 'react' }) 3 | -------------------------------------------------------------------------------- /boilerplates/boilerplate-react/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Boilerplates" } 2 | -------------------------------------------------------------------------------- /boilerplates/boilerplate-react/_gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | dist/ 3 | -------------------------------------------------------------------------------- /boilerplates/boilerplate-react/pages/about/+Page.jsx: -------------------------------------------------------------------------------- 1 | import './code.css' 2 | 3 | export { Page } 4 | 5 | function Page() { 6 | return ( 7 | <> 8 |

About

9 |

Example of using Vike.

10 | 11 | ) 12 | } 13 | -------------------------------------------------------------------------------- /boilerplates/boilerplate-react/pages/about/code.css: -------------------------------------------------------------------------------- 1 | code { 2 | font-family: monospace; 3 | background-color: #eaeaea; 4 | padding: 3px 5px; 5 | border-radius: 4px; 6 | } 7 | -------------------------------------------------------------------------------- /boilerplates/boilerplate-react/renderer/Layout.css: -------------------------------------------------------------------------------- 1 | #sidebar a { 2 | padding: 2px 10px; 3 | margin-left: -10px; 4 | } 5 | #sidebar a.is-active { 6 | background-color: #eee; 7 | } 8 | -------------------------------------------------------------------------------- /boilerplates/boilerplate-react/renderer/PropTypeValues.js: -------------------------------------------------------------------------------- 1 | import PropTypes from 'prop-types' 2 | 3 | export let childrenPropType = PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired 4 | -------------------------------------------------------------------------------- /boilerplates/boilerplate-react/renderer/css/code.css: -------------------------------------------------------------------------------- 1 | code { 2 | font-family: monospace; 3 | background-color: #eaeaea; 4 | padding: 3px 5px; 5 | border-radius: 4px; 6 | } 7 | -------------------------------------------------------------------------------- /boilerplates/boilerplate-react/renderer/css/index.css: -------------------------------------------------------------------------------- 1 | @import './reset.css'; 2 | @import './links.css'; 3 | @import './code.css'; 4 | @import './page-transition-loading-animation.css'; 5 | -------------------------------------------------------------------------------- /boilerplates/boilerplate-react/renderer/css/links.css: -------------------------------------------------------------------------------- 1 | a { 2 | text-decoration: none; 3 | } 4 | -------------------------------------------------------------------------------- /boilerplates/boilerplate-react/renderer/css/reset.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | font-family: sans-serif; 4 | } 5 | * { 6 | box-sizing: border-box; 7 | } 8 | -------------------------------------------------------------------------------- /boilerplates/boilerplate-react/renderer/useData.js: -------------------------------------------------------------------------------- 1 | // https://vike.dev/useData 2 | export { useData } 3 | 4 | import { usePageContext } from './usePageContext' 5 | 6 | /** https://vike.dev/useData */ 7 | function useData() { 8 | const { data } = usePageContext() 9 | return data 10 | } 11 | -------------------------------------------------------------------------------- /boilerplates/boilerplate-react/vite.config.js: -------------------------------------------------------------------------------- 1 | import react from '@vitejs/plugin-react' 2 | import vike from 'vike/plugin' 3 | 4 | export default { 5 | plugins: [react(), vike()] 6 | } 7 | -------------------------------------------------------------------------------- /boilerplates/boilerplate-vue-ts/.test-dev.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from '../.testRun' 2 | testRun('npm run dev', { uiFramewok: 'vue' }) 3 | -------------------------------------------------------------------------------- /boilerplates/boilerplate-vue-ts/.test-prod.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from '../.testRun' 2 | testRun('npm run prod', { uiFramewok: 'vue' }) 3 | -------------------------------------------------------------------------------- /boilerplates/boilerplate-vue-ts/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Boilerplates" } 2 | -------------------------------------------------------------------------------- /boilerplates/boilerplate-vue-ts/_gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | dist/ 3 | -------------------------------------------------------------------------------- /boilerplates/boilerplate-vue-ts/pages/index/Counter.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 9 | -------------------------------------------------------------------------------- /boilerplates/boilerplate-vue-ts/pages/star-wars/types.ts: -------------------------------------------------------------------------------- 1 | export type Movie = { 2 | id: string 3 | title: string 4 | release_date: string 5 | } 6 | export type MovieDetails = Movie & { 7 | director: string 8 | producer: string 9 | } 10 | -------------------------------------------------------------------------------- /boilerplates/boilerplate-vue-ts/renderer/css/code.css: -------------------------------------------------------------------------------- 1 | code { 2 | font-family: monospace; 3 | background-color: #eaeaea; 4 | padding: 3px 5px; 5 | border-radius: 4px; 6 | } 7 | -------------------------------------------------------------------------------- /boilerplates/boilerplate-vue-ts/renderer/css/index.css: -------------------------------------------------------------------------------- 1 | @import './reset.css'; 2 | @import './links.css'; 3 | @import './code.css'; 4 | @import './page-transition-loading-animation.css'; 5 | -------------------------------------------------------------------------------- /boilerplates/boilerplate-vue-ts/renderer/css/links.css: -------------------------------------------------------------------------------- 1 | a { 2 | text-decoration: none; 3 | } 4 | -------------------------------------------------------------------------------- /boilerplates/boilerplate-vue-ts/renderer/css/reset.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | font-family: sans-serif; 4 | } 5 | * { 6 | box-sizing: border-box; 7 | } 8 | -------------------------------------------------------------------------------- /boilerplates/boilerplate-vue-ts/renderer/utils.ts: -------------------------------------------------------------------------------- 1 | // Same as Object.assign() but with type inference 2 | export function objectAssign( 3 | obj: Obj, 4 | objAddendum: ObjAddendum 5 | ): asserts obj is Obj & ObjAddendum { 6 | Object.assign(obj, objAddendum) 7 | } 8 | -------------------------------------------------------------------------------- /boilerplates/boilerplate-vue-ts/vite.config.ts: -------------------------------------------------------------------------------- 1 | import vue from '@vitejs/plugin-vue' 2 | import vike from 'vike/plugin' 3 | import { UserConfig } from 'vite' 4 | 5 | const config: UserConfig = { 6 | plugins: [vue(), vike()] 7 | } 8 | 9 | export default config 10 | -------------------------------------------------------------------------------- /boilerplates/boilerplate-vue-ts/vue.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.vue' { 2 | const Component: any 3 | export default Component 4 | } 5 | -------------------------------------------------------------------------------- /boilerplates/boilerplate-vue/.test-dev.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from '../.testRun' 2 | testRun('npm run dev', { uiFramewok: 'vue' }) 3 | -------------------------------------------------------------------------------- /boilerplates/boilerplate-vue/.test-prod.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from '../.testRun' 2 | testRun('npm run prod', { uiFramewok: 'vue' }) 3 | -------------------------------------------------------------------------------- /boilerplates/boilerplate-vue/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Boilerplates" } 2 | -------------------------------------------------------------------------------- /boilerplates/boilerplate-vue/_gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | dist/ 3 | -------------------------------------------------------------------------------- /boilerplates/boilerplate-vue/pages/index/Counter.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 9 | -------------------------------------------------------------------------------- /boilerplates/boilerplate-vue/renderer/css/code.css: -------------------------------------------------------------------------------- 1 | code { 2 | font-family: monospace; 3 | background-color: #eaeaea; 4 | padding: 3px 5px; 5 | border-radius: 4px; 6 | } 7 | -------------------------------------------------------------------------------- /boilerplates/boilerplate-vue/renderer/css/index.css: -------------------------------------------------------------------------------- 1 | @import './reset.css'; 2 | @import './links.css'; 3 | @import './code.css'; 4 | @import './page-transition-loading-animation.css'; 5 | -------------------------------------------------------------------------------- /boilerplates/boilerplate-vue/renderer/css/links.css: -------------------------------------------------------------------------------- 1 | a { 2 | text-decoration: none; 3 | } 4 | -------------------------------------------------------------------------------- /boilerplates/boilerplate-vue/renderer/css/reset.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | font-family: sans-serif; 4 | } 5 | * { 6 | box-sizing: border-box; 7 | } 8 | -------------------------------------------------------------------------------- /boilerplates/boilerplate-vue/vite.config.js: -------------------------------------------------------------------------------- 1 | import vue from '@vitejs/plugin-vue' 2 | import vike from 'vike/plugin' 3 | 4 | export default { 5 | plugins: [vue(), vike()] 6 | } 7 | -------------------------------------------------------------------------------- /docs/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /docs/.test-dev.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from './.testRun' 2 | testRun('pnpm run dev') 3 | -------------------------------------------------------------------------------- /docs/.test-preview.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from './.testRun' 2 | testRun('pnpm run preview') 3 | -------------------------------------------------------------------------------- /docs/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "https://vike.dev" } 2 | -------------------------------------------------------------------------------- /docs/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | See [CONTRIBUTING.md > docs](/CONTRIBUTING.md#docs). 2 | -------------------------------------------------------------------------------- /docs/components/ProvidedBy.css: -------------------------------------------------------------------------------- 1 | p + p.no-top-margin { 2 | margin-top: -16px; 3 | } 4 | -------------------------------------------------------------------------------- /docs/pages/+config.ts: -------------------------------------------------------------------------------- 1 | export { config } 2 | 3 | import docpress from '@brillout/docpress/config' 4 | import type { Config } from 'vike/types' 5 | 6 | const config = { 7 | extends: docpress 8 | } satisfies Config 9 | -------------------------------------------------------------------------------- /docs/pages/AuthJS-old-1/+Page.mdx: -------------------------------------------------------------------------------- 1 | Page moved to [/Auth.js](/Auth.js). 2 | -------------------------------------------------------------------------------- /docs/pages/AuthJS-old-1/+route.ts: -------------------------------------------------------------------------------- 1 | export default '/nextauth' 2 | -------------------------------------------------------------------------------- /docs/pages/AuthJS-old-2/+Page.mdx: -------------------------------------------------------------------------------- 1 | Page moved to [/Auth.js](/Auth.js). 2 | -------------------------------------------------------------------------------- /docs/pages/AuthJS-old-2/+route.ts: -------------------------------------------------------------------------------- 1 | export default '/NextAuth.js' 2 | -------------------------------------------------------------------------------- /docs/pages/AuthJS/+route.ts: -------------------------------------------------------------------------------- 1 | export default '/Auth.js' 2 | -------------------------------------------------------------------------------- /docs/pages/Head-setting/+Page.mdx: -------------------------------------------------------------------------------- 1 | import { Link } from '@brillout/docpress' 2 | 3 | Page moved to: 4 | - 5 | - 6 | -------------------------------------------------------------------------------- /docs/pages/Loading/LoadingComponent.css: -------------------------------------------------------------------------------- 1 | @keyframes vike-react-shine { 2 | to { 3 | background-position-x: -200%; 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /docs/pages/RenderErrorPage/+Page.mdx: -------------------------------------------------------------------------------- 1 | import { Link } from '@brillout/docpress' 2 | 3 | Deprecated in favor of and . 4 | -------------------------------------------------------------------------------- /docs/pages/SPA-vs-SSR-vs-HTML/+Page.mdx: -------------------------------------------------------------------------------- 1 | Page moved to [/render-modes](/render-modes). 2 | -------------------------------------------------------------------------------- /docs/pages/SR-vs-CR/+Page.mdx: -------------------------------------------------------------------------------- 1 | Page moved to [/server-routing-vs-client-routing](/server-routing-vs-client-routing). 2 | -------------------------------------------------------------------------------- /docs/pages/SSR_/+route.ts: -------------------------------------------------------------------------------- 1 | // On windows, same named files (case-insensitively) crashes 2 | export default '/SSR' 3 | -------------------------------------------------------------------------------- /docs/pages/add-ssr-to-vite-app/+Page.mdx: -------------------------------------------------------------------------------- 1 | import { Link } from '@brillout/docpress' 2 | 3 | Page moved to . 4 | -------------------------------------------------------------------------------- /docs/pages/aws-lambda/+Page.mdx: -------------------------------------------------------------------------------- 1 | import { Link } from '@brillout/docpress' 2 | 3 | See . 4 | -------------------------------------------------------------------------------- /docs/pages/banner/+Page.tsx: -------------------------------------------------------------------------------- 1 | export { Page } 2 | 3 | import React from 'react' 4 | import { Banner } from './Banner' 5 | 6 | function Page() { 7 | return 8 | } 9 | -------------------------------------------------------------------------------- /docs/pages/banner/+client.ts: -------------------------------------------------------------------------------- 1 | // This should override the default +client.ts (we'll soon make +client.js and thus we'll need to update docs/ to make it override the default) 2 | import '@brillout/docpress/style' 3 | -------------------------------------------------------------------------------- /docs/pages/banner/+config.ts: -------------------------------------------------------------------------------- 1 | import type { Config } from 'vike/types' 2 | 3 | export default { 4 | clientHooks: false 5 | } satisfies Config 6 | -------------------------------------------------------------------------------- /docs/pages/banner/cover/+Page.tsx: -------------------------------------------------------------------------------- 1 | export { Page } 2 | 3 | import React from 'react' 4 | import { BannerVikings } from '../Banner' 5 | 6 | function Page() { 7 | return 8 | } 9 | -------------------------------------------------------------------------------- /docs/pages/client-only-components/+Page.mdx: -------------------------------------------------------------------------------- 1 | import { Link } from '@brillout/docpress' 2 | 3 | Page moved to . 4 | -------------------------------------------------------------------------------- /docs/pages/cloudflare-workers/+Page.mdx: -------------------------------------------------------------------------------- 1 | import { Link } from '@brillout/docpress' 2 | 3 | Page moved to . 4 | -------------------------------------------------------------------------------- /docs/pages/common-problems/+Page.mdx: -------------------------------------------------------------------------------- 1 | import { Link } from '@brillout/docpress' 2 | 3 | Page moved to 4 | -------------------------------------------------------------------------------- /docs/pages/compiled/+Page.mdx: -------------------------------------------------------------------------------- 1 | import { UseScaffolder, CommunityNote } from '../../components' 2 | 3 | 4 | 5 | Compiled 6 | -------------------------------------------------------------------------------- /docs/pages/config-code-splitting/+Page.mdx: -------------------------------------------------------------------------------- 1 | import { Link } from '@brillout/docpress' 2 | 3 | Content moved to . 4 | -------------------------------------------------------------------------------- /docs/pages/createPageRenderer/+Page.mdx: -------------------------------------------------------------------------------- 1 | import { Warning, Link } from '@brillout/docpress' 2 | 3 | `createPageRenderer()` is deprecated, see . 4 | -------------------------------------------------------------------------------- /docs/pages/css-tools/+Page.mdx: -------------------------------------------------------------------------------- 1 | import { Link } from '@brillout/docpress' 2 | 3 | Page moved to . 4 | -------------------------------------------------------------------------------- /docs/pages/data-tools/+Page.mdx: -------------------------------------------------------------------------------- 1 | import { Link } from '@brillout/docpress' 2 | 3 | Page moved to: 4 | - 5 | - 6 | -------------------------------------------------------------------------------- /docs/pages/dot-env-files/+Page.mdx: -------------------------------------------------------------------------------- 1 | import { Link } from '@brillout/docpress' 2 | 3 | Page moved to . 4 | -------------------------------------------------------------------------------- /docs/pages/dot-env-files/+route.ts: -------------------------------------------------------------------------------- 1 | export default '/.env-files' 2 | -------------------------------------------------------------------------------- /docs/pages/dot-page-dot-client-dot-js/+route.ts: -------------------------------------------------------------------------------- 1 | export default '/.page.client.js' 2 | -------------------------------------------------------------------------------- /docs/pages/dot-page-dot-js/+route.ts: -------------------------------------------------------------------------------- 1 | export default '/.page.js' 2 | -------------------------------------------------------------------------------- /docs/pages/dot-page-dot-route-dot-js/+route.ts: -------------------------------------------------------------------------------- 1 | export default '/.page.route.js' 2 | -------------------------------------------------------------------------------- /docs/pages/dot-page-dot-server-dot-js/+route.ts: -------------------------------------------------------------------------------- 1 | export default '/.page.server.js' 2 | -------------------------------------------------------------------------------- /docs/pages/dynamic-import/+Page.mdx: -------------------------------------------------------------------------------- 1 | import { Link } from '@brillout/docpress' 2 | 3 | Page moved to . 4 | -------------------------------------------------------------------------------- /docs/pages/errors/+Page.mdx: -------------------------------------------------------------------------------- 1 | import { Link } from '@brillout/docpress' 2 | 3 | Page moved to . 4 | -------------------------------------------------------------------------------- /docs/pages/exports/+Page.mdx: -------------------------------------------------------------------------------- 1 | import { Link, Danger } from '@brillout/docpress' 2 | 3 | Defining custom exports/hooks using `pageContext.exports` is deprecated, instead create custom hooks and settings by using `meta`, see 4 | -------------------------------------------------------------------------------- /docs/pages/h3/+Page.mdx: -------------------------------------------------------------------------------- 1 | import { UseScaffolder, CommunityNote } from '../../components' 2 | 3 | 4 | 5 | H3 6 | -------------------------------------------------------------------------------- /docs/pages/hattip/+Page.mdx: -------------------------------------------------------------------------------- 1 | import { UseScaffolder, CommunityNote } from '../../components' 2 | 3 | 4 | 5 | HatTip 6 | -------------------------------------------------------------------------------- /docs/pages/head-tags/TableStyle.tsx: -------------------------------------------------------------------------------- 1 | export { TableStyle } 2 | 3 | import React from 'react' 4 | import './TableStyle.css' 5 | 6 | function TableStyle({ children }: { children: React.ReactNode }) { 7 | return
{children}
8 | } 9 | -------------------------------------------------------------------------------- /docs/pages/head_/+Page.mdx: -------------------------------------------------------------------------------- 1 | import { Link } from '@brillout/docpress' 2 | 3 | Page moved to: 4 | - 5 | - 6 | -------------------------------------------------------------------------------- /docs/pages/head_/+route.ts: -------------------------------------------------------------------------------- 1 | export default '/head' 2 | -------------------------------------------------------------------------------- /docs/pages/header-file/+Page.mdx: -------------------------------------------------------------------------------- 1 | import { Link } from '@brillout/docpress' 2 | 3 | Content moved to . 4 | -------------------------------------------------------------------------------- /docs/pages/header-file/import-from-same-file/+Page.mdx: -------------------------------------------------------------------------------- 1 | import { Link } from '@brillout/docpress' 2 | 3 | Content moved to . 4 | -------------------------------------------------------------------------------- /docs/pages/html-head/+Page.mdx: -------------------------------------------------------------------------------- 1 | Page moved to [/head](/head). 2 | -------------------------------------------------------------------------------- /docs/pages/html-streaming/+Page.mdx: -------------------------------------------------------------------------------- 1 | import { Link } from '@brillout/docpress' 2 | 3 | Page moved to . 4 | -------------------------------------------------------------------------------- /docs/pages/https/+Page.mdx: -------------------------------------------------------------------------------- 1 | import { Link } from '@brillout/docpress' 2 | 3 | Page moved to 4 | -------------------------------------------------------------------------------- /docs/pages/importBuild-dot-cjs/+route.ts: -------------------------------------------------------------------------------- 1 | export default '/importBuild.cjs' 2 | -------------------------------------------------------------------------------- /docs/pages/importBuild-dot-js/+route.ts: -------------------------------------------------------------------------------- 1 | export default '/importBuild.js' 2 | -------------------------------------------------------------------------------- /docs/pages/index/global.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | // vite-plugin-svgr 4 | declare module '*.svg?react' { 5 | const value: () => React.JSX.Element 6 | export default value 7 | } 8 | -------------------------------------------------------------------------------- /docs/pages/index/links.ts: -------------------------------------------------------------------------------- 1 | export const linkGetStarted = '/new' 2 | -------------------------------------------------------------------------------- /docs/pages/index/primaryColor.tsx: -------------------------------------------------------------------------------- 1 | export const primaryColor = '#1810FF' 2 | -------------------------------------------------------------------------------- /docs/pages/index/sections/hero/UsedBy/usedby-contra.svg: -------------------------------------------------------------------------------- 1 | ../../sponsors/sponsorsLogo/contra.svg -------------------------------------------------------------------------------- /docs/pages/index/sections/hero/UsedBy/usedby-ecosia.svg: -------------------------------------------------------------------------------- 1 | ../../sponsors/sponsorsLogo/ecosia.svg -------------------------------------------------------------------------------- /docs/pages/index/sections/hero/UsedBy/usedby-spline.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vikejs/vike/9478659491baf1c93086eb1127a1a88dd027456b/docs/pages/index/sections/hero/UsedBy/usedby-spline.webp -------------------------------------------------------------------------------- /docs/pages/index/sections/sponsors/sponsorsLogo/burdaforward.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vikejs/vike/9478659491baf1c93086eb1127a1a88dd027456b/docs/pages/index/sections/sponsors/sponsorsLogo/burdaforward.png -------------------------------------------------------------------------------- /docs/pages/index/sections/sponsors/sponsorsLogo/inlang.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vikejs/vike/9478659491baf1c93086eb1127a1a88dd027456b/docs/pages/index/sections/sponsors/sponsorsLogo/inlang.png -------------------------------------------------------------------------------- /docs/pages/layouts/+Page.mdx: -------------------------------------------------------------------------------- 1 | import { Link } from '@brillout/docpress' 2 | 3 | Page moved to . 4 | -------------------------------------------------------------------------------- /docs/pages/migration-0.4/+Page.mdx: -------------------------------------------------------------------------------- 1 | import { Link } from '@brillout/docpress' 2 | 3 | Page moved to: . 4 | -------------------------------------------------------------------------------- /docs/pages/migration/+Page.mdx: -------------------------------------------------------------------------------- 1 | import { Link } from '@brillout/docpress' 2 | 3 | For non-breaking version updates, see [CHANGELOG.md](https://github.com/vikejs/vike/blob/main/CHANGELOG.md) instead. 4 | 5 | List of breaking version updates: 6 | - 7 | -------------------------------------------------------------------------------- /docs/pages/nextui/+Page.mdx: -------------------------------------------------------------------------------- 1 | import { Example, CommunityNote } from '../../components' 2 | 3 | 4 | 5 | Examples of using Vike with NextUI: 6 | - 7 | -------------------------------------------------------------------------------- /docs/pages/nitro/+Page.mdx: -------------------------------------------------------------------------------- 1 | import { Example, CommunityNote } from '../../components' 2 | 3 | 4 | 5 | Examples of using Vike with Nitro: 6 | - 7 | -------------------------------------------------------------------------------- /docs/pages/onPageTransitionEnd/+Page.mdx: -------------------------------------------------------------------------------- 1 | import { Link } from '@brillout/docpress' 2 | 3 | See . 4 | -------------------------------------------------------------------------------- /docs/pages/page-redirection/+Page.mdx: -------------------------------------------------------------------------------- 1 | import { Link } from '@brillout/docpress' 2 | 3 | Page removed, see the following instead. 4 | 5 | - . 6 | - . 7 | - 8 | - 9 | -------------------------------------------------------------------------------- /docs/pages/pageContext-anywhere/+Page.mdx: -------------------------------------------------------------------------------- 1 | import { Link } from '@brillout/docpress' 2 | 3 | Content moved to: 4 | - 5 | - 6 | -------------------------------------------------------------------------------- /docs/pages/pageContext-json/+route.ts: -------------------------------------------------------------------------------- 1 | export default '/pageContext.json' 2 | -------------------------------------------------------------------------------- /docs/pages/preload/+Page.mdx: -------------------------------------------------------------------------------- 1 | import { Link } from '@brillout/docpress' 2 | 3 | Page moved to . 4 | -------------------------------------------------------------------------------- /docs/pages/prerender-config/+Page.mdx: -------------------------------------------------------------------------------- 1 | import { Link } from '@brillout/docpress' 2 | 3 | Page moved to . 4 | -------------------------------------------------------------------------------- /docs/pages/press/press.css: -------------------------------------------------------------------------------- 1 | #page-content img { 2 | outline: 1px solid #ddd; 3 | margin-top: -9px; 4 | margin-bottom: 23px; 5 | } 6 | -------------------------------------------------------------------------------- /docs/pages/react-query/+Page.mdx: -------------------------------------------------------------------------------- 1 | import { Link } from '@brillout/docpress' 2 | 3 | Page moved to 4 | -------------------------------------------------------------------------------- /docs/pages/react-router/+Page.mdx: -------------------------------------------------------------------------------- 1 | import { RecommendationRouterLibraries } from '../../components' 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/pages/render-as-you-fetch/+Page.mdx: -------------------------------------------------------------------------------- 1 | import { Link } from '@brillout/docpress' 2 | 3 | Page moved to: . 4 | -------------------------------------------------------------------------------- /docs/pages/scaffold/+Page.mdx: -------------------------------------------------------------------------------- 1 | import { Link } from '@brillout/docpress' 2 | 3 | Page moved to . 4 | -------------------------------------------------------------------------------- /docs/pages/start/BatiCmd_bun.mdx: -------------------------------------------------------------------------------- 1 | ```bash 2 | bun create @batijs/app --react 3 | # Or: 4 | bun create @batijs/app --vue 5 | # Or: 6 | bun create @batijs/app --solid 7 | ``` 8 | -------------------------------------------------------------------------------- /docs/pages/start/BatiCmd_npm.mdx: -------------------------------------------------------------------------------- 1 | ```bash 2 | npm create @batijs/app --react 3 | # Or: 4 | npm create @batijs/app --vue 5 | # Or: 6 | npm create @batijs/app --solid 7 | ``` 8 | -------------------------------------------------------------------------------- /docs/pages/start/BatiCmd_pnpm.mdx: -------------------------------------------------------------------------------- 1 | ```bash 2 | pnpm create @batijs/app --react 3 | # Or: 4 | pnpm create @batijs/app --vue 5 | # Or: 6 | pnpm create @batijs/app --solid 7 | ``` 8 | -------------------------------------------------------------------------------- /docs/pages/start/BatiCmd_yarn.mdx: -------------------------------------------------------------------------------- 1 | ```bash 2 | yarn create @batijs/app --react 3 | # Or: 4 | yarn create @batijs/app --vue 5 | # Or: 6 | yarn create @batijs/app --solid 7 | ``` 8 | -------------------------------------------------------------------------------- /docs/pages/start/style.css: -------------------------------------------------------------------------------- 1 | span.gray { 2 | opacity: 0.69; 3 | /* 4 | */ 5 | font-size: 0.9em; 6 | } 7 | -------------------------------------------------------------------------------- /docs/pages/static-hosts/+Page.mdx: -------------------------------------------------------------------------------- 1 | import { StaticHostDocIntro, StaticHostDocOutro, StaticHostDocStrategies } from '../../components/static-host' 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /docs/pages/streaming/progressive-rendering-demo.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vikejs/vike/9478659491baf1c93086eb1127a1a88dd027456b/docs/pages/streaming/progressive-rendering-demo.webm -------------------------------------------------------------------------------- /docs/pages/tauri/+Page.mdx: -------------------------------------------------------------------------------- 1 | import { Example, CommunityNote } from '../../components' 2 | 3 | 4 | 5 | Example of using Vike with Tauri: 6 | - 7 | -------------------------------------------------------------------------------- /docs/pages/team/team.css: -------------------------------------------------------------------------------- 1 | #team code { 2 | padding: 2px 5px; 3 | } 4 | -------------------------------------------------------------------------------- /docs/pages/typescript/+Page.mdx: -------------------------------------------------------------------------------- 1 | WIP 2 | -------------------------------------------------------------------------------- /docs/pages/useClientRouter/+Page.mdx: -------------------------------------------------------------------------------- 1 | Page moved to [/clientRouting](/clientRouting). 2 | -------------------------------------------------------------------------------- /docs/pages/v1-design/+Page.mdx: -------------------------------------------------------------------------------- 1 | import { Link } from '@brillout/docpress' 2 | 3 | Page moved to: . 4 | -------------------------------------------------------------------------------- /docs/pages/vike-packages/+Page.mdx: -------------------------------------------------------------------------------- 1 | import { Link } from '@brillout/docpress' 2 | 3 | Page moved to . 4 | -------------------------------------------------------------------------------- /docs/pages/vike-server/+Page.mdx: -------------------------------------------------------------------------------- 1 | import { Link } from '@brillout/docpress' 2 | 3 | See . 4 | -------------------------------------------------------------------------------- /docs/pages/vike/+Page.mdx: -------------------------------------------------------------------------------- 1 | See [vite-plugin-ssr.com/vike](https://vite-plugin-ssr.com/vike). 2 | -------------------------------------------------------------------------------- /docs/pages/vue-router-and-react-router/+Page.mdx: -------------------------------------------------------------------------------- 1 | import { Link } from '@brillout/docpress' 2 | 3 | Page moved to: 4 | - 5 | - 6 | -------------------------------------------------------------------------------- /docs/pages/vue-router/+Page.mdx: -------------------------------------------------------------------------------- 1 | import { RecommendationRouterLibraries } from '../../components' 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/public/banner.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vikejs/vike/9478659491baf1c93086eb1127a1a88dd027456b/docs/public/banner.jpg -------------------------------------------------------------------------------- /docs/utils/PROJECT_VERSION.ts: -------------------------------------------------------------------------------- 1 | ../../vike/utils/PROJECT_VERSION.ts -------------------------------------------------------------------------------- /docs/utils/index.ts: -------------------------------------------------------------------------------- 1 | export * from './projectInfo' 2 | -------------------------------------------------------------------------------- /examples/auth/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /examples/auth/.test-dev.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from './.testRun' 2 | testRun('npm run dev') 3 | -------------------------------------------------------------------------------- /examples/auth/.test-prod.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from './.testRun' 2 | testRun('npm run prod') 3 | -------------------------------------------------------------------------------- /examples/auth/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Examples Misc" } 2 | -------------------------------------------------------------------------------- /examples/auth/pages/+Layout.ts: -------------------------------------------------------------------------------- 1 | export { default } from '../layouts/LayoutDefault' 2 | -------------------------------------------------------------------------------- /examples/auth/pages/+config.ts: -------------------------------------------------------------------------------- 1 | import type { Config } from 'vike/types' 2 | import vikeReact from 'vike-react/config' 3 | 4 | export default { 5 | passToClient: ['userFullName'], 6 | extends: vikeReact 7 | } satisfies Config 8 | -------------------------------------------------------------------------------- /examples/auth/server/root.js: -------------------------------------------------------------------------------- 1 | export { root } 2 | 3 | import { dirname } from 'path' 4 | import { fileURLToPath } from 'url' 5 | const __dirname = dirname(fileURLToPath(import.meta.url)) 6 | const root = `${__dirname}/..` 7 | -------------------------------------------------------------------------------- /examples/auth/vite.config.ts: -------------------------------------------------------------------------------- 1 | import react from '@vitejs/plugin-react' 2 | import vike from 'vike/plugin' 3 | 4 | export default { 5 | plugins: [react(), vike()] 6 | } 7 | -------------------------------------------------------------------------------- /examples/base-url-cdn/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /examples/base-url-cdn/.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from '../base-url/.testRun' 2 | 3 | testRun('npm run start', { baseAssets: 'http://localhost:8080/cdn/', baseServer: '/' }) 4 | -------------------------------------------------------------------------------- /examples/base-url-cdn/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Examples Misc" } 2 | -------------------------------------------------------------------------------- /examples/base-url-cdn/pages/about/+Page.jsx: -------------------------------------------------------------------------------- 1 | export default Page 2 | 3 | import React from 'react' 4 | 5 | function Page() { 6 | return ( 7 | <> 8 |

About

9 |

Example of setting the Base URL.

10 | 11 | ) 12 | } 13 | -------------------------------------------------------------------------------- /examples/base-url-cdn/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "manifest_version": 2, 3 | "name": "Base URL Example", 4 | "version": "0.0.0", 5 | "short_name": "base-url", 6 | "start_url": ".", 7 | "display": "standalone", 8 | "background_color": "#fff" 9 | } 10 | -------------------------------------------------------------------------------- /examples/base-url-cdn/renderer/+config.js: -------------------------------------------------------------------------------- 1 | // https://vike.dev/config 2 | export default { 3 | baseAssets: 'http://localhost:8080/cdn/', 4 | clientRouting: true, 5 | hydrationCanBeAborted: true, 6 | passToClient: ['pageProps'] 7 | } 8 | -------------------------------------------------------------------------------- /examples/base-url-cdn/renderer/Layout.css: -------------------------------------------------------------------------------- 1 | /* This CSS is common to all pages */ 2 | 3 | body { 4 | margin: 0; 5 | font-family: sans-serif; 6 | } 7 | * { 8 | box-sizing: border-box; 9 | } 10 | a { 11 | text-decoration: none; 12 | } 13 | -------------------------------------------------------------------------------- /examples/base-url-cdn/vite.config.js: -------------------------------------------------------------------------------- 1 | import react from '@vitejs/plugin-react' 2 | import vike from 'vike/plugin' 3 | 4 | export default { 5 | plugins: [vike(), react()] 6 | } 7 | -------------------------------------------------------------------------------- /examples/base-url-server/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /examples/base-url-server/.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from '../base-url/.testRun' 2 | 3 | testRun('npm run start', { baseServer: '/some/base-url/', baseAssets: 'http://localhost:8080/cdn/' }) 4 | -------------------------------------------------------------------------------- /examples/base-url-server/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Examples Misc" } 2 | -------------------------------------------------------------------------------- /examples/base-url-server/base.js: -------------------------------------------------------------------------------- 1 | export const baseServer = '/some/base-url/' 2 | export const baseAssets = 'http://localhost:8080/cdn/' 3 | -------------------------------------------------------------------------------- /examples/base-url-server/pages/about/+Page.jsx: -------------------------------------------------------------------------------- 1 | export default Page 2 | 3 | import React from 'react' 4 | 5 | function Page() { 6 | return ( 7 | <> 8 |

About

9 |

Example of setting the Base URL.

10 | 11 | ) 12 | } 13 | -------------------------------------------------------------------------------- /examples/base-url-server/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "manifest_version": 2, 3 | "name": "Base URL Example", 4 | "version": "0.0.0", 5 | "short_name": "base-url", 6 | "start_url": ".", 7 | "display": "standalone", 8 | "background_color": "#fff" 9 | } 10 | -------------------------------------------------------------------------------- /examples/base-url-server/renderer/Layout.css: -------------------------------------------------------------------------------- 1 | /* This CSS is common to all pages */ 2 | 3 | body { 4 | margin: 0; 5 | font-family: sans-serif; 6 | } 7 | * { 8 | box-sizing: border-box; 9 | } 10 | a { 11 | text-decoration: none; 12 | } 13 | -------------------------------------------------------------------------------- /examples/base-url-server/vite.config.js: -------------------------------------------------------------------------------- 1 | import react from '@vitejs/plugin-react' 2 | import vike from 'vike/plugin' 3 | 4 | export default { 5 | plugins: [vike(), react()] 6 | } 7 | -------------------------------------------------------------------------------- /examples/base-url/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /examples/base-url/.test-dev.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from './.testRun' 2 | const base = '/some/base-url' 3 | testRun('npm run dev', { baseServer: base, baseAssets: base }) 4 | -------------------------------------------------------------------------------- /examples/base-url/.test-preview.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from './.testRun' 2 | const base = '/some/base-url' 3 | testRun('npm run preview', { baseServer: base, baseAssets: base }) 4 | -------------------------------------------------------------------------------- /examples/base-url/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Examples Misc" } 2 | -------------------------------------------------------------------------------- /examples/base-url/pages/about/+Page.jsx: -------------------------------------------------------------------------------- 1 | export default Page 2 | 3 | import React from 'react' 4 | 5 | function Page() { 6 | return ( 7 | <> 8 |

About

9 |

Example of setting the Base URL.

10 | 11 | ) 12 | } 13 | -------------------------------------------------------------------------------- /examples/base-url/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "manifest_version": 2, 3 | "name": "Base URL Example", 4 | "version": "0.0.0", 5 | "short_name": "base-url", 6 | "start_url": ".", 7 | "display": "standalone", 8 | "background_color": "#fff" 9 | } 10 | -------------------------------------------------------------------------------- /examples/base-url/renderer/+config.js: -------------------------------------------------------------------------------- 1 | // https://vike.dev/config 2 | export default { 3 | prerender: true, 4 | passToClient: ['pageProps'], 5 | clientRouting: true, 6 | hydrationCanBeAborted: true 7 | } 8 | -------------------------------------------------------------------------------- /examples/base-url/renderer/Layout.css: -------------------------------------------------------------------------------- 1 | /* This CSS is common to all pages */ 2 | 3 | body { 4 | margin: 0; 5 | font-family: sans-serif; 6 | } 7 | * { 8 | box-sizing: border-box; 9 | } 10 | a { 11 | text-decoration: none; 12 | } 13 | -------------------------------------------------------------------------------- /examples/base-url/vite.config.js: -------------------------------------------------------------------------------- 1 | import react from '@vitejs/plugin-react' 2 | import vike from 'vike/plugin' 3 | 4 | export default { 5 | base: '/some/base-url', 6 | plugins: [react(), vike()] 7 | } 8 | -------------------------------------------------------------------------------- /examples/cloudflare-workers-react-full/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | /.wrangler/ 4 | -------------------------------------------------------------------------------- /examples/cloudflare-workers-react-full/.test-dev.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from './.testRun' 2 | testRun('npm run dev', { hasStarWarsPage: true }) 3 | -------------------------------------------------------------------------------- /examples/cloudflare-workers-react-full/.test-wrangler.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from './.testRun' 2 | testRun('npm run preview', { hasStarWarsPage: true }) 3 | -------------------------------------------------------------------------------- /examples/cloudflare-workers-react-full/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Cloudflare" } 2 | -------------------------------------------------------------------------------- /examples/cloudflare-workers-react-full/pages/about/+Page.tsx: -------------------------------------------------------------------------------- 1 | export default Page 2 | 3 | import React from 'react' 4 | 5 | function Page() { 6 | return ( 7 | <> 8 |

About

9 |

Example of using Vike.

10 | 11 | ) 12 | } 13 | -------------------------------------------------------------------------------- /examples/cloudflare-workers-react-full/renderer/+config.ts: -------------------------------------------------------------------------------- 1 | import type { Config } from 'vike/types' 2 | 3 | // https://vike.dev/config 4 | export default { 5 | passToClient: ['pageProps'] 6 | } satisfies Config 7 | -------------------------------------------------------------------------------- /examples/cloudflare-workers-react-full/vite.config.ts: -------------------------------------------------------------------------------- 1 | import react from '@vitejs/plugin-react' 2 | import vike from 'vike/plugin' 3 | import type { UserConfig } from 'vite' 4 | 5 | export default { 6 | plugins: [react(), vike()] 7 | } satisfies UserConfig 8 | -------------------------------------------------------------------------------- /examples/cloudflare-workers-react/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | /.wrangler/ 4 | -------------------------------------------------------------------------------- /examples/cloudflare-workers-react/.test-dev.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from '../cloudflare-workers-react-full/.testRun' 2 | testRun('npm run dev', { hasStarWarsPage: false }) 3 | -------------------------------------------------------------------------------- /examples/cloudflare-workers-react/.test-preview.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from '../cloudflare-workers-react-full/.testRun' 2 | testRun('npm run preview', { hasStarWarsPage: false }) 3 | -------------------------------------------------------------------------------- /examples/cloudflare-workers-react/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Cloudflare" } 2 | -------------------------------------------------------------------------------- /examples/cloudflare-workers-react/pages/about/+Page.jsx: -------------------------------------------------------------------------------- 1 | export default Page 2 | 3 | import React from 'react' 4 | 5 | function Page() { 6 | return ( 7 | <> 8 |

About

9 |

Example of using Vike.

10 | 11 | ) 12 | } 13 | -------------------------------------------------------------------------------- /examples/cloudflare-workers-react/renderer/+config.js: -------------------------------------------------------------------------------- 1 | // https://vike.dev/config 2 | export default { 3 | // https://vike.dev/passToClient 4 | passToClient: ['pageProps'] 5 | } 6 | -------------------------------------------------------------------------------- /examples/cloudflare-workers-react/vite.config.js: -------------------------------------------------------------------------------- 1 | import react from '@vitejs/plugin-react' 2 | import vike from 'vike/plugin' 3 | 4 | export default { 5 | plugins: [react(), vike()] 6 | } 7 | -------------------------------------------------------------------------------- /examples/cloudflare-workers-react/wrangler.toml: -------------------------------------------------------------------------------- 1 | main="./worker/index.js" 2 | name = "vike_worker-example" 3 | compatibility_date = "2021-09-29" 4 | workers_dev = true 5 | send_metrics = false 6 | 7 | [site] 8 | bucket = "./dist/client" 9 | 10 | [dev] 11 | port = 3000 12 | -------------------------------------------------------------------------------- /examples/cloudflare-workers-vue/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | /.wrangler/ 4 | -------------------------------------------------------------------------------- /examples/cloudflare-workers-vue/.test-dev.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from '../cloudflare-workers-react-full/.testRun' 2 | testRun('npm run dev', { hasStarWarsPage: false }) 3 | -------------------------------------------------------------------------------- /examples/cloudflare-workers-vue/.test-wrangler.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from '../cloudflare-workers-react-full/.testRun' 2 | testRun('npm run preview', { hasStarWarsPage: false }) 3 | -------------------------------------------------------------------------------- /examples/cloudflare-workers-vue/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Cloudflare" } 2 | -------------------------------------------------------------------------------- /examples/cloudflare-workers-vue/pages/about/+Page.vue: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /examples/cloudflare-workers-vue/renderer/+config.ts: -------------------------------------------------------------------------------- 1 | import type { Config } from 'vike/types' 2 | 3 | // https://vike.dev/config 4 | export default { 5 | passToClient: ['pageProps'] 6 | } satisfies Config 7 | -------------------------------------------------------------------------------- /examples/cloudflare-workers-vue/vite.config.js: -------------------------------------------------------------------------------- 1 | import vue from '@vitejs/plugin-vue' 2 | import vike from 'vike/plugin' 3 | 4 | export default { 5 | plugins: [vue(), vike()] 6 | } 7 | -------------------------------------------------------------------------------- /examples/custom-preload/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /examples/custom-preload/.test-preview.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from './.testRun' 2 | testRun('npm run preview') 3 | -------------------------------------------------------------------------------- /examples/custom-preload/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Examples Misc" } 2 | -------------------------------------------------------------------------------- /examples/custom-preload/pages/preload-disabled/+config.js: -------------------------------------------------------------------------------- 1 | // https://vike.dev/config 2 | export default { 3 | // The config 'preloadStrategy' is a custom config we defined at ../../renderer/+config.ts 4 | preloadStrategy: 'DISABLED' 5 | } 6 | -------------------------------------------------------------------------------- /examples/custom-preload/pages/preload-images/+config.js: -------------------------------------------------------------------------------- 1 | // https://vike.dev/config 2 | export default { 3 | // The config 'preloadStrategy' is a custom config we defined at ../../renderer/+config.ts 4 | preloadStrategy: 'IMAGES' 5 | } 6 | -------------------------------------------------------------------------------- /examples/custom-preload/renderer/Sono-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vikejs/vike/9478659491baf1c93086eb1127a1a88dd027456b/examples/custom-preload/renderer/Sono-Light.ttf -------------------------------------------------------------------------------- /examples/custom-preload/vite.config.js: -------------------------------------------------------------------------------- 1 | import react from '@vitejs/plugin-react' 2 | import vike from 'vike/plugin' 3 | 4 | export default { 5 | plugins: [react(), vike()] 6 | } 7 | -------------------------------------------------------------------------------- /examples/file-structure-domain-driven/(marketing)/pages/about/+Page.jsx: -------------------------------------------------------------------------------- 1 | export default Page 2 | 3 | import React from 'react' 4 | 5 | function Page() { 6 | return <>About page 7 | } 8 | -------------------------------------------------------------------------------- /examples/file-structure-domain-driven/(marketing)/pages/index/+Page.jsx: -------------------------------------------------------------------------------- 1 | export default Page 2 | 3 | import React from 'react' 4 | 5 | function Page() { 6 | return <>Welcome 7 | } 8 | -------------------------------------------------------------------------------- /examples/file-structure-domain-driven/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /examples/file-structure-domain-driven/.test-dev.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from './.testRun' 2 | testRun('npm run dev') 3 | -------------------------------------------------------------------------------- /examples/file-structure-domain-driven/.test-preview.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from './.testRun' 2 | testRun('npm run preview') 3 | -------------------------------------------------------------------------------- /examples/file-structure-domain-driven/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Examples React" } 2 | -------------------------------------------------------------------------------- /examples/file-structure-domain-driven/auth/pages/login/+Page.jsx: -------------------------------------------------------------------------------- 1 | export default Page 2 | 3 | import React from 'react' 4 | 5 | function Page() { 6 | return <>Login page 7 | } 8 | -------------------------------------------------------------------------------- /examples/file-structure-domain-driven/auth/pages/signup/+Page.jsx: -------------------------------------------------------------------------------- 1 | export default Page 2 | 3 | import React from 'react' 4 | 5 | function Page() { 6 | return <>Signup page 7 | } 8 | -------------------------------------------------------------------------------- /examples/file-structure-domain-driven/product/pages/index/+Page.jsx: -------------------------------------------------------------------------------- 1 | export default Page 2 | 3 | import React from 'react' 4 | 5 | function Page({ routeParams }) { 6 | return <>Product {routeParams.productId} 7 | } 8 | -------------------------------------------------------------------------------- /examples/file-structure-domain-driven/product/pages/index/+route.js: -------------------------------------------------------------------------------- 1 | export default '/product/@productId' 2 | -------------------------------------------------------------------------------- /examples/file-structure-domain-driven/product/pages/list/+onBeforePrerenderStart.js: -------------------------------------------------------------------------------- 1 | export default onBeforePrerenderStart 2 | 3 | function onBeforePrerenderStart() { 4 | return [{ url: '/product/starship', url: '/product/mac-studio', url: '/product/แจ็คเก็ตเดนิม' }] 5 | } 6 | -------------------------------------------------------------------------------- /examples/file-structure-domain-driven/product/pages/list/+route.js: -------------------------------------------------------------------------------- 1 | export default '/products' 2 | -------------------------------------------------------------------------------- /examples/file-structure-domain-driven/renderer/+config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | prerender: true, 3 | clientRouting: true, 4 | hydrationCanBeAborted: true, 5 | passToClient: ['routeParams'] 6 | } 7 | -------------------------------------------------------------------------------- /examples/file-structure-domain-driven/vite.config.js: -------------------------------------------------------------------------------- 1 | import react from '@vitejs/plugin-react' 2 | import vike from 'vike/plugin' 3 | 4 | export default { 5 | plugins: [vike(), react()] 6 | } 7 | -------------------------------------------------------------------------------- /examples/html-fragments/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /examples/html-fragments/.test-dev.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from './.testRun' 2 | testRun('npm run dev') 3 | -------------------------------------------------------------------------------- /examples/html-fragments/.test-preview.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from './.testRun' 2 | testRun('npm run preview') 3 | -------------------------------------------------------------------------------- /examples/html-fragments/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Examples Vue/Others" } 2 | -------------------------------------------------------------------------------- /examples/html-fragments/index/+config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | Page: null 3 | } 4 | -------------------------------------------------------------------------------- /examples/html-fragments/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "strict": true, 4 | "skipLibCheck": true 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /examples/html-fragments/vite.config.js: -------------------------------------------------------------------------------- 1 | import vike from 'vike/plugin' 2 | 3 | export default { 4 | plugins: [vike()] 5 | } 6 | -------------------------------------------------------------------------------- /examples/i18n/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /examples/i18n/.test-dev.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from './.testRun' 2 | testRun('npm run dev') 3 | -------------------------------------------------------------------------------- /examples/i18n/.test-preview.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from './.testRun' 2 | testRun('npm run preview') 3 | -------------------------------------------------------------------------------- /examples/i18n/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Examples React" } 2 | -------------------------------------------------------------------------------- /examples/i18n/locales/index.js: -------------------------------------------------------------------------------- 1 | export { extractLocale } from './extractLocale' 2 | export { translate } from './translate' 3 | export { locales, localeDefault } from './locales' 4 | -------------------------------------------------------------------------------- /examples/i18n/locales/locales.js: -------------------------------------------------------------------------------- 1 | export const locales = ['en-US', 'de-DE', 'fr-FR'] 2 | export const localeDefault = locales[0] 3 | -------------------------------------------------------------------------------- /examples/i18n/renderer/+config.js: -------------------------------------------------------------------------------- 1 | // https://vike.dev/config 2 | export default { 3 | prerender: true, 4 | passToClient: ['pageProps', 'locale'], 5 | clientRouting: true, 6 | hydrationCanBeAborted: true 7 | } 8 | -------------------------------------------------------------------------------- /examples/i18n/renderer/Layout.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | font-family: sans-serif; 4 | } 5 | * { 6 | box-sizing: border-box; 7 | } 8 | a { 9 | text-decoration: none; 10 | } 11 | 12 | .navitem { 13 | padding: 3px; 14 | } 15 | -------------------------------------------------------------------------------- /examples/i18n/vite.config.js: -------------------------------------------------------------------------------- 1 | import react from '@vitejs/plugin-react' 2 | import vike from 'vike/plugin' 3 | 4 | export default { 5 | plugins: [vike(), react()] 6 | } 7 | -------------------------------------------------------------------------------- /examples/path-aliases/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /examples/path-aliases/.test-dev.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from './.testRun' 2 | testRun('npm run dev') 3 | -------------------------------------------------------------------------------- /examples/path-aliases/.test-prod-static.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from './.testRun' 2 | testRun('npm run prod:static') 3 | -------------------------------------------------------------------------------- /examples/path-aliases/.test-prod.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from './.testRun' 2 | testRun('npm run prod') 3 | -------------------------------------------------------------------------------- /examples/path-aliases/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Examples React" } 2 | -------------------------------------------------------------------------------- /examples/path-aliases/pages/about/page_env.ts: -------------------------------------------------------------------------------- 1 | export { env } 2 | 3 | const env = { server: true } as const 4 | -------------------------------------------------------------------------------- /examples/path-aliases/server/msg.js: -------------------------------------------------------------------------------- 1 | export const msg = "This message was loaded using the path alias `#root`: `import { msg } from '#root/server/msg'`" 2 | -------------------------------------------------------------------------------- /examples/path-aliases/styles/magenta-text.css: -------------------------------------------------------------------------------- 1 | p { 2 | color: magenta; 3 | } 4 | -------------------------------------------------------------------------------- /examples/path-aliases/types/index.ts: -------------------------------------------------------------------------------- 1 | export * from './PageContext' 2 | -------------------------------------------------------------------------------- /examples/react-full/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /examples/react-full/.test-dev.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from '../react-full/.testRun' 2 | testRun('react', 'npm run dev', true) 3 | -------------------------------------------------------------------------------- /examples/react-full/.test-preview.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from '../react-full/.testRun' 2 | testRun('react', 'npm run preview', true) 3 | -------------------------------------------------------------------------------- /examples/react-full/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Examples React" } 2 | -------------------------------------------------------------------------------- /examples/react-full/components/Counter.tsx: -------------------------------------------------------------------------------- 1 | import React, { useState } from 'react' 2 | 3 | export { Counter } 4 | 5 | function Counter() { 6 | const [count, setCount] = useState(0) 7 | 8 | return 9 | } 10 | -------------------------------------------------------------------------------- /examples/react-full/pages/hello/names.ts: -------------------------------------------------------------------------------- 1 | export const names = ['evan', 'rom', 'alice', 'jon', 'eli'] 2 | -------------------------------------------------------------------------------- /examples/react-full/pages/markdown/+Page.mdx: -------------------------------------------------------------------------------- 1 | import { Counter } from '../../components/Counter'; 2 | 3 | # Markdown 4 | 5 | This page is written in _Markdown_. 6 | 7 | MDX allows us to include interactive components in the markdown. 8 | -------------------------------------------------------------------------------- /examples/react-full/pages/markdown/+client.ts: -------------------------------------------------------------------------------- 1 | console.log(`Hello from +client.ts with viewport height ${window.document.documentElement.clientHeight}`) 2 | -------------------------------------------------------------------------------- /examples/react-full/pages/markdown/+title.ts: -------------------------------------------------------------------------------- 1 | export default 'Some Markdown Page' 2 | -------------------------------------------------------------------------------- /examples/react-full/pages/star-wars/@id/+dataIsomorph.ts: -------------------------------------------------------------------------------- 1 | export default true 2 | -------------------------------------------------------------------------------- /examples/react-full/pages/star-wars/types.ts: -------------------------------------------------------------------------------- 1 | export type Movie = { 2 | id: string 3 | title: string 4 | release_date: string 5 | } 6 | export type MovieDetails = { 7 | id: string 8 | title: string 9 | release_date: string 10 | director: string 11 | producer: string 12 | } 13 | -------------------------------------------------------------------------------- /examples/react-full/renderer/Layout.css: -------------------------------------------------------------------------------- 1 | #sidebar a { 2 | padding: 2px 10px; 3 | margin-left: -10px; 4 | } 5 | #sidebar a.is-active { 6 | background-color: #eee; 7 | } 8 | -------------------------------------------------------------------------------- /examples/react-full/renderer/css/code.css: -------------------------------------------------------------------------------- 1 | code { 2 | font-family: monospace; 3 | background-color: #eaeaea; 4 | padding: 3px 5px; 5 | border-radius: 4px; 6 | } 7 | -------------------------------------------------------------------------------- /examples/react-full/renderer/css/index.css: -------------------------------------------------------------------------------- 1 | @import './reset.css'; 2 | @import './links.css'; 3 | @import './code.css'; 4 | @import './page-transition-loading-animation.css'; 5 | -------------------------------------------------------------------------------- /examples/react-full/renderer/css/links.css: -------------------------------------------------------------------------------- 1 | a { 2 | text-decoration: none; 3 | } 4 | -------------------------------------------------------------------------------- /examples/react-full/renderer/css/reset.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | font-family: sans-serif; 4 | } 5 | * { 6 | box-sizing: border-box; 7 | } 8 | -------------------------------------------------------------------------------- /examples/react-full/renderer/useData.tsx: -------------------------------------------------------------------------------- 1 | // https://vike.dev/useData 2 | export { useData } 3 | 4 | import { usePageContext } from './usePageContext' 5 | 6 | function useData() { 7 | const { data } = usePageContext() 8 | return data as Data 9 | } 10 | -------------------------------------------------------------------------------- /examples/react-full/vite.config.ts: -------------------------------------------------------------------------------- 1 | import react from '@vitejs/plugin-react-swc' 2 | import mdx from '@mdx-js/rollup' 3 | import vike from 'vike/plugin' 4 | import { UserConfig } from 'vite' 5 | 6 | export default { 7 | plugins: [vike(), mdx(), react()] 8 | } satisfies UserConfig 9 | -------------------------------------------------------------------------------- /examples/react-minimal/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /examples/react-minimal/.test-dev.test.ts: -------------------------------------------------------------------------------- 1 | import { testRunClassic } from '../../test/utils' 2 | testRunClassic('npm run preview') 3 | -------------------------------------------------------------------------------- /examples/react-minimal/.test-preview.test.ts: -------------------------------------------------------------------------------- 1 | import { testRunClassic } from '../../test/utils' 2 | testRunClassic('npm run preview') 3 | -------------------------------------------------------------------------------- /examples/react-minimal/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Examples React" } 2 | -------------------------------------------------------------------------------- /examples/react-minimal/pages/about/+Page.jsx: -------------------------------------------------------------------------------- 1 | export default Page 2 | 3 | import React from 'react' 4 | 5 | function Page() { 6 | return ( 7 | <> 8 |

About

9 |

Example of using Vike.

10 | 11 | ) 12 | } 13 | -------------------------------------------------------------------------------- /examples/react-minimal/vite.config.js: -------------------------------------------------------------------------------- 1 | import react from '@vitejs/plugin-react' 2 | 3 | export default { 4 | plugins: [react()] 5 | } 6 | -------------------------------------------------------------------------------- /examples/react-streaming/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /examples/react-streaming/.test-dev.test.ts: -------------------------------------------------------------------------------- 1 | import { testRunClassic } from '../../test/utils' 2 | testRunClassic('npm run dev') 3 | -------------------------------------------------------------------------------- /examples/react-streaming/.test-prod.test.ts: -------------------------------------------------------------------------------- 1 | import { testRunClassic } from '../../test/utils' 2 | testRunClassic('npm run prod') 3 | -------------------------------------------------------------------------------- /examples/react-streaming/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Examples React" } 2 | -------------------------------------------------------------------------------- /examples/react-streaming/pages/about/+Page.jsx: -------------------------------------------------------------------------------- 1 | export default Page 2 | 3 | import React from 'react' 4 | 5 | function Page() { 6 | return ( 7 | <> 8 |

About

9 |

Example of using Vike.

10 | 11 | ) 12 | } 13 | -------------------------------------------------------------------------------- /examples/react-streaming/renderer/+config.js: -------------------------------------------------------------------------------- 1 | // https://vike.dev/config 2 | export default { 3 | // https://vike.dev/passToClient 4 | passToClient: ['pageProps'] 5 | } 6 | -------------------------------------------------------------------------------- /examples/react-streaming/vite.config.js: -------------------------------------------------------------------------------- 1 | import react from '@vitejs/plugin-react' 2 | import vike from 'vike/plugin' 3 | 4 | export default { 5 | plugins: [react(), vike()] 6 | } 7 | -------------------------------------------------------------------------------- /examples/render-modes/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /examples/render-modes/.test-dev.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from './.testRun' 2 | testRun('npm run dev', true) 3 | -------------------------------------------------------------------------------- /examples/render-modes/.test-prod.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from './.testRun' 2 | testRun('npm run prod', true) 3 | -------------------------------------------------------------------------------- /examples/render-modes/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Examples React" } 2 | -------------------------------------------------------------------------------- /examples/render-modes/pages/html-js/+renderMode.js: -------------------------------------------------------------------------------- 1 | export default 'HTML' 2 | -------------------------------------------------------------------------------- /examples/render-modes/pages/html-js/index.css: -------------------------------------------------------------------------------- 1 | .colored { 2 | color: red; 3 | } 4 | -------------------------------------------------------------------------------- /examples/render-modes/pages/html-only/+renderMode.js: -------------------------------------------------------------------------------- 1 | export default 'HTML' 2 | -------------------------------------------------------------------------------- /examples/render-modes/pages/html-only/index.css: -------------------------------------------------------------------------------- 1 | .colored { 2 | color: orange; 3 | } 4 | -------------------------------------------------------------------------------- /examples/render-modes/pages/index/+renderMode.js: -------------------------------------------------------------------------------- 1 | export default 'HTML' 2 | -------------------------------------------------------------------------------- /examples/render-modes/pages/spa/+renderMode.js: -------------------------------------------------------------------------------- 1 | export default 'SPA' 2 | -------------------------------------------------------------------------------- /examples/render-modes/pages/spa/index.css: -------------------------------------------------------------------------------- 1 | .colored.spa { 2 | color: green; 3 | } 4 | -------------------------------------------------------------------------------- /examples/render-modes/pages/ssr/+renderMode.js: -------------------------------------------------------------------------------- 1 | export default 'SSR' 2 | -------------------------------------------------------------------------------- /examples/render-modes/pages/ssr/index.css: -------------------------------------------------------------------------------- 1 | .colored.ssr { 2 | color: blue; 3 | } 4 | -------------------------------------------------------------------------------- /examples/render-modes/vite.config.js: -------------------------------------------------------------------------------- 1 | import react from '@vitejs/plugin-react' 2 | import vike from 'vike/plugin' 3 | 4 | export default { 5 | plugins: [react(), vike()] 6 | } 7 | -------------------------------------------------------------------------------- /examples/telefunc/.dev.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from './.testRun' 2 | testRun('npm run dev') 3 | -------------------------------------------------------------------------------- /examples/telefunc/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /examples/telefunc/.prod.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from './.testRun' 2 | testRun('npm run prod') 3 | -------------------------------------------------------------------------------- /examples/telefunc/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Examples Vue/Others" } 2 | -------------------------------------------------------------------------------- /examples/telefunc/pages/about/+Page.tsx: -------------------------------------------------------------------------------- 1 | export default Page 2 | 3 | import React from 'react' 4 | 5 | function Page() { 6 | return ( 7 | <> 8 |

About

9 |

Showcase of using Telefunc + Vike.

10 | 11 | ) 12 | } 13 | -------------------------------------------------------------------------------- /examples/telefunc/pages/index/TodoList.telefunc.ts: -------------------------------------------------------------------------------- 1 | export { onNewTodo } 2 | 3 | import { todoItems } from '../../database/todoItems' 4 | 5 | async function onNewTodo({ text }) { 6 | todoItems.push({ text }) 7 | return { todoItems } 8 | } 9 | -------------------------------------------------------------------------------- /examples/telefunc/renderer/+config.ts: -------------------------------------------------------------------------------- 1 | import type { Config } from 'vike/types' 2 | 3 | // https://vike.dev/config 4 | export default { 5 | clientRouting: true, 6 | hydrationCanBeAborted: true, 7 | passToClient: ['pageProps'] 8 | } satisfies Config 9 | -------------------------------------------------------------------------------- /examples/telefunc/renderer/Layout.css: -------------------------------------------------------------------------------- 1 | /* This CSS is common to all pages */ 2 | 3 | body { 4 | margin: 0; 5 | font-family: sans-serif; 6 | } 7 | * { 8 | box-sizing: border-box; 9 | } 10 | a { 11 | text-decoration: none; 12 | } 13 | 14 | .navitem { 15 | padding: 3px; 16 | } 17 | -------------------------------------------------------------------------------- /examples/telefunc/vite.config.js: -------------------------------------------------------------------------------- 1 | import { telefunc } from 'telefunc/vite' 2 | import react from '@vitejs/plugin-react' 3 | import vike from 'vike/plugin' 4 | 5 | export default { 6 | plugins: [react(), vike(), telefunc()] 7 | } 8 | -------------------------------------------------------------------------------- /examples/vue-full/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /examples/vue-full/.test-dev.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from '../react-full/.testRun' 2 | testRun('vue', 'npm run dev', true) 3 | -------------------------------------------------------------------------------- /examples/vue-full/.test-preview.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from '../react-full/.testRun' 2 | testRun('vue', 'npm run preview', true) 3 | -------------------------------------------------------------------------------- /examples/vue-full/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Examples Vue/Others" } 2 | -------------------------------------------------------------------------------- /examples/vue-full/components/Counter.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 9 | -------------------------------------------------------------------------------- /examples/vue-full/pages/hello/names.ts: -------------------------------------------------------------------------------- 1 | export const names = ['evan', 'rom', 'alice', 'jon', 'eli'] 2 | -------------------------------------------------------------------------------- /examples/vue-full/pages/markdown/+Page.md: -------------------------------------------------------------------------------- 1 | 4 | 5 | # Markdown 6 | 7 | This page is written in _Markdown_. 8 | 9 | Interactive components can be included in the Markdown. 10 | -------------------------------------------------------------------------------- /examples/vue-full/pages/markdown/+client.ts: -------------------------------------------------------------------------------- 1 | console.log(`Hello from +client.ts with viewport height ${window.document.documentElement.clientHeight}`) 2 | -------------------------------------------------------------------------------- /examples/vue-full/pages/markdown/+config.ts: -------------------------------------------------------------------------------- 1 | export { config } 2 | 3 | import type { Config } from 'vike/types' 4 | 5 | // https://vike.dev/config 6 | const config = { 7 | title: 'Some Markdown Page' 8 | } satisfies Config 9 | -------------------------------------------------------------------------------- /examples/vue-full/pages/star-wars/types.ts: -------------------------------------------------------------------------------- 1 | export type Movie = { 2 | id: string 3 | title: string 4 | release_date: string 5 | } 6 | export type MovieDetails = { 7 | id: string 8 | title: string 9 | release_date: string 10 | director: string 11 | producer: string 12 | } 13 | -------------------------------------------------------------------------------- /examples/vue-full/renderer/utils.ts: -------------------------------------------------------------------------------- 1 | // Same as Object.assign() but with type inference 2 | export function objectAssign( 3 | obj: Obj, 4 | objAddendum: ObjAddendum 5 | ): asserts obj is Obj & ObjAddendum { 6 | Object.assign(obj, objAddendum) 7 | } 8 | -------------------------------------------------------------------------------- /examples/vue-full/types.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.vue' { 2 | const Component: any 3 | export default Component 4 | } 5 | declare module '*.svg' { 6 | const imageUrl: string 7 | export default imageUrl 8 | } 9 | -------------------------------------------------------------------------------- /examples/vue-minimal/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /examples/vue-minimal/.test-dev.test.ts: -------------------------------------------------------------------------------- 1 | import { testRunClassic } from '../../test/utils' 2 | testRunClassic('npm run dev') 3 | -------------------------------------------------------------------------------- /examples/vue-minimal/.test-preview.test.ts: -------------------------------------------------------------------------------- 1 | import { testRunClassic } from '../../test/utils' 2 | testRunClassic('npm run preview') 3 | -------------------------------------------------------------------------------- /examples/vue-minimal/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Examples Vue/Others" } 2 | -------------------------------------------------------------------------------- /examples/vue-minimal/pages/about/+Page.vue: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /examples/vue-minimal/renderer/+config.js: -------------------------------------------------------------------------------- 1 | // https://vike.dev/config 2 | export default { 3 | // https://vike.dev/passToClient 4 | passToClient: ['pageProps'] 5 | } 6 | -------------------------------------------------------------------------------- /examples/vue-minimal/vite.config.js: -------------------------------------------------------------------------------- 1 | import vue from '@vitejs/plugin-vue' 2 | import vike from 'vike/plugin' 3 | 4 | export default { 5 | plugins: [vue(), vike()] 6 | } 7 | -------------------------------------------------------------------------------- /pnpm-workspace.yaml: -------------------------------------------------------------------------------- 1 | packages: 2 | - 'vike/' 3 | - 'docs/' 4 | - 'boilerplates/' 5 | - 'boilerplates/*' 6 | - 'examples/*' 7 | - 'test/*' 8 | - 'test-deprecated-design/*' 9 | - '.github/workflows/ci' 10 | -------------------------------------------------------------------------------- /test-deprecated-design/base-url-cdn/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /test-deprecated-design/base-url-cdn/.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from '../../examples/base-url/.testRun' 2 | 3 | testRun('npm run start', { baseAssets: 'http://localhost:8080/cdn/', baseServer: '/' }) 4 | -------------------------------------------------------------------------------- /test-deprecated-design/base-url-cdn/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Examples Misc" } 2 | -------------------------------------------------------------------------------- /test-deprecated-design/base-url-cdn/pages/about/index.page.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | export { Page } 4 | 5 | function Page() { 6 | return ( 7 | <> 8 |

About

9 |

Example of setting the Base URL.

10 | 11 | ) 12 | } 13 | -------------------------------------------------------------------------------- /test-deprecated-design/base-url-cdn/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "manifest_version": 2, 3 | "name": "Base URL Example", 4 | "version": "0.0.0", 5 | "short_name": "base-url", 6 | "start_url": ".", 7 | "display": "standalone", 8 | "background_color": "#fff" 9 | } 10 | -------------------------------------------------------------------------------- /test-deprecated-design/base-url-cdn/renderer/Layout.css: -------------------------------------------------------------------------------- 1 | /* This CSS is common to all pages */ 2 | 3 | body { 4 | margin: 0; 5 | font-family: sans-serif; 6 | } 7 | * { 8 | box-sizing: border-box; 9 | } 10 | a { 11 | text-decoration: none; 12 | } 13 | -------------------------------------------------------------------------------- /test-deprecated-design/base-url-cdn/vite.config.js: -------------------------------------------------------------------------------- 1 | import react from '@vitejs/plugin-react' 2 | import vike from 'vike/plugin' 3 | 4 | export default { 5 | plugins: [ 6 | react(), 7 | vike({ 8 | baseAssets: 'http://localhost:8080/cdn/' 9 | }) 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /test-deprecated-design/base-url-server/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /test-deprecated-design/base-url-server/.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from '../../examples/base-url/.testRun' 2 | 3 | testRun('npm run start', { baseServer: '/some/base-url/', baseAssets: 'http://localhost:8080/cdn/' }) 4 | -------------------------------------------------------------------------------- /test-deprecated-design/base-url-server/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Examples Misc" } 2 | -------------------------------------------------------------------------------- /test-deprecated-design/base-url-server/base.js: -------------------------------------------------------------------------------- 1 | export const baseServer = '/some/base-url/' 2 | export const baseAssets = 'http://localhost:8080/cdn/' 3 | -------------------------------------------------------------------------------- /test-deprecated-design/base-url-server/pages/about/index.page.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | export { Page } 4 | 5 | function Page() { 6 | return ( 7 | <> 8 |

About

9 |

Example of setting the Base URL.

10 | 11 | ) 12 | } 13 | -------------------------------------------------------------------------------- /test-deprecated-design/base-url-server/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "manifest_version": 2, 3 | "name": "Base URL Example", 4 | "version": "0.0.0", 5 | "short_name": "base-url", 6 | "start_url": ".", 7 | "display": "standalone", 8 | "background_color": "#fff" 9 | } 10 | -------------------------------------------------------------------------------- /test-deprecated-design/base-url-server/renderer/Layout.css: -------------------------------------------------------------------------------- 1 | /* This CSS is common to all pages */ 2 | 3 | body { 4 | margin: 0; 5 | font-family: sans-serif; 6 | } 7 | * { 8 | box-sizing: border-box; 9 | } 10 | a { 11 | text-decoration: none; 12 | } 13 | -------------------------------------------------------------------------------- /test-deprecated-design/base-url/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /test-deprecated-design/base-url/.test-dev.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from '../../examples/base-url/.testRun' 2 | const base = '/some/base-url' 3 | testRun('npm run dev', { baseServer: base, baseAssets: base }) 4 | -------------------------------------------------------------------------------- /test-deprecated-design/base-url/.test-preview.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from '../../examples/base-url/.testRun' 2 | const base = '/some/base-url' 3 | testRun('npm run preview', { baseServer: base, baseAssets: base }) 4 | -------------------------------------------------------------------------------- /test-deprecated-design/base-url/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Examples Misc" } 2 | -------------------------------------------------------------------------------- /test-deprecated-design/base-url/pages/about/index.page.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | export { Page } 4 | 5 | function Page() { 6 | return ( 7 | <> 8 |

About

9 |

Example of setting the Base URL.

10 | 11 | ) 12 | } 13 | -------------------------------------------------------------------------------- /test-deprecated-design/base-url/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "manifest_version": 2, 3 | "name": "Base URL Example", 4 | "version": "0.0.0", 5 | "short_name": "base-url", 6 | "start_url": ".", 7 | "display": "standalone", 8 | "background_color": "#fff" 9 | } 10 | -------------------------------------------------------------------------------- /test-deprecated-design/base-url/renderer/Layout.css: -------------------------------------------------------------------------------- 1 | /* This CSS is common to all pages */ 2 | 3 | body { 4 | margin: 0; 5 | font-family: sans-serif; 6 | } 7 | * { 8 | box-sizing: border-box; 9 | } 10 | a { 11 | text-decoration: none; 12 | } 13 | -------------------------------------------------------------------------------- /test-deprecated-design/base-url/vite.config.js: -------------------------------------------------------------------------------- 1 | import react from '@vitejs/plugin-react' 2 | import vike from 'vike/plugin' 3 | 4 | export default { 5 | base: '/some/base-url', 6 | plugins: [react(), vike({ prerender: true })] 7 | } 8 | -------------------------------------------------------------------------------- /test-deprecated-design/cloudflare-workers-react-full/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /test-deprecated-design/cloudflare-workers-react-full/.test-dev.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from '../../examples/cloudflare-workers-react-full/.testRun' 2 | testRun('npm run dev', { hasStarWarsPage: true }) 3 | -------------------------------------------------------------------------------- /test-deprecated-design/cloudflare-workers-react-full/.test-wrangler.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from '../../examples/cloudflare-workers-react-full/.testRun' 2 | testRun('npm run preview', { hasStarWarsPage: true }) 3 | -------------------------------------------------------------------------------- /test-deprecated-design/cloudflare-workers-react-full/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Cloudflare" } 2 | -------------------------------------------------------------------------------- /test-deprecated-design/cloudflare-workers-react-full/pages/about/index.page.jsx: -------------------------------------------------------------------------------- 1 | export { Page } 2 | 3 | import React from 'react' 4 | 5 | function Page() { 6 | return ( 7 | <> 8 |

About

9 |

Example of using Vike.

10 | 11 | ) 12 | } 13 | -------------------------------------------------------------------------------- /test-deprecated-design/cloudflare-workers-react-full/renderer/PageContext.d.ts: -------------------------------------------------------------------------------- 1 | export type { PageContext } 2 | 3 | import type fetch from 'node-fetch' 4 | 5 | type PageContext = { 6 | Page: React.ReactNode 7 | fetch?: typeof fetch 8 | } 9 | -------------------------------------------------------------------------------- /test-deprecated-design/cloudflare-workers-react-full/vite.config.ts: -------------------------------------------------------------------------------- 1 | import react from '@vitejs/plugin-react' 2 | import vike from 'vike/plugin' 3 | import type { UserConfig } from 'vite' 4 | 5 | export default { 6 | plugins: [react(), vike()] 7 | } satisfies UserConfig 8 | -------------------------------------------------------------------------------- /test-deprecated-design/cloudflare-workers-react/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /test-deprecated-design/cloudflare-workers-react/.test-dev.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from '../../examples/cloudflare-workers-react-full/.testRun' 2 | testRun('npm run dev', { hasStarWarsPage: false }) 3 | -------------------------------------------------------------------------------- /test-deprecated-design/cloudflare-workers-react/.test-preview.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from '../../examples/cloudflare-workers-react-full/.testRun' 2 | testRun('npm run preview', { hasStarWarsPage: false }) 3 | -------------------------------------------------------------------------------- /test-deprecated-design/cloudflare-workers-react/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Cloudflare" } 2 | -------------------------------------------------------------------------------- /test-deprecated-design/cloudflare-workers-react/pages/about/index.page.jsx: -------------------------------------------------------------------------------- 1 | export { Page } 2 | 3 | import React from 'react' 4 | 5 | function Page() { 6 | return ( 7 | <> 8 |

About

9 |

Example of using Vike.

10 | 11 | ) 12 | } 13 | -------------------------------------------------------------------------------- /test-deprecated-design/cloudflare-workers-react/vite.config.js: -------------------------------------------------------------------------------- 1 | import react from '@vitejs/plugin-react' 2 | import vike from 'vike/plugin' 3 | 4 | export default { 5 | plugins: [react(), vike()] 6 | } 7 | -------------------------------------------------------------------------------- /test-deprecated-design/cloudflare-workers-react/wrangler.toml: -------------------------------------------------------------------------------- 1 | main="./worker/index.js" 2 | name = "vike_worker-example" 3 | compatibility_date = "2021-09-29" 4 | workers_dev = true 5 | send_metrics = false 6 | 7 | [site] 8 | bucket = "./dist/client" 9 | 10 | [dev] 11 | port = 3000 12 | -------------------------------------------------------------------------------- /test-deprecated-design/cloudflare-workers-vue/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /test-deprecated-design/cloudflare-workers-vue/.test-dev.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from '../../examples/cloudflare-workers-react-full/.testRun' 2 | testRun('npm run dev', { hasStarWarsPage: false }) 3 | -------------------------------------------------------------------------------- /test-deprecated-design/cloudflare-workers-vue/.test-wrangler.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from '../../examples/cloudflare-workers-react-full/.testRun' 2 | testRun('npm run preview', { hasStarWarsPage: false }) 3 | -------------------------------------------------------------------------------- /test-deprecated-design/cloudflare-workers-vue/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Cloudflare" } 2 | -------------------------------------------------------------------------------- /test-deprecated-design/cloudflare-workers-vue/pages/about/index.page.vue: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /test-deprecated-design/cloudflare-workers-vue/renderer/_default.page.client.js: -------------------------------------------------------------------------------- 1 | import { createVueApp } from './createVueApp' 2 | 3 | export { render } 4 | 5 | async function render(pageContext) { 6 | const app = createVueApp(pageContext) 7 | app.mount('#app') 8 | } 9 | -------------------------------------------------------------------------------- /test-deprecated-design/cloudflare-workers-vue/vite.config.js: -------------------------------------------------------------------------------- 1 | import vue from '@vitejs/plugin-vue' 2 | import vike from 'vike/plugin' 3 | 4 | export default { 5 | plugins: [vue(), vike()] 6 | } 7 | -------------------------------------------------------------------------------- /test-deprecated-design/file-structure-domain-driven/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /test-deprecated-design/file-structure-domain-driven/.test-dev.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from '../../examples/file-structure-domain-driven/.testRun' 2 | testRun('npm run dev') 3 | -------------------------------------------------------------------------------- /test-deprecated-design/file-structure-domain-driven/.test-preview.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from '../../examples/file-structure-domain-driven/.testRun' 2 | testRun('npm run preview') 3 | -------------------------------------------------------------------------------- /test-deprecated-design/file-structure-domain-driven/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Examples React" } 2 | -------------------------------------------------------------------------------- /test-deprecated-design/file-structure-domain-driven/auth/pages/login/index.page.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | export { Page } 4 | 5 | function Page() { 6 | return <>Login page 7 | } 8 | -------------------------------------------------------------------------------- /test-deprecated-design/file-structure-domain-driven/auth/pages/signup/index.page.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | export { Page } 4 | 5 | function Page() { 6 | return <>Signup page 7 | } 8 | -------------------------------------------------------------------------------- /test-deprecated-design/file-structure-domain-driven/marketing/_default.page.route.js: -------------------------------------------------------------------------------- 1 | export const filesystemRoutingRoot = '/' 2 | -------------------------------------------------------------------------------- /test-deprecated-design/file-structure-domain-driven/marketing/pages/about/index.page.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | export { Page } 4 | 5 | function Page() { 6 | return <>About page 7 | } 8 | -------------------------------------------------------------------------------- /test-deprecated-design/file-structure-domain-driven/marketing/pages/index/index.page.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | export { Page } 4 | 5 | function Page() { 6 | return <>Welcome 7 | } 8 | -------------------------------------------------------------------------------- /test-deprecated-design/file-structure-domain-driven/product/pages/index/index.page.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | export { Page } 4 | 5 | function Page({ routeParams }) { 6 | return <>Product {routeParams.productId} 7 | } 8 | -------------------------------------------------------------------------------- /test-deprecated-design/file-structure-domain-driven/product/pages/index/index.page.route.js: -------------------------------------------------------------------------------- 1 | export default '/product/@productId' 2 | -------------------------------------------------------------------------------- /test-deprecated-design/file-structure-domain-driven/product/pages/list/index.page.route.js: -------------------------------------------------------------------------------- 1 | export default '/products' 2 | -------------------------------------------------------------------------------- /test-deprecated-design/file-structure-domain-driven/product/pages/list/index.page.server.js: -------------------------------------------------------------------------------- 1 | export { prerender } 2 | 3 | function prerender() { 4 | return [{ url: '/product/starship', url: '/product/mac-studio', url: '/product/แจ็คเก็ตเดนิม' }] 5 | } 6 | -------------------------------------------------------------------------------- /test-deprecated-design/file-structure-domain-driven/vite.config.js: -------------------------------------------------------------------------------- 1 | import react from '@vitejs/plugin-react' 2 | import vike from 'vike/plugin' 3 | 4 | export default { 5 | plugins: [react(), vike({ prerender: true })] 6 | } 7 | -------------------------------------------------------------------------------- /test-deprecated-design/html-fragments/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /test-deprecated-design/html-fragments/.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from '../../examples/html-fragments/.testRun' 2 | testRun('npm run dev') 3 | -------------------------------------------------------------------------------- /test-deprecated-design/html-fragments/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Examples Vue/Others" } 2 | -------------------------------------------------------------------------------- /test-deprecated-design/html-fragments/index.page.client.js: -------------------------------------------------------------------------------- 1 | // No browser-side JavaScript 2 | -------------------------------------------------------------------------------- /test-deprecated-design/html-fragments/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "scripts": { 3 | "dev": "vite dev" 4 | }, 5 | "dependencies": { 6 | "typescript": "^5.8.3", 7 | "vite": "^6.3.2", 8 | "vike": "0.4.231" 9 | }, 10 | "type": "module" 11 | } 12 | -------------------------------------------------------------------------------- /test-deprecated-design/html-fragments/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "strict": true, 4 | "skipLibCheck": true 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /test-deprecated-design/html-fragments/vite.config.js: -------------------------------------------------------------------------------- 1 | import vike from 'vike/plugin' 2 | 3 | export default { 4 | plugins: [vike()] 5 | } 6 | -------------------------------------------------------------------------------- /test-deprecated-design/i18n/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /test-deprecated-design/i18n/.test-dev.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from '../../examples/i18n/.testRun' 2 | testRun('npm run dev', true) 3 | -------------------------------------------------------------------------------- /test-deprecated-design/i18n/.test-preview.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from '../../examples/i18n/.testRun' 2 | testRun('npm run preview', true) 3 | -------------------------------------------------------------------------------- /test-deprecated-design/i18n/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Examples React" } 2 | -------------------------------------------------------------------------------- /test-deprecated-design/i18n/locales/index.js: -------------------------------------------------------------------------------- 1 | export { extractLocale } from './extractLocale' 2 | export { translate } from './translate' 3 | export { locales, localeDefault } from './locales' 4 | -------------------------------------------------------------------------------- /test-deprecated-design/i18n/locales/locales.js: -------------------------------------------------------------------------------- 1 | export const locales = ['en-US', 'de-DE', 'fr-FR'] 2 | export const localeDefault = locales[0] 3 | -------------------------------------------------------------------------------- /test-deprecated-design/i18n/renderer/Layout.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | font-family: sans-serif; 4 | } 5 | * { 6 | box-sizing: border-box; 7 | } 8 | a { 9 | text-decoration: none; 10 | } 11 | 12 | .navitem { 13 | padding: 3px; 14 | } 15 | -------------------------------------------------------------------------------- /test-deprecated-design/i18n/vite.config.js: -------------------------------------------------------------------------------- 1 | import react from '@vitejs/plugin-react' 2 | import vike from 'vike/plugin' 3 | 4 | export default { 5 | plugins: [react(), vike({ prerender: true })] 6 | } 7 | -------------------------------------------------------------------------------- /test-deprecated-design/path-aliases/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /test-deprecated-design/path-aliases/.test-dev.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from '../../examples/path-aliases/.testRun' 2 | testRun('npm run dev', { isOldDesign: true }) 3 | -------------------------------------------------------------------------------- /test-deprecated-design/path-aliases/.test-prod-static.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from '../../examples/path-aliases/.testRun' 2 | testRun('npm run prod:static', { isOldDesign: true }) 3 | -------------------------------------------------------------------------------- /test-deprecated-design/path-aliases/.test-prod.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from '../../examples/path-aliases/.testRun' 2 | testRun('npm run prod', { isOldDesign: true }) 3 | -------------------------------------------------------------------------------- /test-deprecated-design/path-aliases/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Examples React" } 2 | -------------------------------------------------------------------------------- /test-deprecated-design/path-aliases/server/msg.ts: -------------------------------------------------------------------------------- 1 | export const msg = "This message was loaded using the path alias `#root`: `import { msg } from '#root/server/msg'`" 2 | -------------------------------------------------------------------------------- /test-deprecated-design/path-aliases/styles/magenta-text.css: -------------------------------------------------------------------------------- 1 | p { 2 | color: magenta; 3 | } 4 | -------------------------------------------------------------------------------- /test-deprecated-design/path-aliases/types/PageContext.ts: -------------------------------------------------------------------------------- 1 | export type ReactComponent = () => JSX.Element 2 | export type PageContext = { 3 | Page: ReactComponent 4 | } 5 | -------------------------------------------------------------------------------- /test-deprecated-design/path-aliases/types/index.ts: -------------------------------------------------------------------------------- 1 | export * from './PageContext' 2 | -------------------------------------------------------------------------------- /test-deprecated-design/react-streaming/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /test-deprecated-design/react-streaming/.test-dev.test.ts: -------------------------------------------------------------------------------- 1 | import { testRunClassic } from '../../test/utils' 2 | testRunClassic('npm run dev') 3 | -------------------------------------------------------------------------------- /test-deprecated-design/react-streaming/.test-prod.test.ts: -------------------------------------------------------------------------------- 1 | import { testRunClassic } from '../../test/utils' 2 | testRunClassic('npm run prod') 3 | -------------------------------------------------------------------------------- /test-deprecated-design/react-streaming/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Examples React" } 2 | -------------------------------------------------------------------------------- /test-deprecated-design/react-streaming/pages/about/index.page.jsx: -------------------------------------------------------------------------------- 1 | export { Page } 2 | 3 | import React from 'react' 4 | 5 | function Page() { 6 | return ( 7 | <> 8 |

About

9 |

Example of using Vike.

10 | 11 | ) 12 | } 13 | -------------------------------------------------------------------------------- /test-deprecated-design/react-streaming/vite.config.js: -------------------------------------------------------------------------------- 1 | import react from '@vitejs/plugin-react' 2 | import vike from 'vike/plugin' 3 | 4 | export default { 5 | plugins: [react(), vike()] 6 | } 7 | -------------------------------------------------------------------------------- /test-deprecated-design/react/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /test-deprecated-design/react/.test-dev.test.ts: -------------------------------------------------------------------------------- 1 | import { testRunClassic } from '../../test/utils' 2 | testRunClassic('npm run dev') 3 | -------------------------------------------------------------------------------- /test-deprecated-design/react/.test-preview.test.ts: -------------------------------------------------------------------------------- 1 | import { testRunClassic } from '../../test/utils' 2 | testRunClassic('npm run preview') 3 | -------------------------------------------------------------------------------- /test-deprecated-design/react/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Examples React" } 2 | -------------------------------------------------------------------------------- /test-deprecated-design/react/pages/about/index.page.jsx: -------------------------------------------------------------------------------- 1 | export { Page } 2 | 3 | import React from 'react' 4 | 5 | function Page() { 6 | return ( 7 | <> 8 |

About

9 |

Example of using Vike.

10 | 11 | ) 12 | } 13 | -------------------------------------------------------------------------------- /test-deprecated-design/react/vite.config.js: -------------------------------------------------------------------------------- 1 | import react from '@vitejs/plugin-react' 2 | import vike from 'vike/plugin' 3 | 4 | export default { 5 | plugins: [react(), vike()] 6 | } 7 | -------------------------------------------------------------------------------- /test-deprecated-design/render-modes/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /test-deprecated-design/render-modes/.test-dev.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from '../../examples/render-modes/.testRun' 2 | testRun('npm run dev') 3 | -------------------------------------------------------------------------------- /test-deprecated-design/render-modes/.test-preview.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from '../../examples/render-modes/.testRun' 2 | testRun('npm run preview') 3 | -------------------------------------------------------------------------------- /test-deprecated-design/render-modes/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Examples React" } 2 | -------------------------------------------------------------------------------- /test-deprecated-design/render-modes/pages/html-js/index.css: -------------------------------------------------------------------------------- 1 | .colored { 2 | color: red; 3 | } 4 | -------------------------------------------------------------------------------- /test-deprecated-design/render-modes/pages/html-only/index.css: -------------------------------------------------------------------------------- 1 | .colored { 2 | color: orange; 3 | } 4 | -------------------------------------------------------------------------------- /test-deprecated-design/render-modes/pages/spa/index.css: -------------------------------------------------------------------------------- 1 | .colored.spa { 2 | color: green; 3 | } 4 | -------------------------------------------------------------------------------- /test-deprecated-design/render-modes/pages/ssr/index.css: -------------------------------------------------------------------------------- 1 | .colored.ssr { 2 | color: blue; 3 | } 4 | -------------------------------------------------------------------------------- /test-deprecated-design/render-modes/vite.config.js: -------------------------------------------------------------------------------- 1 | import react from '@vitejs/plugin-react' 2 | import vike from 'vike/plugin' 3 | 4 | export default { 5 | plugins: [react(), vike()] 6 | } 7 | -------------------------------------------------------------------------------- /test-deprecated-design/telefunc/.dev.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from '../../examples/telefunc/.testRun' 2 | testRun('npm run dev') 3 | -------------------------------------------------------------------------------- /test-deprecated-design/telefunc/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /test-deprecated-design/telefunc/.prod.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from '../../examples/telefunc/.testRun' 2 | testRun('npm run prod') 3 | -------------------------------------------------------------------------------- /test-deprecated-design/telefunc/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Examples Vue/Others" } 2 | -------------------------------------------------------------------------------- /test-deprecated-design/telefunc/pages/about/index.page.tsx: -------------------------------------------------------------------------------- 1 | export { Page } 2 | 3 | import React from 'react' 4 | 5 | function Page() { 6 | return ( 7 | <> 8 |

About

9 |

Showcase of using Telefunc + Vike.

10 | 11 | ) 12 | } 13 | -------------------------------------------------------------------------------- /test-deprecated-design/telefunc/pages/index/TodoList.telefunc.ts: -------------------------------------------------------------------------------- 1 | export { onNewTodo } 2 | 3 | import { todoItems } from '../../database/todoItems' 4 | 5 | async function onNewTodo({ text }) { 6 | todoItems.push({ text }) 7 | return { todoItems } 8 | } 9 | -------------------------------------------------------------------------------- /test-deprecated-design/telefunc/vite.config.js: -------------------------------------------------------------------------------- 1 | import { telefunc } from 'telefunc/vite' 2 | import react from '@vitejs/plugin-react' 3 | import vike from 'vike/plugin' 4 | 5 | export default { 6 | plugins: [react(), vike(), telefunc()] 7 | } 8 | -------------------------------------------------------------------------------- /test-deprecated-design/vue-full/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /test-deprecated-design/vue-full/.test-dev.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from '../../examples/react-full/.testRun' 2 | testRun('vue', 'npm run dev') 3 | -------------------------------------------------------------------------------- /test-deprecated-design/vue-full/.test-preview.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from '../../examples/react-full/.testRun' 2 | testRun('vue', 'npm run preview') 3 | -------------------------------------------------------------------------------- /test-deprecated-design/vue-full/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Examples Vue/Others" } 2 | -------------------------------------------------------------------------------- /test-deprecated-design/vue-full/components/Counter.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 9 | -------------------------------------------------------------------------------- /test-deprecated-design/vue-full/pages/hello/names.ts: -------------------------------------------------------------------------------- 1 | export const names = ['evan', 'rom', 'alice', 'jon', 'eli'] 2 | -------------------------------------------------------------------------------- /test-deprecated-design/vue-full/pages/star-wars/movie/index.page.route.ts: -------------------------------------------------------------------------------- 1 | export default '/star-wars/@movieId' 2 | -------------------------------------------------------------------------------- /test-deprecated-design/vue-full/types.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.vue' { 2 | const Component: any 3 | export default Component 4 | } 5 | declare module '*.svg' { 6 | const imageUrl: string 7 | export default imageUrl 8 | } 9 | -------------------------------------------------------------------------------- /test-deprecated-design/vue/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /test-deprecated-design/vue/.test-dev.test.ts: -------------------------------------------------------------------------------- 1 | import { testRunClassic } from '../../test/utils' 2 | testRunClassic('npm run dev') 3 | -------------------------------------------------------------------------------- /test-deprecated-design/vue/.test-preview.test.ts: -------------------------------------------------------------------------------- 1 | import { testRunClassic } from '../../test/utils' 2 | testRunClassic('npm run preview') 3 | -------------------------------------------------------------------------------- /test-deprecated-design/vue/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Examples Vue/Others" } 2 | -------------------------------------------------------------------------------- /test-deprecated-design/vue/pages/about/index.page.vue: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /test-deprecated-design/vue/renderer/_default.page.client.js: -------------------------------------------------------------------------------- 1 | export { render } 2 | 3 | import { createVueApp } from './createVueApp' 4 | 5 | async function render(pageContext) { 6 | const app = createVueApp(pageContext) 7 | app.mount('#app') 8 | } 9 | -------------------------------------------------------------------------------- /test-deprecated-design/vue/vite.config.js: -------------------------------------------------------------------------------- 1 | import vue from '@vitejs/plugin-vue' 2 | import vike from 'vike/plugin' 3 | 4 | export default { 5 | plugins: [vue(), vike()] 6 | } 7 | -------------------------------------------------------------------------------- /test/abort/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /test/abort/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Unit Tests E2E" } 2 | -------------------------------------------------------------------------------- /test/abort/README.md: -------------------------------------------------------------------------------- 1 | TODO: move to /test/misc ? 2 | -------------------------------------------------------------------------------- /test/abort/pages/redirect-external/+Page.tsx: -------------------------------------------------------------------------------- 1 | export default Page 2 | 3 | import React from 'react' 4 | 5 | function Page() { 6 | return

I will never be shown because of throw redirect() in the guard() hook.

7 | } 8 | -------------------------------------------------------------------------------- /test/abort/pages/redirect-external/+guard.ts: -------------------------------------------------------------------------------- 1 | export default guard 2 | 3 | import { redirect } from 'vike/abort' 4 | 5 | async function guard() { 6 | throw redirect('https://brillout.github.io/star-wars/') 7 | } 8 | -------------------------------------------------------------------------------- /test/abort/pages/redirect/+Page.tsx: -------------------------------------------------------------------------------- 1 | export default Page 2 | 3 | import React from 'react' 4 | 5 | function Page() { 6 | return

I will never be shown because of throw redirect() in the guard() hook.

7 | } 8 | -------------------------------------------------------------------------------- /test/abort/pages/redirect/+guard.ts: -------------------------------------------------------------------------------- 1 | export default guard 2 | 3 | import { redirect } from 'vike/abort' 4 | 5 | async function guard() { 6 | throw redirect('/') 7 | } 8 | -------------------------------------------------------------------------------- /test/abort/pages/render-homepage/+Page.tsx: -------------------------------------------------------------------------------- 1 | export default Page 2 | 3 | import React from 'react' 4 | 5 | function Page() { 6 | return

I will never be shown because of throw render() in the guard() hook.

7 | } 8 | -------------------------------------------------------------------------------- /test/abort/pages/render-homepage/+guard.ts: -------------------------------------------------------------------------------- 1 | export default guard 2 | 3 | import { render } from 'vike/abort' 4 | 5 | async function guard() { 6 | throw render('/') 7 | } 8 | -------------------------------------------------------------------------------- /test/abort/pages/show-error-page/+Page.tsx: -------------------------------------------------------------------------------- 1 | export default Page 2 | 3 | import React from 'react' 4 | 5 | function Page() { 6 | return

I'm never shown since the guard() hook executes `throw render()`.

7 | } 8 | -------------------------------------------------------------------------------- /test/abort/pages/show-error-page/+guard.ts: -------------------------------------------------------------------------------- 1 | export default guard 2 | 3 | import { render } from 'vike/abort' 4 | 5 | async function guard() { 6 | throw render(503, 'Testing throw render error page.') 7 | } 8 | -------------------------------------------------------------------------------- /test/abort/renderer/+config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | clientRouting: true, 3 | hydrationCanBeAborted: true, 4 | passToClient: ['user'], 5 | redirects: { 6 | '/permanent-redirect': '/', 7 | '/star-wars-api/*': 'https://brillout.github.io/star-wars/api/*' 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /test/abort/renderer/Layout.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | font-family: sans-serif; 4 | } 5 | * { 6 | box-sizing: border-box; 7 | } 8 | -------------------------------------------------------------------------------- /test/abort/test-dev-server.test.ts: -------------------------------------------------------------------------------- 1 | import { test } from './test' 2 | test('npm run dev:server', true) 3 | -------------------------------------------------------------------------------- /test/abort/test-dev.test.ts: -------------------------------------------------------------------------------- 1 | import { test } from './test' 2 | test('npm run dev') 3 | -------------------------------------------------------------------------------- /test/abort/test-preview.test.ts: -------------------------------------------------------------------------------- 1 | import { test } from './test' 2 | test('npm run preview') 3 | -------------------------------------------------------------------------------- /test/abort/test-prod.test.ts: -------------------------------------------------------------------------------- 1 | import { test } from './test' 2 | test('npm run prod', true) 3 | -------------------------------------------------------------------------------- /test/abort/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "strict": true, 4 | "jsx": "react", 5 | "esModuleInterop": true 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /test/abort/vite.config.ts: -------------------------------------------------------------------------------- 1 | import react from '@vitejs/plugin-react' 2 | import vike from 'vike/plugin' 3 | import type { UserConfig } from 'vite' 4 | 5 | export default { 6 | plugins: [vike(), react()] 7 | } satisfies UserConfig 8 | -------------------------------------------------------------------------------- /test/assertFileEnv/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /test/assertFileEnv/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Unit Tests E2E" } 2 | -------------------------------------------------------------------------------- /test/assertFileEnv/pages/+config.js: -------------------------------------------------------------------------------- 1 | import vikeReact from 'vike-react/config' 2 | export default { extends: vikeReact } 3 | -------------------------------------------------------------------------------- /test/assertFileEnv/pages/index/secret.server.js: -------------------------------------------------------------------------------- 1 | export const secret = 'this is a secret' 2 | -------------------------------------------------------------------------------- /test/assertFileEnv/vite.config.js: -------------------------------------------------------------------------------- 1 | import react from '@vitejs/plugin-react' 2 | import vike from 'vike/plugin' 3 | export default { plugins: [react(), vike()] } 4 | -------------------------------------------------------------------------------- /test/cjs/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /test/cjs/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Unit Tests E2E" } 2 | -------------------------------------------------------------------------------- /test/cjs/pages/about/+Page.jsx: -------------------------------------------------------------------------------- 1 | export default Page 2 | 3 | import React from 'react' 4 | 5 | function Page() { 6 | return ( 7 | <> 8 |

About

9 |

Example of using Vike.

10 | 11 | ) 12 | } 13 | -------------------------------------------------------------------------------- /test/cjs/renderer/Layout.css: -------------------------------------------------------------------------------- 1 | /* This CSS is common to all pages */ 2 | 3 | body { 4 | margin: 0; 5 | font-family: sans-serif; 6 | } 7 | * { 8 | box-sizing: border-box; 9 | } 10 | a { 11 | text-decoration: none; 12 | } 13 | 14 | .navitem { 15 | padding: 3px; 16 | } 17 | -------------------------------------------------------------------------------- /test/cjs/test-dev.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from './testRun' 2 | testRun('npm run dev') 3 | -------------------------------------------------------------------------------- /test/cjs/test-prod.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from './testRun' 2 | testRun('npm run prod') 3 | -------------------------------------------------------------------------------- /test/cjs/testRun.ts: -------------------------------------------------------------------------------- 1 | export { testRun } 2 | 3 | import { testRunClassic } from '../../test/utils' 4 | 5 | type Cmd = Parameters[0] 6 | function testRun(cmd: Cmd) { 7 | testRunClassic(cmd, { isCJS: true }) 8 | } 9 | -------------------------------------------------------------------------------- /test/cjs/vite.config.js: -------------------------------------------------------------------------------- 1 | import react from '@vitejs/plugin-react' 2 | import vike from 'vike/plugin' 3 | 4 | export default { 5 | plugins: [react(), vike()] 6 | } 7 | -------------------------------------------------------------------------------- /test/disableAutoImporter/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /test/disableAutoImporter/.test-dev.test.ts: -------------------------------------------------------------------------------- 1 | import { testRunClassic } from '../../test/utils' 2 | testRunClassic('npm run dev') 3 | -------------------------------------------------------------------------------- /test/disableAutoImporter/.test-preview.test.ts: -------------------------------------------------------------------------------- 1 | import { testRunClassic } from '../../test/utils' 2 | testRunClassic('npm run preview') 3 | -------------------------------------------------------------------------------- /test/disableAutoImporter/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Unit Tests E2E" } 2 | -------------------------------------------------------------------------------- /test/disableAutoImporter/pages/about/+Page.jsx: -------------------------------------------------------------------------------- 1 | export default Page 2 | 3 | import React from 'react' 4 | 5 | function Page() { 6 | return ( 7 | <> 8 |

About

9 |

Example of using Vike.

10 | 11 | ) 12 | } 13 | -------------------------------------------------------------------------------- /test/disableAutoImporter/vite.config.js: -------------------------------------------------------------------------------- 1 | import react from '@vitejs/plugin-react' 2 | import vike from 'vike/plugin' 3 | 4 | export default { 5 | plugins: [react(), vike()], 6 | vitePluginImportBuild: { 7 | disableAutoImport: true 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /test/env/.env: -------------------------------------------------------------------------------- 1 | PUBLIC_ENV__SOME_ENV=123 2 | SOME_OTHER_ENV=456 3 | SOME_THIRD_ENV=abc 4 | -------------------------------------------------------------------------------- /test/env/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /test/env/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Unit Tests E2E" } 2 | -------------------------------------------------------------------------------- /test/env/pages/about/+Page.jsx: -------------------------------------------------------------------------------- 1 | export default Page 2 | 3 | import React from 'react' 4 | 5 | function Page() { 6 | return ( 7 | <> 8 |

About

9 |

Example of using Vike.

10 | 11 | ) 12 | } 13 | -------------------------------------------------------------------------------- /test/env/renderer/+config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | passToClient: ['pageProps'] 3 | } 4 | -------------------------------------------------------------------------------- /test/env/renderer/Layout.css: -------------------------------------------------------------------------------- 1 | /* This CSS is common to all pages */ 2 | 3 | body { 4 | margin: 0; 5 | font-family: sans-serif; 6 | } 7 | * { 8 | box-sizing: border-box; 9 | } 10 | a { 11 | text-decoration: none; 12 | } 13 | 14 | .navitem { 15 | padding: 3px; 16 | } 17 | -------------------------------------------------------------------------------- /test/env/vite.config.js: -------------------------------------------------------------------------------- 1 | import react from '@vitejs/plugin-react' 2 | import vike from 'vike/plugin' 3 | 4 | export default { 5 | plugins: [react(), vike()] 6 | } 7 | -------------------------------------------------------------------------------- /test/environment-api/+config.ts: -------------------------------------------------------------------------------- 1 | export default { vite6BuilderApp: true, prerender: true } 2 | -------------------------------------------------------------------------------- /test/environment-api/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /test/environment-api/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Unit Tests E2E" } 2 | -------------------------------------------------------------------------------- /test/environment-api/build.js: -------------------------------------------------------------------------------- 1 | import { buildApp } from './buildApp.js' 2 | await buildApp() 3 | -------------------------------------------------------------------------------- /test/environment-api/pages/Layout.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | font-family: sans-serif; 4 | } 5 | * { 6 | box-sizing: border-box; 7 | } 8 | a { 9 | text-decoration: none; 10 | } 11 | 12 | .navitem { 13 | padding: 3px; 14 | } 15 | -------------------------------------------------------------------------------- /test/environment-api/pages/about/+Page.jsx: -------------------------------------------------------------------------------- 1 | export default Page 2 | 3 | import React from 'react' 4 | 5 | function Page() { 6 | return ( 7 | <> 8 |

About

9 |

Example of using Vike.

10 | 11 | ) 12 | } 13 | -------------------------------------------------------------------------------- /test/environment-api/test-dev.test.ts: -------------------------------------------------------------------------------- 1 | import { testRunClassic } from '../../test/utils' 2 | testRunClassic('npm run dev') 3 | -------------------------------------------------------------------------------- /test/environment-api/test-preview.test.ts: -------------------------------------------------------------------------------- 1 | import { testRunClassic } from '../../test/utils' 2 | testRunClassic('npm run preview') 3 | -------------------------------------------------------------------------------- /test/environment-api/vite.config.js: -------------------------------------------------------------------------------- 1 | import react from '@vitejs/plugin-react' 2 | import vike from 'vike/plugin' 3 | export default { plugins: [react(), vike()] } 4 | -------------------------------------------------------------------------------- /test/hook-override/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /test/hook-override/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Unit Tests E2E" } 2 | -------------------------------------------------------------------------------- /test/hook-override/pages/index/README.md: -------------------------------------------------------------------------------- 1 | This page doesn't override the global `data()` and `onBeforeRender()` hooks. 2 | -------------------------------------------------------------------------------- /test/hook-override/pages/page-2/+Page.tsx: -------------------------------------------------------------------------------- 1 | ../index/+Page.tsx -------------------------------------------------------------------------------- /test/hook-override/pages/page-2/+config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | data: null 3 | } 4 | -------------------------------------------------------------------------------- /test/hook-override/pages/page-2/+onBeforeRender.tsx: -------------------------------------------------------------------------------- 1 | export default null 2 | -------------------------------------------------------------------------------- /test/hook-override/pages/page-2/README.md: -------------------------------------------------------------------------------- 1 | This page: 2 | * removes the global `data()` hook via `+config.ts` 3 | * removes the global `onBeforeRender()` hook via `+onBeforeRender.tsx` 4 | -------------------------------------------------------------------------------- /test/hook-override/pages/page-3/+Page.tsx: -------------------------------------------------------------------------------- 1 | ../index/+Page.tsx -------------------------------------------------------------------------------- /test/hook-override/pages/page-3/README.md: -------------------------------------------------------------------------------- 1 | This page: 2 | * overrides the global `data()` hook via `+data.tsx` 3 | * doesn't override the global `onBeforeRender()` hook 4 | -------------------------------------------------------------------------------- /test/hook-override/pages/page-4/+Page.tsx: -------------------------------------------------------------------------------- 1 | ../index/+Page.tsx -------------------------------------------------------------------------------- /test/hook-override/pages/page-4/+meta.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | data: { 3 | env: { server: false, client: true } 4 | }, 5 | onBeforeRender: { 6 | env: { server: true, client: true } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /test/hook-override/renderer/+config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | clientRouting: true, 3 | hydrationCanBeAborted: true, 4 | passToClient: ['user'] 5 | } 6 | -------------------------------------------------------------------------------- /test/hook-override/renderer/Layout.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | font-family: sans-serif; 4 | } 5 | * { 6 | box-sizing: border-box; 7 | } 8 | -------------------------------------------------------------------------------- /test/hook-override/renderer/useData.tsx: -------------------------------------------------------------------------------- 1 | // https://vike.dev/useData 2 | export { useData } 3 | 4 | import { usePageContext } from './usePageContext' 5 | 6 | function useData() { 7 | const { data } = usePageContext() 8 | return data as Data 9 | } 10 | -------------------------------------------------------------------------------- /test/hook-override/test-dev.test.ts: -------------------------------------------------------------------------------- 1 | import { test } from './test' 2 | test('npm run dev') 3 | -------------------------------------------------------------------------------- /test/hook-override/test-preview.test.ts: -------------------------------------------------------------------------------- 1 | import { test } from './test' 2 | test('npm run preview') 3 | -------------------------------------------------------------------------------- /test/hook-override/vite.config.ts: -------------------------------------------------------------------------------- 1 | import react from '@vitejs/plugin-react' 2 | import vike from 'vike/plugin' 3 | import type { UserConfig } from 'vite' 4 | 5 | export default { 6 | plugins: [vike(), react()] 7 | } satisfies UserConfig 8 | -------------------------------------------------------------------------------- /test/includeAssetsImportedByServer/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /test/includeAssetsImportedByServer/.test-dev.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from './.testRun' 2 | testRun('npm run dev') 3 | -------------------------------------------------------------------------------- /test/includeAssetsImportedByServer/.test-preview.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from './.testRun' 2 | testRun('npm run preview') 3 | -------------------------------------------------------------------------------- /test/includeAssetsImportedByServer/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Unit Tests E2E" } 2 | -------------------------------------------------------------------------------- /test/includeAssetsImportedByServer/pages/index/+config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | Page: null 3 | } 4 | -------------------------------------------------------------------------------- /test/includeAssetsImportedByServer/vite.config.js: -------------------------------------------------------------------------------- 1 | import vike from 'vike/plugin' 2 | 3 | export default { 4 | plugins: [vike()] 5 | } 6 | -------------------------------------------------------------------------------- /test/playground/+htmlAttributes.ts: -------------------------------------------------------------------------------- 1 | // TEST: define vike-react setting at root `/` despite vike-react being applied at `pages/` 2 | import { htmlClass } from './htmlAttrs' 3 | export default { 4 | class: htmlClass 5 | } 6 | -------------------------------------------------------------------------------- /test/playground/+vite.ts: -------------------------------------------------------------------------------- 1 | import mdx from '@mdx-js/rollup' 2 | import type { UserConfig } from 'vite' 3 | 4 | export default { 5 | // TEST: use +vite to add Vite plugin 6 | plugins: [mdx()] 7 | } satisfies UserConfig 8 | -------------------------------------------------------------------------------- /test/playground/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /test/playground/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Unit Tests E2E" } 2 | -------------------------------------------------------------------------------- /test/playground/README.md: -------------------------------------------------------------------------------- 1 | Big playground for E2E testing. 2 | 3 | Most E2E tests should (eventually) live here. 4 | -------------------------------------------------------------------------------- /test/playground/htmlAttrs.ts: -------------------------------------------------------------------------------- 1 | export const htmlClass: string = 'dark' 2 | -------------------------------------------------------------------------------- /test/playground/pages/about-page/+Head.tsx: -------------------------------------------------------------------------------- 1 | export { Head } 2 | 3 | import React from 'react' 4 | 5 | function Head() { 6 | return ( 7 | <> 8 | 9 | 10 | ) 11 | } 12 | -------------------------------------------------------------------------------- /test/playground/pages/about-page/Page.jsx: -------------------------------------------------------------------------------- 1 | export default Page 2 | 3 | import React from 'react' 4 | 5 | function Page() { 6 | return ( 7 | <> 8 |

About

9 |

Example of using Vike.

10 | 11 | ) 12 | } 13 | -------------------------------------------------------------------------------- /test/playground/pages/config-meta/cumulative/nested/+config.ts: -------------------------------------------------------------------------------- 1 | import { Config } from 'vike/types' 2 | 3 | export default { 4 | settingStandard: { nested: 'override for standard @ /nested' }, 5 | settingCumulative: { nested: 'override for cumulative @ /nested' } 6 | } satisfies Config 7 | -------------------------------------------------------------------------------- /test/playground/pages/config-meta/effect/with-effect/+config.ts: -------------------------------------------------------------------------------- 1 | import { Config } from 'vike/types' 2 | 3 | // dependentSetting is influenced both by the ConfigEffect 4 | // of settingWithEffect and by a locally set value 5 | export default { 6 | settingWithEffect: true 7 | } satisfies Config 8 | -------------------------------------------------------------------------------- /test/playground/pages/config-meta/env/client/+config.ts: -------------------------------------------------------------------------------- 1 | import { Config } from 'vike/types' 2 | 3 | export default { 4 | prerenderSetOverEffect: false 5 | } satisfies Config 6 | -------------------------------------------------------------------------------- /test/playground/pages/dynamic-import-file-env/hello.client.ts: -------------------------------------------------------------------------------- 1 | import { isBrowser } from '../../utils/isBrowser' 2 | if (!isBrowser) throw new Error("I shouldn't be imported from the server") 3 | console.log('hello from client') 4 | -------------------------------------------------------------------------------- /test/playground/pages/dynamic-import-file-env/hello.server.ts: -------------------------------------------------------------------------------- 1 | import { isBrowser } from '../../utils/isBrowser' 2 | if (isBrowser) throw new Error("I shouldn't be imported from the client") 3 | console.log('hello from server') 4 | -------------------------------------------------------------------------------- /test/playground/pages/index/prerender.ts: -------------------------------------------------------------------------------- 1 | ;(globalThis as any).setAtBuildTime = true 2 | export default false 3 | -------------------------------------------------------------------------------- /test/playground/pages/markdown/+client.ts: -------------------------------------------------------------------------------- 1 | console.log(`Hello from +client.ts with viewport height ${window.document.documentElement.clientHeight}`) 2 | -------------------------------------------------------------------------------- /test/playground/pages/markdown/+title.ts: -------------------------------------------------------------------------------- 1 | import type { PageContext } from 'vike/types' 2 | 3 | export default function (pageContext: PageContext): string { 4 | const title = pageContext.config.frontmatter!.title 5 | return title 6 | } 7 | -------------------------------------------------------------------------------- /test/playground/pages/markdown/vike.d.ts: -------------------------------------------------------------------------------- 1 | declare global { 2 | namespace Vike { 3 | interface Config { 4 | frontmatter?: { 5 | title: string 6 | } 7 | } 8 | } 9 | } 10 | 11 | export {} 12 | -------------------------------------------------------------------------------- /test/playground/pages/navigate-early/+Page.tsx: -------------------------------------------------------------------------------- 1 | export default Page 2 | 3 | import React from 'react' 4 | 5 | function Page() { 6 | return ( 7 | <> 8 |

Calling navigate() early in +client.js

9 | 10 | ) 11 | } 12 | -------------------------------------------------------------------------------- /test/playground/pages/navigate-early/+client.js: -------------------------------------------------------------------------------- 1 | import { navigate } from 'vike/client/router' 2 | navigate('/markdown') 3 | -------------------------------------------------------------------------------- /test/playground/pages/nested-layout/@id/+Page.tsx: -------------------------------------------------------------------------------- 1 | export default Page 2 | 3 | import React from 'react' 4 | 5 | function Page() { 6 | return ( 7 | <> 8 |

Overview

9 |

Some overview...

10 | 11 | ) 12 | } 13 | -------------------------------------------------------------------------------- /test/playground/pages/nested-layout/@id/+keepScrollPosition.js: -------------------------------------------------------------------------------- 1 | // TEST: does +keepScrollPosition.js work and behaves as expected? 2 | export default true 3 | -------------------------------------------------------------------------------- /test/playground/pages/nested-layout/@id/+prerender.ts: -------------------------------------------------------------------------------- 1 | export default false 2 | -------------------------------------------------------------------------------- /test/playground/pages/nested-layout/@id/pricing/+Page.jsx: -------------------------------------------------------------------------------- 1 | export { Page } 2 | 3 | import React from 'react' 4 | 5 | function Page() { 6 | return ( 7 | <> 8 |

Pricing

9 |

Some pricing...

10 | 11 | ) 12 | } 13 | -------------------------------------------------------------------------------- /test/playground/pages/nested-layout/@id/reviews/+Page.jsx: -------------------------------------------------------------------------------- 1 | export { Page } 2 | 3 | import React from 'react' 4 | 5 | function Page() { 6 | return ( 7 | <> 8 |

Reviews

9 |

Some reviews...

10 | 11 | ) 12 | } 13 | -------------------------------------------------------------------------------- /test/playground/pages/pushState/+data.ts: -------------------------------------------------------------------------------- 1 | export default () => { 2 | const timestamp = new Date().getTime() 3 | return { timestamp } 4 | } 5 | -------------------------------------------------------------------------------- /test/playground/pages/pushState/+prerender.ts: -------------------------------------------------------------------------------- 1 | export default false 2 | -------------------------------------------------------------------------------- /test/playground/pages/star-wars/@id/+dataIsomorph.ts: -------------------------------------------------------------------------------- 1 | export default true 2 | -------------------------------------------------------------------------------- /test/playground/pages/star-wars/types.ts: -------------------------------------------------------------------------------- 1 | export type Movie = { 2 | id: string 3 | title: string 4 | release_date: string 5 | } 6 | export type MovieDetails = { 7 | id: string 8 | title: string 9 | release_date: string 10 | director: string 11 | producer: string 12 | } 13 | -------------------------------------------------------------------------------- /test/playground/scripts/build.js: -------------------------------------------------------------------------------- 1 | import { build } from 'vike/api' 2 | await build() 3 | -------------------------------------------------------------------------------- /test/playground/scripts/prerender.js: -------------------------------------------------------------------------------- 1 | import { prerender } from 'vike/api' 2 | await prerender() 3 | -------------------------------------------------------------------------------- /test/playground/test-dev.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from './testRun' 2 | testRun('npm run dev') 3 | -------------------------------------------------------------------------------- /test/playground/test-preview.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from './testRun' 2 | testRun('npm run preview') 3 | -------------------------------------------------------------------------------- /test/playground/types.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.svg' { 2 | const imageUrl: string 3 | export default imageUrl 4 | } 5 | -------------------------------------------------------------------------------- /test/playground/utils/assert.ts: -------------------------------------------------------------------------------- 1 | export function assert(condition: unknown, debugInfo?: unknown): asserts condition { 2 | if (condition) return 3 | let errMsg = 'Assertion failure.' 4 | if (debugInfo) errMsg += ' ' + JSON.stringify({ debugInfo }) 5 | throw new Error(errMsg) 6 | } 7 | -------------------------------------------------------------------------------- /test/playground/utils/checkType.ts: -------------------------------------------------------------------------------- 1 | export function checkType(_: Type) {} 2 | export function castType(_: Type): asserts _ is Type & Cast {} 3 | -------------------------------------------------------------------------------- /test/preload/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /test/preload/.testTypes.json: -------------------------------------------------------------------------------- 1 | { "disable": true } 2 | -------------------------------------------------------------------------------- /test/preload/README.md: -------------------------------------------------------------------------------- 1 | Test [`injectFiler()`](https://vike.dev/preloading#injectfilter). 2 | 3 | This test: 4 | - Uses Vitest in order to be able to use `toMatchSnapshot()` (which `@brillout/test-e2e` doesn't support). 5 | - Is a standalone test to make snapshots more stable. 6 | -------------------------------------------------------------------------------- /test/preload/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "@vitejs/plugin-react": "^4.4.1", 4 | "react": "18.2.0", 5 | "react-dom": "18.2.0", 6 | "typescript": "^5.8.3", 7 | "vike": "0.4.231", 8 | "vite": "^6.3.2" 9 | }, 10 | "type": "module" 11 | } 12 | -------------------------------------------------------------------------------- /test/preload/pages/preload-disabled/+config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | preloadStrategy: 'DISABLED' 3 | } 4 | -------------------------------------------------------------------------------- /test/preload/pages/preload-eager/+config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | preloadStrategy: 'EAGER' 3 | } 4 | -------------------------------------------------------------------------------- /test/preload/pages/preload-images/+config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | preloadStrategy: 'IMAGES' 3 | } 4 | -------------------------------------------------------------------------------- /test/preload/renderer/+config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | passToClient: ['pageProps'], 3 | meta: { 4 | preloadStrategy: { 5 | env: { server: true } 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /test/preload/renderer/Sono-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vikejs/vike/9478659491baf1c93086eb1127a1a88dd027456b/test/preload/renderer/Sono-Light.ttf -------------------------------------------------------------------------------- /test/preload/renderer/Sono-Light.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vikejs/vike/9478659491baf1c93086eb1127a1a88dd027456b/test/preload/renderer/Sono-Light.woff2 -------------------------------------------------------------------------------- /test/preload/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "strict": true, 4 | "lib": ["DOM", "DOM.Iterable", "ESNext"], 5 | "esModuleInterop": true, 6 | "jsx": "react" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /test/preload/utils/stabilizeHashs.ts: -------------------------------------------------------------------------------- 1 | export function stabilizeHashs(str: string): string { 2 | return str.replaceAll( 3 | /(\/assets\/[^ ]*)(\.|chunks\/chunk\-)[0-9a-zA-Z_-]{5,20}(\.(js|css|woff2|ttf|svg))/g, 4 | '$1$2$HASH$3' 5 | ) 6 | } 7 | -------------------------------------------------------------------------------- /test/preload/vite.config.js: -------------------------------------------------------------------------------- 1 | import react from '@vitejs/plugin-react' 2 | import vike from 'vike/plugin' 3 | 4 | export default { 5 | plugins: [react(), vike()] 6 | } 7 | -------------------------------------------------------------------------------- /test/require-shim/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /test/require-shim/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Unit Tests E2E" } 2 | -------------------------------------------------------------------------------- /test/require-shim/README.md: -------------------------------------------------------------------------------- 1 | Test [`@brillout/require-shim`](https://github.com/brillout/require-shim). 2 | -------------------------------------------------------------------------------- /test/require-shim/renderer/+config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | passToClient: ['apolloIntialState'] 3 | } 4 | -------------------------------------------------------------------------------- /test/require-shim/vite.config.js: -------------------------------------------------------------------------------- 1 | import react from '@vitejs/plugin-react' 2 | import vike from 'vike/plugin' 3 | 4 | export default { 5 | plugins: [react(), vike()], 6 | ssr: { 7 | noExternal: ['@apollo/client'] 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /test/stream-vue-onServerPrefetch/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /test/stream-vue-onServerPrefetch/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Unit Tests E2E" } 2 | -------------------------------------------------------------------------------- /test/stream-vue-onServerPrefetch/README.md: -------------------------------------------------------------------------------- 1 | Test SSR stream with Vue's `onServerPrefetch()`. 2 | -------------------------------------------------------------------------------- /test/stream-vue-onServerPrefetch/pages/todos/+route.js: -------------------------------------------------------------------------------- 1 | export default '/todos/@todoId' 2 | -------------------------------------------------------------------------------- /test/stream-vue-onServerPrefetch/renderer/+config.js: -------------------------------------------------------------------------------- 1 | // https://vike.dev/config 2 | export default { 3 | // https://vike.dev/clientRouting 4 | clientRouting: true, 5 | // https://vike.dev/passToClient 6 | passToClient: ['initialStoreState', 'pageProps', 'routeParams'] 7 | } 8 | -------------------------------------------------------------------------------- /test/stream-vue-onServerPrefetch/stores/useCounter.js: -------------------------------------------------------------------------------- 1 | import { defineStore } from 'pinia' 2 | 3 | export const useCounter = defineStore('counter', { 4 | state: () => ({ 5 | count: 0 6 | }), 7 | actions: { 8 | increment() { 9 | this.count++ 10 | } 11 | } 12 | }) 13 | -------------------------------------------------------------------------------- /test/stream-vue-onServerPrefetch/test-dev.test.ts: -------------------------------------------------------------------------------- 1 | import { test } from './test' 2 | test('npm run dev') 3 | -------------------------------------------------------------------------------- /test/stream-vue-onServerPrefetch/test-preview.test.ts: -------------------------------------------------------------------------------- 1 | import { test } from './test' 2 | test('npm run preview') 3 | -------------------------------------------------------------------------------- /test/stream-vue-onServerPrefetch/vite.config.js: -------------------------------------------------------------------------------- 1 | import vue from '@vitejs/plugin-vue' 2 | import vike from 'vike/plugin' 3 | 4 | export default { 5 | plugins: [vue(), vike()] 6 | } 7 | -------------------------------------------------------------------------------- /test/universal-middleware/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Unit Tests E2E" } 2 | -------------------------------------------------------------------------------- /test/universal-middleware/global.d.ts: -------------------------------------------------------------------------------- 1 | export {} 2 | -------------------------------------------------------------------------------- /test/universal-middleware/pages/+middleware.ts: -------------------------------------------------------------------------------- 1 | import { middlewareTelefunc } from './middlewareTelefunc' 2 | import { middlewareVike } from './middlewareVike' 3 | 4 | export default [middlewareTelefunc, middlewareVike] 5 | -------------------------------------------------------------------------------- /test/universal-middleware/pages/Middleware.ts: -------------------------------------------------------------------------------- 1 | export { Middleware } 2 | 3 | import type { UniversalMiddleware } from '@universal-middleware/core' 4 | 5 | type Middleware = { 6 | name: string 7 | order: 'pre' | 'post' | number 8 | value: UniversalMiddleware 9 | } 10 | -------------------------------------------------------------------------------- /test/universal-middleware/pages/star-wars/types.ts: -------------------------------------------------------------------------------- 1 | export type Movie = { 2 | id: string 3 | title: string 4 | release_date: string 5 | } 6 | 7 | export type MovieDetails = Movie & { 8 | director: string 9 | producer: string 10 | } 11 | -------------------------------------------------------------------------------- /test/universal-middleware/pages/todo/+config.ts: -------------------------------------------------------------------------------- 1 | export const config = { 2 | prerender: false 3 | } 4 | -------------------------------------------------------------------------------- /test/universal-middleware/test-dev.test.ts: -------------------------------------------------------------------------------- 1 | import { testRunClassic } from '../../test/utils' 2 | testRunClassic('npm run dev', { skipAboutPage: true }) 3 | -------------------------------------------------------------------------------- /test/universal-middleware/test-preview.test.ts: -------------------------------------------------------------------------------- 1 | import { testRunClassic } from '../../test/utils' 2 | testRunClassic('npm run preview', { skipAboutPage: true }) 3 | -------------------------------------------------------------------------------- /test/universal-middleware/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { telefunc } from 'telefunc/vite' 2 | import react from '@vitejs/plugin-react' 3 | import { defineConfig } from 'vite' 4 | import vike from 'vike/plugin' 5 | 6 | export default defineConfig({ 7 | plugins: [vike(), react(), telefunc()] 8 | }) 9 | -------------------------------------------------------------------------------- /test/vike-cloudflare/.gitignore: -------------------------------------------------------------------------------- 1 | /dist/ 2 | /node_modules/ 3 | -------------------------------------------------------------------------------- /test/vike-cloudflare/.test-dev.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from './.testRun' 2 | 3 | process.env.VITE_CONFIG = '{server:{port:3000}}' 4 | testRun('pnpm run dev', { 5 | serverIsReadyMessage: 'Server running' 6 | }) 7 | -------------------------------------------------------------------------------- /test/vike-cloudflare/.test-preview.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from './.testRun' 2 | 3 | testRun('pnpm run preview --port 3000', { 4 | doNotFailOnWarning: true, 5 | serverIsReadyMessage: 'Starting local server', 6 | serverIsReadyDelay: 2000, 7 | serverUrl: 'http://127.0.0.1:3000' 8 | }) 9 | -------------------------------------------------------------------------------- /test/vike-cloudflare/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Unit Tests E2E" } 2 | -------------------------------------------------------------------------------- /test/vike-cloudflare/README.md: -------------------------------------------------------------------------------- 1 | Copied from [vike-cloudflare > examples/vike-app/](https://github.com/vikejs/vike-cloudflare/tree/e0d51b44ae9cfa226e21866112c3076b30fa40ab/examples/vike-app). 2 | -------------------------------------------------------------------------------- /test/vike-cloudflare/database/todoItems.ts: -------------------------------------------------------------------------------- 1 | interface TodoItem { 2 | text: string 3 | } 4 | 5 | export type { TodoItem } 6 | -------------------------------------------------------------------------------- /test/vike-cloudflare/pages/star-wars/@id/+title.ts: -------------------------------------------------------------------------------- 1 | import type { PageContext } from 'vike/types' 2 | import type { Data } from './+data.js' 3 | 4 | export function title(pageContext: PageContext) { 5 | const movie = pageContext.data 6 | return movie.title 7 | } 8 | -------------------------------------------------------------------------------- /test/vike-cloudflare/pages/star-wars/index/+title.ts: -------------------------------------------------------------------------------- 1 | import type { PageContext } from 'vike/types' 2 | import type { Data } from './+data.js' 3 | 4 | export function title(pageContext: PageContext) { 5 | const movies = pageContext.data 6 | return `${movies.length} Star Wars Movies` 7 | } 8 | -------------------------------------------------------------------------------- /test/vike-cloudflare/pages/star-wars/types.ts: -------------------------------------------------------------------------------- 1 | export type Movie = { 2 | id: string 3 | title: string 4 | release_date: string 5 | } 6 | 7 | export type MovieDetails = Movie & { 8 | director: string 9 | producer: string 10 | } 11 | -------------------------------------------------------------------------------- /test/vike-cloudflare/pages/todo/+config.ts: -------------------------------------------------------------------------------- 1 | const config = { 2 | prerender: false 3 | } 4 | 5 | export default config 6 | -------------------------------------------------------------------------------- /test/vike-cloudflare/pages/todo/+data.ts: -------------------------------------------------------------------------------- 1 | // https://vike.dev/data 2 | 3 | export type Data = { 4 | todo: { text: string }[] 5 | } 6 | 7 | export default async function data(): Promise { 8 | return { todo: [] } 9 | } 10 | -------------------------------------------------------------------------------- /test/vike-cloudflare/vite.config.ts: -------------------------------------------------------------------------------- 1 | import vikeSolid from 'vike-solid/vite' 2 | import vike from 'vike/plugin' 3 | import { defineConfig } from 'vite' 4 | 5 | export default defineConfig({ 6 | build: { 7 | target: 'es2022' 8 | }, 9 | plugins: [vike(), vikeSolid()] 10 | }) 11 | -------------------------------------------------------------------------------- /test/vike-cloudflare/wrangler.toml: -------------------------------------------------------------------------------- 1 | name = "vike-cloudflare-vike-demo" 2 | compatibility_date = "2024-06-24" 3 | pages_build_output_dir = "./dist/cloudflare" 4 | compatibility_flags = [ "nodejs_compat" ] 5 | -------------------------------------------------------------------------------- /test/vike-react/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /test/vike-react/.test-dev.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from './.testRun' 2 | testRun('pnpm run dev') 3 | -------------------------------------------------------------------------------- /test/vike-react/.test-preview.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from './.testRun' 2 | testRun('pnpm run preview') 3 | -------------------------------------------------------------------------------- /test/vike-react/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Unit Tests E2E" } 2 | -------------------------------------------------------------------------------- /test/vike-react/README.md: -------------------------------------------------------------------------------- 1 | Copied from: https://github.com/vikejs/vike-react/tree/main/examples/full 2 | -------------------------------------------------------------------------------- /test/vike-react/pages/+Head.tsx: -------------------------------------------------------------------------------- 1 | export { Head } 2 | 3 | import React from 'react' 4 | import logoUrl from '../assets/logo.svg' 5 | 6 | function Head() { 7 | return ( 8 | <> 9 | 10 | 11 | ) 12 | } 13 | -------------------------------------------------------------------------------- /test/vike-react/pages/star-wars/types.ts: -------------------------------------------------------------------------------- 1 | export type Movie = { 2 | id: string 3 | title: string 4 | release_date: string 5 | } 6 | export type MovieDetails = Movie & { 7 | director: string 8 | producer: string 9 | } 10 | -------------------------------------------------------------------------------- /test/vike-react/pages/without-ssr/+config.ts: -------------------------------------------------------------------------------- 1 | import type { Config } from 'vike/types' 2 | 3 | export default { 4 | // https://vike.dev/ssr 5 | ssr: false, 6 | title: 'No SSR' 7 | } satisfies Config 8 | -------------------------------------------------------------------------------- /test/vike-react/vite.config.ts: -------------------------------------------------------------------------------- 1 | import react from '@vitejs/plugin-react' 2 | import vike from 'vike/plugin' 3 | import { UserConfig } from 'vite' 4 | 5 | export default { 6 | plugins: [react(), vike()] 7 | } satisfies UserConfig 8 | -------------------------------------------------------------------------------- /test/vike-server/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /test/vike-server/.test-dev.test.ts: -------------------------------------------------------------------------------- 1 | import { testRunClassic } from '../../test/utils' 2 | testRunClassic('npm run dev') 3 | -------------------------------------------------------------------------------- /test/vike-server/.test-prod.test.ts: -------------------------------------------------------------------------------- 1 | import { testRunClassic } from '../../test/utils' 2 | testRunClassic('npm run prod') 3 | -------------------------------------------------------------------------------- /test/vike-server/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Unit Tests E2E" } 2 | -------------------------------------------------------------------------------- /test/vike-server/pages/Layout.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | font-family: sans-serif; 4 | } 5 | * { 6 | box-sizing: border-box; 7 | } 8 | a { 9 | text-decoration: none; 10 | } 11 | 12 | .navitem { 13 | padding: 3px; 14 | } 15 | -------------------------------------------------------------------------------- /test/vike-server/pages/about/+Page.jsx: -------------------------------------------------------------------------------- 1 | export default Page 2 | 3 | import React from 'react' 4 | 5 | function Page() { 6 | return ( 7 | <> 8 |

About

9 |

Example of using Vike.

10 | 11 | ) 12 | } 13 | -------------------------------------------------------------------------------- /test/vike-server/readme.md: -------------------------------------------------------------------------------- 1 | Copied from [vike-node > examples/express-react](https://github.com/vikejs/vike-node/tree/main/examples/express-react). 2 | -------------------------------------------------------------------------------- /test/vike-server/vite.config.js: -------------------------------------------------------------------------------- 1 | import react from '@vitejs/plugin-react' 2 | import vike from 'vike/plugin' 3 | 4 | export default { 5 | plugins: [react(), vike()] 6 | } 7 | -------------------------------------------------------------------------------- /test/vike-solid/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /test/vike-solid/.test-dev.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from './.testRun' 2 | testRun('pnpm run dev') 3 | -------------------------------------------------------------------------------- /test/vike-solid/.test-preview.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from './.testRun' 2 | testRun('pnpm run preview') 3 | -------------------------------------------------------------------------------- /test/vike-solid/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Unit Tests E2E" } 2 | -------------------------------------------------------------------------------- /test/vike-solid/README.md: -------------------------------------------------------------------------------- 1 | Copied from [vike-solid > examples/full/](https://github.com/vikejs/vike-solid/tree/47211252a661236624a3f99ddef190c6b13274da/examples/full). 2 | -------------------------------------------------------------------------------- /test/vike-solid/components/Counter.tsx: -------------------------------------------------------------------------------- 1 | import { createSignal } from 'solid-js' 2 | 3 | export function Counter() { 4 | const [count, setCount] = createSignal(0) 5 | return 6 | } 7 | -------------------------------------------------------------------------------- /test/vike-solid/pages/+Head.tsx: -------------------------------------------------------------------------------- 1 | // Default (can be overridden by pages) 2 | 3 | import logoUrl from '../assets/logo.svg' 4 | 5 | export function Head() { 6 | return ( 7 | <> 8 | 9 | 10 | ) 11 | } 12 | -------------------------------------------------------------------------------- /test/vike-solid/pages/index/Counter.tsx: -------------------------------------------------------------------------------- 1 | import { createSignal } from 'solid-js' 2 | 3 | export default function Counter() { 4 | const [count, setCount] = createSignal(0) 5 | 6 | return 7 | } 8 | -------------------------------------------------------------------------------- /test/vike-solid/pages/star-wars/types.ts: -------------------------------------------------------------------------------- 1 | export type Movie = { 2 | id: string 3 | title: string 4 | release_date: string 5 | } 6 | 7 | export type MovieDetails = Movie & { 8 | director: string 9 | producer: string 10 | } 11 | -------------------------------------------------------------------------------- /test/vike-solid/pages/starship/+config.ts: -------------------------------------------------------------------------------- 1 | import type { Config } from 'vike/types' 2 | 3 | export default { 4 | // https://vike.dev/keepScrollPosition 5 | keepScrollPosition: true 6 | } satisfies Config 7 | -------------------------------------------------------------------------------- /test/vike-solid/pages/without-ssr/+config.ts: -------------------------------------------------------------------------------- 1 | import type { Config } from 'vike/types' 2 | 3 | export default { 4 | // https://vike.dev/ssr 5 | ssr: false, 6 | title: 'No SSR' 7 | } satisfies Config 8 | -------------------------------------------------------------------------------- /test/vike-solid/vite.config.ts: -------------------------------------------------------------------------------- 1 | import vikeSolid from 'vike-solid/vite' 2 | import vike from 'vike/plugin' 3 | import type { UserConfig } from 'vite' 4 | 5 | export default { 6 | plugins: [vike(), vikeSolid()] 7 | } satisfies UserConfig 8 | -------------------------------------------------------------------------------- /test/vike-vercel/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | /.vercel/ 4 | -------------------------------------------------------------------------------- /test/vike-vercel/.test-dev.test.ts: -------------------------------------------------------------------------------- 1 | import { testRunClassic } from '../../test/utils' 2 | testRunClassic('npm run dev') 3 | -------------------------------------------------------------------------------- /test/vike-vercel/.test-prod.test.ts: -------------------------------------------------------------------------------- 1 | import { testRunClassic } from '../../test/utils' 2 | testRunClassic('npm run prod') 3 | -------------------------------------------------------------------------------- /test/vike-vercel/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Unit Tests E2E" } 2 | -------------------------------------------------------------------------------- /test/vike-vercel/README.md: -------------------------------------------------------------------------------- 1 | Copied from [vite-plugin-vercel > examples/express/](https://github.com/magne4000/vite-plugin-vercel/tree/b2706eafc60d9c3ef3cd18aceba4873dc3db06c4/examples/express). 2 | -------------------------------------------------------------------------------- /test/vike-vercel/pages/+config.js: -------------------------------------------------------------------------------- 1 | export { config } 2 | 3 | import vikeReact from 'vike-react/config' 4 | import { Layout } from './Layout' 5 | 6 | const config = { 7 | // https://vike.dev/Layout 8 | Layout: Layout, 9 | // https://vike.dev/extends 10 | extends: vikeReact 11 | } 12 | -------------------------------------------------------------------------------- /test/vike-vercel/pages/Layout.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | font-family: sans-serif; 4 | } 5 | * { 6 | box-sizing: border-box; 7 | } 8 | a { 9 | text-decoration: none; 10 | } 11 | 12 | .navitem { 13 | padding: 3px; 14 | } 15 | -------------------------------------------------------------------------------- /test/vike-vercel/pages/about/+Page.jsx: -------------------------------------------------------------------------------- 1 | export default Page 2 | 3 | import React from 'react' 4 | 5 | function Page() { 6 | return ( 7 | <> 8 |

About

9 |

Example of using Vike.

10 | 11 | ) 12 | } 13 | -------------------------------------------------------------------------------- /test/vike-vue/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /test/vike-vue/.test-dev.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from './.testRun' 2 | testRun('pnpm run dev') 3 | -------------------------------------------------------------------------------- /test/vike-vue/.test-preview.test.ts: -------------------------------------------------------------------------------- 1 | import { testRun } from './.testRun' 2 | testRun('pnpm run preview') 3 | -------------------------------------------------------------------------------- /test/vike-vue/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Unit Tests E2E" } 2 | -------------------------------------------------------------------------------- /test/vike-vue/README.md: -------------------------------------------------------------------------------- 1 | Copied from: https://github.com/vikejs/vike-vue/tree/main/examples/full 2 | -------------------------------------------------------------------------------- /test/vike-vue/pages/global.css: -------------------------------------------------------------------------------- 1 | code { 2 | font-family: monospace; 3 | background-color: #eaeaea; 4 | padding: 3px 5px; 5 | border-radius: 4px; 6 | } 7 | -------------------------------------------------------------------------------- /test/vike-vue/pages/hello/names.ts: -------------------------------------------------------------------------------- 1 | export const names = ['evan', 'rom', 'alice', 'jon', 'eli'] 2 | -------------------------------------------------------------------------------- /test/vike-vue/pages/markdown/+Page.md: -------------------------------------------------------------------------------- 1 | 4 | 5 | # Markdown 6 | 7 | This page is written in _Markdown_. 8 | 9 | Interactive components can be included in the Markdown. 10 | -------------------------------------------------------------------------------- /test/vike-vue/pages/markdown/+config.ts: -------------------------------------------------------------------------------- 1 | import type { Config } from 'vike/types' 2 | 3 | export default { 4 | title: 'Markdown - My Vike + Vue App' 5 | } satisfies Config 6 | -------------------------------------------------------------------------------- /test/vike-vue/pages/star-wars/movie/+route.ts: -------------------------------------------------------------------------------- 1 | export default '/star-wars/@movieId' 2 | -------------------------------------------------------------------------------- /test/vike-vue/pages/star-wars/types.ts: -------------------------------------------------------------------------------- 1 | export type Movie = { 2 | id: string 3 | title: string 4 | release_date: string 5 | } 6 | export type MovieDetails = Movie & { 7 | director: string 8 | producer: string 9 | } 10 | -------------------------------------------------------------------------------- /test/vike-vue/pages/starship/reviews/+Page.vue: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /test/vike-vue/pages/without-ssr/+config.ts: -------------------------------------------------------------------------------- 1 | import type { Config } from 'vike/types' 2 | 3 | export default { 4 | // https://vike.dev/ssr 5 | ssr: false 6 | } satisfies Config 7 | -------------------------------------------------------------------------------- /test/vitest/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /test/vitest/pages/+config.js: -------------------------------------------------------------------------------- 1 | export { config } 2 | 3 | import vikeReact from 'vike-react/config' 4 | import { Layout } from './Layout' 5 | 6 | const config = { 7 | // https://vike.dev/Layout 8 | Layout: Layout, 9 | // https://vike.dev/extends 10 | extends: vikeReact 11 | } 12 | -------------------------------------------------------------------------------- /test/vitest/pages/Layout.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | font-family: sans-serif; 4 | } 5 | * { 6 | box-sizing: border-box; 7 | } 8 | a { 9 | text-decoration: none; 10 | } 11 | 12 | .navitem { 13 | padding: 3px; 14 | } 15 | -------------------------------------------------------------------------------- /test/vitest/pages/about/+Page.jsx: -------------------------------------------------------------------------------- 1 | export default Page 2 | 3 | import React from 'react' 4 | 5 | function Page() { 6 | return ( 7 | <> 8 |

About

9 |

Example of using Vike.

10 | 11 | ) 12 | } 13 | -------------------------------------------------------------------------------- /test/vitest/vite.config.js: -------------------------------------------------------------------------------- 1 | import react from '@vitejs/plugin-react' 2 | import vike from 'vike/plugin' 3 | 4 | export default { 5 | plugins: [react(), vike()] 6 | } 7 | -------------------------------------------------------------------------------- /test/webpack/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | -------------------------------------------------------------------------------- /test/webpack/.test-dev.test.ts: -------------------------------------------------------------------------------- 1 | import { testRunClassic } from '../../test/utils' 2 | testRunClassic('npm run dev') 3 | -------------------------------------------------------------------------------- /test/webpack/.test-preview.test.ts: -------------------------------------------------------------------------------- 1 | import { testRunClassic } from '../../test/utils' 2 | testRunClassic('npm run preview', { skipViteEcosystemCi: true }) 3 | -------------------------------------------------------------------------------- /test/webpack/.testCiJob.json: -------------------------------------------------------------------------------- 1 | { "name": "Unit Tests E2E" } 2 | -------------------------------------------------------------------------------- /test/webpack/pages/about/+Page.jsx: -------------------------------------------------------------------------------- 1 | export default Page 2 | 3 | import React from 'react' 4 | 5 | function Page() { 6 | return ( 7 | <> 8 |

About

9 |

Example of using Vike.

10 | 11 | ) 12 | } 13 | -------------------------------------------------------------------------------- /test/webpack/renderer/Layout.css: -------------------------------------------------------------------------------- 1 | /* This CSS is common to all pages */ 2 | 3 | body { 4 | margin: 0; 5 | font-family: sans-serif; 6 | } 7 | * { 8 | box-sizing: border-box; 9 | } 10 | a { 11 | text-decoration: none; 12 | } 13 | 14 | .navitem { 15 | padding: 3px; 16 | } 17 | -------------------------------------------------------------------------------- /test/webpack/vite.config.js: -------------------------------------------------------------------------------- 1 | import vike from 'vike/plugin' 2 | 3 | export default { 4 | plugins: [vike()] 5 | } 6 | -------------------------------------------------------------------------------- /vike/.gitignore: -------------------------------------------------------------------------------- 1 | /dist/ 2 | /node_modules/ 3 | -------------------------------------------------------------------------------- /vike/.npmignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vikejs/vike/9478659491baf1c93086eb1127a1a88dd027456b/vike/.npmignore -------------------------------------------------------------------------------- /vike/.npmrc: -------------------------------------------------------------------------------- 1 | # Throw an error at install-time if user has a Node.js version lower than package.json#engines.node 2 | engine-strict=true 3 | -------------------------------------------------------------------------------- /vike/README.md: -------------------------------------------------------------------------------- 1 | # [vike.dev](https://vike.dev) 2 | 3 | Docs at [vike.dev](https://vike.dev). 4 | -------------------------------------------------------------------------------- /vike/RenderErrorPage.js: -------------------------------------------------------------------------------- 1 | // Some tools still need this as of January 2025 2 | export * from './dist/esm/shared/RenderErrorPage.js' 3 | export { default } from './dist/esm/shared/RenderErrorPage.js' 4 | -------------------------------------------------------------------------------- /vike/__internal.js: -------------------------------------------------------------------------------- 1 | // Some tools still need this as of January 2025 2 | export * from './dist/esm/__internal/index.js' 3 | export { default } from './dist/esm/__internal/index.js' 4 | -------------------------------------------------------------------------------- /vike/__internal/setup.js: -------------------------------------------------------------------------------- 1 | // Some tools still need this as of January 2025 2 | export * from '../dist/esm/node/runtime/page-files/setup.js' 3 | export { default } from '../dist/esm/node/runtime/page-files/setup.js' 4 | -------------------------------------------------------------------------------- /vike/abort.js: -------------------------------------------------------------------------------- 1 | // Some tools still need this as of January 2025 2 | export * from './dist/esm/shared/abort.js' 3 | export { default } from './dist/esm/shared/abort.js' 4 | -------------------------------------------------------------------------------- /vike/api.js: -------------------------------------------------------------------------------- 1 | // Some tools still need this as of January 2025 2 | export * from './dist/esm/node/api/index.js' 3 | export { default } from './dist/esm/node/api/index.js' 4 | -------------------------------------------------------------------------------- /vike/biome.json: -------------------------------------------------------------------------------- 1 | ../biome.json -------------------------------------------------------------------------------- /vike/cli.js: -------------------------------------------------------------------------------- 1 | // Some tools still need this as of January 2025 2 | export * from './dist/esm/node/cli/index.js' 3 | export { default } from './dist/esm/node/cli/index.js' 4 | -------------------------------------------------------------------------------- /vike/client.js: -------------------------------------------------------------------------------- 1 | // Some tools still need this as of January 2025 2 | export * from './dist/esm/client/server-routing-runtime/index.js' 3 | export { default } from './dist/esm/client/server-routing-runtime/index.js' 4 | -------------------------------------------------------------------------------- /vike/client/router.js: -------------------------------------------------------------------------------- 1 | // Some tools still need this as of January 2025 2 | export * from '../dist/esm/client/client-routing-runtime/index.js' 3 | export { default } from '../dist/esm/client/client-routing-runtime/index.js' 4 | -------------------------------------------------------------------------------- /vike/client/server-routing-runtime/onLoad.ts: -------------------------------------------------------------------------------- 1 | export { onLoad } 2 | 3 | import { assertIsBrowser } from '../../utils/assertIsBrowser.js' 4 | 5 | function onLoad() { 6 | assertIsBrowser() 7 | } 8 | -------------------------------------------------------------------------------- /vike/client/shared/getCurrentUrl.ts: -------------------------------------------------------------------------------- 1 | export { getCurrentUrl } 2 | 3 | import { normalizeClientSideUrl } from './normalizeClientSideUrl.js' 4 | 5 | function getCurrentUrl(options?: { withoutHash: true }): `/${string}` { 6 | return normalizeClientSideUrl(window.location.href, options) 7 | } 8 | -------------------------------------------------------------------------------- /vike/client/shared/utils.ts: -------------------------------------------------------------------------------- 1 | export * from '../../utils/assert.js' 2 | export * from '../../utils/parseUrl.js' 3 | export * from '../../utils/getGlobalObject.js' 4 | export * from '../../utils/objectAssign.js' 5 | export * from '../../utils/hasProp.js' 6 | export * from '../../utils/genPromise.js' 7 | -------------------------------------------------------------------------------- /vike/getPageContext.js: -------------------------------------------------------------------------------- 1 | // Some tools still need this as of January 2025 2 | export * from './dist/esm/shared/getPageContext.js' 3 | export { default } from './dist/esm/shared/getPageContext.js' 4 | -------------------------------------------------------------------------------- /vike/modifyUrl.js: -------------------------------------------------------------------------------- 1 | // Some tools still need this as of January 2025 2 | export * from './dist/esm/shared/modifyUrl.js' 3 | export { default } from './dist/esm/shared/modifyUrl.js' 4 | -------------------------------------------------------------------------------- /vike/node/cli/bin.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | import '../../dist/esm/node/cli/entry.js' 4 | -------------------------------------------------------------------------------- /vike/node/importBuild.ts: -------------------------------------------------------------------------------- 1 | // TODO/v1-release: remove 2 | console.warn( 3 | "[vike][Warning] importBuild.js is not needed anymore; it has no effect. Remove `import 'dist/server/importBuild.js'` to remove this warning. More infos at https://vike.dev/importBuild.js" 4 | ) 5 | -------------------------------------------------------------------------------- /vike/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles/test-file-structure/+config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vikejs/vike/9478659491baf1c93086eb1127a1a88dd027456b/vike/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles/test-file-structure/+config.js -------------------------------------------------------------------------------- /vike/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles/test-file-structure/.gitignore: -------------------------------------------------------------------------------- 1 | /pages/git-ignored/ 2 | -------------------------------------------------------------------------------- /vike/node/plugin/plugins/importUserCode/v1-design/virtual-files/debug.ts: -------------------------------------------------------------------------------- 1 | import { createDebugger } from '../../../../utils.js' 2 | export const debug = createDebugger('vike:virtual-files') 3 | -------------------------------------------------------------------------------- /vike/node/runtime/page-files/setup.ts: -------------------------------------------------------------------------------- 1 | // TODO/v1-release: remove https://github.com/vikejs/vike/issues/2122 2 | // This doesn't do anything anymore. (It's kept to avoid introducing a breaking change.) 3 | -------------------------------------------------------------------------------- /vike/node/shared/isErrorDebug.ts: -------------------------------------------------------------------------------- 1 | export { isErrorDebug } 2 | 3 | import { isDebugActivated } from './utils.js' 4 | 5 | function isErrorDebug(): boolean { 6 | return isDebugActivated('vike:error') 7 | } 8 | -------------------------------------------------------------------------------- /vike/plugin.js: -------------------------------------------------------------------------------- 1 | // Some tools still need this as of January 2025 2 | export * from './dist/esm/node/plugin/index.js' 3 | export { default } from './dist/esm/node/plugin/index.js' 4 | -------------------------------------------------------------------------------- /vike/prerender.js: -------------------------------------------------------------------------------- 1 | // Some tools still need this as of January 2025 2 | export * from './dist/esm/node/prerender/index.js' 3 | export { default } from './dist/esm/node/prerender/index.js' 4 | -------------------------------------------------------------------------------- /vike/routing.js: -------------------------------------------------------------------------------- 1 | // Some tools still need this as of January 2025 2 | export * from './dist/esm/shared/route/routing.js' 3 | export { default } from './dist/esm/shared/route/routing.js' 4 | -------------------------------------------------------------------------------- /vike/server.js: -------------------------------------------------------------------------------- 1 | // Some tools still need this as of January 2025 2 | export * from './dist/esm/node/runtime/index.js' 3 | export { default } from './dist/esm/node/runtime/index.js' 4 | -------------------------------------------------------------------------------- /vike/shared/NOT_SERIALIZABLE.ts: -------------------------------------------------------------------------------- 1 | export const NOT_SERIALIZABLE = '__VIKE__NOT_SERIALIZABLE__' 2 | -------------------------------------------------------------------------------- /vike/shared/RenderErrorPage.ts: -------------------------------------------------------------------------------- 1 | // TODO/v1-release: remove 2 | export { RenderErrorPage } from './route/abort.js' 3 | -------------------------------------------------------------------------------- /vike/shared/getPageContext.ts: -------------------------------------------------------------------------------- 1 | export { getPageContext, providePageContext } from './hooks/execHook.js' 2 | -------------------------------------------------------------------------------- /vike/shared/htmlElementIds.ts: -------------------------------------------------------------------------------- 1 | export const htmlElementId_pageContext = 'vike_pageContext' 2 | export const htmlElementId_globalContext = 'vike_globalContext' 3 | -------------------------------------------------------------------------------- /vike/shared/misc/isServerSideError.ts: -------------------------------------------------------------------------------- 1 | export const isServerSideError = '_isServerSideError' 2 | -------------------------------------------------------------------------------- /vike/shared/misc/pageContextInitIsPassedToClient.ts: -------------------------------------------------------------------------------- 1 | export const pageContextInitIsPassedToClient = '_pageContextInitIsPassedToClient' 2 | -------------------------------------------------------------------------------- /vike/shared/page-configs/serialize/assertPageConfigsSerialized.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vikejs/vike/9478659491baf1c93086eb1127a1a88dd027456b/vike/shared/page-configs/serialize/assertPageConfigsSerialized.ts -------------------------------------------------------------------------------- /vike/shared/route/noRouteMatch.ts: -------------------------------------------------------------------------------- 1 | export const noRouteMatch = "doesn't match the route of any of your pages" 2 | -------------------------------------------------------------------------------- /vike/shared/route/routing.ts: -------------------------------------------------------------------------------- 1 | // TODO/v1-release - move: 2 | // import { resolveRoute } from 'vike/routing' 3 | // to: 4 | // import { resolveRoute } from 'vike' 5 | export { resolveRoute } from './resolveRoute.js' 6 | -------------------------------------------------------------------------------- /vike/types.js: -------------------------------------------------------------------------------- 1 | // Some tools still need this as of January 2025 2 | export * from './dist/esm/types/index.js' 3 | export { default } from './dist/esm/types/index.js' 4 | -------------------------------------------------------------------------------- /vike/types/defineConfig.ts: -------------------------------------------------------------------------------- 1 | export { defineConfig } 2 | 3 | import type { Config } from '../shared/page-configs/Config.js' 4 | 5 | function defineConfig(config: Config): Config { 6 | return config 7 | } 8 | -------------------------------------------------------------------------------- /vike/universal-middleware.js: -------------------------------------------------------------------------------- 1 | // Some tools still need this as of January 2025 2 | export * from './dist/esm/node/runtime/universal-middleware.js' 3 | export { default } from './dist/esm/node/runtime/universal-middleware.js' 4 | -------------------------------------------------------------------------------- /vike/utils/PROJECT_VERSION.ts: -------------------------------------------------------------------------------- 1 | // Automatically updated by @brillout/release-me 2 | export const PROJECT_VERSION = '0.4.231' as const 3 | -------------------------------------------------------------------------------- /vike/utils/PromiseType.ts: -------------------------------------------------------------------------------- 1 | export type PromiseType = T extends PromiseLike ? U : T 2 | -------------------------------------------------------------------------------- /vike/utils/assertIsBrowser.ts: -------------------------------------------------------------------------------- 1 | export { assertIsBrowser } 2 | 3 | import { isBrowser } from './isBrowser.js' 4 | import { assert } from './assert.js' 5 | 6 | function assertIsBrowser() { 7 | assert(isBrowser()) 8 | } 9 | -------------------------------------------------------------------------------- /vike/utils/assertIsNotBrowser.ts: -------------------------------------------------------------------------------- 1 | export { assertIsNotBrowser } 2 | 3 | import { isBrowser } from './isBrowser.js' 4 | import { assert } from './assert.js' 5 | 6 | /** Ensure we don't bloat the client-side */ 7 | function assertIsNotBrowser() { 8 | assert(!isBrowser()) 9 | } 10 | -------------------------------------------------------------------------------- /vike/utils/capitalizeFirstLetter.ts: -------------------------------------------------------------------------------- 1 | export { capitalizeFirstLetter } 2 | 3 | function capitalizeFirstLetter(word: string): string { 4 | if (!word[0]) { 5 | return word 6 | } 7 | return word[0].toUpperCase() + word.slice(1) 8 | } 9 | -------------------------------------------------------------------------------- /vike/utils/checkType.ts: -------------------------------------------------------------------------------- 1 | export function checkType(_: Type) {} 2 | export function castType(_: Type): asserts _ is Type & Cast {} 3 | -------------------------------------------------------------------------------- /vike/utils/compareString.ts: -------------------------------------------------------------------------------- 1 | export { compareString } 2 | 3 | function compareString(str1: string, str2: string): number { 4 | if (str1.toLowerCase() < str2.toLowerCase()) return -1 5 | if (str1.toLowerCase() > str2.toLowerCase()) return 1 6 | return 0 7 | } 8 | -------------------------------------------------------------------------------- /vike/utils/debugGlob.ts: -------------------------------------------------------------------------------- 1 | import { createDebugger } from './debug.js' 2 | // TODO/v1-release: remove (or rename?) 3 | export const debugGlob = createDebugger('vike:glob') 4 | -------------------------------------------------------------------------------- /vike/utils/escapeRegex.ts: -------------------------------------------------------------------------------- 1 | export function escapeRegex(str: string): string { 2 | // https://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript/3561711#3561711 3 | return str.replace(/[/\-\\^$*+?.()|[\]{}]/g, '\\$&') 4 | } 5 | -------------------------------------------------------------------------------- /vike/utils/genPromise.ts: -------------------------------------------------------------------------------- 1 | export function genPromise(): { promise: Promise; resolve: (val: T) => void } { 2 | let resolve!: (val: T) => void 3 | const promise = new Promise((r) => (resolve = r)) 4 | return { promise, resolve } 5 | } 6 | -------------------------------------------------------------------------------- /vike/utils/getValuePrintable.ts: -------------------------------------------------------------------------------- 1 | export function getValuePrintable(value: unknown): null | string { 2 | if (([null, undefined] as unknown[]).includes(value)) return String(value) 3 | if (['boolean', 'number', 'string'].includes(typeof value)) return JSON.stringify(value) 4 | return null 5 | } 6 | -------------------------------------------------------------------------------- /vike/utils/isArray.ts: -------------------------------------------------------------------------------- 1 | // Same as Array.isArray() but typesafe: asserts unknown[] instead of any[] 2 | export function isArray(value: unknown): value is unknown[] { 3 | return Array.isArray(value) 4 | } 5 | -------------------------------------------------------------------------------- /vike/utils/isArrayOfStrings.ts: -------------------------------------------------------------------------------- 1 | export { isArrayOfStrings } 2 | 3 | import { isArray } from './isArray.js' 4 | 5 | function isArrayOfStrings(val: unknown): val is string[] { 6 | return isArray(val) && val.every((v) => typeof v === 'string') 7 | } 8 | -------------------------------------------------------------------------------- /vike/utils/isCallable.ts: -------------------------------------------------------------------------------- 1 | export function isCallable any>(thing: T | unknown): thing is T { 2 | return thing instanceof Function || typeof thing === 'function' 3 | } 4 | -------------------------------------------------------------------------------- /vike/utils/isObject.ts: -------------------------------------------------------------------------------- 1 | export function isObject(value: unknown): value is Record { 2 | return typeof value === 'object' && value !== null 3 | } 4 | -------------------------------------------------------------------------------- /vike/utils/isObjectOfStrings.ts: -------------------------------------------------------------------------------- 1 | export { isObjectOfStrings } 2 | 3 | import { isObject } from './isObject.js' 4 | 5 | function isObjectOfStrings(val: unknown): val is Record { 6 | return isObject(val) && Object.values(val).every((v) => typeof v === 'string') 7 | } 8 | -------------------------------------------------------------------------------- /vike/utils/isPromise.ts: -------------------------------------------------------------------------------- 1 | import { isCallable } from './isCallable.js' 2 | export function isPromise(val: unknown): val is Promise { 3 | return typeof val === 'object' && val !== null && 'then' in val && isCallable((val as Record).then) 4 | } 5 | -------------------------------------------------------------------------------- /vike/utils/isPropertyGetter.ts: -------------------------------------------------------------------------------- 1 | export function isPropertyGetter(obj: Object, prop: string): boolean { 2 | const descriptor = Object.getOwnPropertyDescriptor(obj, prop) 3 | return !!descriptor && !('value' in descriptor) && !!descriptor.get 4 | } 5 | -------------------------------------------------------------------------------- /vike/utils/isSameErrorMessage.ts: -------------------------------------------------------------------------------- 1 | import { isObject } from './isObject.js' 2 | 3 | export { isSameErrorMessage } 4 | 5 | function isSameErrorMessage(err1: unknown, err2: unknown): boolean { 6 | if (!isObject(err1) || !isObject(err2)) return false 7 | return err1.message === err2.message 8 | } 9 | -------------------------------------------------------------------------------- /vike/utils/isVitest.ts: -------------------------------------------------------------------------------- 1 | export function isVitest(): boolean { 2 | return typeof process !== 'undefined' && typeof process.env !== 'undefined' && 'VITEST' in process.env 3 | } 4 | -------------------------------------------------------------------------------- /vike/utils/objectFromEntries.ts: -------------------------------------------------------------------------------- 1 | /** Same as Object.fromEntries() but with type inference */ 2 | export function objectFromEntries(arr: T): Record { 3 | return Object.fromEntries(arr) as any 4 | } 5 | -------------------------------------------------------------------------------- /vike/utils/redirectHard.ts: -------------------------------------------------------------------------------- 1 | export function redirectHard(url: string) { 2 | window.location.href = url 3 | } 4 | -------------------------------------------------------------------------------- /vike/utils/removeEmptyLines.ts: -------------------------------------------------------------------------------- 1 | export function removeEmptyLines(msg: string): string { 2 | return msg 3 | .split('\n') 4 | .filter((line) => line.trim() !== '') 5 | .join('\n') 6 | } 7 | -------------------------------------------------------------------------------- /vike/utils/removeFileExtention.ts: -------------------------------------------------------------------------------- 1 | export function removeFileExtention(filePath: string) { 2 | return filePath.split('.').slice(0, -1).join('.') 3 | } 4 | -------------------------------------------------------------------------------- /vike/utils/sleep.ts: -------------------------------------------------------------------------------- 1 | export function sleep(milliseconds: number): Promise { 2 | return new Promise((r) => setTimeout(r, milliseconds)) 3 | } 4 | -------------------------------------------------------------------------------- /vike/utils/stringifyStringArray.ts: -------------------------------------------------------------------------------- 1 | export { stringifyStringArray } 2 | 3 | function stringifyStringArray(stringList: string[] | readonly string[]) { 4 | return '[' + stringList.map((str: string) => "'" + str + "'").join(', ') + ']' 5 | } 6 | -------------------------------------------------------------------------------- /vike/utils/styleFileRE.ts: -------------------------------------------------------------------------------- 1 | // Copied from https://github.com/vitejs/vite/blob/d649daba7682791178b711d9a3e44a6b5d00990c/packages/vite/src/node/plugins/css.ts#L90-L91 2 | export const styleFileRE = /\.(css|less|sass|scss|styl|stylus|pcss|postcss)($|\?)/ 3 | -------------------------------------------------------------------------------- /vike/utils/unique.ts: -------------------------------------------------------------------------------- 1 | export { unique } 2 | 3 | function unique(arr: T[]): T[] { 4 | return Array.from(new Set(arr)) 5 | } 6 | --------------------------------------------------------------------------------