observability-toolkit 1.8.0 → 1.8.4

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 (186) hide show
  1. package/README.md +81 -3
  2. package/dist/backends/index.d.ts +119 -0
  3. package/dist/backends/index.d.ts.map +1 -1
  4. package/dist/backends/index.js +57 -0
  5. package/dist/backends/index.js.map +1 -1
  6. package/dist/backends/index.test.d.ts +5 -0
  7. package/dist/backends/index.test.d.ts.map +1 -0
  8. package/dist/backends/index.test.js +156 -0
  9. package/dist/backends/index.test.js.map +1 -0
  10. package/dist/backends/local-jsonl-boolean-search.test.js +8 -27
  11. package/dist/backends/local-jsonl-boolean-search.test.js.map +1 -1
  12. package/dist/backends/local-jsonl-logs.test.d.ts +2 -0
  13. package/dist/backends/local-jsonl-logs.test.d.ts.map +1 -0
  14. package/dist/backends/local-jsonl-logs.test.js +603 -0
  15. package/dist/backends/local-jsonl-logs.test.js.map +1 -0
  16. package/dist/backends/local-jsonl-traces.test.d.ts +2 -0
  17. package/dist/backends/local-jsonl-traces.test.d.ts.map +1 -0
  18. package/dist/backends/local-jsonl-traces.test.js +1723 -0
  19. package/dist/backends/local-jsonl-traces.test.js.map +1 -0
  20. package/dist/backends/local-jsonl.d.ts +4 -1
  21. package/dist/backends/local-jsonl.d.ts.map +1 -1
  22. package/dist/backends/local-jsonl.js +185 -1
  23. package/dist/backends/local-jsonl.js.map +1 -1
  24. package/dist/backends/local-jsonl.test.js +723 -46
  25. package/dist/backends/local-jsonl.test.js.map +1 -1
  26. package/dist/backends/signoz-api.d.ts +32 -0
  27. package/dist/backends/signoz-api.d.ts.map +1 -1
  28. package/dist/backends/signoz-api.js +231 -33
  29. package/dist/backends/signoz-api.js.map +1 -1
  30. package/dist/backends/signoz-api.test.js +410 -63
  31. package/dist/backends/signoz-api.test.js.map +1 -1
  32. package/dist/lib/constants.d.ts +59 -0
  33. package/dist/lib/constants.d.ts.map +1 -1
  34. package/dist/lib/constants.js +252 -6
  35. package/dist/lib/constants.js.map +1 -1
  36. package/dist/lib/constants.test.js +357 -21
  37. package/dist/lib/constants.test.js.map +1 -1
  38. package/dist/lib/edge-cases.test.d.ts +11 -0
  39. package/dist/lib/edge-cases.test.d.ts.map +1 -0
  40. package/dist/lib/edge-cases.test.js +634 -0
  41. package/dist/lib/edge-cases.test.js.map +1 -0
  42. package/dist/lib/error-sanitizer.d.ts +57 -0
  43. package/dist/lib/error-sanitizer.d.ts.map +1 -0
  44. package/dist/lib/error-sanitizer.js +207 -0
  45. package/dist/lib/error-sanitizer.js.map +1 -0
  46. package/dist/lib/error-sanitizer.test.d.ts +8 -0
  47. package/dist/lib/error-sanitizer.test.d.ts.map +1 -0
  48. package/dist/lib/error-sanitizer.test.js +369 -0
  49. package/dist/lib/error-sanitizer.test.js.map +1 -0
  50. package/dist/lib/file-utils.d.ts +134 -0
  51. package/dist/lib/file-utils.d.ts.map +1 -1
  52. package/dist/lib/file-utils.js +395 -9
  53. package/dist/lib/file-utils.js.map +1 -1
  54. package/dist/lib/file-utils.test.js +444 -3
  55. package/dist/lib/file-utils.test.js.map +1 -1
  56. package/dist/lib/indexer.d.ts +9 -1
  57. package/dist/lib/indexer.d.ts.map +1 -1
  58. package/dist/lib/indexer.js +51 -2
  59. package/dist/lib/indexer.js.map +1 -1
  60. package/dist/lib/indexer.test.js +138 -20
  61. package/dist/lib/indexer.test.js.map +1 -1
  62. package/dist/lib/input-validator.d.ts +103 -0
  63. package/dist/lib/input-validator.d.ts.map +1 -0
  64. package/dist/lib/input-validator.js +250 -0
  65. package/dist/lib/input-validator.js.map +1 -0
  66. package/dist/lib/input-validator.test.d.ts +2 -0
  67. package/dist/lib/input-validator.test.d.ts.map +1 -0
  68. package/dist/lib/input-validator.test.js +287 -0
  69. package/dist/lib/input-validator.test.js.map +1 -0
  70. package/dist/lib/query-sanitizer.d.ts +143 -0
  71. package/dist/lib/query-sanitizer.d.ts.map +1 -0
  72. package/dist/lib/query-sanitizer.js +261 -0
  73. package/dist/lib/query-sanitizer.js.map +1 -0
  74. package/dist/lib/query-sanitizer.test.d.ts +5 -0
  75. package/dist/lib/query-sanitizer.test.d.ts.map +1 -0
  76. package/dist/lib/query-sanitizer.test.js +400 -0
  77. package/dist/lib/query-sanitizer.test.js.map +1 -0
  78. package/dist/lib/server-utils.d.ts +80 -0
  79. package/dist/lib/server-utils.d.ts.map +1 -0
  80. package/dist/lib/server-utils.js +141 -0
  81. package/dist/lib/server-utils.js.map +1 -0
  82. package/dist/lib/shared-schemas.d.ts +59 -0
  83. package/dist/lib/shared-schemas.d.ts.map +1 -0
  84. package/dist/lib/shared-schemas.js +58 -0
  85. package/dist/lib/shared-schemas.js.map +1 -0
  86. package/dist/lib/shared-schemas.test.d.ts +5 -0
  87. package/dist/lib/shared-schemas.test.d.ts.map +1 -0
  88. package/dist/lib/shared-schemas.test.js +106 -0
  89. package/dist/lib/shared-schemas.test.js.map +1 -0
  90. package/dist/lib/toon-encoder.d.ts +21 -0
  91. package/dist/lib/toon-encoder.d.ts.map +1 -0
  92. package/dist/lib/toon-encoder.js +46 -0
  93. package/dist/lib/toon-encoder.js.map +1 -0
  94. package/dist/server.d.ts +1 -1
  95. package/dist/server.d.ts.map +1 -1
  96. package/dist/server.js +155 -81
  97. package/dist/server.js.map +1 -1
  98. package/dist/server.test.js +363 -0
  99. package/dist/server.test.js.map +1 -1
  100. package/dist/test-helpers/env-utils.d.ts +65 -0
  101. package/dist/test-helpers/env-utils.d.ts.map +1 -0
  102. package/dist/test-helpers/env-utils.js +94 -0
  103. package/dist/test-helpers/env-utils.js.map +1 -0
  104. package/dist/test-helpers/file-utils.d.ts +93 -0
  105. package/dist/test-helpers/file-utils.d.ts.map +1 -0
  106. package/dist/test-helpers/file-utils.js +206 -0
  107. package/dist/test-helpers/file-utils.js.map +1 -0
  108. package/dist/test-helpers/index.d.ts +10 -0
  109. package/dist/test-helpers/index.d.ts.map +1 -0
  110. package/dist/test-helpers/index.js +28 -0
  111. package/dist/test-helpers/index.js.map +1 -0
  112. package/dist/test-helpers/mock-backends.d.ts +139 -0
  113. package/dist/test-helpers/mock-backends.d.ts.map +1 -0
  114. package/dist/test-helpers/mock-backends.js +227 -0
  115. package/dist/test-helpers/mock-backends.js.map +1 -0
  116. package/dist/test-helpers/mock-backends.test.d.ts +5 -0
  117. package/dist/test-helpers/mock-backends.test.d.ts.map +1 -0
  118. package/dist/test-helpers/mock-backends.test.js +368 -0
  119. package/dist/test-helpers/mock-backends.test.js.map +1 -0
  120. package/dist/test-helpers/schema-validators.d.ts +32 -0
  121. package/dist/test-helpers/schema-validators.d.ts.map +1 -0
  122. package/dist/test-helpers/schema-validators.js +125 -0
  123. package/dist/test-helpers/schema-validators.js.map +1 -0
  124. package/dist/test-helpers/test-data-builders.d.ts +223 -0
  125. package/dist/test-helpers/test-data-builders.d.ts.map +1 -0
  126. package/dist/test-helpers/test-data-builders.js +288 -0
  127. package/dist/test-helpers/test-data-builders.js.map +1 -0
  128. package/dist/test-helpers/test-data-builders.test.d.ts +2 -0
  129. package/dist/test-helpers/test-data-builders.test.d.ts.map +1 -0
  130. package/dist/test-helpers/test-data-builders.test.js +306 -0
  131. package/dist/test-helpers/test-data-builders.test.js.map +1 -0
  132. package/dist/test-helpers/tool-validators.d.ts +28 -0
  133. package/dist/test-helpers/tool-validators.d.ts.map +1 -0
  134. package/dist/test-helpers/tool-validators.js +56 -0
  135. package/dist/test-helpers/tool-validators.js.map +1 -0
  136. package/dist/tools/context-stats.d.ts +1 -0
  137. package/dist/tools/context-stats.d.ts.map +1 -1
  138. package/dist/tools/context-stats.js +9 -5
  139. package/dist/tools/context-stats.js.map +1 -1
  140. package/dist/tools/context-stats.test.js +24 -10
  141. package/dist/tools/context-stats.test.js.map +1 -1
  142. package/dist/tools/get-trace-url.js +2 -2
  143. package/dist/tools/get-trace-url.js.map +1 -1
  144. package/dist/tools/health-check.js +2 -2
  145. package/dist/tools/health-check.js.map +1 -1
  146. package/dist/tools/index.d.ts +1 -0
  147. package/dist/tools/index.d.ts.map +1 -1
  148. package/dist/tools/index.js +1 -0
  149. package/dist/tools/index.js.map +1 -1
  150. package/dist/tools/query-evaluations.d.ts +186 -0
  151. package/dist/tools/query-evaluations.d.ts.map +1 -0
  152. package/dist/tools/query-evaluations.js +351 -0
  153. package/dist/tools/query-evaluations.js.map +1 -0
  154. package/dist/tools/query-evaluations.test.d.ts +5 -0
  155. package/dist/tools/query-evaluations.test.d.ts.map +1 -0
  156. package/dist/tools/query-evaluations.test.js +733 -0
  157. package/dist/tools/query-evaluations.test.js.map +1 -0
  158. package/dist/tools/query-llm-events.d.ts +24 -18
  159. package/dist/tools/query-llm-events.d.ts.map +1 -1
  160. package/dist/tools/query-llm-events.js +103 -60
  161. package/dist/tools/query-llm-events.js.map +1 -1
  162. package/dist/tools/query-llm-events.test.js +271 -9
  163. package/dist/tools/query-llm-events.test.js.map +1 -1
  164. package/dist/tools/query-logs.d.ts +28 -20
  165. package/dist/tools/query-logs.d.ts.map +1 -1
  166. package/dist/tools/query-logs.js +85 -61
  167. package/dist/tools/query-logs.js.map +1 -1
  168. package/dist/tools/query-logs.test.js +74 -145
  169. package/dist/tools/query-logs.test.js.map +1 -1
  170. package/dist/tools/query-metrics.d.ts +20 -20
  171. package/dist/tools/query-metrics.d.ts.map +1 -1
  172. package/dist/tools/query-metrics.js +109 -61
  173. package/dist/tools/query-metrics.js.map +1 -1
  174. package/dist/tools/query-metrics.test.js +26 -61
  175. package/dist/tools/query-metrics.test.js.map +1 -1
  176. package/dist/tools/query-traces.d.ts +24 -22
  177. package/dist/tools/query-traces.d.ts.map +1 -1
  178. package/dist/tools/query-traces.js +95 -70
  179. package/dist/tools/query-traces.js.map +1 -1
  180. package/dist/tools/query-traces.test.js +294 -90
  181. package/dist/tools/query-traces.test.js.map +1 -1
  182. package/dist/tools/setup-claudeignore.js +7 -7
  183. package/dist/tools/setup-claudeignore.js.map +1 -1
  184. package/dist/tools/setup-claudeignore.test.js +4 -25
  185. package/dist/tools/setup-claudeignore.test.js.map +1 -1
  186. package/package.json +3 -4
@@ -0,0 +1,227 @@
1
+ /**
2
+ * Shared mock backend factories for testing
3
+ *
4
+ * Provides type-safe factory functions for creating mock TelemetryBackend instances.
5
+ * Uses discriminated unions and type-specific stores to avoid unsafe type assertions.
6
+ */
7
+ // ============================================================================
8
+ // Type Guards
9
+ // ============================================================================
10
+ /**
11
+ * Type guard to check if an object has required TraceSpan properties.
12
+ * Accepts both raw OTel format (startTimeUnixNano) and normalized format (durationMs).
13
+ * For mock data in tests, we only require the core identifiers.
14
+ */
15
+ function isTraceSpan(obj) {
16
+ if (typeof obj !== 'object' || obj === null)
17
+ return false;
18
+ const span = obj;
19
+ // Core required fields
20
+ if (typeof span.traceId !== 'string' || typeof span.spanId !== 'string' || typeof span.name !== 'string') {
21
+ return false;
22
+ }
23
+ // Accept if either startTimeUnixNano (raw) or durationMs (normalized) is present
24
+ const hasStartTime = typeof span.startTimeUnixNano === 'number';
25
+ const hasDuration = typeof span.durationMs === 'number';
26
+ return hasStartTime || hasDuration;
27
+ }
28
+ /**
29
+ * Type guard to check if an object has required LogRecord properties.
30
+ */
31
+ function isLogRecord(obj) {
32
+ if (typeof obj !== 'object' || obj === null)
33
+ return false;
34
+ const log = obj;
35
+ return (typeof log.timestamp === 'string' &&
36
+ typeof log.severity === 'string' &&
37
+ typeof log.body === 'string');
38
+ }
39
+ /**
40
+ * Type guard to check if an object has required MetricDataPoint properties.
41
+ */
42
+ function isMetricDataPoint(obj) {
43
+ if (typeof obj !== 'object' || obj === null)
44
+ return false;
45
+ const metric = obj;
46
+ return (typeof metric.timestamp === 'string' &&
47
+ typeof metric.name === 'string' &&
48
+ typeof metric.value === 'number');
49
+ }
50
+ // ============================================================================
51
+ // Type-Safe Factory Functions
52
+ // ============================================================================
53
+ /**
54
+ * Create a type-safe mock backend for trace data
55
+ * @param store - Type-safe trace data store
56
+ * @param source - Which source to read from ('local' or 'signoz')
57
+ */
58
+ export function createTraceBackend(store, source) {
59
+ const data = store[source];
60
+ return {
61
+ name: `mock-${source}`,
62
+ queryTraces: async () => data,
63
+ queryLogs: async () => [],
64
+ queryMetrics: async () => [],
65
+ healthCheck: async () => ({ status: 'ok' }),
66
+ };
67
+ }
68
+ /**
69
+ * Create a type-safe mock backend for log data
70
+ * @param store - Type-safe log data store
71
+ * @param source - Which source to read from ('local' or 'signoz')
72
+ */
73
+ export function createLogBackend(store, source) {
74
+ const data = store[source];
75
+ return {
76
+ name: `mock-${source}`,
77
+ queryTraces: async () => [],
78
+ queryLogs: async () => data,
79
+ queryMetrics: async () => [],
80
+ healthCheck: async () => ({ status: 'ok' }),
81
+ };
82
+ }
83
+ /**
84
+ * Create a type-safe mock backend for metric data
85
+ * @param store - Type-safe metric data store
86
+ * @param source - Which source to read from ('local' or 'signoz')
87
+ */
88
+ export function createMetricBackend(store, source) {
89
+ const data = store[source];
90
+ return {
91
+ name: `mock-${source}`,
92
+ queryTraces: async () => [],
93
+ queryLogs: async () => [],
94
+ queryMetrics: async () => data,
95
+ healthCheck: async () => ({ status: 'ok' }),
96
+ };
97
+ }
98
+ /**
99
+ * Get type-safe mock options for trace backends
100
+ * @param store - Type-safe trace data store
101
+ */
102
+ export function getTraceBackendOptions(store) {
103
+ return {
104
+ localBackend: createTraceBackend(store, 'local'),
105
+ signozBackend: createTraceBackend(store, 'signoz'),
106
+ };
107
+ }
108
+ /**
109
+ * Get type-safe mock options for log backends
110
+ * @param store - Type-safe log data store
111
+ */
112
+ export function getLogBackendOptions(store) {
113
+ return {
114
+ localBackend: createLogBackend(store, 'local'),
115
+ signozBackend: createLogBackend(store, 'signoz'),
116
+ };
117
+ }
118
+ /**
119
+ * Get type-safe mock options for metric backends
120
+ * @param store - Type-safe metric data store
121
+ */
122
+ export function getMetricBackendOptions(store) {
123
+ return {
124
+ localBackend: createMetricBackend(store, 'local'),
125
+ signozBackend: createMetricBackend(store, 'signoz'),
126
+ };
127
+ }
128
+ /**
129
+ * Create a type-safe mock backend for LLM event data
130
+ * @param store - Type-safe LLM event data store
131
+ * @param source - Which source to read from ('local' or 'signoz')
132
+ */
133
+ export function createLLMEventBackend(store, source) {
134
+ const data = store[source];
135
+ return {
136
+ name: `mock-${source}`,
137
+ queryTraces: async () => [],
138
+ queryLogs: async () => [],
139
+ queryMetrics: async () => [],
140
+ queryLLMEvents: async () => data,
141
+ healthCheck: async () => ({ status: 'ok' }),
142
+ };
143
+ }
144
+ /**
145
+ * Create a type-safe mock backend for evaluation data
146
+ * @param store - Type-safe evaluation data store
147
+ * @param source - Which source to read from ('local' or 'signoz')
148
+ */
149
+ export function createEvaluationBackend(store, source) {
150
+ const data = store[source];
151
+ return {
152
+ name: `mock-${source}`,
153
+ queryTraces: async () => [],
154
+ queryLogs: async () => [],
155
+ queryMetrics: async () => [],
156
+ queryEvaluations: async () => data,
157
+ healthCheck: async () => ({ status: 'ok' }),
158
+ };
159
+ }
160
+ /**
161
+ * Get type-safe mock options for LLM event backends
162
+ * @param store - Type-safe LLM event data store
163
+ */
164
+ export function getLLMEventBackendOptions(store) {
165
+ return {
166
+ localBackend: createLLMEventBackend(store, 'local'),
167
+ };
168
+ }
169
+ /**
170
+ * Get type-safe mock options for evaluation backends
171
+ * @param store - Type-safe evaluation data store
172
+ */
173
+ export function getEvaluationBackendOptions(store) {
174
+ return {
175
+ localBackend: createEvaluationBackend(store, 'local'),
176
+ };
177
+ }
178
+ // ============================================================================
179
+ // Backward Compatible Functions (with runtime validation)
180
+ // ============================================================================
181
+ /**
182
+ * Create a mock TelemetryBackend that returns data from a mock store
183
+ * Uses runtime type guards to safely convert generic data to specific types.
184
+ *
185
+ * @param store - Mock data store with local and signoz arrays
186
+ * @param dataType - Type of data this backend returns
187
+ * @param source - Which source to read from ('local' or 'signoz')
188
+ * @deprecated Use type-specific factories (createTraceBackend, createLogBackend, createMetricBackend) for compile-time type safety
189
+ */
190
+ export function createMockBackend(store, dataType, source) {
191
+ const data = store[source];
192
+ return {
193
+ name: `mock-${source}`,
194
+ queryTraces: async () => {
195
+ if (dataType !== 'traces')
196
+ return [];
197
+ // Validate each item with type guard
198
+ return data.filter((item) => isTraceSpan(item));
199
+ },
200
+ queryLogs: async () => {
201
+ if (dataType !== 'logs')
202
+ return [];
203
+ // Validate each item with type guard
204
+ return data.filter((item) => isLogRecord(item));
205
+ },
206
+ queryMetrics: async () => {
207
+ if (dataType !== 'metrics')
208
+ return [];
209
+ // Validate each item with type guard
210
+ return data.filter((item) => isMetricDataPoint(item));
211
+ },
212
+ healthCheck: async () => ({ status: 'ok' }),
213
+ };
214
+ }
215
+ /**
216
+ * Get mock options with both local and signoz backends
217
+ * @param store - Mock data store with local and signoz arrays
218
+ * @param dataType - Type of data these backends return
219
+ * @deprecated Use type-specific options (getTraceBackendOptions, getLogBackendOptions, getMetricBackendOptions) for compile-time type safety
220
+ */
221
+ export function getMockOptions(store, dataType) {
222
+ return {
223
+ localBackend: createMockBackend(store, dataType, 'local'),
224
+ signozBackend: createMockBackend(store, dataType, 'signoz'),
225
+ };
226
+ }
227
+ //# sourceMappingURL=mock-backends.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-backends.js","sourceRoot":"","sources":["../../src/test-helpers/mock-backends.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Tests for mock backend factories
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=mock-backends.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-backends.test.d.ts","sourceRoot":"","sources":["../../src/test-helpers/mock-backends.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,368 @@
1
+ /**
2
+ * Tests for mock backend factories
3
+ */
4
+ import { describe, it } from 'node:test';
5
+ import * as assert from 'node:assert';
6
+ import {
7
+ // Type-specific factories
8
+ createTraceBackend, createLogBackend, createMetricBackend, getTraceBackendOptions, getLogBackendOptions, getMetricBackendOptions,
9
+ // Legacy generic factories
10
+ createMockBackend, getMockOptions, } from './mock-backends.js';
11
+ // ============================================================================
12
+ // Test Data
13
+ // ============================================================================
14
+ const mockTraceSpan = {
15
+ traceId: 'trace-123',
16
+ spanId: 'span-456',
17
+ name: 'test-span',
18
+ startTimeUnixNano: 1700000000000000000,
19
+ durationMs: 1000,
20
+ };
21
+ const mockLogRecord = {
22
+ timestamp: '2023-11-14T22:13:20.000Z',
23
+ severity: 'INFO',
24
+ body: 'Test log message',
25
+ };
26
+ const mockMetricDataPoint = {
27
+ timestamp: '2023-11-14T22:13:20.000Z',
28
+ name: 'test.metric',
29
+ value: 100,
30
+ };
31
+ // ============================================================================
32
+ // Type-Specific Factory Tests
33
+ // ============================================================================
34
+ describe('mock-backends: createTraceBackend', () => {
35
+ it('should return traces from local store', async () => {
36
+ const store = {
37
+ local: [mockTraceSpan],
38
+ signoz: [],
39
+ };
40
+ const backend = createTraceBackend(store, 'local');
41
+ const traces = await backend.queryTraces({});
42
+ assert.strictEqual(traces.length, 1);
43
+ assert.strictEqual(traces[0].traceId, 'trace-123');
44
+ });
45
+ it('should return traces from signoz store', async () => {
46
+ const store = {
47
+ local: [],
48
+ signoz: [mockTraceSpan],
49
+ };
50
+ const backend = createTraceBackend(store, 'signoz');
51
+ const traces = await backend.queryTraces({});
52
+ assert.strictEqual(traces.length, 1);
53
+ assert.strictEqual(traces[0].spanId, 'span-456');
54
+ });
55
+ it('should return empty arrays for other query types', async () => {
56
+ const store = {
57
+ local: [mockTraceSpan],
58
+ signoz: [],
59
+ };
60
+ const backend = createTraceBackend(store, 'local');
61
+ const logs = await backend.queryLogs({});
62
+ const metrics = await backend.queryMetrics({});
63
+ assert.strictEqual(logs.length, 0);
64
+ assert.strictEqual(metrics.length, 0);
65
+ });
66
+ it('should return healthy status', async () => {
67
+ const store = { local: [], signoz: [] };
68
+ const backend = createTraceBackend(store, 'local');
69
+ const health = await backend.healthCheck();
70
+ assert.strictEqual(health.status, 'ok');
71
+ });
72
+ it('should set correct backend name', () => {
73
+ const store = { local: [], signoz: [] };
74
+ const localBackend = createTraceBackend(store, 'local');
75
+ const signozBackend = createTraceBackend(store, 'signoz');
76
+ assert.strictEqual(localBackend.name, 'mock-local');
77
+ assert.strictEqual(signozBackend.name, 'mock-signoz');
78
+ });
79
+ });
80
+ describe('mock-backends: createLogBackend', () => {
81
+ it('should return logs from local store', async () => {
82
+ const store = {
83
+ local: [mockLogRecord],
84
+ signoz: [],
85
+ };
86
+ const backend = createLogBackend(store, 'local');
87
+ const logs = await backend.queryLogs({});
88
+ assert.strictEqual(logs.length, 1);
89
+ assert.strictEqual(logs[0].body, 'Test log message');
90
+ });
91
+ it('should return logs from signoz store', async () => {
92
+ const store = {
93
+ local: [],
94
+ signoz: [mockLogRecord],
95
+ };
96
+ const backend = createLogBackend(store, 'signoz');
97
+ const logs = await backend.queryLogs({});
98
+ assert.strictEqual(logs.length, 1);
99
+ assert.strictEqual(logs[0].severity, 'INFO');
100
+ });
101
+ it('should return empty arrays for other query types', async () => {
102
+ const store = {
103
+ local: [mockLogRecord],
104
+ signoz: [],
105
+ };
106
+ const backend = createLogBackend(store, 'local');
107
+ const traces = await backend.queryTraces({});
108
+ const metrics = await backend.queryMetrics({});
109
+ assert.strictEqual(traces.length, 0);
110
+ assert.strictEqual(metrics.length, 0);
111
+ });
112
+ });
113
+ describe('mock-backends: createMetricBackend', () => {
114
+ it('should return metrics from local store', async () => {
115
+ const store = {
116
+ local: [mockMetricDataPoint],
117
+ signoz: [],
118
+ };
119
+ const backend = createMetricBackend(store, 'local');
120
+ const metrics = await backend.queryMetrics({});
121
+ assert.strictEqual(metrics.length, 1);
122
+ assert.strictEqual(metrics[0].name, 'test.metric');
123
+ });
124
+ it('should return metrics from signoz store', async () => {
125
+ const store = {
126
+ local: [],
127
+ signoz: [mockMetricDataPoint],
128
+ };
129
+ const backend = createMetricBackend(store, 'signoz');
130
+ const metrics = await backend.queryMetrics({});
131
+ assert.strictEqual(metrics.length, 1);
132
+ assert.strictEqual(metrics[0].value, 100);
133
+ });
134
+ it('should return empty arrays for other query types', async () => {
135
+ const store = {
136
+ local: [mockMetricDataPoint],
137
+ signoz: [],
138
+ };
139
+ const backend = createMetricBackend(store, 'local');
140
+ const traces = await backend.queryTraces({});
141
+ const logs = await backend.queryLogs({});
142
+ assert.strictEqual(traces.length, 0);
143
+ assert.strictEqual(logs.length, 0);
144
+ });
145
+ });
146
+ // ============================================================================
147
+ // Type-Specific Options Tests
148
+ // ============================================================================
149
+ describe('mock-backends: getTraceBackendOptions', () => {
150
+ it('should return both local and signoz backends', () => {
151
+ const store = {
152
+ local: [mockTraceSpan],
153
+ signoz: [],
154
+ };
155
+ const options = getTraceBackendOptions(store);
156
+ assert.ok(options.localBackend);
157
+ assert.ok(options.signozBackend);
158
+ assert.strictEqual(options.localBackend.name, 'mock-local');
159
+ assert.strictEqual(options.signozBackend.name, 'mock-signoz');
160
+ });
161
+ it('should return traces from correct backend', async () => {
162
+ const localSpan = { ...mockTraceSpan, traceId: 'local-trace' };
163
+ const signozSpan = { ...mockTraceSpan, traceId: 'signoz-trace' };
164
+ const store = {
165
+ local: [localSpan],
166
+ signoz: [signozSpan],
167
+ };
168
+ const options = getTraceBackendOptions(store);
169
+ const localTraces = await options.localBackend.queryTraces({});
170
+ const signozTraces = await options.signozBackend.queryTraces({});
171
+ assert.strictEqual(localTraces[0].traceId, 'local-trace');
172
+ assert.strictEqual(signozTraces[0].traceId, 'signoz-trace');
173
+ });
174
+ });
175
+ describe('mock-backends: getLogBackendOptions', () => {
176
+ it('should return both local and signoz backends', () => {
177
+ const store = {
178
+ local: [mockLogRecord],
179
+ signoz: [],
180
+ };
181
+ const options = getLogBackendOptions(store);
182
+ assert.ok(options.localBackend);
183
+ assert.ok(options.signozBackend);
184
+ });
185
+ it('should return logs from correct backend', async () => {
186
+ const localLog = { ...mockLogRecord, body: 'local log' };
187
+ const signozLog = { ...mockLogRecord, body: 'signoz log' };
188
+ const store = {
189
+ local: [localLog],
190
+ signoz: [signozLog],
191
+ };
192
+ const options = getLogBackendOptions(store);
193
+ const localLogs = await options.localBackend.queryLogs({});
194
+ const signozLogs = await options.signozBackend.queryLogs({});
195
+ assert.strictEqual(localLogs[0].body, 'local log');
196
+ assert.strictEqual(signozLogs[0].body, 'signoz log');
197
+ });
198
+ });
199
+ describe('mock-backends: getMetricBackendOptions', () => {
200
+ it('should return both local and signoz backends', () => {
201
+ const store = {
202
+ local: [mockMetricDataPoint],
203
+ signoz: [],
204
+ };
205
+ const options = getMetricBackendOptions(store);
206
+ assert.ok(options.localBackend);
207
+ assert.ok(options.signozBackend);
208
+ });
209
+ it('should return metrics from correct backend', async () => {
210
+ const localMetric = { ...mockMetricDataPoint, value: 100 };
211
+ const signozMetric = { ...mockMetricDataPoint, value: 200 };
212
+ const store = {
213
+ local: [localMetric],
214
+ signoz: [signozMetric],
215
+ };
216
+ const options = getMetricBackendOptions(store);
217
+ const localMetrics = await options.localBackend.queryMetrics({});
218
+ const signozMetrics = await options.signozBackend.queryMetrics({});
219
+ assert.strictEqual(localMetrics[0].value, 100);
220
+ assert.strictEqual(signozMetrics[0].value, 200);
221
+ });
222
+ });
223
+ // ============================================================================
224
+ // Legacy Generic Factory Tests (Backward Compatibility)
225
+ // ============================================================================
226
+ describe('mock-backends: createMockBackend (legacy)', () => {
227
+ it('should return traces with runtime validation', async () => {
228
+ const store = {
229
+ local: [mockTraceSpan],
230
+ signoz: [],
231
+ };
232
+ const backend = createMockBackend(store, 'traces', 'local');
233
+ const traces = await backend.queryTraces({});
234
+ assert.strictEqual(traces.length, 1);
235
+ assert.strictEqual(traces[0].traceId, 'trace-123');
236
+ });
237
+ it('should return logs with runtime validation', async () => {
238
+ const store = {
239
+ local: [mockLogRecord],
240
+ signoz: [],
241
+ };
242
+ const backend = createMockBackend(store, 'logs', 'local');
243
+ const logs = await backend.queryLogs({});
244
+ assert.strictEqual(logs.length, 1);
245
+ assert.strictEqual(logs[0].body, 'Test log message');
246
+ });
247
+ it('should return metrics with runtime validation', async () => {
248
+ const store = {
249
+ local: [mockMetricDataPoint],
250
+ signoz: [],
251
+ };
252
+ const backend = createMockBackend(store, 'metrics', 'local');
253
+ const metrics = await backend.queryMetrics({});
254
+ assert.strictEqual(metrics.length, 1);
255
+ assert.strictEqual(metrics[0].name, 'test.metric');
256
+ });
257
+ it('should filter out invalid data with type guards', async () => {
258
+ // Intentionally pass invalid data to test type guards
259
+ const invalidData = [
260
+ { invalid: true },
261
+ mockTraceSpan,
262
+ { alsoinvalid: 'yes' },
263
+ ];
264
+ const store = {
265
+ local: invalidData,
266
+ signoz: [],
267
+ };
268
+ const backend = createMockBackend(store, 'traces', 'local');
269
+ const traces = await backend.queryTraces({});
270
+ // Only the valid TraceSpan should pass the type guard
271
+ assert.strictEqual(traces.length, 1);
272
+ assert.strictEqual(traces[0].traceId, 'trace-123');
273
+ });
274
+ it('should return empty array for mismatched data types', async () => {
275
+ const store = {
276
+ local: [mockTraceSpan],
277
+ signoz: [],
278
+ };
279
+ const backend = createMockBackend(store, 'traces', 'local');
280
+ // Query for logs on a trace backend
281
+ const logs = await backend.queryLogs({});
282
+ assert.strictEqual(logs.length, 0);
283
+ });
284
+ });
285
+ describe('mock-backends: getMockOptions (legacy)', () => {
286
+ it('should return both local and signoz backends', () => {
287
+ const store = {
288
+ local: [mockTraceSpan],
289
+ signoz: [],
290
+ };
291
+ const options = getMockOptions(store, 'traces');
292
+ assert.ok(options.localBackend);
293
+ assert.ok(options.signozBackend);
294
+ });
295
+ it('should work with traces', async () => {
296
+ const store = {
297
+ local: [mockTraceSpan],
298
+ signoz: [],
299
+ };
300
+ const options = getMockOptions(store, 'traces');
301
+ const traces = await options.localBackend.queryTraces({});
302
+ assert.strictEqual(traces.length, 1);
303
+ });
304
+ it('should work with logs', async () => {
305
+ const store = {
306
+ local: [mockLogRecord],
307
+ signoz: [],
308
+ };
309
+ const options = getMockOptions(store, 'logs');
310
+ const logs = await options.localBackend.queryLogs({});
311
+ assert.strictEqual(logs.length, 1);
312
+ });
313
+ it('should work with metrics', async () => {
314
+ const store = {
315
+ local: [mockMetricDataPoint],
316
+ signoz: [],
317
+ };
318
+ const options = getMockOptions(store, 'metrics');
319
+ const metrics = await options.localBackend.queryMetrics({});
320
+ assert.strictEqual(metrics.length, 1);
321
+ });
322
+ });
323
+ // ============================================================================
324
+ // Type Guard Edge Cases
325
+ // ============================================================================
326
+ describe('mock-backends: type guard edge cases', () => {
327
+ it('should reject null values', async () => {
328
+ const store = {
329
+ local: [null, undefined, mockTraceSpan],
330
+ signoz: [],
331
+ };
332
+ const backend = createMockBackend(store, 'traces', 'local');
333
+ const traces = await backend.queryTraces({});
334
+ assert.strictEqual(traces.length, 1);
335
+ });
336
+ it('should reject non-object values', async () => {
337
+ const store = {
338
+ local: ['string', 123, true, mockTraceSpan],
339
+ signoz: [],
340
+ };
341
+ const backend = createMockBackend(store, 'traces', 'local');
342
+ const traces = await backend.queryTraces({});
343
+ assert.strictEqual(traces.length, 1);
344
+ });
345
+ it('should validate log record required fields', async () => {
346
+ const incompleteLog = { timestamp: '2023-01-01' }; // missing severity and body
347
+ const store = {
348
+ local: [incompleteLog, mockLogRecord],
349
+ signoz: [],
350
+ };
351
+ const backend = createMockBackend(store, 'logs', 'local');
352
+ const logs = await backend.queryLogs({});
353
+ assert.strictEqual(logs.length, 1);
354
+ assert.strictEqual(logs[0].body, 'Test log message');
355
+ });
356
+ it('should validate metric data point required fields', async () => {
357
+ const incompleteMetric = { timestamp: '2023-01-01', name: 'test' }; // missing value
358
+ const store = {
359
+ local: [incompleteMetric, mockMetricDataPoint],
360
+ signoz: [],
361
+ };
362
+ const backend = createMockBackend(store, 'metrics', 'local');
363
+ const metrics = await backend.queryMetrics({});
364
+ assert.strictEqual(metrics.length, 1);
365
+ assert.strictEqual(metrics[0].name, 'test.metric');
366
+ });
367
+ });
368
+ //# sourceMappingURL=mock-backends.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-backends.test.js","sourceRoot":"","sources":["../../src/test-helpers/mock-backends.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Shared test utilities for validating Zod schemas
3
+ */
4
+ import type { z } from 'zod';
5
+ /**
6
+ * Generate standard backend selection schema tests
7
+ * @param schema - Zod schema with backend field
8
+ * @param schemaName - Name for test descriptions
9
+ */
10
+ export declare function validateBackendSchema(schema: z.ZodType<{
11
+ backend?: string;
12
+ }>, schemaName: string): void;
13
+ /**
14
+ * Generate standard limit parameter validation tests
15
+ * @param schema - Zod schema with limit field
16
+ * @param schemaName - Name for test descriptions
17
+ * @param defaultLimit - Expected default limit value
18
+ * @param maxLimit - Maximum allowed limit (optional, defaults to 1000)
19
+ */
20
+ export declare function validateLimitSchema(schema: z.ZodType<{
21
+ limit?: number;
22
+ }>, schemaName: string, defaultLimit: number, maxLimit?: number): void;
23
+ /**
24
+ * Generate standard date range validation tests
25
+ * @param schema - Zod schema with startDate/endDate fields
26
+ * @param schemaName - Name for test descriptions
27
+ */
28
+ export declare function validateDateRangeSchema(schema: z.ZodType<{
29
+ startDate?: string;
30
+ endDate?: string;
31
+ }>, schemaName: string): void;
32
+ //# sourceMappingURL=schema-validators.d.ts.map