vite-plugin-storybook-nextjs 1.0.13 → 1.0.14--canary.26.660ea90.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/README.md CHANGED
@@ -3,13 +3,14 @@
3
3
  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.
4
4
 
5
5
  ## Features
6
+
6
7
  - **Next.js Integration**: Seamlessly integrate Next.js features into your Vite project.
7
8
  - **Storybook Compatibility**: Acts as the foundation for [the `@storybook/experimental-nextjs-vite` framework](https://storybook.js.org/docs/get-started/frameworks/nextjs#with-vite), enabling you to use Storybook with Next.js in a Vite environment.
8
9
  - **Portable Stories**: Ideal for running portable stories in Vitest, ensuring your components are tested in an environment that closely mirrors production.
9
10
 
10
11
  ## Requirements
11
12
 
12
- - Next.js v14.1.0 or higher
13
+ - Next.js v15.0.3 or higher
13
14
 
14
15
  ## Installation
15
16
 
package/dist/index.cjs CHANGED
@@ -490,7 +490,7 @@ function getEmotionOptions(emotionConfig, development) {
490
490
  }
491
491
 
492
492
  // src/utils/swc/options.ts
493
- var require2 = module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.src || new URL('out.js', document.baseURI).href)));
493
+ var require2 = module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href)));
494
494
  var regeneratorRuntimePath = require2.resolve(
495
495
  "next/dist/compiled/regenerator-runtime"
496
496
  );
@@ -790,7 +790,7 @@ var isVitestEnv = process.env.VITEST === "true";
790
790
  function getExecutionEnvironment(config) {
791
791
  return isVitestEnv && config.test?.browser?.enabled !== true ? "node" : "browser";
792
792
  }
793
- var require3 = module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.src || new URL('out.js', document.baseURI).href)));
793
+ var require3 = module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href)));
794
794
  var getEntryPoint = (subPath, env) => require3.resolve(`${VITEST_PLUGIN_NAME}/${env}/mocks/${subPath}`);
795
795
  var getAlias = (env) => ({
796
796
  "sb-original/default-loader": getEntryPoint("image-default-loader", env),
@@ -804,7 +804,7 @@ var virtualImage = "virtual:next-image";
804
804
  var virtualNextImage = "virtual:next/image";
805
805
  var virtualNextLegacyImage = "virtual:next/legacy/image";
806
806
  var sharp;
807
- var require4 = module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.src || new URL('out.js', document.baseURI).href)));
807
+ var require4 = module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href)));
808
808
  try {
809
809
  sharp = require4("sharp");
810
810
  if (sharp && sharp.concurrency() > 1) {
@@ -906,40 +906,48 @@ function vitePluginNextImage(nextConfigResolver) {
906
906
  }
907
907
  };
908
908
  }
909
- var require5 = module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.src || new URL('out.js', document.baseURI).href)));
909
+ var require5 = module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href)));
910
910
  var getEntryPoint2 = (subPath, env) => require5.resolve(`${VITEST_PLUGIN_NAME}/${env}/mocks/${subPath}`);
911
- var getAlias2 = (env) => ({
912
- "next/headers": getEntryPoint2("headers", env),
913
- "@storybook/nextjs/headers.mock": getEntryPoint2("headers", env),
914
- "@storybook/nextjs-vite/headers.mock": getEntryPoint2("headers", env),
915
- "@storybook/experimental-nextjs-vite/headers.mock": getEntryPoint2(
916
- "headers",
917
- env
918
- ),
919
- "next/navigation": getEntryPoint2("navigation", env),
920
- "@storybook/nextjs/navigation.mock": getEntryPoint2("navigation", env),
921
- "@storybook/nextjs-vite/navigation.mock": getEntryPoint2("navigation", env),
922
- "@storybook/experimental-nextjs-vite/navigation.mock": getEntryPoint2(
923
- "navigation",
924
- env
925
- ),
926
- "next/router": getEntryPoint2("router", env),
927
- "@storybook/nextjs/router.mock": getEntryPoint2("router", env),
928
- "@storybook/nextjs-vite/router.mock": getEntryPoint2("router", env),
929
- "@storybook/experimental-nextjs-vite/router.mock": getEntryPoint2(
930
- "router",
931
- env
932
- ),
933
- "next/cache": getEntryPoint2("cache", env),
934
- "@storybook/nextjs/cache.mock": getEntryPoint2("cache", env),
935
- "@storybook/nextjs-vite/cache.mock": getEntryPoint2("cache", env),
936
- "@storybook/experimental-nextjs-vite/cache.mock": getEntryPoint2("cache", env),
937
- "server-only": getEntryPoint2("server-only", env),
938
- "@opentelemetry/api": require5.resolve(
939
- "next/dist/compiled/@opentelemetry/api"
940
- ),
941
- "next/dynamic": getEntryPoint2("dynamic", env)
942
- });
911
+ var getAlias2 = (env) => {
912
+ const nextPackageJson = require5("next/package.json");
913
+ const nextMajorVersion = Number.parseInt(
914
+ String(nextPackageJson?.version).split(".").at(0) ?? "",
915
+ 10
916
+ );
917
+ const headersMock = nextMajorVersion <= 14 ? getEntryPoint2("v14-headers", env) : getEntryPoint2("headers", env);
918
+ return {
919
+ "next/headers": headersMock,
920
+ "@storybook/nextjs/headers.mock": headersMock,
921
+ "@storybook/nextjs-vite/headers.mock": headersMock,
922
+ "@storybook/experimental-nextjs-vite/headers.mock": headersMock,
923
+ "next/navigation": getEntryPoint2("navigation", env),
924
+ "@storybook/nextjs/navigation.mock": getEntryPoint2("navigation", env),
925
+ "@storybook/nextjs-vite/navigation.mock": getEntryPoint2("navigation", env),
926
+ "@storybook/experimental-nextjs-vite/navigation.mock": getEntryPoint2(
927
+ "navigation",
928
+ env
929
+ ),
930
+ "next/router": getEntryPoint2("router", env),
931
+ "@storybook/nextjs/router.mock": getEntryPoint2("router", env),
932
+ "@storybook/nextjs-vite/router.mock": getEntryPoint2("router", env),
933
+ "@storybook/experimental-nextjs-vite/router.mock": getEntryPoint2(
934
+ "router",
935
+ env
936
+ ),
937
+ "next/cache": getEntryPoint2("cache", env),
938
+ "@storybook/nextjs/cache.mock": getEntryPoint2("cache", env),
939
+ "@storybook/nextjs-vite/cache.mock": getEntryPoint2("cache", env),
940
+ "@storybook/experimental-nextjs-vite/cache.mock": getEntryPoint2(
941
+ "cache",
942
+ env
943
+ ),
944
+ "server-only": getEntryPoint2("server-only", env),
945
+ "@opentelemetry/api": require5.resolve(
946
+ "next/dist/compiled/@opentelemetry/api"
947
+ ),
948
+ "next/dynamic": getEntryPoint2("dynamic", env)
949
+ };
950
+ };
943
951
  var vitePluginNextMocks = () => ({
944
952
  name: "vite-plugin-next-mocks",
945
953
  config: (config) => {
@@ -953,7 +961,7 @@ var vitePluginNextMocks = () => ({
953
961
  });
954
962
 
955
963
  // src/index.ts
956
- var require6 = module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.src || new URL('out.js', document.baseURI).href)));
964
+ var require6 = module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href)));
957
965
  var loadConfig = (
958
966
  // biome-ignore lint/suspicious/noExplicitAny: CJS support
959
967
  nextServerConfig__default.default.default || nextServerConfig__default.default
package/dist/index.js CHANGED
@@ -874,38 +874,46 @@ function vitePluginNextImage(nextConfigResolver) {
874
874
  }
875
875
  var require5 = createRequire(import.meta.url);
876
876
  var getEntryPoint2 = (subPath, env) => require5.resolve(`${VITEST_PLUGIN_NAME}/${env}/mocks/${subPath}`);
877
- var getAlias2 = (env) => ({
878
- "next/headers": getEntryPoint2("headers", env),
879
- "@storybook/nextjs/headers.mock": getEntryPoint2("headers", env),
880
- "@storybook/nextjs-vite/headers.mock": getEntryPoint2("headers", env),
881
- "@storybook/experimental-nextjs-vite/headers.mock": getEntryPoint2(
882
- "headers",
883
- env
884
- ),
885
- "next/navigation": getEntryPoint2("navigation", env),
886
- "@storybook/nextjs/navigation.mock": getEntryPoint2("navigation", env),
887
- "@storybook/nextjs-vite/navigation.mock": getEntryPoint2("navigation", env),
888
- "@storybook/experimental-nextjs-vite/navigation.mock": getEntryPoint2(
889
- "navigation",
890
- env
891
- ),
892
- "next/router": getEntryPoint2("router", env),
893
- "@storybook/nextjs/router.mock": getEntryPoint2("router", env),
894
- "@storybook/nextjs-vite/router.mock": getEntryPoint2("router", env),
895
- "@storybook/experimental-nextjs-vite/router.mock": getEntryPoint2(
896
- "router",
897
- env
898
- ),
899
- "next/cache": getEntryPoint2("cache", env),
900
- "@storybook/nextjs/cache.mock": getEntryPoint2("cache", env),
901
- "@storybook/nextjs-vite/cache.mock": getEntryPoint2("cache", env),
902
- "@storybook/experimental-nextjs-vite/cache.mock": getEntryPoint2("cache", env),
903
- "server-only": getEntryPoint2("server-only", env),
904
- "@opentelemetry/api": require5.resolve(
905
- "next/dist/compiled/@opentelemetry/api"
906
- ),
907
- "next/dynamic": getEntryPoint2("dynamic", env)
908
- });
877
+ var getAlias2 = (env) => {
878
+ const nextPackageJson = require5("next/package.json");
879
+ const nextMajorVersion = Number.parseInt(
880
+ String(nextPackageJson?.version).split(".").at(0) ?? "",
881
+ 10
882
+ );
883
+ const headersMock = nextMajorVersion <= 14 ? getEntryPoint2("v14-headers", env) : getEntryPoint2("headers", env);
884
+ return {
885
+ "next/headers": headersMock,
886
+ "@storybook/nextjs/headers.mock": headersMock,
887
+ "@storybook/nextjs-vite/headers.mock": headersMock,
888
+ "@storybook/experimental-nextjs-vite/headers.mock": headersMock,
889
+ "next/navigation": getEntryPoint2("navigation", env),
890
+ "@storybook/nextjs/navigation.mock": getEntryPoint2("navigation", env),
891
+ "@storybook/nextjs-vite/navigation.mock": getEntryPoint2("navigation", env),
892
+ "@storybook/experimental-nextjs-vite/navigation.mock": getEntryPoint2(
893
+ "navigation",
894
+ env
895
+ ),
896
+ "next/router": getEntryPoint2("router", env),
897
+ "@storybook/nextjs/router.mock": getEntryPoint2("router", env),
898
+ "@storybook/nextjs-vite/router.mock": getEntryPoint2("router", env),
899
+ "@storybook/experimental-nextjs-vite/router.mock": getEntryPoint2(
900
+ "router",
901
+ env
902
+ ),
903
+ "next/cache": getEntryPoint2("cache", env),
904
+ "@storybook/nextjs/cache.mock": getEntryPoint2("cache", env),
905
+ "@storybook/nextjs-vite/cache.mock": getEntryPoint2("cache", env),
906
+ "@storybook/experimental-nextjs-vite/cache.mock": getEntryPoint2(
907
+ "cache",
908
+ env
909
+ ),
910
+ "server-only": getEntryPoint2("server-only", env),
911
+ "@opentelemetry/api": require5.resolve(
912
+ "next/dist/compiled/@opentelemetry/api"
913
+ ),
914
+ "next/dynamic": getEntryPoint2("dynamic", env)
915
+ };
916
+ };
909
917
  var vitePluginNextMocks = () => ({
910
918
  name: "vite-plugin-next-mocks",
911
919
  config: (config) => {
@@ -15,49 +15,57 @@ var VITEST_PLUGIN_NAME = "vite-plugin-storybook-nextjs";
15
15
  process.env.VITEST === "true";
16
16
 
17
17
  // src/plugins/next-image/alias/index.tsx
18
- var require2 = module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.src || new URL('out.js', document.baseURI).href)));
18
+ var require2 = module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('storybook.global.cjs', document.baseURI).href)));
19
19
  var getEntryPoint = (subPath, env) => require2.resolve(`${VITEST_PLUGIN_NAME}/${env}/mocks/${subPath}`);
20
20
  var getAlias = (env) => ({
21
21
  "sb-original/default-loader": getEntryPoint("image-default-loader", env),
22
22
  "sb-original/image-context": getEntryPoint("image-context", env)
23
23
  });
24
- var require3 = module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.src || new URL('out.js', document.baseURI).href)));
24
+ var require3 = module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('storybook.global.cjs', document.baseURI).href)));
25
25
  var getEntryPoint2 = (subPath, env) => require3.resolve(`${VITEST_PLUGIN_NAME}/${env}/mocks/${subPath}`);
26
- var getAlias2 = (env) => ({
27
- "next/headers": getEntryPoint2("headers", env),
28
- "@storybook/nextjs/headers.mock": getEntryPoint2("headers", env),
29
- "@storybook/nextjs-vite/headers.mock": getEntryPoint2("headers", env),
30
- "@storybook/experimental-nextjs-vite/headers.mock": getEntryPoint2(
31
- "headers",
32
- env
33
- ),
34
- "next/navigation": getEntryPoint2("navigation", env),
35
- "@storybook/nextjs/navigation.mock": getEntryPoint2("navigation", env),
36
- "@storybook/nextjs-vite/navigation.mock": getEntryPoint2("navigation", env),
37
- "@storybook/experimental-nextjs-vite/navigation.mock": getEntryPoint2(
38
- "navigation",
39
- env
40
- ),
41
- "next/router": getEntryPoint2("router", env),
42
- "@storybook/nextjs/router.mock": getEntryPoint2("router", env),
43
- "@storybook/nextjs-vite/router.mock": getEntryPoint2("router", env),
44
- "@storybook/experimental-nextjs-vite/router.mock": getEntryPoint2(
45
- "router",
46
- env
47
- ),
48
- "next/cache": getEntryPoint2("cache", env),
49
- "@storybook/nextjs/cache.mock": getEntryPoint2("cache", env),
50
- "@storybook/nextjs-vite/cache.mock": getEntryPoint2("cache", env),
51
- "@storybook/experimental-nextjs-vite/cache.mock": getEntryPoint2("cache", env),
52
- "server-only": getEntryPoint2("server-only", env),
53
- "@opentelemetry/api": require3.resolve(
54
- "next/dist/compiled/@opentelemetry/api"
55
- ),
56
- "next/dynamic": getEntryPoint2("dynamic", env)
57
- });
26
+ var getAlias2 = (env) => {
27
+ const nextPackageJson = require3("next/package.json");
28
+ const nextMajorVersion = Number.parseInt(
29
+ String(nextPackageJson?.version).split(".").at(0) ?? "",
30
+ 10
31
+ );
32
+ const headersMock = nextMajorVersion <= 14 ? getEntryPoint2("v14-headers", env) : getEntryPoint2("headers", env);
33
+ return {
34
+ "next/headers": headersMock,
35
+ "@storybook/nextjs/headers.mock": headersMock,
36
+ "@storybook/nextjs-vite/headers.mock": headersMock,
37
+ "@storybook/experimental-nextjs-vite/headers.mock": headersMock,
38
+ "next/navigation": getEntryPoint2("navigation", env),
39
+ "@storybook/nextjs/navigation.mock": getEntryPoint2("navigation", env),
40
+ "@storybook/nextjs-vite/navigation.mock": getEntryPoint2("navigation", env),
41
+ "@storybook/experimental-nextjs-vite/navigation.mock": getEntryPoint2(
42
+ "navigation",
43
+ env
44
+ ),
45
+ "next/router": getEntryPoint2("router", env),
46
+ "@storybook/nextjs/router.mock": getEntryPoint2("router", env),
47
+ "@storybook/nextjs-vite/router.mock": getEntryPoint2("router", env),
48
+ "@storybook/experimental-nextjs-vite/router.mock": getEntryPoint2(
49
+ "router",
50
+ env
51
+ ),
52
+ "next/cache": getEntryPoint2("cache", env),
53
+ "@storybook/nextjs/cache.mock": getEntryPoint2("cache", env),
54
+ "@storybook/nextjs-vite/cache.mock": getEntryPoint2("cache", env),
55
+ "@storybook/experimental-nextjs-vite/cache.mock": getEntryPoint2(
56
+ "cache",
57
+ env
58
+ ),
59
+ "server-only": getEntryPoint2("server-only", env),
60
+ "@opentelemetry/api": require3.resolve(
61
+ "next/dist/compiled/@opentelemetry/api"
62
+ ),
63
+ "next/dynamic": getEntryPoint2("dynamic", env)
64
+ };
65
+ };
58
66
 
59
67
  // src/mocks/storybook.global.ts
60
- var require4 = module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.src || new URL('out.js', document.baseURI).href)));
68
+ var require4 = module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('storybook.global.cjs', document.baseURI).href)));
61
69
  moduleAlias__default.default.addAliases({
62
70
  react: "next/dist/compiled/react",
63
71
  "react-dom/server": "next/dist/compiled/react-dom/server.js",
@@ -16,38 +16,46 @@ var getAlias = (env) => ({
16
16
  });
17
17
  var require3 = createRequire(import.meta.url);
18
18
  var getEntryPoint2 = (subPath, env) => require3.resolve(`${VITEST_PLUGIN_NAME}/${env}/mocks/${subPath}`);
19
- var getAlias2 = (env) => ({
20
- "next/headers": getEntryPoint2("headers", env),
21
- "@storybook/nextjs/headers.mock": getEntryPoint2("headers", env),
22
- "@storybook/nextjs-vite/headers.mock": getEntryPoint2("headers", env),
23
- "@storybook/experimental-nextjs-vite/headers.mock": getEntryPoint2(
24
- "headers",
25
- env
26
- ),
27
- "next/navigation": getEntryPoint2("navigation", env),
28
- "@storybook/nextjs/navigation.mock": getEntryPoint2("navigation", env),
29
- "@storybook/nextjs-vite/navigation.mock": getEntryPoint2("navigation", env),
30
- "@storybook/experimental-nextjs-vite/navigation.mock": getEntryPoint2(
31
- "navigation",
32
- env
33
- ),
34
- "next/router": getEntryPoint2("router", env),
35
- "@storybook/nextjs/router.mock": getEntryPoint2("router", env),
36
- "@storybook/nextjs-vite/router.mock": getEntryPoint2("router", env),
37
- "@storybook/experimental-nextjs-vite/router.mock": getEntryPoint2(
38
- "router",
39
- env
40
- ),
41
- "next/cache": getEntryPoint2("cache", env),
42
- "@storybook/nextjs/cache.mock": getEntryPoint2("cache", env),
43
- "@storybook/nextjs-vite/cache.mock": getEntryPoint2("cache", env),
44
- "@storybook/experimental-nextjs-vite/cache.mock": getEntryPoint2("cache", env),
45
- "server-only": getEntryPoint2("server-only", env),
46
- "@opentelemetry/api": require3.resolve(
47
- "next/dist/compiled/@opentelemetry/api"
48
- ),
49
- "next/dynamic": getEntryPoint2("dynamic", env)
50
- });
19
+ var getAlias2 = (env) => {
20
+ const nextPackageJson = require3("next/package.json");
21
+ const nextMajorVersion = Number.parseInt(
22
+ String(nextPackageJson?.version).split(".").at(0) ?? "",
23
+ 10
24
+ );
25
+ const headersMock = nextMajorVersion <= 14 ? getEntryPoint2("v14-headers", env) : getEntryPoint2("headers", env);
26
+ return {
27
+ "next/headers": headersMock,
28
+ "@storybook/nextjs/headers.mock": headersMock,
29
+ "@storybook/nextjs-vite/headers.mock": headersMock,
30
+ "@storybook/experimental-nextjs-vite/headers.mock": headersMock,
31
+ "next/navigation": getEntryPoint2("navigation", env),
32
+ "@storybook/nextjs/navigation.mock": getEntryPoint2("navigation", env),
33
+ "@storybook/nextjs-vite/navigation.mock": getEntryPoint2("navigation", env),
34
+ "@storybook/experimental-nextjs-vite/navigation.mock": getEntryPoint2(
35
+ "navigation",
36
+ env
37
+ ),
38
+ "next/router": getEntryPoint2("router", env),
39
+ "@storybook/nextjs/router.mock": getEntryPoint2("router", env),
40
+ "@storybook/nextjs-vite/router.mock": getEntryPoint2("router", env),
41
+ "@storybook/experimental-nextjs-vite/router.mock": getEntryPoint2(
42
+ "router",
43
+ env
44
+ ),
45
+ "next/cache": getEntryPoint2("cache", env),
46
+ "@storybook/nextjs/cache.mock": getEntryPoint2("cache", env),
47
+ "@storybook/nextjs-vite/cache.mock": getEntryPoint2("cache", env),
48
+ "@storybook/experimental-nextjs-vite/cache.mock": getEntryPoint2(
49
+ "cache",
50
+ env
51
+ ),
52
+ "server-only": getEntryPoint2("server-only", env),
53
+ "@opentelemetry/api": require3.resolve(
54
+ "next/dist/compiled/@opentelemetry/api"
55
+ ),
56
+ "next/dynamic": getEntryPoint2("dynamic", env)
57
+ };
58
+ };
51
59
 
52
60
  // src/mocks/storybook.global.ts
53
61
  var require4 = createRequire(import.meta.url);
@@ -2,26 +2,26 @@ import * as next_dist_shared_lib_get_img_props from 'next/dist/shared/lib/get-im
2
2
  import * as _NextImage from 'next/image';
3
3
  import React__default from 'next/dist/compiled/react';
4
4
 
5
- declare const MockedNextImage: React__default.ForwardRefExoticComponent<Omit<React__default.DetailedHTMLProps<React__default.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>, "src" | "srcSet" | "ref" | "alt" | "width" | "height" | "loading"> & {
6
6
  src: string | next_dist_shared_lib_get_img_props.StaticImport;
7
7
  alt: string;
8
- width?: number | `${number}` | undefined;
9
- height?: number | `${number}` | undefined;
10
- fill?: boolean | undefined;
11
- loader?: _NextImage.ImageLoader | undefined;
12
- quality?: number | `${number}` | undefined;
13
- priority?: boolean | undefined;
8
+ width?: number | `${number}`;
9
+ height?: number | `${number}`;
10
+ fill?: boolean;
11
+ loader?: _NextImage.ImageLoader;
12
+ quality?: number | `${number}`;
13
+ priority?: boolean;
14
14
  loading?: "lazy" | "eager" | undefined;
15
- placeholder?: next_dist_shared_lib_get_img_props.PlaceholderValue | undefined;
16
- blurDataURL?: string | undefined;
17
- unoptimized?: boolean | undefined;
18
- overrideSrc?: string | undefined;
19
- onLoadingComplete?: next_dist_shared_lib_get_img_props.OnLoadingComplete | undefined;
20
- layout?: string | undefined;
21
- objectFit?: string | undefined;
22
- objectPosition?: string | undefined;
23
- lazyBoundary?: string | undefined;
24
- lazyRoot?: string | undefined;
15
+ placeholder?: next_dist_shared_lib_get_img_props.PlaceholderValue;
16
+ blurDataURL?: string;
17
+ unoptimized?: boolean;
18
+ overrideSrc?: string;
19
+ onLoadingComplete?: next_dist_shared_lib_get_img_props.OnLoadingComplete;
20
+ layout?: string;
21
+ objectFit?: string;
22
+ objectPosition?: string;
23
+ lazyBoundary?: string;
24
+ lazyRoot?: string;
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;
@@ -2,26 +2,26 @@ import * as next_dist_shared_lib_get_img_props from 'next/dist/shared/lib/get-im
2
2
  import * as _NextImage from 'next/image';
3
3
  import React__default from 'next/dist/compiled/react';
4
4
 
5
- declare const MockedNextImage: React__default.ForwardRefExoticComponent<Omit<React__default.DetailedHTMLProps<React__default.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>, "src" | "srcSet" | "ref" | "alt" | "width" | "height" | "loading"> & {
6
6
  src: string | next_dist_shared_lib_get_img_props.StaticImport;
7
7
  alt: string;
8
- width?: number | `${number}` | undefined;
9
- height?: number | `${number}` | undefined;
10
- fill?: boolean | undefined;
11
- loader?: _NextImage.ImageLoader | undefined;
12
- quality?: number | `${number}` | undefined;
13
- priority?: boolean | undefined;
8
+ width?: number | `${number}`;
9
+ height?: number | `${number}`;
10
+ fill?: boolean;
11
+ loader?: _NextImage.ImageLoader;
12
+ quality?: number | `${number}`;
13
+ priority?: boolean;
14
14
  loading?: "lazy" | "eager" | undefined;
15
- placeholder?: next_dist_shared_lib_get_img_props.PlaceholderValue | undefined;
16
- blurDataURL?: string | undefined;
17
- unoptimized?: boolean | undefined;
18
- overrideSrc?: string | undefined;
19
- onLoadingComplete?: next_dist_shared_lib_get_img_props.OnLoadingComplete | undefined;
20
- layout?: string | undefined;
21
- objectFit?: string | undefined;
22
- objectPosition?: string | undefined;
23
- lazyBoundary?: string | undefined;
24
- lazyRoot?: string | undefined;
15
+ placeholder?: next_dist_shared_lib_get_img_props.PlaceholderValue;
16
+ blurDataURL?: string;
17
+ unoptimized?: boolean;
18
+ overrideSrc?: string;
19
+ onLoadingComplete?: next_dist_shared_lib_get_img_props.OnLoadingComplete;
20
+ layout?: string;
21
+ objectFit?: string;
22
+ objectPosition?: string;
23
+ lazyBoundary?: string;
24
+ lazyRoot?: string;
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;
@@ -2,7 +2,7 @@
2
2
 
3
3
  var test = require('@storybook/test');
4
4
  var index_js = require('next/dist/compiled/@edge-runtime/cookies/index.js');
5
- var originalHeaders = require('next/dist/client/components/headers.js');
5
+ var originalHeaders = require('next/dist/server/request/draft-mode');
6
6
  var headers_js = require('next/dist/server/web/spec-extension/adapters/headers.js');
7
7
 
8
8
  function _interopNamespace(e) {
@@ -1,6 +1,6 @@
1
1
  import { fn } from '@storybook/test';
2
2
  import { RequestCookies } from 'next/dist/compiled/@edge-runtime/cookies/index.js';
3
- import * as originalHeaders from 'next/dist/client/components/headers.js';
3
+ import * as originalHeaders from 'next/dist/server/request/draft-mode';
4
4
  import { HeadersAdapter } from 'next/dist/server/web/spec-extension/adapters/headers.js';
5
5
 
6
6
  // src/plugins/next-mocks/alias/headers/cookies.ts
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var test = require('@storybook/test');
4
- var originalHeaders = require('next/dist/client/components/headers.js');
4
+ var originalHeaders = require('next/dist/server/request/draft-mode');
5
5
  var headers_js = require('next/dist/server/web/spec-extension/adapters/headers.js');
6
6
  var index_js = require('next/dist/compiled/@edge-runtime/cookies/index.js');
7
7
 
@@ -1,10 +1,11 @@
1
- import { DraftMode } from 'next/dist/client/components/draft-mode';
1
+ import { UnsafeUnwrappedDraftMode } from 'next/dist/server/request/draft-mode';
2
2
  import { Mock } from 'vitest';
3
3
  export { headers } from './headers.cjs';
4
4
  export { cookies } from './cookies.cjs';
5
5
  import 'next/dist/server/web/spec-extension/adapters/headers.js';
6
6
  import 'next/dist/compiled/@edge-runtime/cookies/index.js';
7
7
 
8
+ type DraftMode = Promise<UnsafeUnwrappedDraftMode>;
8
9
  declare const draftMode: Mock<() => DraftMode>;
9
10
 
10
11
  export { draftMode };
@@ -1,10 +1,11 @@
1
- import { DraftMode } from 'next/dist/client/components/draft-mode';
1
+ import { UnsafeUnwrappedDraftMode } from 'next/dist/server/request/draft-mode';
2
2
  import { Mock } from 'vitest';
3
3
  export { headers } from './headers.js';
4
4
  export { cookies } from './cookies.js';
5
5
  import 'next/dist/server/web/spec-extension/adapters/headers.js';
6
6
  import 'next/dist/compiled/@edge-runtime/cookies/index.js';
7
7
 
8
+ type DraftMode = Promise<UnsafeUnwrappedDraftMode>;
8
9
  declare const draftMode: Mock<() => DraftMode>;
9
10
 
10
11
  export { draftMode };
@@ -1,5 +1,5 @@
1
1
  import { fn } from '@storybook/test';
2
- import * as originalHeaders from 'next/dist/client/components/headers.js';
2
+ import * as originalHeaders from 'next/dist/server/request/draft-mode';
3
3
  import { HeadersAdapter } from 'next/dist/server/web/spec-extension/adapters/headers.js';
4
4
  import { RequestCookies } from 'next/dist/compiled/@edge-runtime/cookies/index.js';
5
5
 
@@ -0,0 +1,109 @@
1
+ 'use strict';
2
+
3
+ var test = require('@storybook/test');
4
+ var originalHeaders2 = require('next/dist/client/components/headers.js');
5
+ var headers_js = require('next/dist/server/web/spec-extension/adapters/headers.js');
6
+ var index_js = require('next/dist/compiled/@edge-runtime/cookies/index.js');
7
+ var originalHeaders = require('next/dist/server/request/draft-mode');
8
+
9
+ function _interopNamespace(e) {
10
+ if (e && e.__esModule) return e;
11
+ var n = Object.create(null);
12
+ if (e) {
13
+ Object.keys(e).forEach(function (k) {
14
+ if (k !== 'default') {
15
+ var d = Object.getOwnPropertyDescriptor(e, k);
16
+ Object.defineProperty(n, k, d.get ? d : {
17
+ enumerable: true,
18
+ get: function () { return e[k]; }
19
+ });
20
+ }
21
+ });
22
+ }
23
+ n.default = e;
24
+ return Object.freeze(n);
25
+ }
26
+
27
+ var originalHeaders2__namespace = /*#__PURE__*/_interopNamespace(originalHeaders2);
28
+ var originalHeaders__namespace = /*#__PURE__*/_interopNamespace(originalHeaders);
29
+
30
+ // src/plugins/next-mocks/alias/headers/v14.ts
31
+ var HeadersAdapterMock = class extends headers_js.HeadersAdapter {
32
+ constructor() {
33
+ super({});
34
+ this.append = test.fn(
35
+ super.append.bind(this)
36
+ ).mockName("next/headers::headers().append");
37
+ this.delete = test.fn(super.delete.bind(this)).mockName(
38
+ "next/headers::headers().delete"
39
+ );
40
+ this.get = test.fn(
41
+ super.get.bind(this)
42
+ ).mockName("next/headers::headers().get");
43
+ this.has = test.fn(super.has.bind(this)).mockName(
44
+ "next/headers::headers().has"
45
+ );
46
+ this.set = test.fn(
47
+ super.set.bind(this)
48
+ ).mockName("next/headers::headers().set");
49
+ this.forEach = test.fn(super.forEach.bind(this)).mockName("next/headers::headers().forEach");
50
+ this.entries = test.fn(
51
+ super.entries.bind(this)
52
+ ).mockName("next/headers::headers().entries");
53
+ this.keys = test.fn(
54
+ super.keys.bind(this)
55
+ ).mockName("next/headers::headers().keys");
56
+ this.values = test.fn(
57
+ super.values.bind(this)
58
+ ).mockName("next/headers::headers().values");
59
+ }
60
+ };
61
+ var headersAdapterMock;
62
+ var headers = () => {
63
+ if (!headersAdapterMock) headersAdapterMock = new HeadersAdapterMock();
64
+ return headersAdapterMock;
65
+ };
66
+ headers.mockRestore = () => {
67
+ headersAdapterMock = new HeadersAdapterMock();
68
+ };
69
+ test.fn(originalHeaders__namespace.draftMode).mockName(
70
+ "draftMode"
71
+ );
72
+
73
+ // src/plugins/next-mocks/alias/headers/cookies.ts
74
+ var RequestCookiesMock = class extends index_js.RequestCookies {
75
+ constructor() {
76
+ super(...arguments);
77
+ this.get = test.fn(super.get.bind(this)).mockName("next/headers::cookies().get");
78
+ this.getAll = test.fn(super.getAll.bind(this)).mockName("next/headers::cookies().getAll");
79
+ this.has = test.fn(super.has.bind(this)).mockName(
80
+ "next/headers::cookies().has"
81
+ );
82
+ this.set = test.fn(super.set.bind(this)).mockName("next/headers::cookies().set");
83
+ this.delete = test.fn(
84
+ super.delete.bind(this)
85
+ ).mockName("next/headers::cookies().delete");
86
+ }
87
+ };
88
+ var requestCookiesMock;
89
+ var cookies = test.fn(() => {
90
+ if (!requestCookiesMock) {
91
+ requestCookiesMock = new RequestCookiesMock(headers());
92
+ }
93
+ return requestCookiesMock;
94
+ }).mockName("next/headers::cookies()");
95
+ var originalRestore = cookies.mockRestore.bind(null);
96
+ cookies.mockRestore = () => {
97
+ originalRestore();
98
+ headers.mockRestore();
99
+ requestCookiesMock = new RequestCookiesMock(headers());
100
+ };
101
+
102
+ // src/plugins/next-mocks/alias/headers/v14.ts
103
+ var draftMode4 = test.fn(originalHeaders2__namespace.draftMode).mockName(
104
+ "draftMode"
105
+ );
106
+
107
+ exports.cookies = cookies;
108
+ exports.draftMode = draftMode4;
109
+ exports.headers = headers;
@@ -0,0 +1,10 @@
1
+ import { DraftMode } from 'next/dist/client/components/draft-mode';
2
+ import { Mock } from 'vitest';
3
+ export { headers } from './headers.cjs';
4
+ export { cookies } from './cookies.cjs';
5
+ import 'next/dist/server/web/spec-extension/adapters/headers.js';
6
+ import 'next/dist/compiled/@edge-runtime/cookies/index.js';
7
+
8
+ declare const draftMode: Mock<() => DraftMode>;
9
+
10
+ export { draftMode };
@@ -0,0 +1,10 @@
1
+ import { DraftMode } from 'next/dist/client/components/draft-mode';
2
+ import { Mock } from 'vitest';
3
+ export { headers } from './headers.js';
4
+ export { cookies } from './cookies.js';
5
+ import 'next/dist/server/web/spec-extension/adapters/headers.js';
6
+ import 'next/dist/compiled/@edge-runtime/cookies/index.js';
7
+
8
+ declare const draftMode: Mock<() => DraftMode>;
9
+
10
+ export { draftMode };
@@ -0,0 +1,84 @@
1
+ import { fn } from '@storybook/test';
2
+ import * as originalHeaders2 from 'next/dist/client/components/headers.js';
3
+ import { HeadersAdapter } from 'next/dist/server/web/spec-extension/adapters/headers.js';
4
+ import { RequestCookies } from 'next/dist/compiled/@edge-runtime/cookies/index.js';
5
+ import * as originalHeaders from 'next/dist/server/request/draft-mode';
6
+
7
+ // src/plugins/next-mocks/alias/headers/v14.ts
8
+ var HeadersAdapterMock = class extends HeadersAdapter {
9
+ constructor() {
10
+ super({});
11
+ this.append = fn(
12
+ super.append.bind(this)
13
+ ).mockName("next/headers::headers().append");
14
+ this.delete = fn(super.delete.bind(this)).mockName(
15
+ "next/headers::headers().delete"
16
+ );
17
+ this.get = fn(
18
+ super.get.bind(this)
19
+ ).mockName("next/headers::headers().get");
20
+ this.has = fn(super.has.bind(this)).mockName(
21
+ "next/headers::headers().has"
22
+ );
23
+ this.set = fn(
24
+ super.set.bind(this)
25
+ ).mockName("next/headers::headers().set");
26
+ this.forEach = fn(super.forEach.bind(this)).mockName("next/headers::headers().forEach");
27
+ this.entries = fn(
28
+ super.entries.bind(this)
29
+ ).mockName("next/headers::headers().entries");
30
+ this.keys = fn(
31
+ super.keys.bind(this)
32
+ ).mockName("next/headers::headers().keys");
33
+ this.values = fn(
34
+ super.values.bind(this)
35
+ ).mockName("next/headers::headers().values");
36
+ }
37
+ };
38
+ var headersAdapterMock;
39
+ var headers = () => {
40
+ if (!headersAdapterMock) headersAdapterMock = new HeadersAdapterMock();
41
+ return headersAdapterMock;
42
+ };
43
+ headers.mockRestore = () => {
44
+ headersAdapterMock = new HeadersAdapterMock();
45
+ };
46
+ fn(originalHeaders.draftMode).mockName(
47
+ "draftMode"
48
+ );
49
+
50
+ // src/plugins/next-mocks/alias/headers/cookies.ts
51
+ var RequestCookiesMock = class extends RequestCookies {
52
+ constructor() {
53
+ super(...arguments);
54
+ this.get = fn(super.get.bind(this)).mockName("next/headers::cookies().get");
55
+ this.getAll = fn(super.getAll.bind(this)).mockName("next/headers::cookies().getAll");
56
+ this.has = fn(super.has.bind(this)).mockName(
57
+ "next/headers::cookies().has"
58
+ );
59
+ this.set = fn(super.set.bind(this)).mockName("next/headers::cookies().set");
60
+ this.delete = fn(
61
+ super.delete.bind(this)
62
+ ).mockName("next/headers::cookies().delete");
63
+ }
64
+ };
65
+ var requestCookiesMock;
66
+ var cookies = fn(() => {
67
+ if (!requestCookiesMock) {
68
+ requestCookiesMock = new RequestCookiesMock(headers());
69
+ }
70
+ return requestCookiesMock;
71
+ }).mockName("next/headers::cookies()");
72
+ var originalRestore = cookies.mockRestore.bind(null);
73
+ cookies.mockRestore = () => {
74
+ originalRestore();
75
+ headers.mockRestore();
76
+ requestCookiesMock = new RequestCookiesMock(headers());
77
+ };
78
+
79
+ // src/plugins/next-mocks/alias/headers/v14.ts
80
+ var draftMode4 = fn(originalHeaders2.draftMode).mockName(
81
+ "draftMode"
82
+ );
83
+
84
+ export { cookies, draftMode4 as draftMode, headers };
@@ -1,7 +1,6 @@
1
1
  import { Mock } from '@storybook/test';
2
2
  import { NextComponentType, NextPageContext } from 'next';
3
- import * as originalRouter from 'next/dist/client/router.js';
4
- import originalRouter__default from 'next/dist/client/router.js';
3
+ import singletonRouter from 'next/dist/client/router.js';
5
4
  export { default } from 'next/dist/client/router.js';
6
5
  import { WithRouterProps, ExcludeRouterProps } from 'next/dist/client/with-router';
7
6
  import { NextRouter } from 'next/router.js';
@@ -13,7 +12,7 @@ export * from 'next/dist/client/router';
13
12
  * @ignore
14
13
  * @internal
15
14
  * */
16
- declare const createRouter: (overrides: Partial<NextRouter>) => originalRouter.NextRouter;
15
+ declare const createRouter: (overrides: Partial<NextRouter>) => NextRouter;
17
16
  declare const getRouter: () => {
18
17
  push: Mock;
19
18
  replace: Mock;
@@ -1,7 +1,6 @@
1
1
  import { Mock } from '@storybook/test';
2
2
  import { NextComponentType, NextPageContext } from 'next';
3
- import * as originalRouter from 'next/dist/client/router.js';
4
- import originalRouter__default from 'next/dist/client/router.js';
3
+ import singletonRouter from 'next/dist/client/router.js';
5
4
  export { default } from 'next/dist/client/router.js';
6
5
  import { WithRouterProps, ExcludeRouterProps } from 'next/dist/client/with-router';
7
6
  import { NextRouter } from 'next/router.js';
@@ -13,7 +12,7 @@ export * from 'next/dist/client/router';
13
12
  * @ignore
14
13
  * @internal
15
14
  * */
16
- declare const createRouter: (overrides: Partial<NextRouter>) => originalRouter.NextRouter;
15
+ declare const createRouter: (overrides: Partial<NextRouter>) => NextRouter;
17
16
  declare const getRouter: () => {
18
17
  push: Mock;
19
18
  replace: Mock;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vite-plugin-storybook-nextjs",
3
- "version": "1.0.13",
3
+ "version": "1.0.14--canary.26.660ea90.0",
4
4
  "description": "",
5
5
  "keywords": [
6
6
  "vite-plugin",
@@ -32,6 +32,7 @@
32
32
  "./browser/mocks/cache": "./dist/plugins/next-mocks/alias/cache/index.js",
33
33
  "./browser/mocks/navigation": "./dist/plugins/next-mocks/alias/navigation/index.js",
34
34
  "./browser/mocks/headers": "./dist/plugins/next-mocks/alias/headers/index.js",
35
+ "./browser/mocks/v14-headers": "./dist/plugins/next-mocks/alias/headers/v14.js",
35
36
  "./browser/mocks/router": "./dist/plugins/next-mocks/alias/router/index.js",
36
37
  "./browser/mocks/server-only": "./dist/plugins/next-mocks/alias/rsc/server-only.js",
37
38
  "./browser/mocks/dynamic": "./dist/plugins/next-mocks/alias/dynamic/index.js",
@@ -42,6 +43,7 @@
42
43
  "./node/mocks/cache": "./dist/plugins/next-mocks/alias/cache/index.cjs",
43
44
  "./node/mocks/navigation": "./dist/plugins/next-mocks/alias/navigation/index.cjs",
44
45
  "./node/mocks/headers": "./dist/plugins/next-mocks/alias/headers/index.cjs",
46
+ "./node/mocks/v14-headers": "./dist/plugins/next-mocks/alias/headers/v14.cjs",
45
47
  "./node/mocks/router": "./dist/plugins/next-mocks/alias/router/index.cjs",
46
48
  "./node/mocks/server-only": "./dist/plugins/next-mocks/alias/rsc/server-only.cjs",
47
49
  "./node/mocks/dynamic": "./dist/plugins/next-mocks/alias/dynamic/index.cjs",
@@ -59,23 +61,25 @@
59
61
  "release": "auto shipit"
60
62
  },
61
63
  "peerDependencies": {
62
- "@storybook/test": "^8.3.0",
63
- "next": "^14.1.0",
64
- "storybook": "^8.3.0",
64
+ "@storybook/test": "^8.4.3",
65
+ "@next/env": "^14.2.5 || ^15.0.3",
66
+ "next": "^14.2.5 || ^15.0.3",
67
+ "react": "^18 || ^19.0.0-rc",
68
+ "storybook": "^8.4.3",
65
69
  "vite": "^5.0.0"
66
70
  },
67
71
  "devDependencies": {
68
72
  "@biomejs/biome": "1.8.1",
69
- "@storybook/test": "^8.3.0",
73
+ "@storybook/test": "^8.4.3",
70
74
  "@types/node": "^18",
71
- "@types/react": "^18",
75
+ "@types/react": "npm:types-react@rc",
72
76
  "auto": "^11.2.0",
73
77
  "lefthook": "^1.6.16",
74
- "next": "^14.2.5",
75
- "react": "^18",
78
+ "next": "^15.0.3",
79
+ "react": "^19.0.0-rc",
76
80
  "rollup": "^4.18.0",
77
81
  "sharp": "^0.33.4",
78
- "storybook": "^8.3.0",
82
+ "storybook": "^8.4.3",
79
83
  "tsup": "^8.1.0",
80
84
  "typescript": "^5.0.0",
81
85
  "vite": "^5.0.0",
@@ -83,7 +87,7 @@
83
87
  },
84
88
  "packageManager": "pnpm@9.4.0",
85
89
  "dependencies": {
86
- "@next/env": "^14.2.5",
90
+ "@next/env": "^15.0.3",
87
91
  "image-size": "^1.1.1",
88
92
  "magic-string": "^0.30.11",
89
93
  "module-alias": "^2.2.3",
@@ -97,7 +101,7 @@
97
101
  },
98
102
  "pnpm": {
99
103
  "overrides": {
100
- "vite-plugin-storybook-nextjs": "workspace:*"
104
+ "vite-plugin-storybook-nextjs": "file:./"
101
105
  }
102
106
  }
103
107
  }