@vestig/next 0.4.0 → 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.
@@ -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.4.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": "echo 'No tests yet' && exit 0",
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": [