observability-toolkit 1.8.2 → 1.8.5

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 (259) hide show
  1. package/README.md +60 -0
  2. package/dist/backends/index.d.ts +43 -0
  3. package/dist/backends/index.d.ts.map +1 -1
  4. package/dist/backends/index.js +41 -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 +15 -12
  11. package/dist/backends/local-jsonl-boolean-search.test.js.map +1 -1
  12. package/dist/backends/local-jsonl-cache.test.d.ts +2 -0
  13. package/dist/backends/local-jsonl-cache.test.d.ts.map +1 -0
  14. package/dist/backends/local-jsonl-cache.test.js +295 -0
  15. package/dist/backends/local-jsonl-cache.test.js.map +1 -0
  16. package/dist/backends/local-jsonl-circuit-breaker.test.d.ts +2 -0
  17. package/dist/backends/local-jsonl-circuit-breaker.test.d.ts.map +1 -0
  18. package/dist/backends/local-jsonl-circuit-breaker.test.js +180 -0
  19. package/dist/backends/local-jsonl-circuit-breaker.test.js.map +1 -0
  20. package/dist/backends/local-jsonl-export.test.d.ts +2 -0
  21. package/dist/backends/local-jsonl-export.test.d.ts.map +1 -0
  22. package/dist/backends/local-jsonl-export.test.js +704 -0
  23. package/dist/backends/local-jsonl-export.test.js.map +1 -0
  24. package/dist/backends/local-jsonl-index.test.d.ts +2 -0
  25. package/dist/backends/local-jsonl-index.test.d.ts.map +1 -0
  26. package/dist/backends/local-jsonl-index.test.js +554 -0
  27. package/dist/backends/local-jsonl-index.test.js.map +1 -0
  28. package/dist/backends/local-jsonl-logs.test.d.ts +2 -0
  29. package/dist/backends/local-jsonl-logs.test.d.ts.map +1 -0
  30. package/dist/backends/local-jsonl-logs.test.js +612 -0
  31. package/dist/backends/local-jsonl-logs.test.js.map +1 -0
  32. package/dist/backends/local-jsonl-metrics.test.d.ts +2 -0
  33. package/dist/backends/local-jsonl-metrics.test.d.ts.map +1 -0
  34. package/dist/backends/local-jsonl-metrics.test.js +876 -0
  35. package/dist/backends/local-jsonl-metrics.test.js.map +1 -0
  36. package/dist/backends/local-jsonl-traces.test.d.ts +2 -0
  37. package/dist/backends/local-jsonl-traces.test.d.ts.map +1 -0
  38. package/dist/backends/local-jsonl-traces.test.js +1729 -0
  39. package/dist/backends/local-jsonl-traces.test.js.map +1 -0
  40. package/dist/backends/local-jsonl.d.ts +9 -0
  41. package/dist/backends/local-jsonl.d.ts.map +1 -1
  42. package/dist/backends/local-jsonl.js +348 -227
  43. package/dist/backends/local-jsonl.js.map +1 -1
  44. package/dist/backends/local-jsonl.test.js +290 -21
  45. package/dist/backends/local-jsonl.test.js.map +1 -1
  46. package/dist/backends/signoz-api-circuit-breaker.test.d.ts +6 -0
  47. package/dist/backends/signoz-api-circuit-breaker.test.d.ts.map +1 -0
  48. package/dist/backends/signoz-api-circuit-breaker.test.js +548 -0
  49. package/dist/backends/signoz-api-circuit-breaker.test.js.map +1 -0
  50. package/dist/backends/signoz-api-rate-limiter.test.d.ts +6 -0
  51. package/dist/backends/signoz-api-rate-limiter.test.d.ts.map +1 -0
  52. package/dist/backends/signoz-api-rate-limiter.test.js +389 -0
  53. package/dist/backends/signoz-api-rate-limiter.test.js.map +1 -0
  54. package/dist/backends/signoz-api-ssrf.test.d.ts +6 -0
  55. package/dist/backends/signoz-api-ssrf.test.d.ts.map +1 -0
  56. package/dist/backends/signoz-api-ssrf.test.js +216 -0
  57. package/dist/backends/signoz-api-ssrf.test.js.map +1 -0
  58. package/dist/backends/signoz-api-test-helpers.d.ts +80 -0
  59. package/dist/backends/signoz-api-test-helpers.d.ts.map +1 -0
  60. package/dist/backends/signoz-api-test-helpers.js +79 -0
  61. package/dist/backends/signoz-api-test-helpers.js.map +1 -0
  62. package/dist/backends/signoz-api.d.ts +16 -0
  63. package/dist/backends/signoz-api.d.ts.map +1 -1
  64. package/dist/backends/signoz-api.js +71 -9
  65. package/dist/backends/signoz-api.js.map +1 -1
  66. package/dist/backends/signoz-api.test.d.ts +9 -0
  67. package/dist/backends/signoz-api.test.d.ts.map +1 -1
  68. package/dist/backends/signoz-api.test.js +14 -1027
  69. package/dist/backends/signoz-api.test.js.map +1 -1
  70. package/dist/lib/cache.d.ts +47 -1
  71. package/dist/lib/cache.d.ts.map +1 -1
  72. package/dist/lib/cache.js +40 -3
  73. package/dist/lib/cache.js.map +1 -1
  74. package/dist/lib/circuit-breaker.d.ts +83 -0
  75. package/dist/lib/circuit-breaker.d.ts.map +1 -0
  76. package/dist/lib/circuit-breaker.js +125 -0
  77. package/dist/lib/circuit-breaker.js.map +1 -0
  78. package/dist/lib/circuit-breaker.test.d.ts +2 -0
  79. package/dist/lib/circuit-breaker.test.d.ts.map +1 -0
  80. package/dist/lib/circuit-breaker.test.js +263 -0
  81. package/dist/lib/circuit-breaker.test.js.map +1 -0
  82. package/dist/lib/constants-symlink.test.d.ts +12 -0
  83. package/dist/lib/constants-symlink.test.d.ts.map +1 -0
  84. package/dist/lib/constants-symlink.test.js +357 -0
  85. package/dist/lib/constants-symlink.test.js.map +1 -0
  86. package/dist/lib/constants.d.ts +43 -0
  87. package/dist/lib/constants.d.ts.map +1 -1
  88. package/dist/lib/constants.js +154 -24
  89. package/dist/lib/constants.js.map +1 -1
  90. package/dist/lib/constants.test.js +156 -7
  91. package/dist/lib/constants.test.js.map +1 -1
  92. package/dist/lib/edge-cases.test.d.ts +11 -0
  93. package/dist/lib/edge-cases.test.d.ts.map +1 -0
  94. package/dist/lib/edge-cases.test.js +634 -0
  95. package/dist/lib/edge-cases.test.js.map +1 -0
  96. package/dist/lib/error-sanitizer.d.ts.map +1 -1
  97. package/dist/lib/error-sanitizer.js +62 -26
  98. package/dist/lib/error-sanitizer.js.map +1 -1
  99. package/dist/lib/error-sanitizer.test.js +186 -0
  100. package/dist/lib/error-sanitizer.test.js.map +1 -1
  101. package/dist/lib/error-types.d.ts +54 -0
  102. package/dist/lib/error-types.d.ts.map +1 -0
  103. package/dist/lib/error-types.js +154 -0
  104. package/dist/lib/error-types.js.map +1 -0
  105. package/dist/lib/error-types.test.d.ts +2 -0
  106. package/dist/lib/error-types.test.d.ts.map +1 -0
  107. package/dist/lib/error-types.test.js +196 -0
  108. package/dist/lib/error-types.test.js.map +1 -0
  109. package/dist/lib/file-utils.test.js +3 -3
  110. package/dist/lib/file-utils.test.js.map +1 -1
  111. package/dist/lib/indexer.test.js +157 -24
  112. package/dist/lib/indexer.test.js.map +1 -1
  113. package/dist/lib/input-validator.d.ts +17 -0
  114. package/dist/lib/input-validator.d.ts.map +1 -1
  115. package/dist/lib/input-validator.fuzz.test.d.ts +12 -0
  116. package/dist/lib/input-validator.fuzz.test.d.ts.map +1 -0
  117. package/dist/lib/input-validator.fuzz.test.js +290 -0
  118. package/dist/lib/input-validator.fuzz.test.js.map +1 -0
  119. package/dist/lib/input-validator.js +62 -3
  120. package/dist/lib/input-validator.js.map +1 -1
  121. package/dist/lib/input-validator.test.js +129 -1
  122. package/dist/lib/input-validator.test.js.map +1 -1
  123. package/dist/lib/logger.d.ts +46 -0
  124. package/dist/lib/logger.d.ts.map +1 -0
  125. package/dist/lib/logger.js +81 -0
  126. package/dist/lib/logger.js.map +1 -0
  127. package/dist/lib/logger.test.d.ts +2 -0
  128. package/dist/lib/logger.test.d.ts.map +1 -0
  129. package/dist/lib/logger.test.js +122 -0
  130. package/dist/lib/logger.test.js.map +1 -0
  131. package/dist/lib/query-sanitizer.d.ts +51 -3
  132. package/dist/lib/query-sanitizer.d.ts.map +1 -1
  133. package/dist/lib/query-sanitizer.js +105 -31
  134. package/dist/lib/query-sanitizer.js.map +1 -1
  135. package/dist/lib/query-sanitizer.test.js +102 -1
  136. package/dist/lib/query-sanitizer.test.js.map +1 -1
  137. package/dist/lib/server-utils.d.ts +88 -0
  138. package/dist/lib/server-utils.d.ts.map +1 -0
  139. package/dist/lib/server-utils.js +173 -0
  140. package/dist/lib/server-utils.js.map +1 -0
  141. package/dist/lib/shared-schemas.d.ts +81 -0
  142. package/dist/lib/shared-schemas.d.ts.map +1 -0
  143. package/dist/lib/shared-schemas.js +80 -0
  144. package/dist/lib/shared-schemas.js.map +1 -0
  145. package/dist/lib/shared-schemas.test.d.ts +5 -0
  146. package/dist/lib/shared-schemas.test.d.ts.map +1 -0
  147. package/dist/lib/shared-schemas.test.js +106 -0
  148. package/dist/lib/shared-schemas.test.js.map +1 -0
  149. package/dist/lib/toon-encoder.d.ts +26 -0
  150. package/dist/lib/toon-encoder.d.ts.map +1 -0
  151. package/dist/lib/toon-encoder.js +61 -0
  152. package/dist/lib/toon-encoder.js.map +1 -0
  153. package/dist/lib/toon-encoder.test.d.ts +5 -0
  154. package/dist/lib/toon-encoder.test.d.ts.map +1 -0
  155. package/dist/lib/toon-encoder.test.js +85 -0
  156. package/dist/lib/toon-encoder.test.js.map +1 -0
  157. package/dist/server.d.ts +1 -49
  158. package/dist/server.d.ts.map +1 -1
  159. package/dist/server.js +154 -162
  160. package/dist/server.js.map +1 -1
  161. package/dist/server.test.js +198 -7
  162. package/dist/server.test.js.map +1 -1
  163. package/dist/test-helpers/env-utils.d.ts +87 -0
  164. package/dist/test-helpers/env-utils.d.ts.map +1 -0
  165. package/dist/test-helpers/env-utils.js +132 -0
  166. package/dist/test-helpers/env-utils.js.map +1 -0
  167. package/dist/test-helpers/file-utils.d.ts +67 -0
  168. package/dist/test-helpers/file-utils.d.ts.map +1 -1
  169. package/dist/test-helpers/file-utils.js +165 -2
  170. package/dist/test-helpers/file-utils.js.map +1 -1
  171. package/dist/test-helpers/fuzz-generators.d.ts +58 -0
  172. package/dist/test-helpers/fuzz-generators.d.ts.map +1 -0
  173. package/dist/test-helpers/fuzz-generators.js +216 -0
  174. package/dist/test-helpers/fuzz-generators.js.map +1 -0
  175. package/dist/test-helpers/index.d.ts +11 -0
  176. package/dist/test-helpers/index.d.ts.map +1 -0
  177. package/dist/test-helpers/index.js +30 -0
  178. package/dist/test-helpers/index.js.map +1 -0
  179. package/dist/test-helpers/memfs-utils.d.ts +181 -0
  180. package/dist/test-helpers/memfs-utils.d.ts.map +1 -0
  181. package/dist/test-helpers/memfs-utils.js +292 -0
  182. package/dist/test-helpers/memfs-utils.js.map +1 -0
  183. package/dist/test-helpers/memfs-utils.test.d.ts +5 -0
  184. package/dist/test-helpers/memfs-utils.test.d.ts.map +1 -0
  185. package/dist/test-helpers/memfs-utils.test.js +338 -0
  186. package/dist/test-helpers/memfs-utils.test.js.map +1 -0
  187. package/dist/test-helpers/mock-backends.d.ts +113 -2
  188. package/dist/test-helpers/mock-backends.d.ts.map +1 -1
  189. package/dist/test-helpers/mock-backends.js +199 -3
  190. package/dist/test-helpers/mock-backends.js.map +1 -1
  191. package/dist/test-helpers/mock-backends.test.d.ts +5 -0
  192. package/dist/test-helpers/mock-backends.test.d.ts.map +1 -0
  193. package/dist/test-helpers/mock-backends.test.js +368 -0
  194. package/dist/test-helpers/mock-backends.test.js.map +1 -0
  195. package/dist/test-helpers/race-condition-helpers.d.ts +85 -0
  196. package/dist/test-helpers/race-condition-helpers.d.ts.map +1 -0
  197. package/dist/test-helpers/race-condition-helpers.js +279 -0
  198. package/dist/test-helpers/race-condition-helpers.js.map +1 -0
  199. package/dist/test-helpers/schema-validators.d.ts +32 -0
  200. package/dist/test-helpers/schema-validators.d.ts.map +1 -0
  201. package/dist/test-helpers/schema-validators.js +125 -0
  202. package/dist/test-helpers/schema-validators.js.map +1 -0
  203. package/dist/test-helpers/test-data-builders.d.ts +260 -0
  204. package/dist/test-helpers/test-data-builders.d.ts.map +1 -0
  205. package/dist/test-helpers/test-data-builders.js +337 -0
  206. package/dist/test-helpers/test-data-builders.js.map +1 -0
  207. package/dist/test-helpers/test-data-builders.test.d.ts +2 -0
  208. package/dist/test-helpers/test-data-builders.test.d.ts.map +1 -0
  209. package/dist/test-helpers/test-data-builders.test.js +306 -0
  210. package/dist/test-helpers/test-data-builders.test.js.map +1 -0
  211. package/dist/test-helpers/tool-validators.d.ts +28 -0
  212. package/dist/test-helpers/tool-validators.d.ts.map +1 -0
  213. package/dist/test-helpers/tool-validators.js +71 -0
  214. package/dist/test-helpers/tool-validators.js.map +1 -0
  215. package/dist/tools/context-stats.d.ts +1 -0
  216. package/dist/tools/context-stats.d.ts.map +1 -1
  217. package/dist/tools/context-stats.js +9 -5
  218. package/dist/tools/context-stats.js.map +1 -1
  219. package/dist/tools/context-stats.test.js +24 -10
  220. package/dist/tools/context-stats.test.js.map +1 -1
  221. package/dist/tools/get-trace-url.js +2 -2
  222. package/dist/tools/get-trace-url.js.map +1 -1
  223. package/dist/tools/health-check.js +2 -2
  224. package/dist/tools/health-check.js.map +1 -1
  225. package/dist/tools/query-evaluations.d.ts +21 -18
  226. package/dist/tools/query-evaluations.d.ts.map +1 -1
  227. package/dist/tools/query-evaluations.js +33 -19
  228. package/dist/tools/query-evaluations.js.map +1 -1
  229. package/dist/tools/query-evaluations.test.js +60 -63
  230. package/dist/tools/query-evaluations.test.js.map +1 -1
  231. package/dist/tools/query-llm-events.d.ts +19 -15
  232. package/dist/tools/query-llm-events.d.ts.map +1 -1
  233. package/dist/tools/query-llm-events.js +31 -15
  234. package/dist/tools/query-llm-events.js.map +1 -1
  235. package/dist/tools/query-llm-events.test.js +277 -12
  236. package/dist/tools/query-llm-events.test.js.map +1 -1
  237. package/dist/tools/query-logs.d.ts +22 -22
  238. package/dist/tools/query-logs.d.ts.map +1 -1
  239. package/dist/tools/query-logs.js +9 -9
  240. package/dist/tools/query-logs.js.map +1 -1
  241. package/dist/tools/query-logs.test.js +19 -72
  242. package/dist/tools/query-logs.test.js.map +1 -1
  243. package/dist/tools/query-metrics.d.ts +14 -14
  244. package/dist/tools/query-metrics.d.ts.map +1 -1
  245. package/dist/tools/query-metrics.js +9 -9
  246. package/dist/tools/query-metrics.js.map +1 -1
  247. package/dist/tools/query-metrics.test.js +12 -25
  248. package/dist/tools/query-metrics.test.js.map +1 -1
  249. package/dist/tools/query-traces.d.ts +28 -28
  250. package/dist/tools/query-traces.d.ts.map +1 -1
  251. package/dist/tools/query-traces.js +18 -18
  252. package/dist/tools/query-traces.js.map +1 -1
  253. package/dist/tools/query-traces.test.js +58 -54
  254. package/dist/tools/query-traces.test.js.map +1 -1
  255. package/dist/tools/setup-claudeignore.js +7 -7
  256. package/dist/tools/setup-claudeignore.js.map +1 -1
  257. package/dist/tools/setup-claudeignore.test.js +4 -25
  258. package/dist/tools/setup-claudeignore.test.js.map +1 -1
  259. package/package.json +4 -2
@@ -2,6 +2,7 @@
2
2
  * Shared test utilities for file operations
3
3
  */
4
4
  import * as fs from 'fs';
5
+ import * as fsp from 'fs/promises';
5
6
  import * as path from 'path';
6
7
  import * as os from 'os';
7
8
  /**
@@ -12,6 +13,8 @@ import * as os from 'os';
12
13
  export function createTempDir(prefix = 'test-') {
13
14
  return fs.mkdtempSync(path.join(os.tmpdir(), prefix));
14
15
  }
16
+ /** Track cleanup failures for debugging test pollution */
17
+ let cleanupFailureCount = 0;
15
18
  /**
16
19
  * Remove a temporary directory and all its contents
17
20
  * @param dir - Path to the directory to remove
@@ -20,8 +23,37 @@ export function removeTempDir(dir) {
20
23
  try {
21
24
  fs.rmSync(dir, { recursive: true, force: true });
22
25
  }
23
- catch {
24
- // Ignore cleanup errors
26
+ catch (error) {
27
+ cleanupFailureCount++;
28
+ // Log warning to help debug test pollution issues
29
+ console.warn(`[test-cleanup] Failed to remove temp dir (${cleanupFailureCount} total failures): ${dir}`);
30
+ if (error instanceof Error) {
31
+ console.warn(`[test-cleanup] Reason: ${error.message}`);
32
+ }
33
+ }
34
+ }
35
+ /**
36
+ * Get the count of cleanup failures (for test diagnostics)
37
+ */
38
+ export function getCleanupFailureCount() {
39
+ return cleanupFailureCount;
40
+ }
41
+ /**
42
+ * Reset cleanup failure counter (call in test setup)
43
+ */
44
+ export function resetCleanupFailureCount() {
45
+ cleanupFailureCount = 0;
46
+ }
47
+ /**
48
+ * Assert no cleanup failures occurred (call in afterEach to detect test pollution)
49
+ * @throws Error if cleanup failures occurred
50
+ */
51
+ export function assertNoCleanupFailures() {
52
+ const failures = getCleanupFailureCount();
53
+ if (failures > 0) {
54
+ const msg = `Test pollution detected: ${failures} cleanup failure(s) occurred`;
55
+ resetCleanupFailureCount(); // Reset for next test
56
+ throw new Error(msg);
25
57
  }
26
58
  }
27
59
  /**
@@ -33,6 +65,15 @@ export function writeJsonlFile(filePath, data) {
33
65
  const content = data.map(item => JSON.stringify(item)).join('\n');
34
66
  fs.writeFileSync(filePath, content, 'utf-8');
35
67
  }
68
+ /**
69
+ * Async version of writeJsonlFile for parallel test execution
70
+ * @param filePath - Path to the JSONL file
71
+ * @param data - Array of objects to write
72
+ */
73
+ export async function writeJsonlFileAsync(filePath, data) {
74
+ const content = data.map(item => JSON.stringify(item)).join('\n');
75
+ await fsp.writeFile(filePath, content, 'utf-8');
76
+ }
36
77
  /**
37
78
  * Get today's date in YYYY-MM-DD format
38
79
  * @returns Today's date string
@@ -40,4 +81,126 @@ export function writeJsonlFile(filePath, data) {
40
81
  export function getTestDate() {
41
82
  return new Date().toISOString().split('T')[0];
42
83
  }
84
+ /** Track shared temp directories for suite-level cleanup */
85
+ const sharedTempDirs = new Map();
86
+ /**
87
+ * Get or create a shared temp directory for a test suite
88
+ * Use this for read-only tests that can share fixtures
89
+ * @param suiteId - Unique identifier for the test suite
90
+ * @param prefix - Optional prefix for the temp directory name
91
+ * @returns Absolute path to the shared temp directory
92
+ */
93
+ export function getSharedTempDir(suiteId, prefix = 'shared-test-') {
94
+ const existing = sharedTempDirs.get(suiteId);
95
+ if (existing && fs.existsSync(existing)) {
96
+ return existing;
97
+ }
98
+ const dir = fs.mkdtempSync(path.join(os.tmpdir(), prefix));
99
+ sharedTempDirs.set(suiteId, dir);
100
+ return dir;
101
+ }
102
+ /**
103
+ * Clear contents of a shared temp directory without deleting it
104
+ * Use in beforeEach when tests need clean state but can reuse directory
105
+ * @param dir - Path to the directory to clear
106
+ */
107
+ export function clearTempDir(dir) {
108
+ if (!fs.existsSync(dir))
109
+ return;
110
+ const entries = fs.readdirSync(dir);
111
+ for (const entry of entries) {
112
+ fs.rmSync(path.join(dir, entry), { recursive: true, force: true });
113
+ }
114
+ }
115
+ /**
116
+ * Async version of clearTempDir for parallel test execution
117
+ * @param dir - Path to the directory to clear
118
+ */
119
+ export async function clearTempDirAsync(dir) {
120
+ try {
121
+ await fsp.access(dir);
122
+ }
123
+ catch {
124
+ return; // Directory doesn't exist
125
+ }
126
+ const entries = await fsp.readdir(dir);
127
+ await Promise.all(entries.map(entry => fsp.rm(path.join(dir, entry), { recursive: true, force: true })));
128
+ }
129
+ /**
130
+ * Remove a shared temp directory by suite ID
131
+ * Call in after() hook to clean up suite-level fixtures
132
+ * @param suiteId - Unique identifier for the test suite
133
+ */
134
+ export function removeSharedTempDir(suiteId) {
135
+ const dir = sharedTempDirs.get(suiteId);
136
+ if (dir) {
137
+ removeTempDir(dir);
138
+ sharedTempDirs.delete(suiteId);
139
+ }
140
+ }
141
+ /**
142
+ * Clean up all shared temp directories
143
+ * Useful for global test teardown
144
+ */
145
+ export function cleanupAllSharedTempDirs() {
146
+ for (const [suiteId, dir] of sharedTempDirs) {
147
+ try {
148
+ fs.rmSync(dir, { recursive: true, force: true });
149
+ }
150
+ catch {
151
+ // Ignore cleanup errors
152
+ }
153
+ sharedTempDirs.delete(suiteId);
154
+ }
155
+ }
156
+ const indexedFixtures = new Map();
157
+ /**
158
+ * Create or get a cached test fixture with pre-built indexes
159
+ * Use this when multiple tests need the same indexed data
160
+ * @param fixtureId - Unique identifier for the fixture
161
+ * @param setup - Function to create test data files, receives temp dir path
162
+ * @param buildIndexes - Function to build indexes, receives temp dir path
163
+ * @returns Path to the fixture directory
164
+ */
165
+ export async function getIndexedFixture(fixtureId, setup, buildIndexes) {
166
+ const existing = indexedFixtures.get(fixtureId);
167
+ if (existing && fs.existsSync(existing.dir)) {
168
+ return existing.dir;
169
+ }
170
+ const dir = fs.mkdtempSync(path.join(os.tmpdir(), `indexed-fixture-${fixtureId}-`));
171
+ // Setup test data
172
+ await setup(dir);
173
+ // Build indexes
174
+ await buildIndexes(dir);
175
+ indexedFixtures.set(fixtureId, {
176
+ dir,
177
+ files: new Map(),
178
+ indexed: true,
179
+ });
180
+ return dir;
181
+ }
182
+ /**
183
+ * Remove an indexed fixture by ID
184
+ * @param fixtureId - Unique identifier for the fixture
185
+ */
186
+ export function removeIndexedFixture(fixtureId) {
187
+ const fixture = indexedFixtures.get(fixtureId);
188
+ if (fixture) {
189
+ try {
190
+ fs.rmSync(fixture.dir, { recursive: true, force: true });
191
+ }
192
+ catch {
193
+ // Ignore cleanup errors
194
+ }
195
+ indexedFixtures.delete(fixtureId);
196
+ }
197
+ }
198
+ /**
199
+ * Clean up all indexed fixtures
200
+ */
201
+ export function cleanupAllIndexedFixtures() {
202
+ for (const [id] of indexedFixtures) {
203
+ removeIndexedFixture(id);
204
+ }
205
+ }
43
206
  //# sourceMappingURL=file-utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"file-utils.js","sourceRoot":"","sources":["../../src/test-helpers/file-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,MAAM,GAAG,OAAO;IAC5C,OAAO,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;AACxD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,IAAI,CAAC;QACH,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,wBAAwB;IAC1B,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB,EAAE,IAAe;IAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClE,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC/C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW;IACzB,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,CAAC"}
1
+ {"version":3,"file":"file-utils.js","sourceRoot":"","sources":["../../src/test-helpers/file-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Fuzzing utilities for security testing
3
+ *
4
+ * Provides generators for random inputs to test input validation resilience.
5
+ */
6
+ /**
7
+ * Generate a random Unicode string of specified length
8
+ * Includes various Unicode ranges for thorough testing
9
+ */
10
+ export declare function generateRandomUnicodeString(length: number): string;
11
+ /**
12
+ * Generate a random number in the specified range
13
+ */
14
+ export declare function generateRandomNumber(min: number, max: number): number;
15
+ /**
16
+ * Generate a random integer in the specified range
17
+ */
18
+ export declare function generateRandomInteger(min: number, max: number): number;
19
+ /**
20
+ * Generate a random date string (may be invalid)
21
+ */
22
+ export declare function generateRandomDateString(): string;
23
+ /**
24
+ * Get common SQL injection payloads for testing
25
+ */
26
+ export declare function getSqlInjectionPayloads(): string[];
27
+ /**
28
+ * Get common path traversal payloads for testing
29
+ */
30
+ export declare function getPathTraversalPayloads(): string[];
31
+ /**
32
+ * Get common XSS payloads for testing
33
+ */
34
+ export declare function getXssPayloads(): string[];
35
+ /**
36
+ * Get special number edge cases for testing
37
+ */
38
+ export declare function getSpecialNumbers(): number[];
39
+ /**
40
+ * Generate control character strings for testing
41
+ */
42
+ export declare function getControlCharacterStrings(): string[];
43
+ /**
44
+ * Generate regex patterns that could cause ReDoS
45
+ */
46
+ export declare function getRedosPatterns(): string[];
47
+ /**
48
+ * Run a function multiple times with random inputs
49
+ */
50
+ export declare function fuzz<T>(generator: () => T, fn: (input: T) => void, iterations?: number): {
51
+ passed: number;
52
+ failed: number;
53
+ errors: Array<{
54
+ input: T;
55
+ error: unknown;
56
+ }>;
57
+ };
58
+ //# sourceMappingURL=fuzz-generators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fuzz-generators.d.ts","sourceRoot":"","sources":["../../src/test-helpers/fuzz-generators.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAkBlE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAErE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAgBjD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,EAAE,CAmBlD;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,EAAE,CAkBnD;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,EAAE,CAiBzC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,EAAE,CA0B5C;AAED;;GAEG;AACH,wBAAgB,0BAA0B,IAAI,MAAM,EAAE,CAkBrD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,EAAE,CAe3C;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,CAAC,EACpB,SAAS,EAAE,MAAM,CAAC,EAClB,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,EACtB,UAAU,SAAM,GACf;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,CAAC,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC,CAAA;CAAE,CAiBjF"}
@@ -0,0 +1,216 @@
1
+ /**
2
+ * Fuzzing utilities for security testing
3
+ *
4
+ * Provides generators for random inputs to test input validation resilience.
5
+ */
6
+ /**
7
+ * Generate a random Unicode string of specified length
8
+ * Includes various Unicode ranges for thorough testing
9
+ */
10
+ export function generateRandomUnicodeString(length) {
11
+ const ranges = [
12
+ [0x0020, 0x007E], // Basic Latin
13
+ [0x00A0, 0x00FF], // Latin-1 Supplement
14
+ [0x0100, 0x017F], // Latin Extended-A
15
+ [0x0400, 0x04FF], // Cyrillic
16
+ [0x0600, 0x06FF], // Arabic
17
+ [0x4E00, 0x4FFF], // CJK Unified Ideographs (subset)
18
+ [0x1F300, 0x1F3FF], // Misc Symbols and Pictographs
19
+ ];
20
+ let result = '';
21
+ for (let i = 0; i < length; i++) {
22
+ const range = ranges[Math.floor(Math.random() * ranges.length)];
23
+ const codePoint = Math.floor(Math.random() * (range[1] - range[0] + 1)) + range[0];
24
+ result += String.fromCodePoint(codePoint);
25
+ }
26
+ return result;
27
+ }
28
+ /**
29
+ * Generate a random number in the specified range
30
+ */
31
+ export function generateRandomNumber(min, max) {
32
+ return Math.random() * (max - min) + min;
33
+ }
34
+ /**
35
+ * Generate a random integer in the specified range
36
+ */
37
+ export function generateRandomInteger(min, max) {
38
+ return Math.floor(generateRandomNumber(min, max + 1));
39
+ }
40
+ /**
41
+ * Generate a random date string (may be invalid)
42
+ */
43
+ export function generateRandomDateString() {
44
+ const formats = [
45
+ // Valid-ish formats
46
+ () => `${generateRandomInteger(1900, 2100)}-${String(generateRandomInteger(1, 12)).padStart(2, '0')}-${String(generateRandomInteger(1, 31)).padStart(2, '0')}`,
47
+ // Invalid formats
48
+ () => `${generateRandomInteger(1, 9999)}/${generateRandomInteger(1, 12)}/${generateRandomInteger(1, 31)}`,
49
+ () => `${String(generateRandomInteger(1, 31)).padStart(2, '0')}-${String(generateRandomInteger(1, 12)).padStart(2, '0')}-${generateRandomInteger(1900, 2100)}`,
50
+ () => generateRandomUnicodeString(10),
51
+ () => `${generateRandomInteger(-1000, 10000)}-${generateRandomInteger(-5, 15)}-${generateRandomInteger(-5, 40)}`,
52
+ () => '',
53
+ () => 'NaN-NaN-NaN',
54
+ () => '0000-00-00',
55
+ () => '9999-99-99',
56
+ ];
57
+ return formats[Math.floor(Math.random() * formats.length)]();
58
+ }
59
+ /**
60
+ * Get common SQL injection payloads for testing
61
+ */
62
+ export function getSqlInjectionPayloads() {
63
+ return [
64
+ "'; DROP TABLE traces; --",
65
+ "1' OR '1'='1",
66
+ "1; SELECT * FROM users",
67
+ "' UNION SELECT * FROM secrets --",
68
+ "1 AND 1=1",
69
+ "' OR 1=1 --",
70
+ "admin'--",
71
+ "1'1",
72
+ "1' AND '1'='1",
73
+ "'; EXEC xp_cmdshell('dir'); --",
74
+ "1; WAITFOR DELAY '00:00:05'",
75
+ "' OR ''='",
76
+ "1' OR '1'='1' /*",
77
+ "1' ORDER BY 1--",
78
+ "'||'",
79
+ "' HAVING 1=1 --",
80
+ ];
81
+ }
82
+ /**
83
+ * Get common path traversal payloads for testing
84
+ */
85
+ export function getPathTraversalPayloads() {
86
+ return [
87
+ '../../../etc/passwd',
88
+ '..\\..\\..\\windows\\system32\\config\\sam',
89
+ '....//....//....//etc/passwd',
90
+ '..%2f..%2f..%2fetc%2fpasswd',
91
+ '..%252f..%252f..%252fetc%252fpasswd',
92
+ '%2e%2e%2f%2e%2e%2f%2e%2e%2fetc%2fpasswd',
93
+ '..%c0%af..%c0%af..%c0%afetc/passwd',
94
+ '/etc/passwd%00.txt',
95
+ '../../../etc/passwd\0',
96
+ '..\\..\\..\\etc\\passwd',
97
+ '....//....//etc/passwd',
98
+ '..;/..;/..;/etc/passwd',
99
+ '../.../.../.../etc/passwd',
100
+ '/....//....//etc/passwd',
101
+ '..%00/..%00/..%00/etc/passwd',
102
+ ];
103
+ }
104
+ /**
105
+ * Get common XSS payloads for testing
106
+ */
107
+ export function getXssPayloads() {
108
+ return [
109
+ '<script>alert(1)</script>',
110
+ '"><script>alert(1)</script>',
111
+ "javascript:alert('XSS')",
112
+ '<img src=x onerror=alert(1)>',
113
+ '<svg onload=alert(1)>',
114
+ '\'"><img src=x onerror=alert(1)>',
115
+ '<body onload=alert(1)>',
116
+ '<iframe src="javascript:alert(1)">',
117
+ '{{constructor.constructor("alert(1)")()}}',
118
+ '${alert(1)}',
119
+ '<input onfocus=alert(1) autofocus>',
120
+ '<marquee onstart=alert(1)>',
121
+ '<details open ontoggle=alert(1)>',
122
+ '<audio src=x onerror=alert(1)>',
123
+ ];
124
+ }
125
+ /**
126
+ * Get special number edge cases for testing
127
+ */
128
+ export function getSpecialNumbers() {
129
+ return [
130
+ 0,
131
+ -0,
132
+ 1,
133
+ -1,
134
+ Number.MAX_VALUE,
135
+ Number.MIN_VALUE,
136
+ Number.MAX_SAFE_INTEGER,
137
+ Number.MIN_SAFE_INTEGER,
138
+ Number.POSITIVE_INFINITY,
139
+ Number.NEGATIVE_INFINITY,
140
+ Number.NaN,
141
+ Number.EPSILON,
142
+ Math.PI,
143
+ Math.E,
144
+ 0.1 + 0.2, // Floating point precision
145
+ 2 ** 53, // Just beyond MAX_SAFE_INTEGER
146
+ -(2 ** 53), // Negative beyond MIN_SAFE_INTEGER
147
+ 1e308, // Near MAX_VALUE
148
+ 1e-308, // Near MIN_VALUE (denormalized)
149
+ 0.0000001,
150
+ -0.0000001,
151
+ 86400000, // 24 hours in ms (MAX_DURATION_MS)
152
+ 86400001, // Just over MAX_DURATION_MS
153
+ ];
154
+ }
155
+ /**
156
+ * Generate control character strings for testing
157
+ */
158
+ export function getControlCharacterStrings() {
159
+ return [
160
+ '\x00', // null
161
+ '\x01', // start of heading
162
+ '\x07', // bell
163
+ '\x08', // backspace
164
+ '\x09', // tab
165
+ '\x0A', // line feed
166
+ '\x0B', // vertical tab
167
+ '\x0C', // form feed
168
+ '\x0D', // carriage return
169
+ '\x1B', // escape
170
+ '\x7F', // delete
171
+ '\x00\x00\x00', // multiple nulls
172
+ 'test\x00hidden', // null byte injection
173
+ 'test\x0Anewline', // embedded newline
174
+ '\r\n\r\n', // CRLF injection
175
+ ];
176
+ }
177
+ /**
178
+ * Generate regex patterns that could cause ReDoS
179
+ */
180
+ export function getRedosPatterns() {
181
+ return [
182
+ '(a+)+$',
183
+ '([a-zA-Z]+)*',
184
+ '(a|aa)+',
185
+ '(a|a?)+',
186
+ '(.*a){25}',
187
+ '([a-z]+)+\\s',
188
+ '^(a+)+b$',
189
+ '(x+x+)+y',
190
+ '(a+)+ab',
191
+ '([^\\s]+)+\\s',
192
+ '(\\w+)+@',
193
+ '([a-zA-Z0-9]+)+\\.',
194
+ ];
195
+ }
196
+ /**
197
+ * Run a function multiple times with random inputs
198
+ */
199
+ export function fuzz(generator, fn, iterations = 100) {
200
+ let passed = 0;
201
+ let failed = 0;
202
+ const errors = [];
203
+ for (let i = 0; i < iterations; i++) {
204
+ const input = generator();
205
+ try {
206
+ fn(input);
207
+ passed++;
208
+ }
209
+ catch (error) {
210
+ failed++;
211
+ errors.push({ input, error });
212
+ }
213
+ }
214
+ return { passed, failed, errors };
215
+ }
216
+ //# sourceMappingURL=fuzz-generators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fuzz-generators.js","sourceRoot":"","sources":["../../src/test-helpers/fuzz-generators.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Test helpers index - re-exports all test utilities
3
+ */
4
+ export { createTempDir, removeTempDir, getCleanupFailureCount, resetCleanupFailureCount, assertNoCleanupFailures, writeJsonlFile, writeJsonlFileAsync, getTestDate, getSharedTempDir, clearTempDir, clearTempDirAsync, removeSharedTempDir, cleanupAllSharedTempDirs, getIndexedFixture, removeIndexedFixture, cleanupAllIndexedFixtures, } from './file-utils.js';
5
+ export { type TraceDataStore, type LogDataStore, type MetricDataStore, createTraceBackend, createLogBackend, createMetricBackend, getTraceBackendOptions, getLogBackendOptions, getMetricBackendOptions, type MockDataStore, createMockBackend, getMockOptions, } from './mock-backends.js';
6
+ export { type ToolDefinition, validateToolDefinition, validateHandlerExport, } from './tool-validators.js';
7
+ export { validateBackendSchema, validateLimitSchema, validateDateRangeSchema, } from './schema-validators.js';
8
+ export { SIGNOZ_ENV_VARS, type EnvSnapshot, type HomeEnvScope, captureEnv, restoreEnv, clearSigNozEnv, setSigNozEnv, createEnvScope, setHomeEnv, restoreHomeEnv, } from './env-utils.js';
9
+ export { TEST_TIMESTAMP_BASE, TEST_TIMESTAMP, TEST_TIMESTAMP_ISO, TEST_DURATION, TEST_DURATION_MS, type MockSpan, type MockLog, type MockMetric, type MockLLMEvent, type MockEvaluation, resetBuilderCounters, createMockSpan, createMockSpans, createMockLog, createMockLogs, createMockMetric, createMockMetrics, createMockLLMEvent, createMockLLMEvents, createMockEvaluation, createMockEvaluations, createHttpSpan, createDbSpan, createErrorLog, createCorrelatedLog, createHistogramMetric, createLLMEventWithTokens, createScoredEvaluation, createLabeledEvaluation, } from './test-data-builders.js';
10
+ export { type MemFsInstance, createMemFs, writeJsonlMem, writeFileMem, readFileMem, readJsonlMem, readJsonlMemWithStats, streamJsonlMem, existsMem, mkdirMem, readdirMem, listFilesMem, listFilesInRangeMem, getTestDateMem, getSharedMemFs, resetSharedMemFs, removeSharedMemFs, cleanupAllSharedMemFs, } from './memfs-utils.js';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/test-helpers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,aAAa,EACb,aAAa,EACb,sBAAsB,EACtB,wBAAwB,EACxB,uBAAuB,EACvB,cAAc,EACd,mBAAmB,EACnB,WAAW,EAEX,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,wBAAwB,EAExB,iBAAiB,EACjB,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,eAAe,EAEpB,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,sBAAsB,EACtB,oBAAoB,EACpB,uBAAuB,EAEvB,KAAK,aAAa,EAClB,iBAAiB,EACjB,cAAc,GACf,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,KAAK,cAAc,EACnB,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,eAAe,EACf,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,UAAU,EACV,UAAU,EACV,cAAc,EACd,YAAY,EACZ,cAAc,EACd,UAAU,EACV,cAAc,GACf,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAEL,mBAAmB,EACnB,cAAc,EACd,kBAAkB,EAClB,aAAa,EACb,gBAAgB,EAEhB,KAAK,QAAQ,EACb,KAAK,OAAO,EACZ,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,cAAc,EAEnB,oBAAoB,EACpB,cAAc,EACd,eAAe,EACf,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EAErB,cAAc,EACd,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EACrB,wBAAwB,EACxB,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EACL,KAAK,aAAa,EAClB,WAAW,EACX,aAAa,EACb,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,qBAAqB,EACrB,cAAc,EACd,SAAS,EACT,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,mBAAmB,EACnB,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Test helpers index - re-exports all test utilities
3
+ */
4
+ // File utilities
5
+ export { createTempDir, removeTempDir, getCleanupFailureCount, resetCleanupFailureCount, assertNoCleanupFailures, writeJsonlFile, writeJsonlFileAsync, getTestDate,
6
+ // Shared temp directory utilities (suite-level)
7
+ getSharedTempDir, clearTempDir, clearTempDirAsync, removeSharedTempDir, cleanupAllSharedTempDirs,
8
+ // Indexed fixture utilities
9
+ getIndexedFixture, removeIndexedFixture, cleanupAllIndexedFixtures, } from './file-utils.js';
10
+ // Mock backends
11
+ export {
12
+ // Type-specific factories (recommended)
13
+ createTraceBackend, createLogBackend, createMetricBackend, getTraceBackendOptions, getLogBackendOptions, getMetricBackendOptions, createMockBackend, getMockOptions, } from './mock-backends.js';
14
+ // Tool validators
15
+ export { validateToolDefinition, validateHandlerExport, } from './tool-validators.js';
16
+ // Schema validators
17
+ export { validateBackendSchema, validateLimitSchema, validateDateRangeSchema, } from './schema-validators.js';
18
+ // Environment utilities
19
+ export { SIGNOZ_ENV_VARS, captureEnv, restoreEnv, clearSigNozEnv, setSigNozEnv, createEnvScope, setHomeEnv, restoreHomeEnv, } from './env-utils.js';
20
+ // Test data builders
21
+ export {
22
+ // Constants
23
+ TEST_TIMESTAMP_BASE, TEST_TIMESTAMP, TEST_TIMESTAMP_ISO, TEST_DURATION, TEST_DURATION_MS,
24
+ // Core builders
25
+ resetBuilderCounters, createMockSpan, createMockSpans, createMockLog, createMockLogs, createMockMetric, createMockMetrics, createMockLLMEvent, createMockLLMEvents, createMockEvaluation, createMockEvaluations,
26
+ // Specialized builders
27
+ createHttpSpan, createDbSpan, createErrorLog, createCorrelatedLog, createHistogramMetric, createLLMEventWithTokens, createScoredEvaluation, createLabeledEvaluation, } from './test-data-builders.js';
28
+ // In-memory file system utilities (memfs)
29
+ export { createMemFs, writeJsonlMem, writeFileMem, readFileMem, readJsonlMem, readJsonlMemWithStats, streamJsonlMem, existsMem, mkdirMem, readdirMem, listFilesMem, listFilesInRangeMem, getTestDateMem, getSharedMemFs, resetSharedMemFs, removeSharedMemFs, cleanupAllSharedMemFs, } from './memfs-utils.js';
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/test-helpers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,iBAAiB;AACjB,OAAO,EACL,aAAa,EACb,aAAa,EACb,sBAAsB,EACtB,wBAAwB,EACxB,uBAAuB,EACvB,cAAc,EACd,mBAAmB,EACnB,WAAW;AACX,gDAAgD;AAChD,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,wBAAwB;AACxB,4BAA4B;AAC5B,iBAAiB,EACjB,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,iBAAiB,CAAC;AAEzB,gBAAgB;AAChB,OAAO;AAKL,wCAAwC;AACxC,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,sBAAsB,EACtB,oBAAoB,EACpB,uBAAuB,EAGvB,iBAAiB,EACjB,cAAc,GACf,MAAM,oBAAoB,CAAC;AAE5B,kBAAkB;AAClB,OAAO,EAEL,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAE9B,oBAAoB;AACpB,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,wBAAwB,CAAC;AAEhC,wBAAwB;AACxB,OAAO,EACL,eAAe,EAGf,UAAU,EACV,UAAU,EACV,cAAc,EACd,YAAY,EACZ,cAAc,EACd,UAAU,EACV,cAAc,GACf,MAAM,gBAAgB,CAAC;AAExB,qBAAqB;AACrB,OAAO;AACL,YAAY;AACZ,mBAAmB,EACnB,cAAc,EACd,kBAAkB,EAClB,aAAa,EACb,gBAAgB;AAOhB,gBAAgB;AAChB,oBAAoB,EACpB,cAAc,EACd,eAAe,EACf,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB;AACrB,uBAAuB;AACvB,cAAc,EACd,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EACrB,wBAAwB,EACxB,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,yBAAyB,CAAC;AAEjC,0CAA0C;AAC1C,OAAO,EAEL,WAAW,EACX,aAAa,EACb,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,qBAAqB,EACrB,cAAc,EACd,SAAS,EACT,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,mBAAmB,EACnB,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,kBAAkB,CAAC"}