ai.matey.testing 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/LICENSE +21 -0
  2. package/dist/cjs/fixture-capture.js +169 -0
  3. package/dist/cjs/fixture-capture.js.map +1 -0
  4. package/dist/cjs/fixture-helpers.js +240 -0
  5. package/dist/cjs/fixture-helpers.js.map +1 -0
  6. package/dist/cjs/fixture-loader.js +196 -0
  7. package/dist/cjs/fixture-loader.js.map +1 -0
  8. package/dist/cjs/fixture-types.js +20 -0
  9. package/dist/cjs/fixture-types.js.map +1 -0
  10. package/dist/cjs/index.js +66 -0
  11. package/dist/cjs/index.js.map +1 -0
  12. package/dist/cjs/property-testing.js +288 -0
  13. package/dist/cjs/property-testing.js.map +1 -0
  14. package/dist/cjs/test-helpers.js +289 -0
  15. package/dist/cjs/test-helpers.js.map +1 -0
  16. package/dist/esm/fixture-capture.js +163 -0
  17. package/dist/esm/fixture-capture.js.map +1 -0
  18. package/dist/esm/fixture-helpers.js +228 -0
  19. package/dist/esm/fixture-helpers.js.map +1 -0
  20. package/dist/esm/fixture-loader.js +154 -0
  21. package/dist/esm/fixture-loader.js.map +1 -0
  22. package/dist/esm/fixture-types.js +16 -0
  23. package/dist/esm/fixture-types.js.map +1 -0
  24. package/dist/esm/index.js +15 -0
  25. package/dist/esm/index.js.map +1 -0
  26. package/dist/esm/property-testing.js +274 -0
  27. package/dist/esm/property-testing.js.map +1 -0
  28. package/dist/esm/test-helpers.js +272 -0
  29. package/dist/esm/test-helpers.js.map +1 -0
  30. package/dist/types/fixture-capture.d.ts +55 -0
  31. package/dist/types/fixture-capture.d.ts.map +1 -0
  32. package/dist/types/fixture-helpers.d.ts +69 -0
  33. package/dist/types/fixture-helpers.d.ts.map +1 -0
  34. package/dist/types/fixture-loader.d.ts +40 -0
  35. package/dist/types/fixture-loader.d.ts.map +1 -0
  36. package/dist/types/fixture-types.d.ts +76 -0
  37. package/dist/types/fixture-types.d.ts.map +1 -0
  38. package/dist/types/index.d.ts +12 -0
  39. package/dist/types/index.d.ts.map +1 -0
  40. package/dist/types/property-testing.d.ts +79 -0
  41. package/dist/types/property-testing.d.ts.map +1 -0
  42. package/dist/types/test-helpers.d.ts +81 -0
  43. package/dist/types/test-helpers.d.ts.map +1 -0
  44. package/package.json +68 -0
  45. package/readme.md +31 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-helpers.js","sourceRoot":"","sources":["../../src/test-helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,163 @@
1
+ /**
2
+ * Fixture capture tool - captures real API calls and saves them as fixtures
3
+ */
4
+ import { writeFile, mkdir } from 'fs/promises';
5
+ import { join } from 'path';
6
+ import { FIXTURES_DIR } from './fixture-loader.js';
7
+ /**
8
+ * Sanitize sensitive data from request/response
9
+ */
10
+ function sanitizeData(data, config) {
11
+ if (!config.sanitize) {
12
+ return data;
13
+ }
14
+ // Deep clone to avoid mutating original
15
+ const sanitized = JSON.parse(JSON.stringify(data));
16
+ // Remove API keys from metadata
17
+ if (typeof sanitized === 'object' && sanitized !== null) {
18
+ const obj = sanitized;
19
+ if (obj.metadata && typeof obj.metadata === 'object') {
20
+ const metadata = obj.metadata;
21
+ if (metadata.custom && typeof metadata.custom === 'object') {
22
+ const custom = metadata.custom;
23
+ delete custom.apiKey;
24
+ delete custom.api_key;
25
+ delete custom.authorization;
26
+ }
27
+ }
28
+ }
29
+ return sanitized;
30
+ }
31
+ /**
32
+ * Capture a non-streaming chat interaction
33
+ */
34
+ export async function captureChat(config, request, response, providerData) {
35
+ const metadata = {
36
+ provider: config.provider,
37
+ scenario: config.scenario,
38
+ model: request.parameters?.model || 'unknown',
39
+ capturedAt: new Date().toISOString(),
40
+ description: config.description,
41
+ tags: config.tags,
42
+ apiVersion: config.apiVersion,
43
+ };
44
+ const fixture = {
45
+ metadata,
46
+ request: sanitizeData(request, config),
47
+ response: sanitizeData(response, config),
48
+ providerRequest: providerData?.providerRequest
49
+ ? sanitizeData(providerData.providerRequest, config)
50
+ : undefined,
51
+ providerResponse: providerData?.providerResponse
52
+ ? sanitizeData(providerData.providerResponse, config)
53
+ : undefined,
54
+ };
55
+ // Save to file
56
+ await saveFixture(config, fixture);
57
+ return fixture;
58
+ }
59
+ /**
60
+ * Capture a streaming chat interaction
61
+ */
62
+ export async function captureStream(config, request, chunks, finalResponse, providerData) {
63
+ const metadata = {
64
+ provider: config.provider,
65
+ scenario: config.scenario,
66
+ model: request.parameters?.model || 'unknown',
67
+ capturedAt: new Date().toISOString(),
68
+ description: config.description,
69
+ tags: config.tags ? [...config.tags, 'streaming'] : ['streaming'],
70
+ apiVersion: config.apiVersion,
71
+ };
72
+ const fixture = {
73
+ metadata,
74
+ request: sanitizeData(request, config),
75
+ chunks: sanitizeData(chunks, config),
76
+ finalResponse: finalResponse ? sanitizeData(finalResponse, config) : undefined,
77
+ providerRequest: providerData?.providerRequest
78
+ ? sanitizeData(providerData.providerRequest, config)
79
+ : undefined,
80
+ providerStreamEvents: providerData?.providerStreamEvents
81
+ ? sanitizeData(providerData.providerStreamEvents, config)
82
+ : undefined,
83
+ };
84
+ // Save to file
85
+ await saveFixture(config, fixture);
86
+ return fixture;
87
+ }
88
+ /**
89
+ * Save fixture to file
90
+ */
91
+ async function saveFixture(config, fixture) {
92
+ const outputDir = config.outputDir || FIXTURES_DIR;
93
+ const providerDir = join(outputDir, config.provider);
94
+ // Ensure provider directory exists
95
+ await mkdir(providerDir, { recursive: true });
96
+ // Write fixture file
97
+ const fixturePath = join(providerDir, `${config.scenario}.json`);
98
+ const content = JSON.stringify(fixture, null, 2);
99
+ await writeFile(fixturePath, content, 'utf-8');
100
+ console.warn(`Fixture saved: ${fixturePath}`);
101
+ }
102
+ /**
103
+ * Capture middleware - wraps a backend adapter to automatically capture fixtures
104
+ */
105
+ export function createCaptureMiddleware(config) {
106
+ return {
107
+ name: 'fixture-capture',
108
+ processRequest(request) {
109
+ // Store request for later capture
110
+ request._captureRequest = request;
111
+ return request;
112
+ },
113
+ async processResponse(response, request) {
114
+ // Auto-generate scenario name from request
115
+ const scenario = generateScenarioName(request);
116
+ await captureChat({
117
+ ...config,
118
+ scenario,
119
+ sanitize: config.sanitize ?? true,
120
+ }, request, response);
121
+ return response;
122
+ },
123
+ };
124
+ }
125
+ /**
126
+ * Generate a scenario name from request
127
+ */
128
+ function generateScenarioName(request) {
129
+ const parts = [];
130
+ // Add model
131
+ if (request.parameters?.model) {
132
+ parts.push(request.parameters.model.replace(/[^a-z0-9-]/gi, '-'));
133
+ }
134
+ // Add tools indicator
135
+ if (request.tools && request.tools.length > 0) {
136
+ parts.push('with-tools');
137
+ }
138
+ // Add vision indicator
139
+ const hasImages = request.messages.some((msg) => {
140
+ const content = msg.content;
141
+ if (Array.isArray(content)) {
142
+ return content.some((c) => c.type === 'image');
143
+ }
144
+ return false;
145
+ });
146
+ if (hasImages) {
147
+ parts.push('with-vision');
148
+ }
149
+ return parts.join('-') || 'basic-chat';
150
+ }
151
+ /**
152
+ * Bulk capture utility - capture multiple fixtures at once
153
+ */
154
+ export async function bulkCapture(config, captures) {
155
+ for (const capture of captures) {
156
+ await captureChat({
157
+ ...config,
158
+ scenario: capture.scenario,
159
+ }, capture.request, capture.response);
160
+ }
161
+ console.warn(`Captured ${captures.length} fixtures for ${config.provider}`);
162
+ }
163
+ //# sourceMappingURL=fixture-capture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixture-capture.js","sourceRoot":"","sources":["../../src/fixture-capture.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,228 @@
1
+ /**
2
+ * Fixture helpers - utilities for using fixtures in tests
3
+ */
4
+ import { isChatFixture, isStreamingFixture } from './fixture-types.js';
5
+ /**
6
+ * Create a mock backend adapter from a fixture
7
+ */
8
+ export function createMockFromFixture(fixture) {
9
+ if (isChatFixture(fixture)) {
10
+ return createMockFromChatFixture(fixture);
11
+ }
12
+ else {
13
+ return createMockFromStreamingFixture(fixture);
14
+ }
15
+ }
16
+ /**
17
+ * Create a mock backend adapter from a chat fixture
18
+ */
19
+ function createMockFromChatFixture(fixture) {
20
+ return {
21
+ name: `mock-${fixture.metadata.provider}`,
22
+ async chat(_request) {
23
+ return fixture.response;
24
+ },
25
+ };
26
+ }
27
+ /**
28
+ * Create a mock backend adapter from a streaming fixture
29
+ */
30
+ function createMockFromStreamingFixture(fixture) {
31
+ return {
32
+ name: `mock-${fixture.metadata.provider}`,
33
+ async *chatStream(_request) {
34
+ for (const chunk of fixture.chunks) {
35
+ yield chunk;
36
+ }
37
+ },
38
+ async chat(_request) {
39
+ if (!fixture.finalResponse) {
40
+ throw new Error('Fixture does not have a final response');
41
+ }
42
+ return fixture.finalResponse;
43
+ },
44
+ };
45
+ }
46
+ /**
47
+ * Replay streaming fixture with timing
48
+ */
49
+ export async function* replayStreamWithTiming(fixture, options) {
50
+ const delay = options?.chunkDelay ?? 10;
51
+ const speedMultiplier = options?.speedMultiplier ?? 1.0;
52
+ const actualDelay = delay / speedMultiplier;
53
+ for (const chunk of fixture.chunks) {
54
+ yield chunk;
55
+ // Delay before next chunk (simulate network latency)
56
+ if (actualDelay > 0) {
57
+ await new Promise((resolve) => setTimeout(resolve, actualDelay));
58
+ }
59
+ }
60
+ }
61
+ /**
62
+ * Create multiple mocks from multiple fixtures
63
+ */
64
+ export function createMocksFromFixtures(fixtures) {
65
+ const mocks = new Map();
66
+ for (const fixture of fixtures) {
67
+ const key = `${fixture.metadata.provider}-${fixture.metadata.scenario}`;
68
+ mocks.set(key, createMockFromFixture(fixture));
69
+ }
70
+ return mocks;
71
+ }
72
+ /**
73
+ * Check if a fixture is for streaming
74
+ */
75
+ export function fixtureIsStreaming(fixture) {
76
+ return isStreamingFixture(fixture);
77
+ }
78
+ /**
79
+ * Validate that a response matches a fixture
80
+ */
81
+ export function validateAgainstFixture(response, fixture, options) {
82
+ const ignoreFields = new Set(options?.ignoreFields || ['metadata.timestamp', 'metadata.requestId']);
83
+ if (options?.exact) {
84
+ // Deep equality check (minus ignored fields)
85
+ return deepEqual(response, fixture.response, ignoreFields);
86
+ }
87
+ // Basic structure check
88
+ if (!response.message?.content) {
89
+ return false;
90
+ }
91
+ // Check message role matches
92
+ if (response.message.role !== fixture.response.message.role) {
93
+ return false;
94
+ }
95
+ // Check has content
96
+ if (response.message.content.length === 0) {
97
+ return false;
98
+ }
99
+ return true;
100
+ }
101
+ /**
102
+ * Deep equality check with ignored fields
103
+ */
104
+ function deepEqual(obj1, obj2, ignoreFields, path = '') {
105
+ if (obj1 === obj2) {
106
+ return true;
107
+ }
108
+ if (typeof obj1 !== typeof obj2) {
109
+ return false;
110
+ }
111
+ if (typeof obj1 !== 'object' || obj1 === null || obj2 === null) {
112
+ return obj1 === obj2;
113
+ }
114
+ const keys1 = Object.keys(obj1);
115
+ const keys2 = Object.keys(obj2);
116
+ if (keys1.length !== keys2.length) {
117
+ return false;
118
+ }
119
+ for (const key of keys1) {
120
+ const fullPath = path ? `${path}.${key}` : key;
121
+ if (ignoreFields.has(fullPath)) {
122
+ continue;
123
+ }
124
+ const val1 = obj1[key];
125
+ const val2 = obj2[key];
126
+ if (!deepEqual(val1, val2, ignoreFields, fullPath)) {
127
+ return false;
128
+ }
129
+ }
130
+ return true;
131
+ }
132
+ /**
133
+ * Extract request from fixture (useful for replaying)
134
+ */
135
+ export function extractRequest(fixture) {
136
+ return fixture.request;
137
+ }
138
+ /**
139
+ * Extract response from fixture
140
+ */
141
+ export function extractResponse(fixture) {
142
+ return fixture.response;
143
+ }
144
+ /**
145
+ * Extract streaming chunks from fixture
146
+ */
147
+ export function extractChunks(fixture) {
148
+ return fixture.chunks;
149
+ }
150
+ /**
151
+ * Collect streaming chunks into a single response
152
+ */
153
+ export function collectChunksToResponse(chunks) {
154
+ let textContent = '';
155
+ const role = 'assistant';
156
+ for (const chunk of chunks) {
157
+ if (chunk.type === 'content') {
158
+ textContent += chunk.delta || '';
159
+ }
160
+ }
161
+ return {
162
+ message: {
163
+ role,
164
+ content: [{ type: 'text', text: textContent }],
165
+ },
166
+ usage: {
167
+ promptTokens: 0,
168
+ completionTokens: 0,
169
+ totalTokens: 0,
170
+ },
171
+ finishReason: 'stop',
172
+ metadata: {
173
+ requestId: 'collected-from-chunks',
174
+ timestamp: Date.now(),
175
+ },
176
+ };
177
+ }
178
+ /**
179
+ * Create a test-friendly mock with custom responses
180
+ */
181
+ export function createConfigurableMock(name, defaultResponse) {
182
+ let response = defaultResponse;
183
+ let streamChunks;
184
+ let error;
185
+ const mock = {
186
+ name,
187
+ async chat(_request) {
188
+ if (error) {
189
+ throw error;
190
+ }
191
+ if (!response) {
192
+ throw new Error('Mock has no response configured');
193
+ }
194
+ return response;
195
+ },
196
+ async *chatStream(_request) {
197
+ if (error) {
198
+ throw error;
199
+ }
200
+ if (!streamChunks || streamChunks.length === 0) {
201
+ throw new Error('Mock has no stream chunks configured');
202
+ }
203
+ for (const chunk of streamChunks) {
204
+ yield chunk;
205
+ }
206
+ },
207
+ setResponse(newResponse) {
208
+ response = newResponse;
209
+ error = undefined;
210
+ },
211
+ setStreamChunks(chunks) {
212
+ streamChunks = chunks;
213
+ error = undefined;
214
+ },
215
+ setError(newError) {
216
+ error = newError;
217
+ response = undefined;
218
+ streamChunks = undefined;
219
+ },
220
+ reset() {
221
+ response = defaultResponse;
222
+ streamChunks = undefined;
223
+ error = undefined;
224
+ },
225
+ };
226
+ return mock;
227
+ }
228
+ //# sourceMappingURL=fixture-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixture-helpers.js","sourceRoot":"","sources":["../../src/fixture-helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,154 @@
1
+ /**
2
+ * Fixture loader - loads fixtures from files
3
+ */
4
+ import { readFile } from 'fs/promises';
5
+ import { join } from 'path';
6
+ import { isChatFixture, isStreamingFixture } from './fixture-types.js';
7
+ /**
8
+ * Default fixtures directory (relative to project root)
9
+ */
10
+ export const FIXTURES_DIR = join(process.cwd(), 'fixtures');
11
+ /**
12
+ * In-memory fixture cache
13
+ */
14
+ const fixtureCache = new Map();
15
+ /**
16
+ * Load a single fixture from file
17
+ */
18
+ export async function loadFixture(provider, scenario, options) {
19
+ const cacheKey = `${provider}/${scenario}`;
20
+ // Check cache
21
+ if (options?.useCache !== false) {
22
+ const cached = fixtureCache.get(cacheKey);
23
+ if (cached) {
24
+ return cached;
25
+ }
26
+ }
27
+ // Load from file
28
+ const fixturePath = join(FIXTURES_DIR, provider, `${scenario}.json`);
29
+ try {
30
+ const content = await readFile(fixturePath, 'utf-8');
31
+ const fixture = JSON.parse(content);
32
+ // Validate fixture structure
33
+ if (!fixture.metadata || !fixture.request) {
34
+ throw new Error(`Invalid fixture format: ${fixturePath}`);
35
+ }
36
+ // Cache and return
37
+ fixtureCache.set(cacheKey, fixture);
38
+ return fixture;
39
+ }
40
+ catch (error) {
41
+ if (error.code === 'ENOENT') {
42
+ throw new Error(`Fixture not found: ${provider}/${scenario}`);
43
+ }
44
+ throw error;
45
+ }
46
+ }
47
+ /**
48
+ * Load all fixtures for a provider
49
+ */
50
+ export async function loadProviderFixtures(provider, options) {
51
+ try {
52
+ const { readdir } = await import('fs/promises');
53
+ const providerDir = join(FIXTURES_DIR, provider);
54
+ const files = await readdir(providerDir);
55
+ const fixtures = await Promise.all(files
56
+ .filter((file) => file.endsWith('.json'))
57
+ .map((file) => {
58
+ const scenario = file.replace('.json', '');
59
+ return loadFixture(provider, scenario, options);
60
+ }));
61
+ return fixtures;
62
+ }
63
+ catch (error) {
64
+ if (error.code === 'ENOENT') {
65
+ return []; // Provider directory doesn't exist
66
+ }
67
+ throw error;
68
+ }
69
+ }
70
+ /**
71
+ * Search fixtures by query
72
+ */
73
+ export async function findFixtures(query) {
74
+ const { readdir, stat } = await import('fs/promises');
75
+ // Get list of providers
76
+ let providers;
77
+ if (query.provider) {
78
+ providers = [query.provider];
79
+ }
80
+ else {
81
+ try {
82
+ const entries = await readdir(FIXTURES_DIR);
83
+ // Filter out non-directories (like README.md)
84
+ const providerChecks = await Promise.all(entries.map(async (entry) => {
85
+ try {
86
+ const stats = await stat(join(FIXTURES_DIR, entry));
87
+ return stats.isDirectory() ? entry : null;
88
+ }
89
+ catch {
90
+ return null;
91
+ }
92
+ }));
93
+ providers = providerChecks.filter((p) => p !== null);
94
+ }
95
+ catch {
96
+ return [];
97
+ }
98
+ }
99
+ // Load all fixtures from matching providers
100
+ const allFixtures = await Promise.all(providers.map((provider) => loadProviderFixtures(provider)));
101
+ const fixtures = allFixtures.flat();
102
+ // Filter by query
103
+ return fixtures.filter((fixture) => {
104
+ if (query.scenario && fixture.metadata.scenario !== query.scenario) {
105
+ return false;
106
+ }
107
+ if (query.model && fixture.metadata.model !== query.model) {
108
+ return false;
109
+ }
110
+ if (query.tags && query.tags.length > 0) {
111
+ const fixtureTags = fixture.metadata.tags || [];
112
+ if (!query.tags.some((tag) => fixtureTags.includes(tag))) {
113
+ return false;
114
+ }
115
+ }
116
+ if (query.streaming !== undefined) {
117
+ if (query.streaming && !isStreamingFixture(fixture)) {
118
+ return false;
119
+ }
120
+ if (!query.streaming && !isChatFixture(fixture)) {
121
+ return false;
122
+ }
123
+ }
124
+ return true;
125
+ });
126
+ }
127
+ /**
128
+ * Clear fixture cache
129
+ */
130
+ export function clearFixtureCache() {
131
+ fixtureCache.clear();
132
+ }
133
+ /**
134
+ * Get cache statistics
135
+ */
136
+ export function getFixtureCacheStats() {
137
+ return {
138
+ size: fixtureCache.size,
139
+ keys: Array.from(fixtureCache.keys()),
140
+ };
141
+ }
142
+ /**
143
+ * Load a fixture collection (multiple fixtures in one file)
144
+ */
145
+ export async function loadFixtureCollection(provider, collectionName) {
146
+ const collectionPath = join(FIXTURES_DIR, provider, 'collections', `${collectionName}.json`);
147
+ const content = await readFile(collectionPath, 'utf-8');
148
+ const collection = JSON.parse(content);
149
+ if (!collection.fixtures || !Array.isArray(collection.fixtures)) {
150
+ throw new Error(`Invalid fixture collection format: ${collectionPath}`);
151
+ }
152
+ return collection;
153
+ }
154
+ //# sourceMappingURL=fixture-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixture-loader.js","sourceRoot":"","sources":["../../src/fixture-loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Type definitions for test fixtures
3
+ */
4
+ /**
5
+ * Type guard for streaming fixtures
6
+ */
7
+ export function isStreamingFixture(fixture) {
8
+ return 'chunks' in fixture;
9
+ }
10
+ /**
11
+ * Type guard for chat fixtures
12
+ */
13
+ export function isChatFixture(fixture) {
14
+ return 'response' in fixture && !('chunks' in fixture);
15
+ }
16
+ //# sourceMappingURL=fixture-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixture-types.js","sourceRoot":"","sources":["../../src/fixture-types.ts"],"names":[],"mappings":"AAAA;;GAEG;AA0DH;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAgB;IACjD,OAAO,QAAQ,IAAI,OAAO,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,OAAO,UAAU,IAAI,OAAO,IAAI,CAAC,CAAC,QAAQ,IAAI,OAAO,CAAC,CAAC;AACzD,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Testing utilities and fixtures
3
+ */
4
+ // Type guards
5
+ export { isChatFixture, isStreamingFixture } from './fixture-types.js';
6
+ // Fixture loading
7
+ export { FIXTURES_DIR, loadFixture, loadProviderFixtures, findFixtures, clearFixtureCache, getFixtureCacheStats, loadFixtureCollection, } from './fixture-loader.js';
8
+ export { captureChat, captureStream, createCaptureMiddleware, bulkCapture, } from './fixture-capture.js';
9
+ // Fixture helpers
10
+ export { createMockFromFixture, replayStreamWithTiming, createMocksFromFixtures, validateAgainstFixture, extractRequest, extractResponse, extractChunks, collectChunksToResponse, createConfigurableMock, } from './fixture-helpers.js';
11
+ // Test helpers and assertions
12
+ export { assertValidChatResponse, assertValidStreamChunk, assertValidChatRequest, assertValidMessage, assertValidMessageContent, assertResponseHasText, assertResponseHasToolUse, assertValidStreamSequence, buildChatRequest, buildMultiTurnRequest, extractTextFromResponse, extractToolUsesFromResponse, accumulateStreamText, estimateTokens, assertReasonableUsage, } from './test-helpers.js';
13
+ // Property-based testing
14
+ export { SeededRandom, generateTextContent, generateUserMessage, generateAssistantMessage, generateSystemMessage, generateParameters, generateChatRequest, forAll, shrinkChatRequest, propertyValidRequest, propertyMultiTurnAlternates, } from './property-testing.js';
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAYH,cAAc;AACd,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAEvE,kBAAkB;AAClB,OAAO,EACL,YAAY,EACZ,WAAW,EACX,oBAAoB,EACpB,YAAY,EACZ,iBAAiB,EACjB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,qBAAqB,CAAC;AAI7B,OAAO,EACL,WAAW,EACX,aAAa,EACb,uBAAuB,EACvB,WAAW,GACZ,MAAM,sBAAsB,CAAC;AAE9B,kBAAkB;AAClB,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,cAAc,EACd,eAAe,EACf,aAAa,EACb,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAE9B,8BAA8B;AAC9B,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,sBAAsB,EACtB,kBAAkB,EAClB,yBAAyB,EACzB,qBAAqB,EACrB,wBAAwB,EACxB,yBAAyB,EACzB,gBAAgB,EAChB,qBAAqB,EACrB,uBAAuB,EACvB,2BAA2B,EAC3B,oBAAoB,EACpB,cAAc,EACd,qBAAqB,GACtB,MAAM,mBAAmB,CAAC;AAE3B,yBAAyB;AACzB,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,EACxB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,MAAM,EACN,iBAAiB,EACjB,oBAAoB,EACpB,2BAA2B,GAC5B,MAAM,uBAAuB,CAAC"}