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 +78 -11
- package/dist/mocks/storybook.global.d.ts +2 -0
- package/dist/mocks/storybook.global.js +15 -0
- package/dist/plugins/next-image/alias/next-image.d.ts +3 -3
- package/dist/plugins/next-image/alias/next-legacy-image.d.ts +2 -2
- package/dist/plugins/next-mocks/alias/cache/index.d.ts +16 -0
- package/dist/plugins/next-mocks/alias/cache/index.js +18 -0
- package/dist/plugins/next-mocks/alias/headers/cookies.d.ts +14 -0
- package/dist/plugins/next-mocks/alias/headers/cookies.js +34 -0
- package/dist/plugins/next-mocks/alias/headers/headers.d.ts +21 -0
- package/dist/plugins/next-mocks/alias/headers/headers.js +38 -0
- package/dist/plugins/next-mocks/alias/headers/index.d.ts +10 -0
- package/dist/plugins/next-mocks/alias/headers/index.js +71 -0
- package/dist/plugins/next-mocks/alias/navigation/index.d.ts +30 -0
- package/dist/plugins/next-mocks/alias/navigation/index.js +65 -0
- package/dist/plugins/next-mocks/alias/router/index.d.ts +45 -0
- package/dist/plugins/next-mocks/alias/router/index.js +108 -0
- package/dist/plugins/next-mocks/alias/rsc/server-only.d.ts +3 -0
- package/dist/plugins/next-mocks/alias/rsc/server-only.js +4 -0
- package/package.json +5 -1
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:
|
|
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:
|
|
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
|
|
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
|
|
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,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
|
|
3
|
+
import React__default from 'react';
|
|
4
4
|
|
|
5
|
-
declare const MockedNextImage:
|
|
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
|
-
} &
|
|
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
|
|
2
|
+
import React__default from 'react';
|
|
3
3
|
|
|
4
|
-
declare function NextLegacyImage({ loader, ...props }: _NextLegacyImage.ImageProps):
|
|
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 };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vite-plugin-storybook-nextjs",
|
|
3
|
-
"version": "0.0.
|
|
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",
|