@vestig/next 0.3.1 → 0.5.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/__tests__/mocks/next-headers.d.ts +60 -0
- package/dist/__tests__/mocks/next-headers.d.ts.map +1 -0
- package/dist/__tests__/mocks/next-headers.js +72 -0
- package/dist/__tests__/mocks/next-headers.js.map +1 -0
- package/dist/__tests__/mocks/next-server.d.ts +74 -0
- package/dist/__tests__/mocks/next-server.d.ts.map +1 -0
- package/dist/__tests__/mocks/next-server.js +102 -0
- package/dist/__tests__/mocks/next-server.js.map +1 -0
- package/package.json +3 -2
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mock implementations for next/headers
|
|
3
|
+
* Used for testing server components and server actions
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Set mock headers for the current test
|
|
7
|
+
*/
|
|
8
|
+
export declare function setMockHeaders(headers: Record<string, string>): void;
|
|
9
|
+
/**
|
|
10
|
+
* Clear mock headers
|
|
11
|
+
*/
|
|
12
|
+
export declare function clearMockHeaders(): void;
|
|
13
|
+
/**
|
|
14
|
+
* Set mock cookies for the current test
|
|
15
|
+
*/
|
|
16
|
+
export declare function setMockCookies(cookies: Record<string, string>): void;
|
|
17
|
+
/**
|
|
18
|
+
* Clear mock cookies
|
|
19
|
+
*/
|
|
20
|
+
export declare function clearMockCookies(): void;
|
|
21
|
+
/**
|
|
22
|
+
* Mock headers() function
|
|
23
|
+
* Returns a ReadonlyHeaders-like object
|
|
24
|
+
*/
|
|
25
|
+
export declare function headers(): Promise<MockReadonlyHeaders>;
|
|
26
|
+
/**
|
|
27
|
+
* Mock cookies() function
|
|
28
|
+
*/
|
|
29
|
+
export declare function cookies(): Promise<MockReadonlyCookies>;
|
|
30
|
+
/**
|
|
31
|
+
* Mock ReadonlyHeaders type
|
|
32
|
+
*/
|
|
33
|
+
export interface MockReadonlyHeaders {
|
|
34
|
+
get: (name: string) => string | null;
|
|
35
|
+
has: (name: string) => boolean;
|
|
36
|
+
entries: () => IterableIterator<[string, string]>;
|
|
37
|
+
keys: () => IterableIterator<string>;
|
|
38
|
+
values: () => IterableIterator<string>;
|
|
39
|
+
forEach: (callback: (value: string, key: string) => void) => void;
|
|
40
|
+
[Symbol.iterator]: () => IterableIterator<[string, string]>;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Mock ReadonlyCookies type
|
|
44
|
+
*/
|
|
45
|
+
export interface MockReadonlyCookies {
|
|
46
|
+
get: (name: string) => {
|
|
47
|
+
name: string;
|
|
48
|
+
value: string;
|
|
49
|
+
} | undefined;
|
|
50
|
+
getAll: () => Array<{
|
|
51
|
+
name: string;
|
|
52
|
+
value: string;
|
|
53
|
+
}>;
|
|
54
|
+
has: (name: string) => boolean;
|
|
55
|
+
[Symbol.iterator]: () => Generator<{
|
|
56
|
+
name: string;
|
|
57
|
+
value: string;
|
|
58
|
+
}>;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=next-headers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"next-headers.d.ts","sourceRoot":"","sources":["../../../src/__tests__/mocks/next-headers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAE7D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,SAE/B;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAE7D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,SAE/B;AAED;;;GAGG;AACH,wBAAsB,OAAO,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAY5D;AAED;;GAEG;AACH,wBAAsB,OAAO,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAmB5D;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAA;IACpC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAA;IAC9B,OAAO,EAAE,MAAM,gBAAgB,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IACjD,IAAI,EAAE,MAAM,gBAAgB,CAAC,MAAM,CAAC,CAAA;IACpC,MAAM,EAAE,MAAM,gBAAgB,CAAC,MAAM,CAAC,CAAA;IACtC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,KAAK,IAAI,CAAA;IACjE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,gBAAgB,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CAC3D;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAA;IAClE,MAAM,EAAE,MAAM,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACpD,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAA;IAC9B,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,SAAS,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CACnE"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mock implementations for next/headers
|
|
3
|
+
* Used for testing server components and server actions
|
|
4
|
+
*/
|
|
5
|
+
// Store for the current mock headers
|
|
6
|
+
let mockHeadersStore = new Map();
|
|
7
|
+
let mockCookiesStore = new Map();
|
|
8
|
+
/**
|
|
9
|
+
* Set mock headers for the current test
|
|
10
|
+
*/
|
|
11
|
+
export function setMockHeaders(headers) {
|
|
12
|
+
mockHeadersStore = new Map(Object.entries(headers));
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Clear mock headers
|
|
16
|
+
*/
|
|
17
|
+
export function clearMockHeaders() {
|
|
18
|
+
mockHeadersStore = new Map();
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Set mock cookies for the current test
|
|
22
|
+
*/
|
|
23
|
+
export function setMockCookies(cookies) {
|
|
24
|
+
mockCookiesStore = new Map(Object.entries(cookies));
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Clear mock cookies
|
|
28
|
+
*/
|
|
29
|
+
export function clearMockCookies() {
|
|
30
|
+
mockCookiesStore = new Map();
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Mock headers() function
|
|
34
|
+
* Returns a ReadonlyHeaders-like object
|
|
35
|
+
*/
|
|
36
|
+
export async function headers() {
|
|
37
|
+
return {
|
|
38
|
+
get: (name) => mockHeadersStore.get(name.toLowerCase()) ?? null,
|
|
39
|
+
has: (name) => mockHeadersStore.has(name.toLowerCase()),
|
|
40
|
+
entries: () => mockHeadersStore.entries(),
|
|
41
|
+
keys: () => mockHeadersStore.keys(),
|
|
42
|
+
values: () => mockHeadersStore.values(),
|
|
43
|
+
forEach: (callback) => {
|
|
44
|
+
mockHeadersStore.forEach(callback);
|
|
45
|
+
},
|
|
46
|
+
[Symbol.iterator]: () => mockHeadersStore.entries(),
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Mock cookies() function
|
|
51
|
+
*/
|
|
52
|
+
export async function cookies() {
|
|
53
|
+
return {
|
|
54
|
+
get: (name) => {
|
|
55
|
+
const value = mockCookiesStore.get(name);
|
|
56
|
+
return value ? { name, value } : undefined;
|
|
57
|
+
},
|
|
58
|
+
getAll: () => {
|
|
59
|
+
return Array.from(mockCookiesStore.entries()).map(([name, value]) => ({
|
|
60
|
+
name,
|
|
61
|
+
value,
|
|
62
|
+
}));
|
|
63
|
+
},
|
|
64
|
+
has: (name) => mockCookiesStore.has(name),
|
|
65
|
+
[Symbol.iterator]: function* () {
|
|
66
|
+
for (const [name, value] of mockCookiesStore.entries()) {
|
|
67
|
+
yield { name, value };
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=next-headers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"next-headers.js","sourceRoot":"","sources":["../../../src/__tests__/mocks/next-headers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,qCAAqC;AACrC,IAAI,gBAAgB,GAAwB,IAAI,GAAG,EAAE,CAAA;AACrD,IAAI,gBAAgB,GAAwB,IAAI,GAAG,EAAE,CAAA;AAErD;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,OAA+B;IAC7D,gBAAgB,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAA;AACpD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC/B,gBAAgB,GAAG,IAAI,GAAG,EAAE,CAAA;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,OAA+B;IAC7D,gBAAgB,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAA;AACpD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC/B,gBAAgB,GAAG,IAAI,GAAG,EAAE,CAAA;AAC7B,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO;IAC5B,OAAO;QACN,GAAG,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,IAAI;QACvE,GAAG,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAC/D,OAAO,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE;QACzC,IAAI,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE;QACnC,MAAM,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE;QACvC,OAAO,EAAE,CAAC,QAA8C,EAAE,EAAE;YAC3D,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;QACnC,CAAC;QACD,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE;KACnD,CAAA;AACF,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO;IAC5B,OAAO;QACN,GAAG,EAAE,CAAC,IAAY,EAAE,EAAE;YACrB,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YACxC,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;QAC3C,CAAC;QACD,MAAM,EAAE,GAAG,EAAE;YACZ,OAAO,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;gBACrE,IAAI;gBACJ,KAAK;aACL,CAAC,CAAC,CAAA;QACJ,CAAC;QACD,GAAG,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;QACjD,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;YAC3B,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,gBAAgB,CAAC,OAAO,EAAE,EAAE,CAAC;gBACxD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;YACtB,CAAC;QACF,CAAC;KACD,CAAA;AACF,CAAC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mock implementations for Next.js server types
|
|
3
|
+
* Used for testing middleware, route handlers, and server components
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Create a mock NextRequest for testing
|
|
7
|
+
*/
|
|
8
|
+
export declare function createMockNextRequest(url: string, options?: {
|
|
9
|
+
method?: string;
|
|
10
|
+
headers?: Record<string, string>;
|
|
11
|
+
body?: string | object;
|
|
12
|
+
}): MockNextRequest;
|
|
13
|
+
/**
|
|
14
|
+
* Mock NextRequest type
|
|
15
|
+
*/
|
|
16
|
+
export interface MockNextRequest {
|
|
17
|
+
method: string;
|
|
18
|
+
url: string;
|
|
19
|
+
headers: Headers;
|
|
20
|
+
nextUrl: {
|
|
21
|
+
pathname: string;
|
|
22
|
+
search: string;
|
|
23
|
+
searchParams: URLSearchParams;
|
|
24
|
+
href: string;
|
|
25
|
+
origin: string;
|
|
26
|
+
host: string;
|
|
27
|
+
hostname: string;
|
|
28
|
+
port: string;
|
|
29
|
+
protocol: string;
|
|
30
|
+
hash: string;
|
|
31
|
+
toString: () => string;
|
|
32
|
+
};
|
|
33
|
+
ip?: string;
|
|
34
|
+
geo?: {
|
|
35
|
+
city?: string;
|
|
36
|
+
country?: string;
|
|
37
|
+
region?: string;
|
|
38
|
+
};
|
|
39
|
+
json: () => Promise<unknown>;
|
|
40
|
+
text: () => Promise<string>;
|
|
41
|
+
clone: () => MockNextRequest;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Mock NextResponse for testing
|
|
45
|
+
*/
|
|
46
|
+
export declare class MockNextResponse {
|
|
47
|
+
readonly status: number;
|
|
48
|
+
readonly statusText: string;
|
|
49
|
+
readonly headers: Headers;
|
|
50
|
+
private _body;
|
|
51
|
+
constructor(body?: unknown, init?: ResponseInit);
|
|
52
|
+
static json(data: unknown, init?: ResponseInit): MockNextResponse;
|
|
53
|
+
static next(options?: {
|
|
54
|
+
request?: {
|
|
55
|
+
headers?: Headers;
|
|
56
|
+
};
|
|
57
|
+
}): MockNextResponseWithRequest;
|
|
58
|
+
static redirect(url: string | URL, status?: number): MockNextResponse;
|
|
59
|
+
static rewrite(url: string | URL): MockNextResponse;
|
|
60
|
+
json(): Promise<unknown>;
|
|
61
|
+
text(): Promise<string>;
|
|
62
|
+
}
|
|
63
|
+
interface MockNextResponseWithRequest extends MockNextResponse {
|
|
64
|
+
_requestHeaders?: Headers;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Mock RouteContext for route handlers
|
|
68
|
+
*/
|
|
69
|
+
export interface MockRouteContext {
|
|
70
|
+
params: Promise<Record<string, string>>;
|
|
71
|
+
}
|
|
72
|
+
export declare function createMockRouteContext(params?: Record<string, string>): MockRouteContext;
|
|
73
|
+
export {};
|
|
74
|
+
//# sourceMappingURL=next-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"next-server.d.ts","sourceRoot":"","sources":["../../../src/__tests__/mocks/next-server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,wBAAgB,qBAAqB,CACpC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IACR,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CACjB,GACJ,eAAe,CAyCjB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC/B,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE;QACR,QAAQ,EAAE,MAAM,CAAA;QAChB,MAAM,EAAE,MAAM,CAAA;QACd,YAAY,EAAE,eAAe,CAAA;QAC7B,IAAI,EAAE,MAAM,CAAA;QACZ,MAAM,EAAE,MAAM,CAAA;QACd,IAAI,EAAE,MAAM,CAAA;QACZ,QAAQ,EAAE,MAAM,CAAA;QAChB,IAAI,EAAE,MAAM,CAAA;QACZ,QAAQ,EAAE,MAAM,CAAA;QAChB,IAAI,EAAE,MAAM,CAAA;QACZ,QAAQ,EAAE,MAAM,MAAM,CAAA;KACtB,CAAA;IACD,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,GAAG,CAAC,EAAE;QACL,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,MAAM,CAAC,EAAE,MAAM,CAAA;KACf,CAAA;IACD,IAAI,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;IAC5B,IAAI,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAA;IAC3B,KAAK,EAAE,MAAM,eAAe,CAAA;CAC5B;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAC5B,SAAgB,MAAM,EAAE,MAAM,CAAA;IAC9B,SAAgB,UAAU,EAAE,MAAM,CAAA;IAClC,SAAgB,OAAO,EAAE,OAAO,CAAA;IAChC,OAAO,CAAC,KAAK,CAAS;gBAEV,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,YAAY;IAO/C,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,YAAY;IAM9C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE;YAAE,OAAO,CAAC,EAAE,OAAO,CAAA;SAAE,CAAA;KAAE,GAMrC,2BAA2B;IAG/C,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,MAAM,SAAM;IAM/C,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG;IAM1B,IAAI;IAIJ,IAAI;CAGV;AAED,UAAU,2BAA4B,SAAQ,gBAAgB;IAC7D,eAAe,CAAC,EAAE,OAAO,CAAA;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAChC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CACvC;AAED,wBAAgB,sBAAsB,CACrC,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GACjC,gBAAgB,CAIlB"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mock implementations for Next.js server types
|
|
3
|
+
* Used for testing middleware, route handlers, and server components
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Create a mock NextRequest for testing
|
|
7
|
+
*/
|
|
8
|
+
export function createMockNextRequest(url, options = {}) {
|
|
9
|
+
const parsedUrl = new URL(url);
|
|
10
|
+
const headers = new Headers(options.headers ?? {});
|
|
11
|
+
const request = {
|
|
12
|
+
method: options.method ?? 'GET',
|
|
13
|
+
url,
|
|
14
|
+
headers,
|
|
15
|
+
nextUrl: {
|
|
16
|
+
pathname: parsedUrl.pathname,
|
|
17
|
+
search: parsedUrl.search,
|
|
18
|
+
searchParams: parsedUrl.searchParams,
|
|
19
|
+
href: parsedUrl.href,
|
|
20
|
+
origin: parsedUrl.origin,
|
|
21
|
+
host: parsedUrl.host,
|
|
22
|
+
hostname: parsedUrl.hostname,
|
|
23
|
+
port: parsedUrl.port,
|
|
24
|
+
protocol: parsedUrl.protocol,
|
|
25
|
+
hash: parsedUrl.hash,
|
|
26
|
+
toString: () => parsedUrl.toString(),
|
|
27
|
+
},
|
|
28
|
+
ip: headers.get('x-real-ip') ?? undefined,
|
|
29
|
+
geo: {
|
|
30
|
+
city: 'San Francisco',
|
|
31
|
+
country: 'US',
|
|
32
|
+
region: 'CA',
|
|
33
|
+
},
|
|
34
|
+
json: async () => {
|
|
35
|
+
if (typeof options.body === 'object')
|
|
36
|
+
return options.body;
|
|
37
|
+
if (typeof options.body === 'string')
|
|
38
|
+
return JSON.parse(options.body);
|
|
39
|
+
return {};
|
|
40
|
+
},
|
|
41
|
+
text: async () => {
|
|
42
|
+
if (typeof options.body === 'string')
|
|
43
|
+
return options.body;
|
|
44
|
+
if (typeof options.body === 'object')
|
|
45
|
+
return JSON.stringify(options.body);
|
|
46
|
+
return '';
|
|
47
|
+
},
|
|
48
|
+
clone: () => createMockNextRequest(url, options),
|
|
49
|
+
};
|
|
50
|
+
return request;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Mock NextResponse for testing
|
|
54
|
+
*/
|
|
55
|
+
export class MockNextResponse {
|
|
56
|
+
status;
|
|
57
|
+
statusText;
|
|
58
|
+
headers;
|
|
59
|
+
_body;
|
|
60
|
+
constructor(body, init) {
|
|
61
|
+
this._body = body;
|
|
62
|
+
this.status = init?.status ?? 200;
|
|
63
|
+
this.statusText = init?.statusText ?? 'OK';
|
|
64
|
+
this.headers = new Headers(init?.headers);
|
|
65
|
+
}
|
|
66
|
+
static json(data, init) {
|
|
67
|
+
const response = new MockNextResponse(data, init);
|
|
68
|
+
response.headers.set('content-type', 'application/json');
|
|
69
|
+
return response;
|
|
70
|
+
}
|
|
71
|
+
static next(options) {
|
|
72
|
+
const response = new MockNextResponse(null, { status: 200 });
|
|
73
|
+
if (options?.request?.headers) {
|
|
74
|
+
// Store the request headers that would be passed to the next handler
|
|
75
|
+
;
|
|
76
|
+
response._requestHeaders = options.request.headers;
|
|
77
|
+
}
|
|
78
|
+
return response;
|
|
79
|
+
}
|
|
80
|
+
static redirect(url, status = 307) {
|
|
81
|
+
const response = new MockNextResponse(null, { status });
|
|
82
|
+
response.headers.set('location', url.toString());
|
|
83
|
+
return response;
|
|
84
|
+
}
|
|
85
|
+
static rewrite(url) {
|
|
86
|
+
const response = new MockNextResponse(null, { status: 200 });
|
|
87
|
+
response.headers.set('x-middleware-rewrite', url.toString());
|
|
88
|
+
return response;
|
|
89
|
+
}
|
|
90
|
+
async json() {
|
|
91
|
+
return this._body;
|
|
92
|
+
}
|
|
93
|
+
async text() {
|
|
94
|
+
return typeof this._body === 'string' ? this._body : JSON.stringify(this._body);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
export function createMockRouteContext(params = {}) {
|
|
98
|
+
return {
|
|
99
|
+
params: Promise.resolve(params),
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=next-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"next-server.js","sourceRoot":"","sources":["../../../src/__tests__/mocks/next-server.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vestig/next",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "First-class Next.js 15+ integration for vestig logging library. Zero boilerplate, automatic request correlation, full type safety.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -34,8 +34,9 @@
|
|
|
34
34
|
"scripts": {
|
|
35
35
|
"build": "tsc",
|
|
36
36
|
"build:clean": "rm -rf dist && tsc",
|
|
37
|
-
"test": "
|
|
37
|
+
"test": "bun test",
|
|
38
38
|
"test:watch": "bun test --watch",
|
|
39
|
+
"test:coverage": "bun test --coverage",
|
|
39
40
|
"typecheck": "tsc --noEmit"
|
|
40
41
|
},
|
|
41
42
|
"keywords": [
|