UNPKG

vite-plugin-storybook-nextjs

Version:

This is a Vite plugin that allows you to use Next.js features in Vite. It is the basis for `@storybook/experimental-nextjs-vite` and should be used when running portable stories in Vitest.

107 lines (104 loc) 3.02 kB
import * as singletonRouter from 'next/dist/client/router.js'; import singletonRouter__default from 'next/dist/client/router.js'; import { NextjsRouterMocksNotAvailable } from 'storybook/internal/preview-errors'; import { fn } from 'storybook/test'; export * from 'next/dist/client/router'; // src/plugins/next-mocks/alias/router/index.ts var defaultRouterState = { route: "/", asPath: "/", basePath: "/", pathname: "/", query: {}, isFallback: false, isLocaleDomain: false, isReady: true, isPreview: false }; var routerAPI; var createRouter = (overrides) => { const routerActions = { push: fn((..._args) => { return Promise.resolve(true); }).mockName("next/router::useRouter().push"), replace: fn((..._args) => { return Promise.resolve(true); }).mockName("next/router::useRouter().replace"), reload: fn((..._args) => { }).mockName( "next/router::useRouter().reload" ), back: fn((..._args) => { }).mockName( "next/router::useRouter().back" ), forward: fn(() => { }).mockName("next/router::useRouter().forward"), prefetch: fn((..._args) => { return Promise.resolve(); }).mockName("next/router::useRouter().prefetch"), beforePopState: fn((..._args) => { }).mockName( "next/router::useRouter().beforePopState" ) }; const routerEvents = { on: fn((..._args) => { }).mockName( "next/router::useRouter().events.on" ), off: fn((..._args) => { }).mockName( "next/router::useRouter().events.off" ), emit: fn((..._args) => { }).mockName( "next/router::useRouter().events.emit" ) }; if (overrides) { for (const key of Object.keys(routerActions)) { if (key in overrides) { routerActions[key] = fn((...args) => { return overrides[key](...args); }).mockName(`useRouter().${key}`); } } } if (overrides?.events) { for (const key of Object.keys(routerEvents)) { if (key in routerEvents) { routerEvents[key] = fn((...args) => { return overrides.events[key](...args); }).mockName(`useRouter().events.${key}`); } } } routerAPI = { ...defaultRouterState, ...overrides, ...routerActions, // @ts-expect-error TODO improve typings events: routerEvents }; singletonRouter__default.router = routerAPI; for (const cb of singletonRouter__default.readyCallbacks) { cb(); } singletonRouter__default.readyCallbacks = []; return routerAPI; }; var getRouter = () => { if (!routerAPI) { throw new NextjsRouterMocksNotAvailable({ importType: "next/router" }); } return routerAPI; }; var router_default = singletonRouter__default; var useRouter2 = fn( singletonRouter.useRouter ).mockName("next/router::useRouter"); var withRouter2 = fn(singletonRouter.withRouter).mockName("next/router::withRouter"); export { createRouter, router_default as default, getRouter, useRouter2 as useRouter, withRouter2 as withRouter };