@vestig/next 0.4.0 → 0.6.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/dist/index.d.ts CHANGED
@@ -37,6 +37,6 @@
37
37
  export { getLogger, getRequestContext, createChildLogger } from './server/server-component';
38
38
  export { withVestig, createRouteHandlers } from './server/route-handler';
39
39
  export { vestigAction, createVestigAction } from './server/server-action';
40
- export type { Logger, LoggerConfig, LogLevel, LogEntry, LogMetadata, LogContext, Transport, SanitizePreset, SanitizeConfig, RouteHandlerContext, RouteHandler, WithVestigOptions, ActionContext, ServerAction, VestigActionOptions, VestigProviderProps, } from './types';
40
+ export type { Logger, LoggerConfig, LogLevel, LogEntry, LogMetadata, LogContext, Transport, SanitizePreset, SanitizeConfig, Span, RouteHandlerContext, RouteHandler, WithVestigOptions, ActionContext, ServerAction, VestigActionOptions, VestigProviderProps, } from './types';
41
41
  export type { VestigNextConfig, VestigNextOptions, VestigNextMiddlewareConfig, VestigNextServerConfig, VestigNextClientConfig, VestigNextDevToolsConfig, } from './config';
42
42
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAGH,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAG3F,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAGxE,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAGzE,YAAY,EAEX,MAAM,EACN,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,UAAU,EACV,SAAS,EACT,cAAc,EACd,cAAc,EAEd,mBAAmB,EACnB,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,GACnB,MAAM,SAAS,CAAA;AAGhB,YAAY,EACX,gBAAgB,EAChB,iBAAiB,EACjB,0BAA0B,EAC1B,sBAAsB,EACtB,sBAAsB,EACtB,wBAAwB,GACxB,MAAM,UAAU,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAGH,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAG3F,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAGxE,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAGzE,YAAY,EAEX,MAAM,EACN,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,UAAU,EACV,SAAS,EACT,cAAc,EACd,cAAc,EACd,IAAI,EAEJ,mBAAmB,EACnB,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,GACnB,MAAM,SAAS,CAAA;AAGhB,YAAY,EACX,gBAAgB,EAChB,iBAAiB,EACjB,0BAA0B,EAC1B,sBAAsB,EACtB,sBAAsB,EACtB,wBAAwB,GACxB,MAAM,UAAU,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/server/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,EACN,KAAK,QAAQ,EAEb,KAAK,cAAc,EAKnB,MAAM,QAAQ,CAAA;AAIf,MAAM,WAAW,iBAAiB;IACjC,0CAA0C;IAC1C,KAAK,CAAC,EAAE,QAAQ,CAAA;IAChB,6BAA6B;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,cAAc,CAAA;IACzB,oCAAoC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,wCAAwC;IACxC,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,0CAA0C;IAC1C,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,sCAAsC;IACtC,eAAe,CAAC,EAAE,QAAQ,CAAA;IAC1B,uCAAuC;IACvC,gBAAgB,CAAC,EAAE,QAAQ,CAAA;IAC3B,iCAAiC;IACjC,UAAU,CAAC,EAAE,OAAO,CAAA;CACpB;AAmCD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,GAAE,iBAAsB,IAGpC,SAAS,WAAW,2BA2ErD;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,gBAAgB,YA3Fc,WAAW,0BA2FE,CAAA;AAGxD,YAAY,EAAE,iBAAiB,IAAI,YAAY,EAAE,CAAA;AAEjD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,iBAAsB,aApHtB,WAAW,2BAwHrD;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,WAAW,YAvImB,WAAW,0BAuIR,CAAA;AAE9C;;GAEG;AACH,wBAAgB,kBAAkB,CACjC,OAAO,GAAE;IACR,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CACb;;EAMN;AAED;;GAEG;AACH,eAAO,MAAM,uBAAuB,2BAAqB,CAAA"}
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/server/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,EACN,KAAK,QAAQ,EAEb,KAAK,cAAc,EAMnB,MAAM,QAAQ,CAAA;AAIf,MAAM,WAAW,iBAAiB;IACjC,0CAA0C;IAC1C,KAAK,CAAC,EAAE,QAAQ,CAAA;IAChB,6BAA6B;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,cAAc,CAAA;IACzB,oCAAoC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,wCAAwC;IACxC,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,0CAA0C;IAC1C,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,sCAAsC;IACtC,eAAe,CAAC,EAAE,QAAQ,CAAA;IAC1B,uCAAuC;IACvC,gBAAgB,CAAC,EAAE,QAAQ,CAAA;IAC3B,iCAAiC;IACjC,UAAU,CAAC,EAAE,OAAO,CAAA;CACpB;AAmCD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,GAAE,iBAAsB,IAGpC,SAAS,WAAW,2BA4FrD;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,gBAAgB,YA5Gc,WAAW,0BA4GE,CAAA;AAGxD,YAAY,EAAE,iBAAiB,IAAI,YAAY,EAAE,CAAA;AAEjD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,iBAAsB,aArItB,WAAW,2BAyIrD;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,WAAW,YAxJmB,WAAW,0BAwJR,CAAA;AAE9C;;GAEG;AACH,wBAAgB,kBAAkB,CACjC,OAAO,GAAE;IACR,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CACb;;EAMN;AAED;;GAEG;AACH,eAAO,MAAM,uBAAuB,2BAAqB,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import { NextResponse } from 'next/server';
2
- import { createCorrelationContext, createLogger, createTraceparent, parseTraceparent, } from 'vestig';
2
+ import { createCorrelationContext, createLogger, createTraceparent, parseTraceparent, spanSync, } from 'vestig';
3
3
  import { CORRELATION_HEADERS } from '../utils/headers';
4
4
  import { createRequestTiming, formatDuration } from '../utils/timing';
5
5
  // Default options
@@ -70,46 +70,60 @@ export function createVestigMiddleware(options = {}) {
70
70
  traceId: parsed?.traceId,
71
71
  spanId: parsed?.spanId,
72
72
  });
73
- // Log incoming request
74
- const requestLogLevel = mergedOptions.requestLogLevel;
75
- log[requestLogLevel]('Request received', {
76
- method: request.method,
77
- path: pathname,
78
- search: request.nextUrl.search || undefined,
79
- userAgent: request.headers.get('user-agent')?.slice(0, 100),
80
- ip: request.headers.get('x-forwarded-for')?.split(',')[0]?.trim() ??
81
- request.headers.get('x-real-ip'),
82
- requestId: ctx.requestId,
83
- traceId: ctx.traceId,
84
- });
85
- // Create new headers with correlation IDs
86
- const requestHeaders = new Headers(request.headers);
87
- requestHeaders.set(CORRELATION_HEADERS.REQUEST_ID, ctx.requestId);
88
- requestHeaders.set(CORRELATION_HEADERS.TRACE_ID, ctx.traceId);
89
- requestHeaders.set(CORRELATION_HEADERS.SPAN_ID, ctx.spanId);
90
- requestHeaders.set(CORRELATION_HEADERS.TRACEPARENT, createTraceparent(ctx.traceId, ctx.spanId));
91
- // Create response with updated headers
92
- const response = NextResponse.next({
93
- request: {
94
- headers: requestHeaders,
95
- },
96
- });
97
- // Add correlation headers to response
98
- response.headers.set(CORRELATION_HEADERS.REQUEST_ID, ctx.requestId);
99
- response.headers.set(CORRELATION_HEADERS.TRACE_ID, ctx.traceId);
100
- // Log response with timing if enabled
101
- if (mergedOptions.timing) {
102
- const duration = timing.complete();
103
- const responseLogLevel = mergedOptions.responseLogLevel;
104
- log[responseLogLevel]('Response sent', {
73
+ // Wrap middleware processing in a span
74
+ return spanSync(`middleware:${mergedOptions.namespace}`, (s) => {
75
+ // Set HTTP attributes on span
76
+ s.setAttributes({
77
+ 'http.method': request.method,
78
+ 'http.path': pathname,
79
+ 'http.request_id': ctx.requestId,
80
+ 'http.trace_id': ctx.traceId,
81
+ });
82
+ // Log incoming request
83
+ const requestLogLevel = mergedOptions.requestLogLevel;
84
+ log[requestLogLevel]('Request received', {
105
85
  method: request.method,
106
86
  path: pathname,
107
- duration: formatDuration(duration),
108
- durationMs: duration,
87
+ search: request.nextUrl.search || undefined,
88
+ userAgent: request.headers.get('user-agent')?.slice(0, 100),
89
+ ip: request.headers.get('x-forwarded-for')?.split(',')[0]?.trim() ??
90
+ request.headers.get('x-real-ip'),
109
91
  requestId: ctx.requestId,
92
+ traceId: ctx.traceId,
110
93
  });
111
- }
112
- return response;
94
+ s.addEvent('request-received');
95
+ // Create new headers with correlation IDs
96
+ const requestHeaders = new Headers(request.headers);
97
+ requestHeaders.set(CORRELATION_HEADERS.REQUEST_ID, ctx.requestId);
98
+ requestHeaders.set(CORRELATION_HEADERS.TRACE_ID, ctx.traceId);
99
+ requestHeaders.set(CORRELATION_HEADERS.SPAN_ID, ctx.spanId);
100
+ requestHeaders.set(CORRELATION_HEADERS.TRACEPARENT, createTraceparent(ctx.traceId, ctx.spanId));
101
+ // Create response with updated headers
102
+ const response = NextResponse.next({
103
+ request: {
104
+ headers: requestHeaders,
105
+ },
106
+ });
107
+ // Add correlation headers to response
108
+ response.headers.set(CORRELATION_HEADERS.REQUEST_ID, ctx.requestId);
109
+ response.headers.set(CORRELATION_HEADERS.TRACE_ID, ctx.traceId);
110
+ // Log response with timing if enabled
111
+ if (mergedOptions.timing) {
112
+ const duration = timing.complete();
113
+ s.setAttribute('http.duration_ms', duration);
114
+ s.addEvent('response-sent');
115
+ const responseLogLevel = mergedOptions.responseLogLevel;
116
+ log[responseLogLevel]('Response sent', {
117
+ method: request.method,
118
+ path: pathname,
119
+ duration: formatDuration(duration),
120
+ durationMs: duration,
121
+ requestId: ctx.requestId,
122
+ });
123
+ }
124
+ s.setStatus('ok');
125
+ return response;
126
+ });
113
127
  };
114
128
  }
115
129
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/server/middleware.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/server/middleware.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"route-handler.d.ts","sourceRoot":"","sources":["../../src/server/route-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,QAAQ,EAEb,KAAK,cAAc,EAInB,MAAM,QAAQ,CAAA;AACf,OAAO,KAAK,EAAE,YAAY,EAAuB,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAKpF,KAAK,WAAW,GAAG,OAAO,GAAG;IAAE,OAAO,CAAC,EAAE,GAAG,CAAA;CAAE,CAAA;AAC9C,KAAK,YAAY,GAAG;IAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CAAE,CAAA;AAE/D,MAAM,WAAW,mBAAoB,SAAQ,iBAAiB;IAC7D,6CAA6C;IAC7C,KAAK,CAAC,EAAE,QAAQ,CAAA;IAChB,6BAA6B;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,cAAc,CAAA;IACzB,iCAAiC;IACjC,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACjC;AAWD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,UAAU,CAAC,CAAC,GAAG,QAAQ,EACtC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EACxB,OAAO,GAAE,mBAAwB,GAC/B,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,CAAC,EAAE,YAAY,KAAK,OAAO,CAAC,CAAC,CAAC,CAmFnE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,mBAAmB,CAClC,QAAQ,EAAE;IACT,GAAG,CAAC,EAAE,YAAY,CAAA;IAClB,IAAI,CAAC,EAAE,YAAY,CAAA;IACnB,GAAG,CAAC,EAAE,YAAY,CAAA;IAClB,KAAK,CAAC,EAAE,YAAY,CAAA;IACpB,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,IAAI,CAAC,EAAE,YAAY,CAAA;IACnB,OAAO,CAAC,EAAE,YAAY,CAAA;CACtB,EACD,OAAO,GAAE,mBAAwB,GAC/B,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC,CAa/C"}
1
+ {"version":3,"file":"route-handler.d.ts","sourceRoot":"","sources":["../../src/server/route-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,QAAQ,EAEb,KAAK,cAAc,EAMnB,MAAM,QAAQ,CAAA;AACf,OAAO,KAAK,EAAE,YAAY,EAAuB,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAKpF,KAAK,WAAW,GAAG,OAAO,GAAG;IAAE,OAAO,CAAC,EAAE,GAAG,CAAA;CAAE,CAAA;AAC9C,KAAK,YAAY,GAAG;IAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CAAE,CAAA;AAE/D,MAAM,WAAW,mBAAoB,SAAQ,iBAAiB;IAC7D,6CAA6C;IAC7C,KAAK,CAAC,EAAE,QAAQ,CAAA;IAChB,6BAA6B;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,cAAc,CAAA;IACzB,iCAAiC;IACjC,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACjC;AAWD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,UAAU,CAAC,CAAC,GAAG,QAAQ,EACtC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EACxB,OAAO,GAAE,mBAAwB,GAC/B,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,CAAC,EAAE,YAAY,KAAK,OAAO,CAAC,CAAC,CAAC,CA2GnE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,mBAAmB,CAClC,QAAQ,EAAE;IACT,GAAG,CAAC,EAAE,YAAY,CAAA;IAClB,IAAI,CAAC,EAAE,YAAY,CAAA;IACnB,GAAG,CAAC,EAAE,YAAY,CAAA;IAClB,KAAK,CAAC,EAAE,YAAY,CAAA;IACpB,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,IAAI,CAAC,EAAE,YAAY,CAAA;IACnB,OAAO,CAAC,EAAE,YAAY,CAAA;CACtB,EACD,OAAO,GAAE,mBAAwB,GAC/B,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC,CAa/C"}
@@ -1,4 +1,4 @@
1
- import { createCorrelationContext, createLogger, withContext, } from 'vestig';
1
+ import { createCorrelationContext, createLogger, span as createSpan, withContext, } from 'vestig';
2
2
  import { extractCorrelationHeaders, setCorrelationHeaders } from '../utils/headers';
3
3
  import { extractRequestMetadata } from '../utils/metadata';
4
4
  import { createRequestTiming, formatDuration } from '../utils/timing';
@@ -68,53 +68,74 @@ export function withVestig(handler, options = {}) {
68
68
  });
69
69
  // Get route params
70
70
  const params = routeContext?.params ? await routeContext.params : {};
71
- // Create handler context
72
- const handlerContext = {
73
- log,
74
- ctx,
75
- params,
76
- timing: {
77
- start: timing.start,
78
- elapsed: () => timing.elapsed(),
79
- mark: (name) => timing.mark(name),
80
- },
81
- };
71
+ // Get URL info for span name
72
+ const url = request.nextUrl ?? new URL(request.url);
73
+ const namespace = mergedOptions.namespace ?? 'api';
82
74
  return withContext(ctx, async () => {
83
- // Log request if enabled
84
- if (mergedOptions.logRequest !== false) {
85
- const metadata = extractRequestMetadata(request);
86
- log.info('Request received', {
87
- ...metadata,
88
- requestId: ctx.requestId,
89
- traceId: ctx.traceId,
75
+ // Wrap entire request handling in a span
76
+ return createSpan(`route:${namespace}`, async (s) => {
77
+ // Set HTTP attributes on span
78
+ s.setAttributes({
79
+ 'http.method': request.method,
80
+ 'http.url': url.pathname,
81
+ 'http.request_id': ctx.requestId,
90
82
  });
91
- }
92
- try {
93
- const result = await handler(request, handlerContext);
94
- // Log response if enabled and result is Response
95
- if (mergedOptions.logResponse !== false && result instanceof Response) {
83
+ // Create handler context with span
84
+ const handlerContext = {
85
+ log,
86
+ ctx,
87
+ params,
88
+ timing: {
89
+ start: timing.start,
90
+ elapsed: () => timing.elapsed(),
91
+ mark: (name) => timing.mark(name),
92
+ },
93
+ span: s,
94
+ };
95
+ // Log request if enabled
96
+ if (mergedOptions.logRequest !== false) {
97
+ const metadata = extractRequestMetadata(request);
98
+ log.info('Request received', {
99
+ ...metadata,
100
+ requestId: ctx.requestId,
101
+ traceId: ctx.traceId,
102
+ });
103
+ }
104
+ try {
105
+ const result = await handler(request, handlerContext);
106
+ // Log response if enabled and result is Response
107
+ if (result instanceof Response) {
108
+ const duration = timing.complete();
109
+ s.setAttribute('http.status_code', result.status);
110
+ s.setStatus(result.ok ? 'ok' : 'error');
111
+ if (mergedOptions.logResponse !== false) {
112
+ log.info('Response sent', {
113
+ status: result.status,
114
+ duration: formatDuration(duration),
115
+ durationMs: duration,
116
+ requestId: ctx.requestId,
117
+ });
118
+ }
119
+ // Add correlation headers to response
120
+ setCorrelationHeaders(result.headers, ctx);
121
+ }
122
+ else {
123
+ s.setStatus('ok');
124
+ }
125
+ return result;
126
+ }
127
+ catch (error) {
96
128
  const duration = timing.complete();
97
- log.info('Response sent', {
98
- status: result.status,
129
+ s.setStatus('error', error instanceof Error ? error.message : String(error));
130
+ log.error('Request failed', {
131
+ error,
99
132
  duration: formatDuration(duration),
100
133
  durationMs: duration,
101
134
  requestId: ctx.requestId,
102
135
  });
103
- // Add correlation headers to response
104
- setCorrelationHeaders(result.headers, ctx);
136
+ throw error;
105
137
  }
106
- return result;
107
- }
108
- catch (error) {
109
- const duration = timing.complete();
110
- log.error('Request failed', {
111
- error,
112
- duration: formatDuration(duration),
113
- durationMs: duration,
114
- requestId: ctx.requestId,
115
- });
116
- throw error;
117
- }
138
+ });
118
139
  });
119
140
  };
120
141
  }
@@ -1 +1 @@
1
- {"version":3,"file":"route-handler.js","sourceRoot":"","sources":["../../src/server/route-handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"route-handler.js","sourceRoot":"","sources":["../../src/server/route-handler.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server-action.d.ts","sourceRoot":"","sources":["../../src/server/server-action.ts"],"names":[],"mappings":"AACA,OAAO,EACN,KAAK,QAAQ,EAEb,KAAK,cAAc,EAInB,MAAM,QAAQ,CAAA;AACf,OAAO,KAAK,EAAiB,YAAY,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAIhF,MAAM,WAAW,aAAc,SAAQ,mBAAmB;IACzD,sCAAsC;IACtC,KAAK,CAAC,EAAE,QAAQ,CAAA;IAChB,6BAA6B;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,cAAc,CAAA;IACzB,iCAAiC;IACjC,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACjC;AAWD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,EAC3C,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,OAAO,GAAE,aAAkB,GACzB,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAuErC;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,KAAK,CAAC,EAAE,QAAQ,CAAA;IAChB,QAAQ,CAAC,EAAE,cAAc,CAAA;IACzB,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACrC,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAQtC"}
1
+ {"version":3,"file":"server-action.d.ts","sourceRoot":"","sources":["../../src/server/server-action.ts"],"names":[],"mappings":"AACA,OAAO,EACN,KAAK,QAAQ,EAEb,KAAK,cAAc,EAMnB,MAAM,QAAQ,CAAA;AACf,OAAO,KAAK,EAAiB,YAAY,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAIhF,MAAM,WAAW,aAAc,SAAQ,mBAAmB;IACzD,sCAAsC;IACtC,KAAK,CAAC,EAAE,QAAQ,CAAA;IAChB,6BAA6B;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,cAAc,CAAA;IACzB,iCAAiC;IACjC,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACjC;AAWD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,EAC3C,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,OAAO,GAAE,aAAkB,GACzB,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAiGrC;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,KAAK,CAAC,EAAE,QAAQ,CAAA;IAChB,QAAQ,CAAC,EAAE,cAAc,CAAA;IACzB,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACrC,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAQtC"}
@@ -1,5 +1,5 @@
1
1
  import { headers } from 'next/headers';
2
- import { createCorrelationContext, createLogger, withContext, } from 'vestig';
2
+ import { createCorrelationContext, createLogger, span as createSpan, withContext, } from 'vestig';
3
3
  import { CORRELATION_HEADERS } from '../utils/headers';
4
4
  import { createRequestTiming, formatDuration } from '../utils/timing';
5
5
  const DEFAULT_OPTIONS = {
@@ -67,42 +67,63 @@ export function vestigAction(action, options = {}) {
67
67
  const traceId = headersList.get(CORRELATION_HEADERS.TRACE_ID) ?? undefined;
68
68
  const spanId = headersList.get(CORRELATION_HEADERS.SPAN_ID) ?? undefined;
69
69
  const ctx = createCorrelationContext({ requestId, traceId, spanId });
70
- const actionContext = { log, ctx };
70
+ const namespace = mergedOptions.namespace ?? 'action';
71
71
  return withContext(ctx, async () => {
72
- // Log action start
73
- const startLog = {
74
- requestId: ctx.requestId,
75
- inputType: typeof input,
76
- };
77
- if (mergedOptions.logInput) {
78
- startLog.input = input;
79
- }
80
- log.info('Action started', startLog);
81
- try {
82
- const result = await action(input, actionContext);
83
- const duration = timing.complete();
84
- const endLog = {
85
- duration: formatDuration(duration),
86
- durationMs: duration,
72
+ // Wrap entire action in a span
73
+ return createSpan(`action:${namespace}`, async (s) => {
74
+ // Set initial attributes
75
+ s.setAttributes({
76
+ 'action.namespace': namespace,
77
+ 'action.request_id': ctx.requestId,
78
+ 'action.input_type': typeof input,
79
+ });
80
+ // Create action context with span
81
+ const actionContext = { log, ctx, span: s };
82
+ // Log action start
83
+ const startLog = {
87
84
  requestId: ctx.requestId,
88
- success: true,
85
+ inputType: typeof input,
89
86
  };
90
- if (mergedOptions.logOutput) {
91
- endLog.output = result;
87
+ if (mergedOptions.logInput) {
88
+ startLog.input = input;
89
+ s.setAttribute('action.has_input', true);
92
90
  }
93
- log.info('Action completed', endLog);
94
- return result;
95
- }
96
- catch (error) {
97
- const duration = timing.complete();
98
- log.error('Action failed', {
99
- error,
100
- duration: formatDuration(duration),
101
- durationMs: duration,
102
- requestId: ctx.requestId,
103
- });
104
- throw error;
105
- }
91
+ log.info('Action started', startLog);
92
+ s.addEvent('action-start');
93
+ try {
94
+ const result = await action(input, actionContext);
95
+ const duration = timing.complete();
96
+ s.addEvent('action-complete');
97
+ s.setAttribute('action.duration_ms', duration);
98
+ s.setStatus('ok');
99
+ const endLog = {
100
+ duration: formatDuration(duration),
101
+ durationMs: duration,
102
+ requestId: ctx.requestId,
103
+ success: true,
104
+ };
105
+ if (mergedOptions.logOutput) {
106
+ endLog.output = result;
107
+ }
108
+ log.info('Action completed', endLog);
109
+ return result;
110
+ }
111
+ catch (error) {
112
+ const duration = timing.complete();
113
+ s.addEvent('action-error', {
114
+ error: error instanceof Error ? error.message : String(error),
115
+ });
116
+ s.setAttribute('action.duration_ms', duration);
117
+ s.setStatus('error', error instanceof Error ? error.message : String(error));
118
+ log.error('Action failed', {
119
+ error,
120
+ duration: formatDuration(duration),
121
+ durationMs: duration,
122
+ requestId: ctx.requestId,
123
+ });
124
+ throw error;
125
+ }
126
+ });
106
127
  });
107
128
  };
108
129
  }
@@ -1 +1 @@
1
- {"version":3,"file":"server-action.js","sourceRoot":"","sources":["../../src/server/server-action.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server-action.js","sourceRoot":"","sources":["../../src/server/server-action.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * Shared types for @vestig/next
3
3
  */
4
- import type { LogContext, LogEntry, LogLevel, LogMetadata, Logger, LoggerConfig, SanitizeConfig, SanitizePreset, Transport } from 'vestig';
5
- export type { Logger, LoggerConfig, LogLevel, LogEntry, LogMetadata, LogContext, Transport, SanitizePreset, SanitizeConfig, };
4
+ import type { LogContext, LogEntry, LogLevel, LogMetadata, Logger, LoggerConfig, SanitizeConfig, SanitizePreset, Span, Transport } from 'vestig';
5
+ export type { Logger, LoggerConfig, LogLevel, LogEntry, LogMetadata, LogContext, Transport, SanitizePreset, SanitizeConfig, Span, };
6
6
  export type { VestigNextConfig, VestigNextOptions, VestigNextMiddlewareConfig, VestigNextServerConfig, VestigNextClientConfig, VestigNextDevToolsConfig, } from './config';
7
7
  /**
8
8
  * Context provided to route handlers wrapped with withVestig
@@ -23,6 +23,8 @@ export interface RouteHandlerContext {
23
23
  /** Mark a checkpoint */
24
24
  mark: (name: string) => void;
25
25
  };
26
+ /** Active span for the request - use for adding attributes, events */
27
+ span: Span;
26
28
  }
27
29
  /**
28
30
  * Route handler function type
@@ -47,6 +49,8 @@ export interface ActionContext {
47
49
  log: Logger;
48
50
  /** Correlation context */
49
51
  ctx: LogContext;
52
+ /** Active span for the action - use for adding attributes, events */
53
+ span: Span;
50
54
  }
51
55
  /**
52
56
  * Server action function type
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACX,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,MAAM,EACN,YAAY,EACZ,cAAc,EACd,cAAc,EACd,SAAS,EACT,MAAM,QAAQ,CAAA;AAGf,YAAY,EACX,MAAM,EACN,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,UAAU,EACV,SAAS,EACT,cAAc,EACd,cAAc,GACd,CAAA;AAGD,YAAY,EACX,gBAAgB,EAChB,iBAAiB,EACjB,0BAA0B,EAC1B,sBAAsB,EACtB,sBAAsB,EACtB,wBAAwB,GACxB,MAAM,UAAU,CAAA;AAEjB;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC,+CAA+C;IAC/C,GAAG,EAAE,MAAM,CAAA;IACX,uDAAuD;IACvD,GAAG,EAAE,UAAU,CAAA;IACf,gCAAgC;IAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9B,+BAA+B;IAC/B,MAAM,EAAE;QACP,uBAAuB;QACvB,KAAK,EAAE,MAAM,CAAA;QACb,6BAA6B;QAC7B,OAAO,EAAE,MAAM,MAAM,CAAA;QACrB,wBAAwB;QACxB,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;KAC5B,CAAA;CACD;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,GAAG,QAAQ,IAAI,CACxC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,mBAAmB,KACxB,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;AAEnB;;GAEG;AACH,MAAM,WAAW,iBAAiB;IACjC,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,2CAA2C;IAC3C,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,4CAA4C;IAC5C,WAAW,CAAC,EAAE,OAAO,CAAA;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B,+CAA+C;IAC/C,GAAG,EAAE,MAAM,CAAA;IACX,0BAA0B;IAC1B,GAAG,EAAE,UAAU,CAAA;CACf;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,CAAC,MAAM,EAAE,OAAO,IAAI,CAC3C,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,aAAa,KAClB,OAAO,CAAC,OAAO,CAAC,CAAA;AAErB;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,uCAAuC;IACvC,SAAS,CAAC,EAAE,OAAO,CAAA;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,sDAAsD;IACtD,cAAc,CAAC,EAAE,UAAU,CAAA;IAC3B,4BAA4B;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gCAAgC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACjC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACX,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,MAAM,EACN,YAAY,EACZ,cAAc,EACd,cAAc,EACd,IAAI,EACJ,SAAS,EACT,MAAM,QAAQ,CAAA;AAGf,YAAY,EACX,MAAM,EACN,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,UAAU,EACV,SAAS,EACT,cAAc,EACd,cAAc,EACd,IAAI,GACJ,CAAA;AAGD,YAAY,EACX,gBAAgB,EAChB,iBAAiB,EACjB,0BAA0B,EAC1B,sBAAsB,EACtB,sBAAsB,EACtB,wBAAwB,GACxB,MAAM,UAAU,CAAA;AAEjB;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC,+CAA+C;IAC/C,GAAG,EAAE,MAAM,CAAA;IACX,uDAAuD;IACvD,GAAG,EAAE,UAAU,CAAA;IACf,gCAAgC;IAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9B,+BAA+B;IAC/B,MAAM,EAAE;QACP,uBAAuB;QACvB,KAAK,EAAE,MAAM,CAAA;QACb,6BAA6B;QAC7B,OAAO,EAAE,MAAM,MAAM,CAAA;QACrB,wBAAwB;QACxB,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;KAC5B,CAAA;IACD,sEAAsE;IACtE,IAAI,EAAE,IAAI,CAAA;CACV;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,GAAG,QAAQ,IAAI,CACxC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,mBAAmB,KACxB,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;AAEnB;;GAEG;AACH,MAAM,WAAW,iBAAiB;IACjC,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,2CAA2C;IAC3C,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,4CAA4C;IAC5C,WAAW,CAAC,EAAE,OAAO,CAAA;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B,+CAA+C;IAC/C,GAAG,EAAE,MAAM,CAAA;IACX,0BAA0B;IAC1B,GAAG,EAAE,UAAU,CAAA;IACf,qEAAqE;IACrE,IAAI,EAAE,IAAI,CAAA;CACV;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,CAAC,MAAM,EAAE,OAAO,IAAI,CAC3C,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,aAAa,KAClB,OAAO,CAAC,OAAO,CAAC,CAAA;AAErB;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,uCAAuC;IACvC,SAAS,CAAC,EAAE,OAAO,CAAA;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,sDAAsD;IACtD,cAAc,CAAC,EAAE,UAAU,CAAA;IAC3B,4BAA4B;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gCAAgC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACjC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vestig/next",
3
- "version": "0.4.0",
3
+ "version": "0.6.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": [