@ordis-dev/ordis 0.2.0 → 0.4.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 (75) hide show
  1. package/README.md +47 -0
  2. package/dist/cli.js +20 -4
  3. package/dist/cli.js.map +1 -1
  4. package/dist/core/error-formatter.d.ts +35 -0
  5. package/dist/core/error-formatter.d.ts.map +1 -0
  6. package/dist/core/error-formatter.js +319 -0
  7. package/dist/core/error-formatter.js.map +1 -0
  8. package/dist/core/pipeline.d.ts.map +1 -1
  9. package/dist/core/pipeline.js +3 -2
  10. package/dist/core/pipeline.js.map +1 -1
  11. package/dist/core/types.d.ts +2 -1
  12. package/dist/core/types.d.ts.map +1 -1
  13. package/dist/core/validator.d.ts +3 -1
  14. package/dist/core/validator.d.ts.map +1 -1
  15. package/dist/core/validator.js.map +1 -1
  16. package/dist/index.d.ts +1 -0
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +1 -0
  19. package/dist/index.js.map +1 -1
  20. package/dist/llm/client.d.ts.map +1 -1
  21. package/dist/llm/client.js +23 -3
  22. package/dist/llm/client.js.map +1 -1
  23. package/dist/llm/types.d.ts +2 -0
  24. package/dist/llm/types.d.ts.map +1 -1
  25. package/dist/schemas/types.d.ts +3 -1
  26. package/dist/schemas/types.d.ts.map +1 -1
  27. package/package.json +1 -1
  28. package/dist/__tests__/api.test.d.ts +0 -5
  29. package/dist/__tests__/api.test.d.ts.map +0 -1
  30. package/dist/__tests__/api.test.js +0 -95
  31. package/dist/__tests__/api.test.js.map +0 -1
  32. package/dist/__tests__/cli.test.d.ts +0 -6
  33. package/dist/__tests__/cli.test.d.ts.map +0 -1
  34. package/dist/__tests__/cli.test.js +0 -103
  35. package/dist/__tests__/cli.test.js.map +0 -1
  36. package/dist/cli/__tests__/cli.test.d.ts +0 -5
  37. package/dist/cli/__tests__/cli.test.d.ts.map +0 -1
  38. package/dist/cli/__tests__/cli.test.js +0 -13
  39. package/dist/cli/__tests__/cli.test.js.map +0 -1
  40. package/dist/core/__tests__/pipeline.test.d.ts +0 -5
  41. package/dist/core/__tests__/pipeline.test.d.ts.map +0 -1
  42. package/dist/core/__tests__/pipeline.test.js +0 -334
  43. package/dist/core/__tests__/pipeline.test.js.map +0 -1
  44. package/dist/core/__tests__/validator.test.d.ts +0 -5
  45. package/dist/core/__tests__/validator.test.d.ts.map +0 -1
  46. package/dist/core/__tests__/validator.test.js +0 -124
  47. package/dist/core/__tests__/validator.test.js.map +0 -1
  48. package/dist/llm/__tests__/client.test.d.ts +0 -5
  49. package/dist/llm/__tests__/client.test.d.ts.map +0 -1
  50. package/dist/llm/__tests__/client.test.js +0 -350
  51. package/dist/llm/__tests__/client.test.js.map +0 -1
  52. package/dist/llm/__tests__/prompt-builder.test.d.ts +0 -5
  53. package/dist/llm/__tests__/prompt-builder.test.d.ts.map +0 -1
  54. package/dist/llm/__tests__/prompt-builder.test.js +0 -171
  55. package/dist/llm/__tests__/prompt-builder.test.js.map +0 -1
  56. package/dist/llm/__tests__/retry.test.d.ts +0 -5
  57. package/dist/llm/__tests__/retry.test.d.ts.map +0 -1
  58. package/dist/llm/__tests__/retry.test.js +0 -350
  59. package/dist/llm/__tests__/retry.test.js.map +0 -1
  60. package/dist/llm/__tests__/token-counter.test.d.ts +0 -5
  61. package/dist/llm/__tests__/token-counter.test.d.ts.map +0 -1
  62. package/dist/llm/__tests__/token-counter.test.js +0 -166
  63. package/dist/llm/__tests__/token-counter.test.js.map +0 -1
  64. package/dist/schemas/__tests__/integration.test.d.ts +0 -5
  65. package/dist/schemas/__tests__/integration.test.d.ts.map +0 -1
  66. package/dist/schemas/__tests__/integration.test.js +0 -366
  67. package/dist/schemas/__tests__/integration.test.js.map +0 -1
  68. package/dist/schemas/__tests__/loader.test.d.ts +0 -5
  69. package/dist/schemas/__tests__/loader.test.d.ts.map +0 -1
  70. package/dist/schemas/__tests__/loader.test.js +0 -271
  71. package/dist/schemas/__tests__/loader.test.js.map +0 -1
  72. package/dist/schemas/__tests__/validator.test.d.ts +0 -5
  73. package/dist/schemas/__tests__/validator.test.d.ts.map +0 -1
  74. package/dist/schemas/__tests__/validator.test.js +0 -592
  75. package/dist/schemas/__tests__/validator.test.js.map +0 -1
@@ -1,350 +0,0 @@
1
- /**
2
- * Tests for retry logic
3
- */
4
- import { describe, it, expect, beforeEach, vi } from 'vitest';
5
- import { LLMClient } from '../client.js';
6
- // Mock fetch globally
7
- global.fetch = vi.fn();
8
- describe('Retry Logic', () => {
9
- beforeEach(() => {
10
- vi.clearAllMocks();
11
- });
12
- const mockSuccessResponse = {
13
- id: 'test-id',
14
- object: 'chat.completion',
15
- created: Date.now(),
16
- model: 'test-model',
17
- choices: [
18
- {
19
- index: 0,
20
- message: {
21
- role: 'assistant',
22
- content: JSON.stringify({
23
- data: { name: 'Test' },
24
- confidence: 95,
25
- confidenceByField: { name: 95 },
26
- }),
27
- },
28
- finish_reason: 'stop',
29
- },
30
- ],
31
- };
32
- const schema = {
33
- fields: {
34
- name: { type: 'string' },
35
- },
36
- };
37
- describe('Network errors', () => {
38
- it('should retry on network errors', async () => {
39
- let callCount = 0;
40
- vi.mocked(fetch).mockImplementation(async () => {
41
- callCount++;
42
- if (callCount < 3) {
43
- throw new Error('Network failure');
44
- }
45
- return {
46
- ok: true,
47
- json: async () => mockSuccessResponse,
48
- };
49
- });
50
- const client = new LLMClient({
51
- baseURL: 'http://localhost:11434/v1',
52
- model: 'llama3',
53
- retries: {
54
- maxRetries: 3,
55
- initialDelay: 10,
56
- maxDelay: 100,
57
- backoffFactor: 2,
58
- },
59
- });
60
- const result = await client.extract({
61
- schema,
62
- input: 'Name: Test',
63
- });
64
- expect(result.data.name).toBe('Test');
65
- expect(callCount).toBe(3);
66
- });
67
- it('should fail after max retries', async () => {
68
- vi.mocked(fetch).mockRejectedValue(new Error('Network failure'));
69
- const client = new LLMClient({
70
- baseURL: 'http://localhost:11434/v1',
71
- model: 'llama3',
72
- retries: {
73
- maxRetries: 2,
74
- initialDelay: 10,
75
- maxDelay: 100,
76
- backoffFactor: 2,
77
- },
78
- });
79
- await expect(client.extract({
80
- schema,
81
- input: 'Name: Test',
82
- })).rejects.toThrow('Network error');
83
- });
84
- });
85
- describe('Rate limiting', () => {
86
- it('should retry on 429 errors', async () => {
87
- let callCount = 0;
88
- vi.mocked(fetch).mockImplementation(async () => {
89
- callCount++;
90
- if (callCount < 2) {
91
- return {
92
- ok: false,
93
- status: 429,
94
- statusText: 'Too Many Requests',
95
- headers: new Headers(),
96
- json: async () => ({ error: { message: 'Rate limit exceeded' } }),
97
- };
98
- }
99
- return {
100
- ok: true,
101
- json: async () => mockSuccessResponse,
102
- };
103
- });
104
- const client = new LLMClient({
105
- baseURL: 'http://localhost:11434/v1',
106
- model: 'llama3',
107
- retries: {
108
- maxRetries: 2,
109
- initialDelay: 10,
110
- maxDelay: 100,
111
- backoffFactor: 2,
112
- },
113
- });
114
- const result = await client.extract({
115
- schema,
116
- input: 'Name: Test',
117
- });
118
- expect(result.data.name).toBe('Test');
119
- expect(callCount).toBe(2);
120
- });
121
- it('should respect Retry-After header', async () => {
122
- let callCount = 0;
123
- const startTime = Date.now();
124
- vi.mocked(fetch).mockImplementation(async () => {
125
- callCount++;
126
- if (callCount < 2) {
127
- const headers = new Headers();
128
- headers.set('Retry-After', '0'); // Use 0 for testing
129
- return {
130
- ok: false,
131
- status: 429,
132
- statusText: 'Too Many Requests',
133
- headers,
134
- json: async () => ({ error: { message: 'Rate limit exceeded' } }),
135
- };
136
- }
137
- return {
138
- ok: true,
139
- json: async () => mockSuccessResponse,
140
- };
141
- });
142
- const client = new LLMClient({
143
- baseURL: 'http://localhost:11434/v1',
144
- model: 'llama3',
145
- retries: {
146
- maxRetries: 2,
147
- initialDelay: 100,
148
- maxDelay: 10000,
149
- backoffFactor: 2,
150
- },
151
- });
152
- const result = await client.extract({
153
- schema,
154
- input: 'Name: Test',
155
- });
156
- expect(result.data.name).toBe('Test');
157
- // Should complete quickly since Retry-After is 0
158
- const elapsed = Date.now() - startTime;
159
- expect(elapsed).toBeLessThan(1000);
160
- });
161
- });
162
- describe('Non-retryable errors', () => {
163
- it('should not retry on authentication errors', async () => {
164
- let callCount = 0;
165
- vi.mocked(fetch).mockImplementation(async () => {
166
- callCount++;
167
- return {
168
- ok: false,
169
- status: 401,
170
- statusText: 'Unauthorized',
171
- headers: new Headers(),
172
- json: async () => ({ error: { message: 'Invalid API key' } }),
173
- };
174
- });
175
- const client = new LLMClient({
176
- baseURL: 'http://localhost:11434/v1',
177
- model: 'llama3',
178
- apiKey: 'invalid',
179
- retries: {
180
- maxRetries: 3,
181
- initialDelay: 10,
182
- maxDelay: 100,
183
- backoffFactor: 2,
184
- },
185
- });
186
- await expect(client.extract({
187
- schema,
188
- input: 'Name: Test',
189
- })).rejects.toThrow('Invalid API key');
190
- expect(callCount).toBe(1); // Should not retry
191
- });
192
- it('should not retry on invalid response', async () => {
193
- let callCount = 0;
194
- vi.mocked(fetch).mockImplementation(async () => {
195
- callCount++;
196
- return {
197
- ok: true,
198
- json: async () => ({
199
- id: 'test-id',
200
- object: 'chat.completion',
201
- created: Date.now(),
202
- model: 'test-model',
203
- choices: [
204
- {
205
- index: 0,
206
- message: {
207
- role: 'assistant',
208
- content: 'This is not valid JSON',
209
- },
210
- finish_reason: 'stop',
211
- },
212
- ],
213
- }),
214
- };
215
- });
216
- const client = new LLMClient({
217
- baseURL: 'http://localhost:11434/v1',
218
- model: 'llama3',
219
- retries: {
220
- maxRetries: 3,
221
- initialDelay: 10,
222
- maxDelay: 100,
223
- backoffFactor: 2,
224
- },
225
- });
226
- await expect(client.extract({
227
- schema,
228
- input: 'Name: Test',
229
- })).rejects.toThrow('Failed to parse');
230
- expect(callCount).toBe(1); // Should not retry
231
- });
232
- });
233
- describe('Exponential backoff', () => {
234
- it('should use exponential backoff with jitter', async () => {
235
- const delays = [];
236
- let callCount = 0;
237
- // Spy on the sleep method to capture delays
238
- const sleepSpy = vi.fn(async (ms) => {
239
- delays.push(ms);
240
- await new Promise(resolve => setTimeout(resolve, 1)); // Fast forward
241
- });
242
- vi.mocked(fetch).mockImplementation(async () => {
243
- callCount++;
244
- if (callCount < 4) {
245
- throw new Error('Network failure');
246
- }
247
- return {
248
- ok: true,
249
- json: async () => mockSuccessResponse,
250
- };
251
- });
252
- const client = new LLMClient({
253
- baseURL: 'http://localhost:11434/v1',
254
- model: 'llama3',
255
- retries: {
256
- maxRetries: 3,
257
- initialDelay: 1000,
258
- maxDelay: 10000,
259
- backoffFactor: 2,
260
- },
261
- });
262
- // Replace sleep method
263
- client.sleep = sleepSpy;
264
- await client.extract({
265
- schema,
266
- input: 'Name: Test',
267
- });
268
- // Should have 3 retries (after 1st, 2nd, and 3rd failures)
269
- expect(delays.length).toBe(3);
270
- // Check exponential backoff pattern with jitter
271
- // First retry: ~1000ms (1000 * 2^0)
272
- expect(delays[0]).toBeGreaterThanOrEqual(1000);
273
- expect(delays[0]).toBeLessThan(1250);
274
- // Second retry: ~2000ms (1000 * 2^1)
275
- expect(delays[1]).toBeGreaterThanOrEqual(2000);
276
- expect(delays[1]).toBeLessThan(2500);
277
- // Third retry: ~4000ms (1000 * 2^2)
278
- expect(delays[2]).toBeGreaterThanOrEqual(4000);
279
- expect(delays[2]).toBeLessThan(5000);
280
- });
281
- it('should cap delay at maxDelay', async () => {
282
- const delays = [];
283
- let callCount = 0;
284
- const sleepSpy = vi.fn(async (ms) => {
285
- delays.push(ms);
286
- await new Promise(resolve => setTimeout(resolve, 1));
287
- });
288
- vi.mocked(fetch).mockImplementation(async () => {
289
- callCount++;
290
- if (callCount < 4) {
291
- throw new Error('Network failure');
292
- }
293
- return {
294
- ok: true,
295
- json: async () => mockSuccessResponse,
296
- };
297
- });
298
- const client = new LLMClient({
299
- baseURL: 'http://localhost:11434/v1',
300
- model: 'llama3',
301
- retries: {
302
- maxRetries: 3,
303
- initialDelay: 5000,
304
- maxDelay: 6000,
305
- backoffFactor: 3,
306
- },
307
- });
308
- client.sleep = sleepSpy;
309
- await client.extract({
310
- schema,
311
- input: 'Name: Test',
312
- });
313
- // All delays should be capped at maxDelay (6000ms)
314
- delays.forEach(delay => {
315
- expect(delay).toBeLessThanOrEqual(6000);
316
- });
317
- });
318
- });
319
- describe('Default configuration', () => {
320
- it('should use default retry config when not specified', async () => {
321
- let callCount = 0;
322
- vi.mocked(fetch).mockImplementation(async () => {
323
- callCount++;
324
- if (callCount < 3) {
325
- throw new Error('Network failure');
326
- }
327
- return {
328
- ok: true,
329
- json: async () => mockSuccessResponse,
330
- };
331
- });
332
- const client = new LLMClient({
333
- baseURL: 'http://localhost:11434/v1',
334
- model: 'llama3',
335
- // No retry config provided - should use defaults
336
- });
337
- // Replace sleep to speed up test
338
- client.sleep = async () => {
339
- await new Promise(resolve => setTimeout(resolve, 1));
340
- };
341
- const result = await client.extract({
342
- schema,
343
- input: 'Name: Test',
344
- });
345
- expect(result.data.name).toBe('Test');
346
- expect(callCount).toBe(3);
347
- });
348
- });
349
- });
350
- //# sourceMappingURL=retry.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"retry.test.js","sourceRoot":"","sources":["../../../src/llm/__tests__/retry.test.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- /**
2
- * Token counter tests
3
- */
4
- export {};
5
- //# sourceMappingURL=token-counter.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"token-counter.test.d.ts","sourceRoot":"","sources":["../../../src/llm/__tests__/token-counter.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -1,166 +0,0 @@
1
- /**
2
- * Token counter tests
3
- */
4
- import { describe, test, expect } from 'vitest';
5
- import { estimateTokens, TokenCounter } from '../token-counter.js';
6
- describe('estimateTokens', () => {
7
- test('returns 0 for empty string', () => {
8
- expect(estimateTokens('')).toBe(0);
9
- });
10
- test('estimates tokens using 4 chars per token', () => {
11
- // 20 characters = 5 tokens
12
- expect(estimateTokens('12345678901234567890')).toBe(5);
13
- });
14
- test('rounds up for partial tokens', () => {
15
- // 21 characters = 6 tokens (5.25 rounded up)
16
- expect(estimateTokens('123456789012345678901')).toBe(6);
17
- });
18
- test('handles longer text', () => {
19
- const text = 'The quick brown fox jumps over the lazy dog. '.repeat(10);
20
- const tokens = estimateTokens(text);
21
- expect(tokens).toBeGreaterThan(0);
22
- // 45 chars * 10 = 450 chars = ~113 tokens
23
- expect(tokens).toBeCloseTo(113, 0);
24
- });
25
- });
26
- describe('TokenCounter', () => {
27
- describe('calculateUsage', () => {
28
- test('calculates token usage correctly', () => {
29
- const counter = new TokenCounter({
30
- maxContextTokens: 4096,
31
- tokenBudget: {
32
- system: 1000,
33
- input: 2000,
34
- output: 1000,
35
- },
36
- });
37
- // 400 chars = 100 tokens, 800 chars = 200 tokens
38
- const system = 'a'.repeat(400);
39
- const input = 'b'.repeat(800);
40
- const usage = counter.calculateUsage(system, input);
41
- expect(usage.systemTokens).toBe(100);
42
- expect(usage.inputTokens).toBe(200);
43
- expect(usage.outputTokens).toBe(1000);
44
- expect(usage.totalTokens).toBe(1300);
45
- expect(usage.maxContextTokens).toBe(4096);
46
- expect(usage.usagePercent).toBeCloseTo(31.7, 1);
47
- });
48
- test('handles empty strings', () => {
49
- const counter = new TokenCounter();
50
- const usage = counter.calculateUsage('', '');
51
- expect(usage.systemTokens).toBe(0);
52
- expect(usage.inputTokens).toBe(0);
53
- expect(usage.totalTokens).toBe(1000); // just output tokens
54
- });
55
- });
56
- describe('exceedsLimit', () => {
57
- test('returns true when total exceeds max', () => {
58
- const counter = new TokenCounter({ maxContextTokens: 100 });
59
- const usage = counter.calculateUsage('a'.repeat(400), 'b'.repeat(400));
60
- // 100 + 100 + 1000 = 1200 > 100
61
- expect(counter.exceedsLimit(usage)).toBe(true);
62
- });
63
- test('returns false when under limit', () => {
64
- const counter = new TokenCounter({ maxContextTokens: 4096 });
65
- const usage = counter.calculateUsage('a'.repeat(400), 'b'.repeat(400));
66
- // 100 + 100 + 1000 = 1200 < 4096
67
- expect(counter.exceedsLimit(usage)).toBe(false);
68
- });
69
- test('returns false when exactly at limit', () => {
70
- const counter = new TokenCounter({ maxContextTokens: 1200 });
71
- const usage = counter.calculateUsage('a'.repeat(400), 'b'.repeat(400));
72
- // 100 + 100 + 1000 = 1200 === 1200
73
- expect(counter.exceedsLimit(usage)).toBe(false);
74
- });
75
- });
76
- describe('shouldWarn', () => {
77
- test('returns true when usage exceeds warn threshold', () => {
78
- const counter = new TokenCounter({
79
- maxContextTokens: 1000,
80
- warnThreshold: 90,
81
- });
82
- // 360 + 360 + 1000 = 1720 tokens = 172% (way over)
83
- const usage = counter.calculateUsage('a'.repeat(1440), 'b'.repeat(1440));
84
- expect(counter.shouldWarn(usage)).toBe(true);
85
- });
86
- test('returns false when under warn threshold', () => {
87
- const counter = new TokenCounter({
88
- maxContextTokens: 4096,
89
- warnThreshold: 90,
90
- });
91
- // 100 + 100 + 1000 = 1200 = ~29%
92
- const usage = counter.calculateUsage('a'.repeat(400), 'b'.repeat(400));
93
- expect(counter.shouldWarn(usage)).toBe(false);
94
- });
95
- test('uses 90% default threshold', () => {
96
- const counter = new TokenCounter({ maxContextTokens: 1000 });
97
- // Need 900+ tokens to trigger warning
98
- // 200 + 200 + 1000 = 1400 = 140%
99
- const usage = counter.calculateUsage('a'.repeat(800), 'b'.repeat(800));
100
- expect(counter.shouldWarn(usage)).toBe(true);
101
- });
102
- });
103
- describe('formatUsage', () => {
104
- test('formats usage information', () => {
105
- const counter = new TokenCounter({ maxContextTokens: 4096 });
106
- const usage = counter.calculateUsage('a'.repeat(400), 'b'.repeat(800));
107
- const formatted = counter.formatUsage(usage);
108
- expect(formatted).toContain('Token usage:');
109
- expect(formatted).toContain('1300/4096');
110
- expect(formatted).toContain('System prompt: 100 tokens');
111
- expect(formatted).toContain('Input: 200 tokens');
112
- expect(formatted).toContain('Reserved for output: 1000 tokens');
113
- });
114
- });
115
- describe('getErrorMessage', () => {
116
- test('provides detailed error message when limit exceeded', () => {
117
- const counter = new TokenCounter({ maxContextTokens: 1000 });
118
- const usage = counter.calculateUsage('a'.repeat(1000), 'b'.repeat(2000));
119
- // 250 + 500 + 1000 = 1750 tokens
120
- const message = counter.getErrorMessage(usage);
121
- expect(message).toContain('Token budget exceeded');
122
- expect(message).toContain('1750/1000');
123
- expect(message).toContain('750 over limit');
124
- expect(message).toContain('System prompt: 250 tokens');
125
- expect(message).toContain('Input: 500 tokens');
126
- expect(message).toContain('Suggestions:');
127
- });
128
- });
129
- describe('getWarningMessage', () => {
130
- test('provides warning message when approaching limit', () => {
131
- const counter = new TokenCounter({ maxContextTokens: 1000 });
132
- const usage = counter.calculateUsage('a'.repeat(800), 'b'.repeat(800));
133
- const message = counter.getWarningMessage(usage);
134
- expect(message).toContain('⚠');
135
- expect(message).toContain('Approaching token budget limit');
136
- expect(message).toContain('System:');
137
- expect(message).toContain('Input:');
138
- expect(message).toContain('Output:');
139
- });
140
- });
141
- describe('configuration', () => {
142
- test('uses default values when not specified', () => {
143
- const counter = new TokenCounter();
144
- const usage = counter.calculateUsage('', '');
145
- expect(usage.maxContextTokens).toBe(4096);
146
- expect(usage.outputTokens).toBe(1000);
147
- });
148
- test('respects custom maxContextTokens', () => {
149
- const counter = new TokenCounter({ maxContextTokens: 8192 });
150
- const usage = counter.calculateUsage('', '');
151
- expect(usage.maxContextTokens).toBe(8192);
152
- });
153
- test('respects custom token budget', () => {
154
- const counter = new TokenCounter({
155
- tokenBudget: {
156
- system: 500,
157
- input: 1500,
158
- output: 2000,
159
- },
160
- });
161
- const usage = counter.calculateUsage('', '');
162
- expect(usage.outputTokens).toBe(2000);
163
- });
164
- });
165
- });
166
- //# sourceMappingURL=token-counter.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"token-counter.test.js","sourceRoot":"","sources":["../../../src/llm/__tests__/token-counter.test.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- /**
2
- * Integration tests for schema system
3
- */
4
- export {};
5
- //# sourceMappingURL=integration.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"integration.test.d.ts","sourceRoot":"","sources":["../../../src/schemas/__tests__/integration.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}