vite-plugin-storybook-nextjs
Version:
This is a Vite plugin that allows you to use Next.js features in Vite. It is the basis for `@storybook/experimental-nextjs-vite` and should be used when running portable stories in Vitest.
83 lines (78 loc) • 2.8 kB
JavaScript
import { RequestCookies } from 'next/dist/compiled/@edge-runtime/cookies/index.js';
import { fn } from 'storybook/test';
import { draftMode } from 'next/dist/server/request/draft-mode';
import * as headers2 from 'next/dist/server/request/headers';
import { HeadersAdapter } from 'next/dist/server/web/spec-extension/adapters/headers.js';
// src/plugins/next-mocks/alias/headers/cookies.ts
var HeadersAdapterMock = class extends HeadersAdapter {
constructor() {
super({});
this.append = fn(
super.append.bind(this)
).mockName("next/headers::headers().append");
this.delete = fn(super.delete.bind(this)).mockName(
"next/headers::headers().delete"
);
this.get = fn(
super.get.bind(this)
).mockName("next/headers::headers().get");
this.has = fn(super.has.bind(this)).mockName(
"next/headers::headers().has"
);
this.set = fn(
super.set.bind(this)
).mockName("next/headers::headers().set");
this.forEach = fn(super.forEach.bind(this)).mockName("next/headers::headers().forEach");
this.entries = fn(
super.entries.bind(this)
).mockName("next/headers::headers().entries");
this.keys = fn(
super.keys.bind(this)
).mockName("next/headers::headers().keys");
this.values = fn(
super.values.bind(this)
).mockName("next/headers::headers().values");
}
};
var headersAdapterMock;
var headers = () => {
if (!headersAdapterMock) headersAdapterMock = new HeadersAdapterMock();
return headersAdapterMock;
};
headers.mockRestore = () => {
headersAdapterMock = new HeadersAdapterMock();
};
// src/plugins/next-mocks/alias/headers/index.ts
fn(
// biome-ignore lint/suspicious/noExplicitAny: <explanation>
draftMode ?? headers2.draftMode
).mockName("draftMode");
// src/plugins/next-mocks/alias/headers/cookies.ts
var RequestCookiesMock = class extends RequestCookies {
constructor() {
super(...arguments);
this.get = fn(super.get.bind(this)).mockName("next/headers::cookies().get");
this.getAll = fn(super.getAll.bind(this)).mockName("next/headers::cookies().getAll");
this.has = fn(super.has.bind(this)).mockName(
"next/headers::cookies().has"
);
this.set = fn(super.set.bind(this)).mockName("next/headers::cookies().set");
this.delete = fn(
super.delete.bind(this)
).mockName("next/headers::cookies().delete");
}
};
var requestCookiesMock;
var cookies = fn(() => {
if (!requestCookiesMock) {
requestCookiesMock = new RequestCookiesMock(headers());
}
return requestCookiesMock;
}).mockName("next/headers::cookies()");
var originalRestore = cookies.mockRestore.bind(null);
cookies.mockRestore = () => {
originalRestore();
headers.mockRestore();
requestCookiesMock = new RequestCookiesMock(headers());
};
export { cookies };