@vestig/next 0.6.0 → 0.9.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.
Files changed (144) hide show
  1. package/README.md +1 -1
  2. package/dist/__tests__/mocks/next-server.d.ts.map +1 -1
  3. package/dist/__tests__/mocks/next-server.js.map +1 -1
  4. package/dist/client/error-boundary.d.ts +80 -0
  5. package/dist/client/error-boundary.d.ts.map +1 -0
  6. package/dist/client/error-boundary.js +182 -0
  7. package/dist/client/error-boundary.js.map +1 -0
  8. package/dist/client/index.d.ts +2 -1
  9. package/dist/client/index.d.ts.map +1 -1
  10. package/dist/client/index.js +2 -0
  11. package/dist/client/index.js.map +1 -1
  12. package/dist/client/transport.d.ts +50 -0
  13. package/dist/client/transport.d.ts.map +1 -1
  14. package/dist/client/transport.js +200 -3
  15. package/dist/client/transport.js.map +1 -1
  16. package/dist/client.d.ts +2 -1
  17. package/dist/client.d.ts.map +1 -1
  18. package/dist/client.js +2 -0
  19. package/dist/client.js.map +1 -1
  20. package/dist/db/drizzle.d.ts +115 -0
  21. package/dist/db/drizzle.d.ts.map +1 -0
  22. package/dist/db/drizzle.js +174 -0
  23. package/dist/db/drizzle.js.map +1 -0
  24. package/dist/db/index.d.ts +49 -0
  25. package/dist/db/index.d.ts.map +1 -0
  26. package/dist/db/index.js +51 -0
  27. package/dist/db/index.js.map +1 -0
  28. package/dist/db/prisma.d.ts +114 -0
  29. package/dist/db/prisma.d.ts.map +1 -0
  30. package/dist/db/prisma.js +144 -0
  31. package/dist/db/prisma.js.map +1 -0
  32. package/dist/db/query-logger.d.ts +30 -0
  33. package/dist/db/query-logger.d.ts.map +1 -0
  34. package/dist/db/query-logger.js +169 -0
  35. package/dist/db/query-logger.js.map +1 -0
  36. package/dist/db/types.d.ts +102 -0
  37. package/dist/db/types.d.ts.map +1 -0
  38. package/dist/db/types.js +28 -0
  39. package/dist/db/types.js.map +1 -0
  40. package/dist/dev/api/index.d.ts +13 -0
  41. package/dist/dev/api/index.d.ts.map +1 -0
  42. package/dist/dev/api/index.js +13 -0
  43. package/dist/dev/api/index.js.map +1 -0
  44. package/dist/dev/api/logs-stream.d.ts +119 -0
  45. package/dist/dev/api/logs-stream.d.ts.map +1 -0
  46. package/dist/dev/api/logs-stream.js +156 -0
  47. package/dist/dev/api/logs-stream.js.map +1 -0
  48. package/dist/dev/filters.d.ts +17 -0
  49. package/dist/dev/filters.d.ts.map +1 -0
  50. package/dist/dev/filters.js +100 -0
  51. package/dist/dev/filters.js.map +1 -0
  52. package/dist/dev/hooks/use-logs.d.ts +55 -0
  53. package/dist/dev/hooks/use-logs.d.ts.map +1 -0
  54. package/dist/dev/hooks/use-logs.js +202 -0
  55. package/dist/dev/hooks/use-logs.js.map +1 -0
  56. package/dist/dev/index.d.ts +35 -0
  57. package/dist/dev/index.d.ts.map +1 -0
  58. package/dist/dev/index.js +41 -0
  59. package/dist/dev/index.js.map +1 -0
  60. package/dist/dev/log-entry.d.ts +12 -0
  61. package/dist/dev/log-entry.d.ts.map +1 -0
  62. package/dist/dev/log-entry.js +152 -0
  63. package/dist/dev/log-entry.js.map +1 -0
  64. package/dist/dev/log-viewer.d.ts +11 -0
  65. package/dist/dev/log-viewer.d.ts.map +1 -0
  66. package/dist/dev/log-viewer.js +49 -0
  67. package/dist/dev/log-viewer.js.map +1 -0
  68. package/dist/dev/metrics-card.d.ts +18 -0
  69. package/dist/dev/metrics-card.d.ts.map +1 -0
  70. package/dist/dev/metrics-card.js +75 -0
  71. package/dist/dev/metrics-card.js.map +1 -0
  72. package/dist/dev/metrics-histogram.d.ts +12 -0
  73. package/dist/dev/metrics-histogram.d.ts.map +1 -0
  74. package/dist/dev/metrics-histogram.js +69 -0
  75. package/dist/dev/metrics-histogram.js.map +1 -0
  76. package/dist/dev/metrics-panel.d.ts +10 -0
  77. package/dist/dev/metrics-panel.d.ts.map +1 -0
  78. package/dist/dev/metrics-panel.js +84 -0
  79. package/dist/dev/metrics-panel.js.map +1 -0
  80. package/dist/dev/overlay.d.ts +55 -0
  81. package/dist/dev/overlay.d.ts.map +1 -0
  82. package/dist/dev/overlay.js +216 -0
  83. package/dist/dev/overlay.js.map +1 -0
  84. package/dist/dev/store.d.ts +126 -0
  85. package/dist/dev/store.d.ts.map +1 -0
  86. package/dist/dev/store.js +210 -0
  87. package/dist/dev/store.js.map +1 -0
  88. package/dist/error/boundary.d.ts +36 -0
  89. package/dist/error/boundary.d.ts.map +1 -0
  90. package/dist/error/boundary.js +263 -0
  91. package/dist/error/boundary.js.map +1 -0
  92. package/dist/error/breadcrumbs.d.ts +95 -0
  93. package/dist/error/breadcrumbs.d.ts.map +1 -0
  94. package/dist/error/breadcrumbs.js +273 -0
  95. package/dist/error/breadcrumbs.js.map +1 -0
  96. package/dist/error/fingerprint.d.ts +42 -0
  97. package/dist/error/fingerprint.d.ts.map +1 -0
  98. package/dist/error/fingerprint.js +135 -0
  99. package/dist/error/fingerprint.js.map +1 -0
  100. package/dist/error/index.d.ts +52 -0
  101. package/dist/error/index.d.ts.map +1 -0
  102. package/dist/error/index.js +56 -0
  103. package/dist/error/index.js.map +1 -0
  104. package/dist/error/stack-parser.d.ts +43 -0
  105. package/dist/error/stack-parser.d.ts.map +1 -0
  106. package/dist/error/stack-parser.js +166 -0
  107. package/dist/error/stack-parser.js.map +1 -0
  108. package/dist/error/types.d.ts +152 -0
  109. package/dist/error/types.d.ts.map +1 -0
  110. package/dist/error/types.js +10 -0
  111. package/dist/error/types.js.map +1 -0
  112. package/dist/metrics/hooks/use-route-metrics.d.ts +93 -0
  113. package/dist/metrics/hooks/use-route-metrics.d.ts.map +1 -0
  114. package/dist/metrics/hooks/use-route-metrics.js +217 -0
  115. package/dist/metrics/hooks/use-route-metrics.js.map +1 -0
  116. package/dist/metrics/hooks/use-web-vitals.d.ts +73 -0
  117. package/dist/metrics/hooks/use-web-vitals.d.ts.map +1 -0
  118. package/dist/metrics/hooks/use-web-vitals.js +141 -0
  119. package/dist/metrics/hooks/use-web-vitals.js.map +1 -0
  120. package/dist/metrics/index.d.ts +51 -0
  121. package/dist/metrics/index.d.ts.map +1 -0
  122. package/dist/metrics/index.js +56 -0
  123. package/dist/metrics/index.js.map +1 -0
  124. package/dist/metrics/reporter.d.ts +87 -0
  125. package/dist/metrics/reporter.d.ts.map +1 -0
  126. package/dist/metrics/reporter.js +178 -0
  127. package/dist/metrics/reporter.js.map +1 -0
  128. package/dist/metrics/store.d.ts +67 -0
  129. package/dist/metrics/store.d.ts.map +1 -0
  130. package/dist/metrics/store.js +187 -0
  131. package/dist/metrics/store.js.map +1 -0
  132. package/dist/metrics/thresholds.d.ts +84 -0
  133. package/dist/metrics/thresholds.d.ts.map +1 -0
  134. package/dist/metrics/thresholds.js +148 -0
  135. package/dist/metrics/thresholds.js.map +1 -0
  136. package/dist/metrics/types.d.ts +215 -0
  137. package/dist/metrics/types.d.ts.map +1 -0
  138. package/dist/metrics/types.js +10 -0
  139. package/dist/metrics/types.js.map +1 -0
  140. package/dist/metrics/web-vitals.d.ts +72 -0
  141. package/dist/metrics/web-vitals.d.ts.map +1 -0
  142. package/dist/metrics/web-vitals.js +89 -0
  143. package/dist/metrics/web-vitals.js.map +1 -0
  144. package/package.json +28 -6
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Server-side utilities for Vestig Dev Overlay
3
+ *
4
+ * @example
5
+ * ```typescript
6
+ * // app/api/vestig/logs/route.ts
7
+ * import { createLogStreamHandler } from '@vestig/next/dev/api'
8
+ *
9
+ * export const GET = createLogStreamHandler()
10
+ * ```
11
+ */
12
+ export { createLogStreamHandler, createDevTransport, devLogEmitter, type SSELogEntry, } from './logs-stream';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/dev/api/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EACN,sBAAsB,EACtB,kBAAkB,EAClB,aAAa,EACb,KAAK,WAAW,GAChB,MAAM,eAAe,CAAA"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Server-side utilities for Vestig Dev Overlay
3
+ *
4
+ * @example
5
+ * ```typescript
6
+ * // app/api/vestig/logs/route.ts
7
+ * import { createLogStreamHandler } from '@vestig/next/dev/api'
8
+ *
9
+ * export const GET = createLogStreamHandler()
10
+ * ```
11
+ */
12
+ export { createLogStreamHandler, createDevTransport, devLogEmitter, } from './logs-stream';
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/dev/api/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EACN,sBAAsB,EACtB,kBAAkB,EAClB,aAAa,GAEb,MAAM,eAAe,CAAA"}
@@ -0,0 +1,119 @@
1
+ /**
2
+ * SSE Endpoint Helper for Vestig Dev Overlay
3
+ *
4
+ * This module provides utilities for creating a Server-Sent Events
5
+ * endpoint that streams logs to the Dev Overlay in real-time.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * // app/api/vestig/logs/route.ts
10
+ * import { createLogStreamHandler, devLogEmitter } from '@vestig/next/dev/api'
11
+ *
12
+ * export const GET = createLogStreamHandler()
13
+ *
14
+ * // In your middleware or logger setup
15
+ * devLogEmitter.emit({
16
+ * timestamp: new Date().toISOString(),
17
+ * level: 'info',
18
+ * message: 'Hello from server',
19
+ * namespace: 'api',
20
+ * })
21
+ * ```
22
+ */
23
+ import type { LogLevel } from 'vestig';
24
+ /**
25
+ * Log entry for SSE streaming
26
+ */
27
+ export interface SSELogEntry {
28
+ timestamp: string;
29
+ level: LogLevel;
30
+ message: string;
31
+ namespace?: string;
32
+ metadata?: Record<string, unknown>;
33
+ context?: Record<string, unknown>;
34
+ error?: {
35
+ name: string;
36
+ message: string;
37
+ stack?: string;
38
+ };
39
+ duration?: number;
40
+ }
41
+ /**
42
+ * Simple event emitter for logs
43
+ */
44
+ type LogListener = (entry: SSELogEntry) => void;
45
+ declare class DevLogEmitter {
46
+ private listeners;
47
+ /**
48
+ * Subscribe to log events
49
+ */
50
+ subscribe(listener: LogListener): () => void;
51
+ /**
52
+ * Emit a log entry to all subscribers
53
+ */
54
+ emit(entry: SSELogEntry): void;
55
+ /**
56
+ * Get count of active listeners
57
+ */
58
+ get listenerCount(): number;
59
+ }
60
+ /**
61
+ * Singleton log emitter instance
62
+ */
63
+ export declare const devLogEmitter: DevLogEmitter;
64
+ /**
65
+ * Create an SSE response for streaming logs
66
+ *
67
+ * @example
68
+ * ```typescript
69
+ * // app/api/vestig/logs/route.ts
70
+ * import { createLogStreamHandler } from '@vestig/next/dev/api'
71
+ *
72
+ * export const GET = createLogStreamHandler()
73
+ * ```
74
+ */
75
+ export declare function createLogStreamHandler(options?: {
76
+ /**
77
+ * Send a ping every N milliseconds to keep connection alive
78
+ * @default 30000
79
+ */
80
+ pingInterval?: number;
81
+ }): () => Promise<Response>;
82
+ /**
83
+ * Create a vestig transport that streams logs to Dev Overlay
84
+ *
85
+ * @example
86
+ * ```typescript
87
+ * import { createLogger } from 'vestig'
88
+ * import { createDevTransport } from '@vestig/next/dev/api'
89
+ *
90
+ * const logger = createLogger({
91
+ * // Only add dev transport in development
92
+ * transports: process.env.NODE_ENV === 'development'
93
+ * ? [createDevTransport()]
94
+ * : [],
95
+ * })
96
+ * ```
97
+ */
98
+ export declare function createDevTransport(): {
99
+ name: string;
100
+ config: {
101
+ name: string;
102
+ enabled: boolean;
103
+ };
104
+ log(entry: {
105
+ timestamp: string;
106
+ level: LogLevel;
107
+ message: string;
108
+ namespace?: string;
109
+ metadata?: Record<string, unknown>;
110
+ context?: Record<string, unknown>;
111
+ error?: {
112
+ name: string;
113
+ message: string;
114
+ stack?: string;
115
+ };
116
+ }): void;
117
+ };
118
+ export {};
119
+ //# sourceMappingURL=logs-stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs-stream.d.ts","sourceRoot":"","sources":["../../../src/dev/api/logs-stream.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAEtC;;GAEG;AACH,MAAM,WAAW,WAAW;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,QAAQ,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACjC,KAAK,CAAC,EAAE;QACP,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,EAAE,MAAM,CAAA;QACf,KAAK,CAAC,EAAE,MAAM,CAAA;KACd,CAAA;IACD,QAAQ,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,KAAK,WAAW,GAAG,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAA;AAE/C,cAAM,aAAa;IAClB,OAAO,CAAC,SAAS,CAAyB;IAE1C;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,WAAW,GAAG,MAAM,IAAI;IAK5C;;OAEG;IACH,IAAI,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAU9B;;OAEG;IACH,IAAI,aAAa,IAAI,MAAM,CAE1B;CACD;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,eAAsB,CAAA;AAEhD;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,CAAC,EAAE;IAChD;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;CACrB,SAGiC,OAAO,CAAC,QAAQ,CAAC,CAoDlD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB;;;;;;eAQrB;QACV,SAAS,EAAE,MAAM,CAAA;QACjB,KAAK,EAAE,QAAQ,CAAA;QACf,OAAO,EAAE,MAAM,CAAA;QACf,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAClC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QACjC,KAAK,CAAC,EAAE;YACP,IAAI,EAAE,MAAM,CAAA;YACZ,OAAO,EAAE,MAAM,CAAA;YACf,KAAK,CAAC,EAAE,MAAM,CAAA;SACd,CAAA;KACD,GAAG,IAAI;EAYT"}
@@ -0,0 +1,156 @@
1
+ /**
2
+ * SSE Endpoint Helper for Vestig Dev Overlay
3
+ *
4
+ * This module provides utilities for creating a Server-Sent Events
5
+ * endpoint that streams logs to the Dev Overlay in real-time.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * // app/api/vestig/logs/route.ts
10
+ * import { createLogStreamHandler, devLogEmitter } from '@vestig/next/dev/api'
11
+ *
12
+ * export const GET = createLogStreamHandler()
13
+ *
14
+ * // In your middleware or logger setup
15
+ * devLogEmitter.emit({
16
+ * timestamp: new Date().toISOString(),
17
+ * level: 'info',
18
+ * message: 'Hello from server',
19
+ * namespace: 'api',
20
+ * })
21
+ * ```
22
+ */
23
+ class DevLogEmitter {
24
+ listeners = new Set();
25
+ /**
26
+ * Subscribe to log events
27
+ */
28
+ subscribe(listener) {
29
+ this.listeners.add(listener);
30
+ return () => this.listeners.delete(listener);
31
+ }
32
+ /**
33
+ * Emit a log entry to all subscribers
34
+ */
35
+ emit(entry) {
36
+ for (const listener of this.listeners) {
37
+ try {
38
+ listener(entry);
39
+ }
40
+ catch (error) {
41
+ console.error('[vestig-dev] Log listener error:', error);
42
+ }
43
+ }
44
+ }
45
+ /**
46
+ * Get count of active listeners
47
+ */
48
+ get listenerCount() {
49
+ return this.listeners.size;
50
+ }
51
+ }
52
+ /**
53
+ * Singleton log emitter instance
54
+ */
55
+ export const devLogEmitter = new DevLogEmitter();
56
+ /**
57
+ * Create an SSE response for streaming logs
58
+ *
59
+ * @example
60
+ * ```typescript
61
+ * // app/api/vestig/logs/route.ts
62
+ * import { createLogStreamHandler } from '@vestig/next/dev/api'
63
+ *
64
+ * export const GET = createLogStreamHandler()
65
+ * ```
66
+ */
67
+ export function createLogStreamHandler(options) {
68
+ const { pingInterval = 30000 } = options ?? {};
69
+ return async function handler() {
70
+ const encoder = new TextEncoder();
71
+ let pingTimer = null;
72
+ let unsubscribe = null;
73
+ const stream = new ReadableStream({
74
+ start(controller) {
75
+ // Send initial connection message
76
+ controller.enqueue(encoder.encode(`data: ${JSON.stringify({ type: 'connected' })}\n\n`));
77
+ // Subscribe to log events
78
+ unsubscribe = devLogEmitter.subscribe((entry) => {
79
+ try {
80
+ const data = JSON.stringify({ type: 'log', ...entry });
81
+ controller.enqueue(encoder.encode(`data: ${data}\n\n`));
82
+ }
83
+ catch (error) {
84
+ console.error('[vestig-dev] SSE write error:', error);
85
+ }
86
+ });
87
+ // Send periodic pings to keep connection alive
88
+ pingTimer = setInterval(() => {
89
+ try {
90
+ controller.enqueue(encoder.encode(`data: ${JSON.stringify({ type: 'ping' })}\n\n`));
91
+ }
92
+ catch {
93
+ // Connection closed
94
+ if (pingTimer)
95
+ clearInterval(pingTimer);
96
+ }
97
+ }, pingInterval);
98
+ },
99
+ cancel() {
100
+ if (pingTimer) {
101
+ clearInterval(pingTimer);
102
+ pingTimer = null;
103
+ }
104
+ if (unsubscribe) {
105
+ unsubscribe();
106
+ unsubscribe = null;
107
+ }
108
+ },
109
+ });
110
+ return new Response(stream, {
111
+ headers: {
112
+ 'Content-Type': 'text/event-stream',
113
+ 'Cache-Control': 'no-cache, no-transform',
114
+ Connection: 'keep-alive',
115
+ 'X-Accel-Buffering': 'no', // Disable nginx buffering
116
+ },
117
+ });
118
+ };
119
+ }
120
+ /**
121
+ * Create a vestig transport that streams logs to Dev Overlay
122
+ *
123
+ * @example
124
+ * ```typescript
125
+ * import { createLogger } from 'vestig'
126
+ * import { createDevTransport } from '@vestig/next/dev/api'
127
+ *
128
+ * const logger = createLogger({
129
+ * // Only add dev transport in development
130
+ * transports: process.env.NODE_ENV === 'development'
131
+ * ? [createDevTransport()]
132
+ * : [],
133
+ * })
134
+ * ```
135
+ */
136
+ export function createDevTransport() {
137
+ return {
138
+ name: 'vestig-dev-overlay',
139
+ config: {
140
+ name: 'vestig-dev-overlay',
141
+ enabled: true,
142
+ },
143
+ log(entry) {
144
+ devLogEmitter.emit({
145
+ timestamp: entry.timestamp,
146
+ level: entry.level,
147
+ message: entry.message,
148
+ namespace: entry.namespace,
149
+ metadata: entry.metadata,
150
+ context: entry.context,
151
+ error: entry.error,
152
+ });
153
+ },
154
+ };
155
+ }
156
+ //# sourceMappingURL=logs-stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs-stream.js","sourceRoot":"","sources":["../../../src/dev/api/logs-stream.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { LogLevel } from 'vestig';
2
+ import type { LogFilters } from './store';
3
+ interface FiltersProps {
4
+ filters: LogFilters;
5
+ levelCounts: Record<LogLevel, number>;
6
+ namespaces: string[];
7
+ onSetLevelFilter: (level: LogLevel, enabled: boolean) => void;
8
+ onSetSearch: (search: string) => void;
9
+ onSetSourceFilter: (source: 'all' | 'client' | 'server') => void;
10
+ onClearLogs: () => void;
11
+ }
12
+ /**
13
+ * Filter controls component
14
+ */
15
+ export declare const Filters: import("react").NamedExoticComponent<FiltersProps>;
16
+ export {};
17
+ //# sourceMappingURL=filters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../../src/dev/filters.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AACtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAazC,UAAU,YAAY;IACrB,OAAO,EAAE,UAAU,CAAA;IACnB,WAAW,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IACrC,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,gBAAgB,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;IAC7D,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACrC,iBAAiB,EAAE,CAAC,MAAM,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,KAAK,IAAI,CAAA;IAChE,WAAW,EAAE,MAAM,IAAI,CAAA;CACvB;AAED;;GAEG;AACH,eAAO,MAAM,OAAO,oDAwJlB,CAAA"}
@@ -0,0 +1,100 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { memo } from 'react';
4
+ /**
5
+ * Level config for display
6
+ */
7
+ const LEVELS = [
8
+ { level: 'trace', label: 'TRC', color: '#6b7280', bgColor: '#f3f4f6' },
9
+ { level: 'debug', label: 'DBG', color: '#1e40af', bgColor: '#dbeafe' },
10
+ { level: 'info', label: 'INF', color: '#166534', bgColor: '#dcfce7' },
11
+ { level: 'warn', label: 'WRN', color: '#92400e', bgColor: '#fef3c7' },
12
+ { level: 'error', label: 'ERR', color: '#991b1b', bgColor: '#fee2e2' },
13
+ ];
14
+ /**
15
+ * Filter controls component
16
+ */
17
+ export const Filters = memo(function Filters({ filters, levelCounts, onSetLevelFilter, onSetSearch, onSetSourceFilter, onClearLogs, }) {
18
+ const containerStyle = {
19
+ display: 'flex',
20
+ flexDirection: 'column',
21
+ gap: '8px',
22
+ padding: '12px',
23
+ borderBottom: '1px solid rgba(0, 0, 0, 0.1)',
24
+ backgroundColor: '#fafafa',
25
+ };
26
+ const rowStyle = {
27
+ display: 'flex',
28
+ alignItems: 'center',
29
+ gap: '8px',
30
+ flexWrap: 'wrap',
31
+ };
32
+ const searchInputStyle = {
33
+ flex: 1,
34
+ minWidth: '200px',
35
+ padding: '6px 10px',
36
+ border: '1px solid #e5e7eb',
37
+ borderRadius: '6px',
38
+ fontSize: '13px',
39
+ fontFamily: 'inherit',
40
+ backgroundColor: 'white',
41
+ outline: 'none',
42
+ transition: 'border-color 0.15s ease',
43
+ };
44
+ const buttonGroupStyle = {
45
+ display: 'flex',
46
+ gap: '4px',
47
+ };
48
+ const sourceButtonStyle = (active) => ({
49
+ padding: '4px 10px',
50
+ border: '1px solid #e5e7eb',
51
+ borderRadius: '4px',
52
+ fontSize: '12px',
53
+ fontWeight: 500,
54
+ cursor: 'pointer',
55
+ backgroundColor: active ? '#4f46e5' : 'white',
56
+ color: active ? 'white' : '#374151',
57
+ transition: 'all 0.15s ease',
58
+ });
59
+ const levelButtonStyle = (level, active) => {
60
+ const config = LEVELS.find((l) => l.level === level);
61
+ return {
62
+ display: 'flex',
63
+ alignItems: 'center',
64
+ gap: '4px',
65
+ padding: '4px 8px',
66
+ border: `1px solid ${active ? config.color : '#e5e7eb'}`,
67
+ borderRadius: '4px',
68
+ fontSize: '11px',
69
+ fontWeight: 600,
70
+ cursor: 'pointer',
71
+ backgroundColor: active ? config.bgColor : 'white',
72
+ color: active ? config.color : '#9ca3af',
73
+ opacity: active ? 1 : 0.6,
74
+ transition: 'all 0.15s ease',
75
+ };
76
+ };
77
+ const countBadgeStyle = {
78
+ fontSize: '10px',
79
+ fontWeight: 500,
80
+ opacity: 0.8,
81
+ };
82
+ const clearButtonStyle = {
83
+ marginLeft: 'auto',
84
+ padding: '4px 10px',
85
+ border: '1px solid #fca5a5',
86
+ borderRadius: '4px',
87
+ fontSize: '12px',
88
+ fontWeight: 500,
89
+ cursor: 'pointer',
90
+ backgroundColor: 'white',
91
+ color: '#dc2626',
92
+ transition: 'all 0.15s ease',
93
+ };
94
+ return (_jsxs("div", { style: containerStyle, children: [_jsxs("div", { style: rowStyle, children: [_jsx("input", { type: "text", placeholder: "Search logs...", value: filters.search, onChange: (e) => onSetSearch(e.target.value), style: searchInputStyle, onFocus: (e) => {
95
+ e.target.style.borderColor = '#4f46e5';
96
+ }, onBlur: (e) => {
97
+ e.target.style.borderColor = '#e5e7eb';
98
+ } }), _jsxs("div", { style: buttonGroupStyle, children: [_jsx("button", { style: sourceButtonStyle(filters.source === 'all'), onClick: () => onSetSourceFilter('all'), children: "All" }), _jsx("button", { style: sourceButtonStyle(filters.source === 'client'), onClick: () => onSetSourceFilter('client'), children: "Client" }), _jsx("button", { style: sourceButtonStyle(filters.source === 'server'), onClick: () => onSetSourceFilter('server'), children: "Server" })] }), _jsx("button", { style: clearButtonStyle, onClick: onClearLogs, title: "Clear all logs", children: "Clear" })] }), _jsx("div", { style: rowStyle, children: LEVELS.map(({ level, label }) => (_jsxs("button", { style: levelButtonStyle(level, filters.levels.has(level)), onClick: () => onSetLevelFilter(level, !filters.levels.has(level)), title: `Toggle ${level} logs`, children: [_jsx("span", { children: label }), _jsxs("span", { style: countBadgeStyle, children: ["(", levelCounts[level], ")"] })] }, level))) })] }));
99
+ });
100
+ //# sourceMappingURL=filters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filters.js","sourceRoot":"","sources":["../../src/dev/filters.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import type { LogLevel } from 'vestig';
2
+ import { type DevLogEntry, type LogFilters } from '../store';
3
+ /**
4
+ * Hook to subscribe to log store
5
+ *
6
+ * Uses simple useState + useEffect pattern - React Compiler handles memoization.
7
+ */
8
+ export declare function useLogStore(): {
9
+ logs: DevLogEntry[];
10
+ isOpen: boolean;
11
+ filters: LogFilters;
12
+ namespaces: string[];
13
+ levelCounts: Record<LogLevel, number>;
14
+ toggleOpen: () => void;
15
+ setOpen: (isOpen: boolean) => void;
16
+ clearLogs: () => void;
17
+ setLevelFilter: (level: LogLevel, enabled: boolean) => void;
18
+ toggleAllLevels: (enabled: boolean) => void;
19
+ setNamespaceFilter: (namespace: string, enabled: boolean) => void;
20
+ setSearch: (search: string) => void;
21
+ setSourceFilter: (source: "all" | "client" | "server") => void;
22
+ };
23
+ /**
24
+ * SSE connection state
25
+ */
26
+ type ConnectionState = 'connecting' | 'connected' | 'disconnected' | 'error';
27
+ /**
28
+ * Hook to connect to SSE log stream
29
+ */
30
+ export declare function useServerLogs(options: {
31
+ endpoint?: string;
32
+ enabled?: boolean;
33
+ reconnectDelay?: number;
34
+ maxReconnectAttempts?: number;
35
+ }): {
36
+ connect: () => void;
37
+ disconnect: () => void;
38
+ isConnected: boolean;
39
+ connectionState: ConnectionState;
40
+ };
41
+ /**
42
+ * Hook to capture client-side logs
43
+ */
44
+ export declare function useClientLogCapture(options?: {
45
+ enabled?: boolean;
46
+ }): void;
47
+ /**
48
+ * Hook for keyboard shortcuts
49
+ */
50
+ export declare function useDevOverlayShortcuts(options?: {
51
+ toggleKey?: string;
52
+ enabled?: boolean;
53
+ }): void;
54
+ export {};
55
+ //# sourceMappingURL=use-logs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-logs.d.ts","sourceRoot":"","sources":["../../../src/dev/hooks/use-logs.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AACtC,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAgC,MAAM,UAAU,CAAA;AAE1F;;;;GAIG;AACH,wBAAgB,WAAW;;;;;;;sBA0BP,OAAO;;4BAED,QAAQ,WAAW,OAAO;+BACvB,OAAO;oCACF,MAAM,WAAW,OAAO;wBAEpC,MAAM;8BACA,KAAK,GAAG,QAAQ,GAAG,QAAQ;EAEtD;AAED;;GAEG;AACH,KAAK,eAAe,GAAG,YAAY,GAAG,WAAW,GAAG,cAAc,GAAG,OAAO,CAAA;AAE5E;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,oBAAoB,CAAC,EAAE,MAAM,CAAA;CAC7B;;;;;EAoIA;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,QAoBtE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,QAwB7F"}