vite-plugin-storybook-nextjs 0.0.3 → 0.0.4--canary.fb0538a.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -21,7 +21,7 @@ import { getParserOptions } from 'next/dist/build/swc/options.js';
21
21
  import loadConfig from 'next/dist/server/config.js';
22
22
  import { cpus } from 'node:os';
23
23
  import { decode } from 'node:querystring';
24
- import { fileURLToPath, URL } from 'node:url';
24
+ import { fileURLToPath, URL as URL$1 } from 'node:url';
25
25
  import imageSizeOf from 'image-size';
26
26
 
27
27
  var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
@@ -571,7 +571,7 @@ var getVitestSWCTransformConfig = ({
571
571
  }) => {
572
572
  const baseOptions = getBaseSWCOptions({
573
573
  filename,
574
- development: false,
574
+ development: isDev,
575
575
  hasReactRefresh: false,
576
576
  globalWindow: !isServerEnvironment,
577
577
  modularizeImports: nextConfig.modularizeImports,
@@ -588,6 +588,7 @@ var getVitestSWCTransformConfig = ({
588
588
  )
589
589
  });
590
590
  const useCjsModules = shouldOutputCommonJs(filename);
591
+ const isPageFile = nextDirectories.pagesDir ? filename.startsWith(nextDirectories.pagesDir) : false;
591
592
  return {
592
593
  ...baseOptions,
593
594
  fontLoaders: {
@@ -622,10 +623,13 @@ var getVitestSWCTransformConfig = ({
622
623
  module: {
623
624
  type: isEsmProject && !useCjsModules ? "es6" : "commonjs"
624
625
  },
625
- disableNextSsg: true,
626
+ disableNextSsg: !isPageFile,
626
627
  disablePageConfig: true,
628
+ isPageFile,
627
629
  pagesDir: nextDirectories.pagesDir,
628
630
  appDir: nextDirectories.appDir,
631
+ isDevelopment: isDev,
632
+ isServerCompiler: isServerEnvironment,
629
633
  inputSourceMap: inputSourceMap && typeof inputSourceMap === "object" ? JSON.stringify(inputSourceMap) : void 0,
630
634
  sourceFileName: filename,
631
635
  filename
@@ -652,7 +656,7 @@ function vitePluginNextSwc(rootDir, nextConfigResolver) {
652
656
  const nextConfig = await nextConfigResolver.promise;
653
657
  nextDirectories = findPagesDir(resolvedDir);
654
658
  loadedJSConfig = await loadJsConfig.default(resolvedDir, nextConfig);
655
- isDev = env.mode === "development";
659
+ isDev = env.mode !== "production";
656
660
  await loadClosestPackageJson(resolvedDir);
657
661
  isEsmProject = true;
658
662
  await loadSWCBindingsEagerly(nextConfig);
@@ -770,7 +774,7 @@ function vitePluginNextImage(nextConfigResolver) {
770
774
  if (virtualNextImage === id) {
771
775
  return (await fs3.promises.readFile(
772
776
  fileURLToPath(
773
- new URL(
777
+ new URL$1(
774
778
  "./plugins/next-image/alias/next-image.js",
775
779
  import.meta.url
776
780
  )
@@ -780,7 +784,7 @@ function vitePluginNextImage(nextConfigResolver) {
780
784
  if (virtualNextLegacyImage === id) {
781
785
  return (await fs3.promises.readFile(
782
786
  fileURLToPath(
783
- new URL(
787
+ new URL$1(
784
788
  "./plugins/next-image/alias/next-legacy-image.js",
785
789
  import.meta.url
786
790
  )
@@ -790,7 +794,7 @@ function vitePluginNextImage(nextConfigResolver) {
790
794
  if (virtualNextImageDefaultLoader === id) {
791
795
  return (await fs3.promises.readFile(
792
796
  fileURLToPath(
793
- new URL(
797
+ new URL$1(
794
798
  "./plugins/next-image/alias/image-default-loader.js",
795
799
  import.meta.url
796
800
  )
@@ -800,7 +804,7 @@ function vitePluginNextImage(nextConfigResolver) {
800
804
  if (virtualNextImageContext === id) {
801
805
  return (await fs3.promises.readFile(
802
806
  fileURLToPath(
803
- new URL(
807
+ new URL$1(
804
808
  "./plugins/next-image/alias/image-context.js",
805
809
  import.meta.url
806
810
  )
@@ -850,12 +854,36 @@ function vitePluginNextImage(nextConfigResolver) {
850
854
  }
851
855
  };
852
856
  }
857
+ var dirname = path.dirname(new URL(import.meta.url).pathname);
858
+ var joinDir = (...subPath) => path.join(dirname, "plugins", "next-mocks", "alias", ...subPath);
859
+ var vitePluginNextMocks = () => ({
860
+ name: "vite-plugin-next-mocks",
861
+ config: () => ({
862
+ resolve: {
863
+ alias: {
864
+ "next/headers": joinDir("headers", "index.js"),
865
+ "@storybook/nextjs/headers.mock": joinDir("headers", "index.js"),
866
+ "next/navigation": joinDir("navigation", "index.js"),
867
+ "@storybook/nextjs/navigation.mock": joinDir(
868
+ "navigation",
869
+ "index.js"
870
+ ),
871
+ "next/router": joinDir("router", "index.js"),
872
+ "@storybook/nextjs/router.mock": joinDir("router", "index.js"),
873
+ "next/cache": joinDir("cache", "index.js"),
874
+ "@storybook/nextjs/cache.mock": joinDir("cache", "index.js"),
875
+ "server-only$": joinDir("rsc", "server-only.js")
876
+ }
877
+ }
878
+ })
879
+ });
853
880
 
854
881
  // src/index.ts
855
- createRequire(import.meta.url);
882
+ var require3 = createRequire(import.meta.url);
856
883
  function VitePlugin({ dir = process.cwd() } = {}) {
857
884
  const resolvedDir = resolve(dir);
858
885
  const nextConfigResolver = Promise.withResolvers();
886
+ const isVitestEnv = process.env.VITEST === "true";
859
887
  return [
860
888
  {
861
889
  name: "vite-plugin-storybook-nextjs",
@@ -866,13 +894,52 @@ function VitePlugin({ dir = process.cwd() } = {}) {
866
894
  // @ts-ignore TODO figure out why TypeScript is complaining about this
867
895
  await loadConfig.default(phase, resolvedDir)
868
896
  );
869
- return config;
897
+ return {
898
+ ...!isVitestEnv && {
899
+ resolve: {
900
+ alias: {
901
+ react: "next/dist/compiled/react",
902
+ "react-dom": "next/dist/compiled/react-dom"
903
+ }
904
+ }
905
+ },
906
+ test: {
907
+ alias: {
908
+ "react/jsx-dev-runtime": require3.resolve(
909
+ "next/dist/compiled/react/jsx-dev-runtime.js"
910
+ ),
911
+ "react/jsx-runtime": require3.resolve(
912
+ "next/dist/compiled/react/jsx-runtime.js"
913
+ ),
914
+ react: require3.resolve("next/dist/compiled/react"),
915
+ "react-dom/test-utils": require3.resolve(
916
+ "next/dist/compiled/react-dom/cjs/react-dom-test-utils.production.js"
917
+ ),
918
+ "react-dom/cjs/react-dom.development.js": require3.resolve(
919
+ "next/dist/compiled/react-dom/cjs/react-dom.development.js"
920
+ ),
921
+ "react-dom/client": require3.resolve(
922
+ "next/dist/compiled/react-dom/client.js"
923
+ ),
924
+ "react-dom": require3.resolve("next/dist/compiled/react-dom")
925
+ }
926
+ }
927
+ };
928
+ },
929
+ configResolved(config) {
930
+ if (!config.test?.browser?.enabled) {
931
+ config.test.setupFiles = [
932
+ require3.resolve("./mocks/storybook.global.js"),
933
+ ...config.test?.setupFiles ?? []
934
+ ];
935
+ }
870
936
  }
871
937
  },
872
938
  vitePluginNextFont(),
873
939
  vitePluginNextSwc(dir, nextConfigResolver),
874
940
  vitePluginNextEnv(dir, nextConfigResolver),
875
- vitePluginNextImage(nextConfigResolver)
941
+ vitePluginNextImage(nextConfigResolver),
942
+ vitePluginNextMocks()
876
943
  ];
877
944
  }
878
945
  var src_default = VitePlugin;
@@ -0,0 +1,2 @@
1
+
2
+ export { }
@@ -0,0 +1,15 @@
1
+ import moduleAlias from 'module-alias';
2
+
3
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
4
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
5
+ }) : x)(function(x) {
6
+ if (typeof require !== "undefined") return require.apply(this, arguments);
7
+ throw Error('Dynamic require of "' + x + '" is not supported');
8
+ });
9
+ moduleAlias.addAliases({
10
+ react: "next/dist/compiled/react",
11
+ "react-dom/test-utils": __require.resolve(
12
+ "next/dist/compiled/react-dom/cjs/react-dom-test-utils.production.js"
13
+ ),
14
+ "react-dom": "next/dist/compiled/react-dom"
15
+ });
@@ -1,8 +1,8 @@
1
1
  import * as next_dist_shared_lib_get_img_props from 'next/dist/shared/lib/get-img-props';
2
2
  import * as _NextImage from 'next/image';
3
- import React from 'react';
3
+ import React__default from 'react';
4
4
 
5
- declare const MockedNextImage: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement>, "height" | "width" | "loading" | "ref" | "alt" | "src" | "srcSet"> & {
5
+ declare const MockedNextImage: React__default.ForwardRefExoticComponent<Omit<React__default.DetailedHTMLProps<React__default.ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement>, "height" | "width" | "loading" | "ref" | "alt" | "src" | "srcSet"> & {
6
6
  src: string | next_dist_shared_lib_get_img_props.StaticImport;
7
7
  alt: string;
8
8
  width?: number | `${number}` | undefined;
@@ -22,7 +22,7 @@ declare const MockedNextImage: React.ForwardRefExoticComponent<Omit<React.Detail
22
22
  objectPosition?: string | undefined;
23
23
  lazyBoundary?: string | undefined;
24
24
  lazyRoot?: string | undefined;
25
- } & React.RefAttributes<HTMLImageElement>>;
25
+ } & React__default.RefAttributes<HTMLImageElement>>;
26
26
  declare const getImageProps: (props: _NextImage.ImageProps) => {
27
27
  props: next_dist_shared_lib_get_img_props.ImgProps;
28
28
  };
@@ -1,6 +1,6 @@
1
1
  import * as _NextLegacyImage from 'next/legacy/image';
2
- import React from 'react';
2
+ import React__default from 'react';
3
3
 
4
- declare function NextLegacyImage({ loader, ...props }: _NextLegacyImage.ImageProps): React.JSX.Element;
4
+ declare function NextLegacyImage({ loader, ...props }: _NextLegacyImage.ImageProps): React__default.JSX.Element;
5
5
 
6
6
  export { NextLegacyImage as default };
@@ -0,0 +1,16 @@
1
+ import * as vitest from 'vitest';
2
+ import { unstable_cache } from 'next/dist/server/web/spec-extension/unstable-cache';
3
+ export { unstable_cache } from 'next/dist/server/web/spec-extension/unstable-cache';
4
+ import { unstable_noStore } from 'next/dist/server/web/spec-extension/unstable-no-store';
5
+ export { unstable_noStore } from 'next/dist/server/web/spec-extension/unstable-no-store';
6
+
7
+ declare const revalidatePath: vitest.Mock<any, any>;
8
+ declare const revalidateTag: vitest.Mock<any, any>;
9
+ declare const cacheExports: {
10
+ unstable_cache: typeof unstable_cache;
11
+ revalidateTag: vitest.Mock<any, any>;
12
+ revalidatePath: vitest.Mock<any, any>;
13
+ unstable_noStore: typeof unstable_noStore;
14
+ };
15
+
16
+ export { cacheExports as default, revalidatePath, revalidateTag };
@@ -0,0 +1,18 @@
1
+ import { fn } from '@storybook/test';
2
+ import { unstable_cache } from 'next/dist/server/web/spec-extension/unstable-cache';
3
+ export { unstable_cache } from 'next/dist/server/web/spec-extension/unstable-cache';
4
+ import { unstable_noStore } from 'next/dist/server/web/spec-extension/unstable-no-store';
5
+ export { unstable_noStore } from 'next/dist/server/web/spec-extension/unstable-no-store';
6
+
7
+ // src/plugins/next-mocks/alias/cache/index.ts
8
+ var revalidatePath = fn().mockName("next/cache::revalidatePath");
9
+ var revalidateTag = fn().mockName("next/cache::revalidateTag");
10
+ var cacheExports = {
11
+ unstable_cache,
12
+ revalidateTag,
13
+ revalidatePath,
14
+ unstable_noStore
15
+ };
16
+ var cache_default = cacheExports;
17
+
18
+ export { cache_default as default, revalidatePath, revalidateTag };
@@ -0,0 +1,14 @@
1
+ import * as vitest from 'vitest';
2
+ import * as next_dist_compiled__edge_runtime_cookies from 'next/dist/compiled/@edge-runtime/cookies';
3
+ import { RequestCookies } from 'next/dist/compiled/@edge-runtime/cookies';
4
+
5
+ declare class RequestCookiesMock extends RequestCookies {
6
+ get: vitest.Mock<[name: string] | [next_dist_compiled__edge_runtime_cookies.RequestCookie], next_dist_compiled__edge_runtime_cookies.RequestCookie | undefined>;
7
+ getAll: vitest.Mock<[next_dist_compiled__edge_runtime_cookies.RequestCookie] | [name: string] | [], next_dist_compiled__edge_runtime_cookies.RequestCookie[]>;
8
+ has: vitest.Mock<[name: string], boolean>;
9
+ set: vitest.Mock<[key: string, value: string] | [options: next_dist_compiled__edge_runtime_cookies.RequestCookie], this>;
10
+ delete: vitest.Mock<[names: string | string[]], boolean | boolean[]>;
11
+ }
12
+ declare const cookies: vitest.Mock<[], RequestCookiesMock>;
13
+
14
+ export { cookies };
@@ -0,0 +1,34 @@
1
+ import { headers } from '@storybook/nextjs/headers.mock';
2
+ import { fn } from '@storybook/test';
3
+ import { RequestCookies } from 'next/dist/compiled/@edge-runtime/cookies';
4
+
5
+ // src/plugins/next-mocks/alias/headers/cookies.ts
6
+ var RequestCookiesMock = class extends RequestCookies {
7
+ constructor() {
8
+ super(...arguments);
9
+ this.get = fn(super.get.bind(this)).mockName("next/headers::cookies().get");
10
+ this.getAll = fn(super.getAll.bind(this)).mockName(
11
+ "next/headers::cookies().getAll"
12
+ );
13
+ this.has = fn(super.has.bind(this)).mockName("next/headers::cookies().has");
14
+ this.set = fn(super.set.bind(this)).mockName("next/headers::cookies().set");
15
+ this.delete = fn(super.delete.bind(this)).mockName(
16
+ "next/headers::cookies().delete"
17
+ );
18
+ }
19
+ };
20
+ var requestCookiesMock;
21
+ var cookies = fn(() => {
22
+ if (!requestCookiesMock) {
23
+ requestCookiesMock = new RequestCookiesMock(headers());
24
+ }
25
+ return requestCookiesMock;
26
+ }).mockName("next/headers::cookies()");
27
+ var originalRestore = cookies.mockRestore.bind(null);
28
+ cookies.mockRestore = () => {
29
+ originalRestore();
30
+ headers.mockRestore();
31
+ requestCookiesMock = new RequestCookiesMock(headers());
32
+ };
33
+
34
+ export { cookies };
@@ -0,0 +1,21 @@
1
+ import * as vitest from 'vitest';
2
+ import { HeadersAdapter } from 'next/dist/server/web/spec-extension/adapters/headers';
3
+
4
+ declare class HeadersAdapterMock extends HeadersAdapter {
5
+ constructor();
6
+ append: vitest.Mock<[name: string, value: string], void>;
7
+ delete: vitest.Mock<[name: string], void>;
8
+ get: vitest.Mock<[name: string], string | null>;
9
+ has: vitest.Mock<[name: string], boolean>;
10
+ set: vitest.Mock<[name: string, value: string], void>;
11
+ forEach: vitest.Mock<[callbackfn: (value: string, name: string, parent: Headers) => void, thisArg?: any], void>;
12
+ entries: vitest.Mock<[], IterableIterator<[string, string]>>;
13
+ keys: vitest.Mock<[], IterableIterator<string>>;
14
+ values: vitest.Mock<[], IterableIterator<string>>;
15
+ }
16
+ declare const headers: {
17
+ (): HeadersAdapterMock;
18
+ mockRestore(): void;
19
+ };
20
+
21
+ export { headers };
@@ -0,0 +1,38 @@
1
+ import { fn } from '@storybook/test';
2
+ import { HeadersAdapter } from 'next/dist/server/web/spec-extension/adapters/headers';
3
+
4
+ // src/plugins/next-mocks/alias/headers/headers.ts
5
+ var HeadersAdapterMock = class extends HeadersAdapter {
6
+ constructor() {
7
+ super({});
8
+ this.append = fn(super.append.bind(this)).mockName(
9
+ "next/headers::headers().append"
10
+ );
11
+ this.delete = fn(super.delete.bind(this)).mockName(
12
+ "next/headers::headers().delete"
13
+ );
14
+ this.get = fn(super.get.bind(this)).mockName("next/headers::headers().get");
15
+ this.has = fn(super.has.bind(this)).mockName("next/headers::headers().has");
16
+ this.set = fn(super.set.bind(this)).mockName("next/headers::headers().set");
17
+ this.forEach = fn(super.forEach.bind(this)).mockName(
18
+ "next/headers::headers().forEach"
19
+ );
20
+ this.entries = fn(super.entries.bind(this)).mockName(
21
+ "next/headers::headers().entries"
22
+ );
23
+ this.keys = fn(super.keys.bind(this)).mockName("next/headers::headers().keys");
24
+ this.values = fn(super.values.bind(this)).mockName(
25
+ "next/headers::headers().values"
26
+ );
27
+ }
28
+ };
29
+ var headersAdapterMock;
30
+ var headers = () => {
31
+ if (!headersAdapterMock) headersAdapterMock = new HeadersAdapterMock();
32
+ return headersAdapterMock;
33
+ };
34
+ headers.mockRestore = () => {
35
+ headersAdapterMock = new HeadersAdapterMock();
36
+ };
37
+
38
+ export { headers };
@@ -0,0 +1,10 @@
1
+ import * as vitest from 'vitest';
2
+ import * as next_dist_client_components_draft_mode from 'next/dist/client/components/draft-mode';
3
+ export { headers } from './headers.js';
4
+ export { cookies } from './cookies.js';
5
+ import 'next/dist/server/web/spec-extension/adapters/headers';
6
+ import 'next/dist/compiled/@edge-runtime/cookies';
7
+
8
+ declare const draftMode: vitest.Mock<[], next_dist_client_components_draft_mode.DraftMode>;
9
+
10
+ export { draftMode };
@@ -0,0 +1,71 @@
1
+ import { fn } from '@storybook/test';
2
+ import * as originalHeaders from 'next/dist/client/components/headers';
3
+ import { HeadersAdapter } from 'next/dist/server/web/spec-extension/adapters/headers';
4
+ import { headers as headers$1 } from '@storybook/nextjs/headers.mock';
5
+ import { RequestCookies } from 'next/dist/compiled/@edge-runtime/cookies';
6
+
7
+ // src/plugins/next-mocks/alias/headers/index.ts
8
+ var HeadersAdapterMock = class extends HeadersAdapter {
9
+ constructor() {
10
+ super({});
11
+ this.append = fn(super.append.bind(this)).mockName(
12
+ "next/headers::headers().append"
13
+ );
14
+ this.delete = fn(super.delete.bind(this)).mockName(
15
+ "next/headers::headers().delete"
16
+ );
17
+ this.get = fn(super.get.bind(this)).mockName("next/headers::headers().get");
18
+ this.has = fn(super.has.bind(this)).mockName("next/headers::headers().has");
19
+ this.set = fn(super.set.bind(this)).mockName("next/headers::headers().set");
20
+ this.forEach = fn(super.forEach.bind(this)).mockName(
21
+ "next/headers::headers().forEach"
22
+ );
23
+ this.entries = fn(super.entries.bind(this)).mockName(
24
+ "next/headers::headers().entries"
25
+ );
26
+ this.keys = fn(super.keys.bind(this)).mockName("next/headers::headers().keys");
27
+ this.values = fn(super.values.bind(this)).mockName(
28
+ "next/headers::headers().values"
29
+ );
30
+ }
31
+ };
32
+ var headersAdapterMock;
33
+ var headers = () => {
34
+ if (!headersAdapterMock) headersAdapterMock = new HeadersAdapterMock();
35
+ return headersAdapterMock;
36
+ };
37
+ headers.mockRestore = () => {
38
+ headersAdapterMock = new HeadersAdapterMock();
39
+ };
40
+ var RequestCookiesMock = class extends RequestCookies {
41
+ constructor() {
42
+ super(...arguments);
43
+ this.get = fn(super.get.bind(this)).mockName("next/headers::cookies().get");
44
+ this.getAll = fn(super.getAll.bind(this)).mockName(
45
+ "next/headers::cookies().getAll"
46
+ );
47
+ this.has = fn(super.has.bind(this)).mockName("next/headers::cookies().has");
48
+ this.set = fn(super.set.bind(this)).mockName("next/headers::cookies().set");
49
+ this.delete = fn(super.delete.bind(this)).mockName(
50
+ "next/headers::cookies().delete"
51
+ );
52
+ }
53
+ };
54
+ var requestCookiesMock;
55
+ var cookies = fn(() => {
56
+ if (!requestCookiesMock) {
57
+ requestCookiesMock = new RequestCookiesMock(headers$1());
58
+ }
59
+ return requestCookiesMock;
60
+ }).mockName("next/headers::cookies()");
61
+ var originalRestore = cookies.mockRestore.bind(null);
62
+ cookies.mockRestore = () => {
63
+ originalRestore();
64
+ headers$1.mockRestore();
65
+ requestCookiesMock = new RequestCookiesMock(headers$1());
66
+ };
67
+
68
+ // src/plugins/next-mocks/alias/headers/index.ts
69
+ var draftMode2 = fn(originalHeaders.draftMode).mockName("draftMode");
70
+
71
+ export { cookies, draftMode2 as draftMode, headers };
@@ -0,0 +1,30 @@
1
+ import * as React from 'react';
2
+ import * as next_dist_shared_lib_app_router_context_shared_runtime from 'next/dist/shared/lib/app-router-context.shared-runtime';
3
+ import { Mock } from '@storybook/test';
4
+ import * as actual from 'next/dist/client/components/navigation';
5
+ export * from 'next/dist/client/components/navigation';
6
+
7
+ declare const createNavigation: (overrides?: Record<string, (...params: unknown[]) => unknown>) => {
8
+ push: Mock;
9
+ replace: Mock;
10
+ forward: Mock;
11
+ back: Mock;
12
+ prefetch: Mock;
13
+ refresh: Mock;
14
+ };
15
+
16
+ declare const redirect: Mock<[url: string, type?: actual.RedirectType | undefined], never>;
17
+ declare const permanentRedirect: Mock<[url: string, type?: actual.RedirectType | undefined], never>;
18
+ declare const useSearchParams: Mock<[], actual.ReadonlyURLSearchParams>;
19
+ declare const usePathname: Mock<[], string>;
20
+ declare const useSelectedLayoutSegment: Mock<[parallelRouteKey?: string | undefined], string | null>;
21
+ declare const useSelectedLayoutSegments: Mock<[parallelRouteKey?: string | undefined], string[]>;
22
+ declare const useRouter: Mock<[], next_dist_shared_lib_app_router_context_shared_runtime.AppRouterInstance>;
23
+ declare const useServerInsertedHTML: Mock<[callback: () => React.ReactNode], void>;
24
+ declare const notFound: Mock<[], never>;
25
+ interface Params {
26
+ [key: string]: string | string[];
27
+ }
28
+ declare const useParams: Mock<[], Params>;
29
+
30
+ export { createNavigation, notFound, permanentRedirect, redirect, useParams, usePathname, useRouter, useSearchParams, useSelectedLayoutSegment, useSelectedLayoutSegments, useServerInsertedHTML };
@@ -0,0 +1,65 @@
1
+ import { fn } from '@storybook/test';
2
+ import * as actual from 'next/dist/client/components/navigation';
3
+ export * from 'next/dist/client/components/navigation';
4
+ import { getRedirectError } from 'next/dist/client/components/redirect';
5
+ import { RedirectStatusCode } from 'next/dist/client/components/redirect-status-code';
6
+
7
+ // src/plugins/next-mocks/alias/navigation/index.ts
8
+ var navigationAPI;
9
+ var createNavigation = (overrides) => {
10
+ const navigationActions = {
11
+ push: fn().mockName("next/navigation::useRouter().push"),
12
+ replace: fn().mockName("next/navigation::useRouter().replace"),
13
+ forward: fn().mockName("next/navigation::useRouter().forward"),
14
+ back: fn().mockName("next/navigation::useRouter().back"),
15
+ prefetch: fn().mockName("next/navigation::useRouter().prefetch"),
16
+ refresh: fn().mockName("next/navigation::useRouter().refresh")
17
+ };
18
+ if (overrides) {
19
+ for (const key of Object.keys(navigationActions)) {
20
+ if (key in overrides) {
21
+ navigationActions[key] = fn((...args) => {
22
+ return overrides[key](...args);
23
+ }).mockName(`useRouter().${key}`);
24
+ }
25
+ }
26
+ }
27
+ navigationAPI = navigationActions;
28
+ return navigationAPI;
29
+ };
30
+ var redirect = fn(
31
+ (url, type = actual.RedirectType.push) => {
32
+ throw getRedirectError(url, type, RedirectStatusCode.SeeOther);
33
+ }
34
+ ).mockName("next/navigation::redirect");
35
+ var permanentRedirect = fn(
36
+ (url, type = actual.RedirectType.push) => {
37
+ throw getRedirectError(url, type, RedirectStatusCode.SeeOther);
38
+ }
39
+ ).mockName("next/navigation::permanentRedirect");
40
+ var useSearchParams2 = fn(actual.useSearchParams).mockName(
41
+ "next/navigation::useSearchParams"
42
+ );
43
+ var usePathname2 = fn(actual.usePathname).mockName(
44
+ "next/navigation::usePathname"
45
+ );
46
+ var useSelectedLayoutSegment2 = fn(
47
+ actual.useSelectedLayoutSegment
48
+ ).mockName("next/navigation::useSelectedLayoutSegment");
49
+ var useSelectedLayoutSegments2 = fn(
50
+ actual.useSelectedLayoutSegments
51
+ ).mockName("next/navigation::useSelectedLayoutSegments");
52
+ var useRouter2 = fn(actual.useRouter).mockName(
53
+ "next/navigation::useRouter"
54
+ );
55
+ var useServerInsertedHTML2 = fn(actual.useServerInsertedHTML).mockName(
56
+ "next/navigation::useServerInsertedHTML"
57
+ );
58
+ var notFound2 = fn(actual.notFound).mockName(
59
+ "next/navigation::notFound"
60
+ );
61
+ var useParams2 = fn(actual.useParams).mockName(
62
+ "next/navigation::useParams"
63
+ );
64
+
65
+ export { createNavigation, notFound2 as notFound, permanentRedirect, redirect, useParams2 as useParams, usePathname2 as usePathname, useRouter2 as useRouter, useSearchParams2 as useSearchParams, useSelectedLayoutSegment2 as useSelectedLayoutSegment, useSelectedLayoutSegments2 as useSelectedLayoutSegments, useServerInsertedHTML2 as useServerInsertedHTML };
@@ -0,0 +1,45 @@
1
+ import * as React from 'react';
2
+ import * as next_dist_client_with_router from 'next/dist/client/with-router';
3
+ import * as next_types from 'next/types';
4
+ import { Mock } from '@storybook/test';
5
+ import * as originalRouter from 'next/dist/client/router';
6
+ import originalRouter__default from 'next/dist/client/router';
7
+ export * from 'next/dist/client/router';
8
+ export { default } from 'next/dist/client/router';
9
+ import { NextRouter } from 'next/router';
10
+
11
+ /**
12
+ * Creates a next/router router API mock. Used internally.
13
+ * @ignore
14
+ * @internal
15
+ * */
16
+ declare const createRouter: (overrides: Partial<NextRouter>) => originalRouter.NextRouter;
17
+ declare const getRouter: () => {
18
+ push: Mock;
19
+ replace: Mock;
20
+ reload: Mock;
21
+ back: Mock;
22
+ forward: Mock;
23
+ prefetch: Mock;
24
+ beforePopState: Mock;
25
+ events: {
26
+ on: Mock;
27
+ off: Mock;
28
+ emit: Mock;
29
+ };
30
+ } & {
31
+ route: string;
32
+ asPath: string;
33
+ basePath: string;
34
+ pathname: string;
35
+ query: {};
36
+ isFallback: boolean;
37
+ isLocaleDomain: boolean;
38
+ isReady: boolean;
39
+ isPreview: boolean;
40
+ };
41
+
42
+ declare const useRouter: Mock<[], originalRouter.NextRouter>;
43
+ declare const withRouter: Mock<[ComposedComponent: next_types.NextComponentType<next_types.NextPageContext, any, next_dist_client_with_router.WithRouterProps>], React.ComponentType<next_dist_client_with_router.ExcludeRouterProps<next_dist_client_with_router.WithRouterProps>>>;
44
+
45
+ export { createRouter, getRouter, useRouter, withRouter };
@@ -0,0 +1,108 @@
1
+ import { fn } from '@storybook/test';
2
+ import * as singletonRouter from 'next/dist/client/router';
3
+ import singletonRouter__default from 'next/dist/client/router';
4
+ export * from 'next/dist/client/router';
5
+ import { NextjsRouterMocksNotAvailable } from 'storybook/internal/preview-errors';
6
+
7
+ // src/plugins/next-mocks/alias/router/index.ts
8
+ var defaultRouterState = {
9
+ route: "/",
10
+ asPath: "/",
11
+ basePath: "/",
12
+ pathname: "/",
13
+ query: {},
14
+ isFallback: false,
15
+ isLocaleDomain: false,
16
+ isReady: true,
17
+ isPreview: false
18
+ };
19
+ var routerAPI;
20
+ var createRouter = (overrides) => {
21
+ const routerActions = {
22
+ push: fn((..._args) => {
23
+ return Promise.resolve(true);
24
+ }).mockName("next/router::useRouter().push"),
25
+ replace: fn((..._args) => {
26
+ return Promise.resolve(true);
27
+ }).mockName("next/router::useRouter().replace"),
28
+ reload: fn((..._args) => {
29
+ }).mockName(
30
+ "next/router::useRouter().reload"
31
+ ),
32
+ back: fn((..._args) => {
33
+ }).mockName(
34
+ "next/router::useRouter().back"
35
+ ),
36
+ forward: fn(() => {
37
+ }).mockName("next/router::useRouter().forward"),
38
+ prefetch: fn((..._args) => {
39
+ return Promise.resolve();
40
+ }).mockName("next/router::useRouter().prefetch"),
41
+ beforePopState: fn((..._args) => {
42
+ }).mockName(
43
+ "next/router::useRouter().beforePopState"
44
+ )
45
+ };
46
+ const routerEvents = {
47
+ on: fn((..._args) => {
48
+ }).mockName(
49
+ "next/router::useRouter().events.on"
50
+ ),
51
+ off: fn((..._args) => {
52
+ }).mockName(
53
+ "next/router::useRouter().events.off"
54
+ ),
55
+ emit: fn((..._args) => {
56
+ }).mockName(
57
+ "next/router::useRouter().events.emit"
58
+ )
59
+ };
60
+ if (overrides) {
61
+ for (const key of Object.keys(routerActions)) {
62
+ if (key in overrides) {
63
+ routerActions[key] = fn((...args) => {
64
+ return overrides[key](...args);
65
+ }).mockName(`useRouter().${key}`);
66
+ }
67
+ }
68
+ }
69
+ if (overrides?.events) {
70
+ for (const key of Object.keys(routerEvents)) {
71
+ if (key in routerEvents) {
72
+ routerEvents[key] = fn((...args) => {
73
+ return overrides.events[key](...args);
74
+ }).mockName(`useRouter().events.${key}`);
75
+ }
76
+ }
77
+ }
78
+ routerAPI = {
79
+ ...defaultRouterState,
80
+ ...overrides,
81
+ ...routerActions,
82
+ // @ts-expect-error TODO improve typings
83
+ events: routerEvents
84
+ };
85
+ singletonRouter__default.router = routerAPI;
86
+ for (const cb of singletonRouter__default.readyCallbacks) {
87
+ cb();
88
+ }
89
+ singletonRouter__default.readyCallbacks = [];
90
+ return routerAPI;
91
+ };
92
+ var getRouter = () => {
93
+ if (!routerAPI) {
94
+ throw new NextjsRouterMocksNotAvailable({
95
+ importType: "next/router"
96
+ });
97
+ }
98
+ return routerAPI;
99
+ };
100
+ var router_default = singletonRouter__default;
101
+ var useRouter2 = fn(singletonRouter.useRouter).mockName(
102
+ "next/router::useRouter"
103
+ );
104
+ var withRouter2 = fn(singletonRouter.withRouter).mockName(
105
+ "next/router::withRouter"
106
+ );
107
+
108
+ export { createRouter, router_default as default, getRouter, useRouter2 as useRouter, withRouter2 as withRouter };
@@ -0,0 +1,3 @@
1
+ declare const _default: {};
2
+
3
+ export { _default as default };
@@ -0,0 +1,4 @@
1
+ // src/plugins/next-mocks/alias/rsc/server-only.ts
2
+ var server_only_default = {};
3
+
4
+ export { server_only_default as default };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vite-plugin-storybook-nextjs",
3
- "version": "0.0.3",
3
+ "version": "0.0.4--canary.fb0538a.0",
4
4
  "description": "",
5
5
  "keywords": [
6
6
  "vite-plugin",
@@ -32,11 +32,14 @@
32
32
  "release": "auto shipit"
33
33
  },
34
34
  "peerDependencies": {
35
+ "@storybook/test": "^8.3.0-alpha.3",
35
36
  "next": "^14.0.0",
37
+ "storybook": "^8.3.0-alpha.3",
36
38
  "vite": "^5.0.0"
37
39
  },
38
40
  "devDependencies": {
39
41
  "@biomejs/biome": "1.8.1",
42
+ "@storybook/test": "8.3.0-alpha.3",
40
43
  "@types/node": "^18",
41
44
  "@types/react": "^18",
42
45
  "auto": "^11.2.0",
@@ -45,6 +48,7 @@
45
48
  "react": "^18",
46
49
  "rollup": "^4.18.0",
47
50
  "sharp": "^0.33.4",
51
+ "storybook": "8.3.0-alpha.3",
48
52
  "tsup": "^8.1.0",
49
53
  "typescript": "^5.0.0",
50
54
  "vite": "^5.0.0",