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
@@ -0,0 +1,260 @@
1
+ /**
2
+ * Test data builders for creating mock telemetry data
3
+ * Reduces test verbosity and improves consistency
4
+ *
5
+ * ## Parallel Test Warning
6
+ *
7
+ * This module uses module-level counters for auto-incrementing IDs.
8
+ * While node:test runs test FILES in parallel, tests WITHIN a file
9
+ * run sequentially, so this is safe for most use cases.
10
+ *
11
+ * If you need deterministic IDs across test runs, call `resetBuilderCounters()`
12
+ * in `beforeEach()`:
13
+ *
14
+ * ```typescript
15
+ * import { resetBuilderCounters, createMockSpan } from './test-data-builders.js';
16
+ *
17
+ * beforeEach(() => {
18
+ * resetBuilderCounters();
19
+ * });
20
+ *
21
+ * test('creates span with id 1', () => {
22
+ * const span = createMockSpan();
23
+ * assert.equal(span.traceId, 'trace1'); // Always 'trace1' after reset
24
+ * });
25
+ * ```
26
+ */
27
+ /** Base timestamp: 2023-11-14 22:13:20 UTC */
28
+ export declare const TEST_TIMESTAMP_BASE = 1700000000;
29
+ /** Standard test timestamp as [seconds, nanoseconds] */
30
+ export declare const TEST_TIMESTAMP: readonly [1700000000, 0];
31
+ /** Standard ISO timestamp string */
32
+ export declare const TEST_TIMESTAMP_ISO = "2023-11-14T22:13:20.000Z";
33
+ /** Standard test duration: 2.5 seconds as [seconds, nanoseconds] */
34
+ export declare const TEST_DURATION: readonly [2, 500000000];
35
+ /** Standard test duration in milliseconds */
36
+ export declare const TEST_DURATION_MS = 2500;
37
+ /** Mock trace span structure */
38
+ export interface MockSpan {
39
+ traceId: string;
40
+ spanId: string;
41
+ name: string;
42
+ startTime: readonly [number, number] | [number, number];
43
+ endTime?: readonly [number, number] | [number, number];
44
+ duration?: readonly [number, number] | [number, number];
45
+ kind?: number;
46
+ status?: {
47
+ code: number;
48
+ message?: string;
49
+ };
50
+ resource?: {
51
+ serviceName?: string;
52
+ serviceVersion?: string;
53
+ [key: string]: unknown;
54
+ };
55
+ attributes?: Record<string, unknown>;
56
+ instrumentationScope?: {
57
+ name: string;
58
+ version?: string;
59
+ schemaUrl?: string;
60
+ };
61
+ links?: Array<{
62
+ traceId: string;
63
+ spanId: string;
64
+ attributes?: Record<string, unknown>;
65
+ }>;
66
+ }
67
+ /** Mock log record structure */
68
+ export interface MockLog {
69
+ timestamp: string | readonly [number, number] | [number, number];
70
+ body: string;
71
+ severity?: string;
72
+ severityText?: string;
73
+ traceId?: string;
74
+ spanId?: string;
75
+ attributes?: Record<string, unknown>;
76
+ instrumentationScope?: {
77
+ name: string;
78
+ version?: string;
79
+ schemaUrl?: string;
80
+ };
81
+ }
82
+ /** Mock metric structure */
83
+ export interface MockMetric {
84
+ timestamp: string;
85
+ name: string;
86
+ value: number;
87
+ type: 'counter' | 'gauge' | 'histogram';
88
+ unit?: string;
89
+ resource?: {
90
+ serviceName?: string;
91
+ [key: string]: unknown;
92
+ };
93
+ attributes?: Record<string, unknown>;
94
+ histogram?: {
95
+ buckets: Array<{
96
+ le: number;
97
+ count: number;
98
+ }>;
99
+ sum: number;
100
+ count: number;
101
+ };
102
+ exemplars?: Array<{
103
+ traceId: string;
104
+ spanId: string;
105
+ value: number;
106
+ timestamp: string;
107
+ }>;
108
+ }
109
+ /** Mock LLM event structure */
110
+ export interface MockLLMEvent {
111
+ timestamp: string;
112
+ name: string;
113
+ attributes: {
114
+ 'gen_ai.request.model'?: string;
115
+ 'gen_ai.system'?: string;
116
+ 'gen_ai.usage.input_tokens'?: number;
117
+ 'gen_ai.usage.output_tokens'?: number;
118
+ 'gen_ai.usage.cache_read_input_tokens'?: number;
119
+ 'gen_ai.usage.cache_creation_input_tokens'?: number;
120
+ 'duration_ms'?: number;
121
+ 'success'?: boolean;
122
+ 'error'?: string;
123
+ [key: string]: unknown;
124
+ };
125
+ }
126
+ /** Mock evaluation structure */
127
+ export interface MockEvaluation {
128
+ timestamp: string;
129
+ traceId?: string;
130
+ attributes: {
131
+ 'gen_ai.evaluation.name': string;
132
+ 'gen_ai.evaluation.score.value'?: number;
133
+ 'gen_ai.evaluation.score.label'?: string;
134
+ 'gen_ai.evaluation.explanation'?: string;
135
+ 'gen_ai.response.id'?: string;
136
+ 'gen_ai.evaluation.evaluator'?: string;
137
+ 'gen_ai.evaluation.evaluator_type'?: 'human' | 'llm' | 'rule' | 'classifier';
138
+ [key: string]: unknown;
139
+ };
140
+ }
141
+ /**
142
+ * Reset all counters (call in beforeEach if needed)
143
+ */
144
+ export declare function resetBuilderCounters(): void;
145
+ /**
146
+ * Create a mock trace span with sensible defaults.
147
+ * Override properties take precedence over defaults (later properties win).
148
+ *
149
+ * @param overrides - Fields to override. These are spread after defaults,
150
+ * so `createMockSpan({ traceId: 'custom' })` uses 'custom' as traceId.
151
+ * @returns Mock span object
152
+ *
153
+ * @example
154
+ * // Use defaults
155
+ * const span = createMockSpan();
156
+ *
157
+ * // Override specific fields
158
+ * const custom = createMockSpan({ traceId: 'my-trace', name: 'my-op' });
159
+ */
160
+ export declare function createMockSpan(overrides?: Partial<MockSpan>): MockSpan;
161
+ /**
162
+ * Create multiple mock spans with auto-incrementing IDs
163
+ * @param count - Number of spans to create
164
+ * @param overrides - Fields to override on all spans (can be function for dynamic values)
165
+ * @returns Array of mock spans
166
+ */
167
+ export declare function createMockSpans(count: number, overrides?: Partial<MockSpan> | ((index: number) => Partial<MockSpan>)): MockSpan[];
168
+ /**
169
+ * Create a mock log record with sensible defaults.
170
+ * Override properties take precedence over defaults (later properties win).
171
+ *
172
+ * @param overrides - Fields to override
173
+ * @returns Mock log object
174
+ */
175
+ export declare function createMockLog(overrides?: Partial<MockLog>): MockLog;
176
+ /**
177
+ * Create multiple mock logs
178
+ * @param count - Number of logs to create
179
+ * @param overrides - Fields to override on all logs (can be function for dynamic values)
180
+ * @returns Array of mock logs
181
+ */
182
+ export declare function createMockLogs(count: number, overrides?: Partial<MockLog> | ((index: number) => Partial<MockLog>)): MockLog[];
183
+ /**
184
+ * Create a mock metric with sensible defaults
185
+ * @param overrides - Fields to override
186
+ * @returns Mock metric object
187
+ */
188
+ export declare function createMockMetric(overrides?: Partial<MockMetric>): MockMetric;
189
+ /**
190
+ * Create multiple mock metrics
191
+ * @param count - Number of metrics to create
192
+ * @param overrides - Fields to override on all metrics (can be function for dynamic values)
193
+ * @returns Array of mock metrics
194
+ */
195
+ export declare function createMockMetrics(count: number, overrides?: Partial<MockMetric> | ((index: number) => Partial<MockMetric>)): MockMetric[];
196
+ /**
197
+ * Create a mock LLM event with sensible defaults
198
+ * @param overrides - Fields to override
199
+ * @returns Mock LLM event object
200
+ */
201
+ export declare function createMockLLMEvent(overrides?: Partial<MockLLMEvent>): MockLLMEvent;
202
+ /**
203
+ * Create multiple mock LLM events
204
+ * @param count - Number of events to create
205
+ * @param overrides - Fields to override on all events (can be function for dynamic values)
206
+ * @returns Array of mock LLM events
207
+ */
208
+ export declare function createMockLLMEvents(count: number, overrides?: Partial<MockLLMEvent> | ((index: number) => Partial<MockLLMEvent>)): MockLLMEvent[];
209
+ /**
210
+ * Create a mock evaluation with sensible defaults
211
+ * @param overrides - Fields to override
212
+ * @returns Mock evaluation object
213
+ */
214
+ export declare function createMockEvaluation(overrides?: Partial<MockEvaluation>): MockEvaluation;
215
+ /**
216
+ * Create multiple mock evaluations
217
+ * @param count - Number of evaluations to create
218
+ * @param overrides - Fields to override on all evaluations (can be function for dynamic values)
219
+ * @returns Array of mock evaluations
220
+ */
221
+ export declare function createMockEvaluations(count: number, overrides?: Partial<MockEvaluation> | ((index: number) => Partial<MockEvaluation>)): MockEvaluation[];
222
+ /**
223
+ * Create a span with HTTP attributes
224
+ */
225
+ export declare function createHttpSpan(method: string, statusCode: number, overrides?: Partial<MockSpan>): MockSpan;
226
+ /**
227
+ * Create a span with database attributes
228
+ */
229
+ export declare function createDbSpan(operation: string, system: string, overrides?: Partial<MockSpan>): MockSpan;
230
+ /**
231
+ * Create an error log
232
+ */
233
+ export declare function createErrorLog(message: string, overrides?: Partial<MockLog>): MockLog;
234
+ /**
235
+ * Create a log with trace correlation
236
+ */
237
+ export declare function createCorrelatedLog(traceId: string, spanId: string, overrides?: Partial<MockLog>): MockLog;
238
+ /**
239
+ * Create a histogram metric
240
+ *
241
+ * Note: Buckets use cumulative counts where each bucket's count includes
242
+ * all observations <= le. The average is calculated using bucket midpoints.
243
+ */
244
+ export declare function createHistogramMetric(name: string, buckets: Array<{
245
+ le: number;
246
+ count: number;
247
+ }>, overrides?: Partial<MockMetric>): MockMetric;
248
+ /**
249
+ * Create an LLM event with token usage
250
+ */
251
+ export declare function createLLMEventWithTokens(inputTokens: number, outputTokens: number, overrides?: Partial<MockLLMEvent>): MockLLMEvent;
252
+ /**
253
+ * Create an evaluation with specific score
254
+ */
255
+ export declare function createScoredEvaluation(name: string, score: number, overrides?: Partial<MockEvaluation>): MockEvaluation;
256
+ /**
257
+ * Create an evaluation with label (pass/fail)
258
+ */
259
+ export declare function createLabeledEvaluation(name: string, label: string, overrides?: Partial<MockEvaluation>): MockEvaluation;
260
+ //# sourceMappingURL=test-data-builders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-data-builders.d.ts","sourceRoot":"","sources":["../../src/test-helpers/test-data-builders.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,337 @@
1
+ /**
2
+ * Test data builders for creating mock telemetry data
3
+ * Reduces test verbosity and improves consistency
4
+ *
5
+ * ## Parallel Test Warning
6
+ *
7
+ * This module uses module-level counters for auto-incrementing IDs.
8
+ * While node:test runs test FILES in parallel, tests WITHIN a file
9
+ * run sequentially, so this is safe for most use cases.
10
+ *
11
+ * If you need deterministic IDs across test runs, call `resetBuilderCounters()`
12
+ * in `beforeEach()`:
13
+ *
14
+ * ```typescript
15
+ * import { resetBuilderCounters, createMockSpan } from './test-data-builders.js';
16
+ *
17
+ * beforeEach(() => {
18
+ * resetBuilderCounters();
19
+ * });
20
+ *
21
+ * test('creates span with id 1', () => {
22
+ * const span = createMockSpan();
23
+ * assert.equal(span.traceId, 'trace1'); // Always 'trace1' after reset
24
+ * });
25
+ * ```
26
+ */
27
+ // ============================================================================
28
+ // Constants
29
+ // ============================================================================
30
+ /** Base timestamp: 2023-11-14 22:13:20 UTC */
31
+ export const TEST_TIMESTAMP_BASE = 1700000000;
32
+ /** Standard test timestamp as [seconds, nanoseconds] */
33
+ export const TEST_TIMESTAMP = [TEST_TIMESTAMP_BASE, 0];
34
+ /** Standard ISO timestamp string */
35
+ export const TEST_TIMESTAMP_ISO = '2023-11-14T22:13:20.000Z';
36
+ /** Standard test duration: 2.5 seconds as [seconds, nanoseconds] */
37
+ export const TEST_DURATION = [2, 500000000];
38
+ /** Standard test duration in milliseconds */
39
+ export const TEST_DURATION_MS = 2500;
40
+ // ============================================================================
41
+ // Builder Functions
42
+ // ============================================================================
43
+ let spanCounter = 0;
44
+ let logCounter = 0;
45
+ let metricCounter = 0;
46
+ let llmEventCounter = 0;
47
+ let evalCounter = 0;
48
+ /**
49
+ * Reset all counters (call in beforeEach if needed)
50
+ */
51
+ export function resetBuilderCounters() {
52
+ spanCounter = 0;
53
+ logCounter = 0;
54
+ metricCounter = 0;
55
+ llmEventCounter = 0;
56
+ evalCounter = 0;
57
+ }
58
+ /**
59
+ * Create a mock trace span with sensible defaults.
60
+ * Override properties take precedence over defaults (later properties win).
61
+ *
62
+ * @param overrides - Fields to override. These are spread after defaults,
63
+ * so `createMockSpan({ traceId: 'custom' })` uses 'custom' as traceId.
64
+ * @returns Mock span object
65
+ *
66
+ * @example
67
+ * // Use defaults
68
+ * const span = createMockSpan();
69
+ *
70
+ * // Override specific fields
71
+ * const custom = createMockSpan({ traceId: 'my-trace', name: 'my-op' });
72
+ */
73
+ export function createMockSpan(overrides) {
74
+ const id = ++spanCounter;
75
+ return {
76
+ traceId: `trace${id}`,
77
+ spanId: `span${id}`,
78
+ name: `test-operation-${id}`,
79
+ startTime: [...TEST_TIMESTAMP],
80
+ ...overrides,
81
+ };
82
+ }
83
+ /**
84
+ * Create multiple mock spans with auto-incrementing IDs
85
+ * @param count - Number of spans to create
86
+ * @param overrides - Fields to override on all spans (can be function for dynamic values)
87
+ * @returns Array of mock spans
88
+ */
89
+ export function createMockSpans(count, overrides) {
90
+ return Array.from({ length: count }, (_, i) => {
91
+ const dynamicOverrides = typeof overrides === 'function' ? overrides(i) : overrides;
92
+ return createMockSpan(dynamicOverrides);
93
+ });
94
+ }
95
+ /**
96
+ * Create a mock log record with sensible defaults.
97
+ * Override properties take precedence over defaults (later properties win).
98
+ *
99
+ * @param overrides - Fields to override
100
+ * @returns Mock log object
101
+ */
102
+ export function createMockLog(overrides) {
103
+ const id = ++logCounter;
104
+ return {
105
+ timestamp: TEST_TIMESTAMP_ISO,
106
+ body: `Test log message ${id}`,
107
+ ...overrides,
108
+ };
109
+ }
110
+ /**
111
+ * Create multiple mock logs
112
+ * @param count - Number of logs to create
113
+ * @param overrides - Fields to override on all logs (can be function for dynamic values)
114
+ * @returns Array of mock logs
115
+ */
116
+ export function createMockLogs(count, overrides) {
117
+ return Array.from({ length: count }, (_, i) => {
118
+ const dynamicOverrides = typeof overrides === 'function' ? overrides(i) : overrides;
119
+ return createMockLog(dynamicOverrides);
120
+ });
121
+ }
122
+ /**
123
+ * Create a mock metric with sensible defaults
124
+ * @param overrides - Fields to override
125
+ * @returns Mock metric object
126
+ */
127
+ export function createMockMetric(overrides) {
128
+ const id = ++metricCounter;
129
+ return {
130
+ timestamp: TEST_TIMESTAMP_ISO,
131
+ name: `test.metric.${id}`,
132
+ value: 100,
133
+ type: 'counter',
134
+ ...overrides,
135
+ };
136
+ }
137
+ /**
138
+ * Create multiple mock metrics
139
+ * @param count - Number of metrics to create
140
+ * @param overrides - Fields to override on all metrics (can be function for dynamic values)
141
+ * @returns Array of mock metrics
142
+ */
143
+ export function createMockMetrics(count, overrides) {
144
+ return Array.from({ length: count }, (_, i) => {
145
+ const dynamicOverrides = typeof overrides === 'function' ? overrides(i) : overrides;
146
+ return createMockMetric(dynamicOverrides);
147
+ });
148
+ }
149
+ /**
150
+ * Create a mock LLM event with sensible defaults
151
+ * @param overrides - Fields to override
152
+ * @returns Mock LLM event object
153
+ */
154
+ export function createMockLLMEvent(overrides) {
155
+ const id = ++llmEventCounter;
156
+ const { attributes: attrOverrides, ...restOverrides } = overrides || {};
157
+ return {
158
+ timestamp: TEST_TIMESTAMP_ISO,
159
+ name: 'llm.completion',
160
+ attributes: {
161
+ 'gen_ai.request.model': 'claude-3-opus',
162
+ 'gen_ai.system': 'anthropic',
163
+ 'gen_ai.usage.input_tokens': 100,
164
+ 'gen_ai.usage.output_tokens': 50,
165
+ 'duration_ms': 1500,
166
+ 'success': true,
167
+ ...attrOverrides,
168
+ },
169
+ ...restOverrides,
170
+ };
171
+ }
172
+ /**
173
+ * Create multiple mock LLM events
174
+ * @param count - Number of events to create
175
+ * @param overrides - Fields to override on all events (can be function for dynamic values)
176
+ * @returns Array of mock LLM events
177
+ */
178
+ export function createMockLLMEvents(count, overrides) {
179
+ return Array.from({ length: count }, (_, i) => {
180
+ const dynamicOverrides = typeof overrides === 'function' ? overrides(i) : overrides;
181
+ return createMockLLMEvent(dynamicOverrides);
182
+ });
183
+ }
184
+ /**
185
+ * Create a mock evaluation with sensible defaults
186
+ * @param overrides - Fields to override
187
+ * @returns Mock evaluation object
188
+ */
189
+ export function createMockEvaluation(overrides) {
190
+ const id = ++evalCounter;
191
+ const { attributes: attrOverrides, ...restOverrides } = overrides || {};
192
+ return {
193
+ timestamp: TEST_TIMESTAMP_ISO,
194
+ attributes: {
195
+ 'gen_ai.evaluation.name': `Evaluation-${id}`,
196
+ 'gen_ai.evaluation.score.value': 0.85,
197
+ ...attrOverrides,
198
+ },
199
+ ...restOverrides,
200
+ };
201
+ }
202
+ /**
203
+ * Create multiple mock evaluations
204
+ * @param count - Number of evaluations to create
205
+ * @param overrides - Fields to override on all evaluations (can be function for dynamic values)
206
+ * @returns Array of mock evaluations
207
+ */
208
+ export function createMockEvaluations(count, overrides) {
209
+ return Array.from({ length: count }, (_, i) => {
210
+ const dynamicOverrides = typeof overrides === 'function' ? overrides(i) : overrides;
211
+ return createMockEvaluation(dynamicOverrides);
212
+ });
213
+ }
214
+ // ============================================================================
215
+ // Specialized Builders
216
+ // ============================================================================
217
+ /**
218
+ * Create a span with HTTP attributes
219
+ */
220
+ export function createHttpSpan(method, statusCode, overrides) {
221
+ const { attributes: attrOverrides, ...restOverrides } = overrides || {};
222
+ return createMockSpan({
223
+ name: 'http-request',
224
+ kind: 2, // CLIENT
225
+ attributes: {
226
+ 'http.method': method,
227
+ 'http.status_code': statusCode,
228
+ ...attrOverrides,
229
+ },
230
+ ...restOverrides,
231
+ });
232
+ }
233
+ /**
234
+ * Create a span with database attributes
235
+ */
236
+ export function createDbSpan(operation, system, overrides) {
237
+ const { attributes: attrOverrides, ...restOverrides } = overrides || {};
238
+ return createMockSpan({
239
+ name: `db-${operation.toLowerCase()}`,
240
+ kind: 2, // CLIENT
241
+ attributes: {
242
+ 'db.operation': operation,
243
+ 'db.system': system,
244
+ ...attrOverrides,
245
+ },
246
+ ...restOverrides,
247
+ });
248
+ }
249
+ /**
250
+ * Create an error log
251
+ */
252
+ export function createErrorLog(message, overrides) {
253
+ return createMockLog({
254
+ body: message,
255
+ severity: 'ERROR',
256
+ ...overrides,
257
+ });
258
+ }
259
+ /**
260
+ * Create a log with trace correlation
261
+ */
262
+ export function createCorrelatedLog(traceId, spanId, overrides) {
263
+ return createMockLog({
264
+ traceId,
265
+ spanId,
266
+ ...overrides,
267
+ });
268
+ }
269
+ /**
270
+ * Create a histogram metric
271
+ *
272
+ * Note: Buckets use cumulative counts where each bucket's count includes
273
+ * all observations <= le. The average is calculated using bucket midpoints.
274
+ */
275
+ export function createHistogramMetric(name, buckets, overrides) {
276
+ // Calculate sum using bucket midpoints and incremental counts
277
+ // Each bucket count is cumulative, so we need to find incremental counts
278
+ let sum = 0;
279
+ let prevLe = 0;
280
+ let prevCount = 0;
281
+ for (const bucket of buckets) {
282
+ const incrementalCount = bucket.count - prevCount;
283
+ const midpoint = (prevLe + bucket.le) / 2;
284
+ sum += incrementalCount * midpoint;
285
+ prevLe = bucket.le;
286
+ prevCount = bucket.count;
287
+ }
288
+ const count = buckets[buckets.length - 1]?.count || 0;
289
+ const average = count > 0 ? sum / count : 0;
290
+ return createMockMetric({
291
+ name,
292
+ type: 'histogram',
293
+ value: average,
294
+ histogram: { buckets, sum, count },
295
+ ...overrides,
296
+ });
297
+ }
298
+ /**
299
+ * Create an LLM event with token usage
300
+ */
301
+ export function createLLMEventWithTokens(inputTokens, outputTokens, overrides) {
302
+ return createMockLLMEvent({
303
+ ...overrides,
304
+ attributes: {
305
+ 'gen_ai.usage.input_tokens': inputTokens,
306
+ 'gen_ai.usage.output_tokens': outputTokens,
307
+ ...overrides?.attributes,
308
+ },
309
+ });
310
+ }
311
+ /**
312
+ * Create an evaluation with specific score
313
+ */
314
+ export function createScoredEvaluation(name, score, overrides) {
315
+ return createMockEvaluation({
316
+ ...overrides,
317
+ attributes: {
318
+ 'gen_ai.evaluation.name': name,
319
+ 'gen_ai.evaluation.score.value': score,
320
+ ...overrides?.attributes,
321
+ },
322
+ });
323
+ }
324
+ /**
325
+ * Create an evaluation with label (pass/fail)
326
+ */
327
+ export function createLabeledEvaluation(name, label, overrides) {
328
+ return createMockEvaluation({
329
+ ...overrides,
330
+ attributes: {
331
+ 'gen_ai.evaluation.name': name,
332
+ 'gen_ai.evaluation.score.label': label,
333
+ ...overrides?.attributes,
334
+ },
335
+ });
336
+ }
337
+ //# sourceMappingURL=test-data-builders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-data-builders.js","sourceRoot":"","sources":["../../src/test-helpers/test-data-builders.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,8CAA8C;AAC9C,MAAM,CAAC,MAAM,mBAAmB,GAAG,UAAU,CAAC;AAE9C,wDAAwD;AACxD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,mBAAmB,EAAE,CAAC,CAAU,CAAC;AAEhE,oCAAoC;AACpC,MAAM,CAAC,MAAM,kBAAkB,GAAG,0BAA0B,CAAC;AAE7D,oEAAoE;AACpE,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,EAAE,SAAS,CAAU,CAAC;AAErD,6CAA6C;AAC7C,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC;AA6GrC,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E,IAAI,WAAW,GAAG,CAAC,CAAC;AACpB,IAAI,UAAU,GAAG,CAAC,CAAC;AACnB,IAAI,aAAa,GAAG,CAAC,CAAC;AACtB,IAAI,eAAe,GAAG,CAAC,CAAC;AACxB,IAAI,WAAW,GAAG,CAAC,CAAC;AAEpB;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,WAAW,GAAG,CAAC,CAAC;IAChB,UAAU,GAAG,CAAC,CAAC;IACf,aAAa,GAAG,CAAC,CAAC;IAClB,eAAe,GAAG,CAAC,CAAC;IACpB,WAAW,GAAG,CAAC,CAAC;AAClB,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,cAAc,CAAC,SAA6B;IAC1D,MAAM,EAAE,GAAG,EAAE,WAAW,CAAC;IACzB,OAAO;QACL,OAAO,EAAE,QAAQ,EAAE,EAAE;QACrB,MAAM,EAAE,OAAO,EAAE,EAAE;QACnB,IAAI,EAAE,kBAAkB,EAAE,EAAE;QAC5B,SAAS,EAAE,CAAC,GAAG,cAAc,CAAqB;QAClD,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAC7B,KAAa,EACb,SAAsE;IAEtE,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC5C,MAAM,gBAAgB,GAAG,OAAO,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACpF,OAAO,cAAc,CAAC,gBAAgB,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,SAA4B;IACxD,MAAM,EAAE,GAAG,EAAE,UAAU,CAAC;IACxB,OAAO;QACL,SAAS,EAAE,kBAAkB;QAC7B,IAAI,EAAE,oBAAoB,EAAE,EAAE;QAC9B,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAC5B,KAAa,EACb,SAAoE;IAEpE,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC5C,MAAM,gBAAgB,GAAG,OAAO,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACpF,OAAO,aAAa,CAAC,gBAAgB,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAA+B;IAC9D,MAAM,EAAE,GAAG,EAAE,aAAa,CAAC;IAC3B,OAAO;QACL,SAAS,EAAE,kBAAkB;QAC7B,IAAI,EAAE,eAAe,EAAE,EAAE;QACzB,KAAK,EAAE,GAAG;QACV,IAAI,EAAE,SAAS;QACf,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAa,EACb,SAA0E;IAE1E,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC5C,MAAM,gBAAgB,GAAG,OAAO,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACpF,OAAO,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,SAAiC;IAClE,MAAM,EAAE,GAAG,EAAE,eAAe,CAAC;IAC7B,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE,GAAG,SAAS,IAAI,EAAE,CAAC;IACxE,OAAO;QACL,SAAS,EAAE,kBAAkB;QAC7B,IAAI,EAAE,gBAAgB;QACtB,UAAU,EAAE;YACV,sBAAsB,EAAE,eAAe;YACvC,eAAe,EAAE,WAAW;YAC5B,2BAA2B,EAAE,GAAG;YAChC,4BAA4B,EAAE,EAAE;YAChC,aAAa,EAAE,IAAI;YACnB,SAAS,EAAE,IAAI;YACf,GAAG,aAAa;SACjB;QACD,GAAG,aAAa;KACjB,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAAa,EACb,SAA8E;IAE9E,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC5C,MAAM,gBAAgB,GAAG,OAAO,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACpF,OAAO,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,SAAmC;IACtE,MAAM,EAAE,GAAG,EAAE,WAAW,CAAC;IACzB,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE,GAAG,SAAS,IAAI,EAAE,CAAC;IACxE,OAAO;QACL,SAAS,EAAE,kBAAkB;QAC7B,UAAU,EAAE;YACV,wBAAwB,EAAE,cAAc,EAAE,EAAE;YAC5C,+BAA+B,EAAE,IAAI;YACrC,GAAG,aAAa;SACjB;QACD,GAAG,aAAa;KACjB,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CACnC,KAAa,EACb,SAAkF;IAElF,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC5C,MAAM,gBAAgB,GAAG,OAAO,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACpF,OAAO,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,+EAA+E;AAC/E,uBAAuB;AACvB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,cAAc,CAC5B,MAAc,EACd,UAAkB,EAClB,SAA6B;IAE7B,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE,GAAG,SAAS,IAAI,EAAE,CAAC;IACxE,OAAO,cAAc,CAAC;QACpB,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,CAAC,EAAE,SAAS;QAClB,UAAU,EAAE;YACV,aAAa,EAAE,MAAM;YACrB,kBAAkB,EAAE,UAAU;YAC9B,GAAG,aAAa;SACjB;QACD,GAAG,aAAa;KACjB,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAC1B,SAAiB,EACjB,MAAc,EACd,SAA6B;IAE7B,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE,GAAG,SAAS,IAAI,EAAE,CAAC;IACxE,OAAO,cAAc,CAAC;QACpB,IAAI,EAAE,MAAM,SAAS,CAAC,WAAW,EAAE,EAAE;QACrC,IAAI,EAAE,CAAC,EAAE,SAAS;QAClB,UAAU,EAAE;YACV,cAAc,EAAE,SAAS;YACzB,WAAW,EAAE,MAAM;YACnB,GAAG,aAAa;SACjB;QACD,GAAG,aAAa;KACjB,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe,EAAE,SAA4B;IAC1E,OAAO,aAAa,CAAC;QACnB,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,OAAO;QACjB,GAAG,SAAS;KACb,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,OAAe,EACf,MAAc,EACd,SAA4B;IAE5B,OAAO,aAAa,CAAC;QACnB,OAAO;QACP,MAAM;QACN,GAAG,SAAS;KACb,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CACnC,IAAY,EACZ,OAA6C,EAC7C,SAA+B;IAE/B,8DAA8D;IAC9D,yEAAyE;IACzE,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,gBAAgB,GAAG,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC;QAClD,MAAM,QAAQ,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QAC1C,GAAG,IAAI,gBAAgB,GAAG,QAAQ,CAAC;QACnC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;QACnB,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;IAC3B,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5C,OAAO,gBAAgB,CAAC;QACtB,IAAI;QACJ,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,OAAO;QACd,SAAS,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE;QAClC,GAAG,SAAS;KACb,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CACtC,WAAmB,EACnB,YAAoB,EACpB,SAAiC;IAEjC,OAAO,kBAAkB,CAAC;QACxB,GAAG,SAAS;QACZ,UAAU,EAAE;YACV,2BAA2B,EAAE,WAAW;YACxC,4BAA4B,EAAE,YAAY;YAC1C,GAAG,SAAS,EAAE,UAAU;SACzB;KACF,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CACpC,IAAY,EACZ,KAAa,EACb,SAAmC;IAEnC,OAAO,oBAAoB,CAAC;QAC1B,GAAG,SAAS;QACZ,UAAU,EAAE;YACV,wBAAwB,EAAE,IAAI;YAC9B,+BAA+B,EAAE,KAAK;YACtC,GAAG,SAAS,EAAE,UAAU;SACzB;KACF,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CACrC,IAAY,EACZ,KAAa,EACb,SAAmC;IAEnC,OAAO,oBAAoB,CAAC;QAC1B,GAAG,SAAS;QACZ,UAAU,EAAE;YACV,wBAAwB,EAAE,IAAI;YAC9B,+BAA+B,EAAE,KAAK;YACtC,GAAG,SAAS,EAAE,UAAU;SACzB;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=test-data-builders.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-data-builders.test.d.ts","sourceRoot":"","sources":["../../src/test-helpers/test-data-builders.test.ts"],"names":[],"mappings":""}