@rustledger/mcp-server 0.2.0 → 0.5.2

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.
@@ -0,0 +1,585 @@
1
+ import { describe, it, expect, beforeAll } from 'vitest';
2
+ import * as rustledger from '@rustledger/wasm';
3
+ import { handleToolCall } from '../handlers.js';
4
+ import { validateArgs, formatErrors, formatQueryResult, textResponse, errorResponse, jsonResponse } from '../helpers.js';
5
+ import { TOOLS } from '../tools.js';
6
+ import { RESOURCES, getResourceContents } from '../resources.js';
7
+ import { PROMPTS, getPrompt } from '../prompts.js';
8
+ // Initialize WASM before tests (nodejs target auto-loads WASM)
9
+ beforeAll(() => {
10
+ rustledger.init();
11
+ });
12
+ // Sample ledger for testing
13
+ // Note: Transactions must be in chronological order for balance assertion to work
14
+ const SAMPLE_LEDGER = `
15
+ 2024-01-01 open Assets:Checking USD
16
+ 2024-01-01 open Expenses:Food USD
17
+ 2024-01-01 open Income:Salary USD
18
+
19
+ 2024-01-10 * "Employer" "January salary"
20
+ Assets:Checking 5000.00 USD
21
+ Income:Salary -5000.00 USD
22
+
23
+ 2024-01-15 * "Grocery Store" "Weekly groceries" #food
24
+ Expenses:Food 50.00 USD
25
+ Assets:Checking -50.00 USD
26
+
27
+ 2024-01-31 balance Assets:Checking 4950.00 USD
28
+ `;
29
+ // ============================================================================
30
+ // WASM Binding Tests
31
+ // ============================================================================
32
+ describe('rustledger WASM bindings', () => {
33
+ describe('validateSource', () => {
34
+ it('should validate a correct ledger', () => {
35
+ const result = rustledger.validateSource(SAMPLE_LEDGER);
36
+ expect(result.valid).toBe(true);
37
+ expect(result.errors).toHaveLength(0);
38
+ });
39
+ it('should report errors for invalid ledger', () => {
40
+ const invalidLedger = `
41
+ 2024-01-15 * "Test"
42
+ Expenses:Food 100 USD
43
+ Assets:Checking
44
+ `;
45
+ const result = rustledger.validateSource(invalidLedger);
46
+ expect(result.valid).toBe(false);
47
+ expect(result.errors.length).toBeGreaterThan(0);
48
+ });
49
+ });
50
+ describe('query', () => {
51
+ it('should execute BALANCES query', () => {
52
+ const result = rustledger.query(SAMPLE_LEDGER, 'BALANCES');
53
+ expect(result.errors).toHaveLength(0);
54
+ expect(result.columns).toContain('account');
55
+ });
56
+ it('should filter by account', () => {
57
+ const result = rustledger.query(SAMPLE_LEDGER, 'SELECT account, sum(position) WHERE account ~ "Expenses" GROUP BY account');
58
+ expect(result.errors).toHaveLength(0);
59
+ expect(result.rows.length).toBeGreaterThan(0);
60
+ });
61
+ it('should report query errors', () => {
62
+ const result = rustledger.query(SAMPLE_LEDGER, 'INVALID QUERY');
63
+ expect(result.errors.length).toBeGreaterThan(0);
64
+ });
65
+ });
66
+ describe('format', () => {
67
+ it('should format a ledger', () => {
68
+ const result = rustledger.format(SAMPLE_LEDGER);
69
+ expect(result.errors).toHaveLength(0);
70
+ expect(result.formatted).toBeDefined();
71
+ expect(result.formatted.length).toBeGreaterThan(0);
72
+ });
73
+ });
74
+ describe('parse', () => {
75
+ it('should parse a ledger into directives', () => {
76
+ const result = rustledger.parse(SAMPLE_LEDGER);
77
+ expect(result.errors).toHaveLength(0);
78
+ expect(result.ledger).toBeDefined();
79
+ expect(result.ledger.directives.length).toBeGreaterThan(0);
80
+ });
81
+ it('should parse different directive types', () => {
82
+ const result = rustledger.parse(SAMPLE_LEDGER);
83
+ const directives = result.ledger.directives;
84
+ const types = directives.map((d) => d.type);
85
+ expect(types).toContain('open');
86
+ expect(types).toContain('transaction');
87
+ expect(types).toContain('balance');
88
+ });
89
+ });
90
+ describe('listPlugins', () => {
91
+ it('should return available plugins', () => {
92
+ const plugins = rustledger.listPlugins();
93
+ expect(Array.isArray(plugins)).toBe(true);
94
+ });
95
+ });
96
+ describe('bqlCompletions', () => {
97
+ it('should return completions for partial query', () => {
98
+ const result = rustledger.bqlCompletions('SEL', 3);
99
+ expect(result.completions).toBeDefined();
100
+ expect(Array.isArray(result.completions)).toBe(true);
101
+ });
102
+ });
103
+ });
104
+ describe('ParsedLedger class', () => {
105
+ it('should parse and validate a ledger', () => {
106
+ const ledger = new rustledger.ParsedLedger(SAMPLE_LEDGER);
107
+ expect(ledger.isValid()).toBe(true);
108
+ expect(ledger.getErrors()).toHaveLength(0);
109
+ ledger.free();
110
+ });
111
+ it('should get directives', () => {
112
+ const ledger = new rustledger.ParsedLedger(SAMPLE_LEDGER);
113
+ const directives = ledger.getDirectives();
114
+ expect(directives.length).toBeGreaterThan(0);
115
+ ledger.free();
116
+ });
117
+ it('should run queries', () => {
118
+ const ledger = new rustledger.ParsedLedger(SAMPLE_LEDGER);
119
+ const result = ledger.query('BALANCES');
120
+ expect(result.errors).toHaveLength(0);
121
+ expect(result.columns).toBeDefined();
122
+ ledger.free();
123
+ });
124
+ it('should get document symbols', () => {
125
+ const ledger = new rustledger.ParsedLedger(SAMPLE_LEDGER);
126
+ const symbols = ledger.getDocumentSymbols();
127
+ expect(Array.isArray(symbols)).toBe(true);
128
+ expect(symbols.length).toBeGreaterThan(0);
129
+ ledger.free();
130
+ });
131
+ it('should get completions at position', () => {
132
+ const ledger = new rustledger.ParsedLedger(SAMPLE_LEDGER);
133
+ const result = ledger.getCompletions(4, 2);
134
+ expect(result).toBeDefined();
135
+ expect(result.completions).toBeDefined();
136
+ ledger.free();
137
+ });
138
+ it('should get hover info for account', () => {
139
+ const ledger = new rustledger.ParsedLedger(SAMPLE_LEDGER);
140
+ const result = ledger.getHoverInfo(5, 10);
141
+ expect(result === null || typeof result === 'object').toBe(true);
142
+ ledger.free();
143
+ });
144
+ it('should format the ledger', () => {
145
+ const ledger = new rustledger.ParsedLedger(SAMPLE_LEDGER);
146
+ const result = ledger.format();
147
+ expect(result.formatted).toBeDefined();
148
+ ledger.free();
149
+ });
150
+ });
151
+ // ============================================================================
152
+ // Helper Function Tests
153
+ // ============================================================================
154
+ describe('Helper Functions', () => {
155
+ describe('validateArgs', () => {
156
+ it('should return null when all required args are present', () => {
157
+ const result = validateArgs({ source: 'test' }, ['source']);
158
+ expect(result).toBeNull();
159
+ });
160
+ it('should return error when required arg is missing', () => {
161
+ const result = validateArgs({}, ['source']);
162
+ expect(result).not.toBeNull();
163
+ expect(result?.isError).toBe(true);
164
+ expect(result?.content[0].text).toContain('source');
165
+ });
166
+ it('should return error listing multiple missing args', () => {
167
+ const result = validateArgs({}, ['source', 'query']);
168
+ expect(result).not.toBeNull();
169
+ expect(result?.content[0].text).toContain('source');
170
+ expect(result?.content[0].text).toContain('query');
171
+ });
172
+ it('should handle undefined args', () => {
173
+ const result = validateArgs(undefined, ['source']);
174
+ expect(result).not.toBeNull();
175
+ expect(result?.isError).toBe(true);
176
+ });
177
+ });
178
+ describe('formatErrors', () => {
179
+ it('should format errors with line numbers', () => {
180
+ const errors = [
181
+ { message: 'Test error', line: 10, column: 5, severity: 'error' },
182
+ ];
183
+ const result = formatErrors(errors);
184
+ expect(result).toContain('[error]');
185
+ expect(result).toContain(':10:5');
186
+ expect(result).toContain('Test error');
187
+ });
188
+ it('should handle errors without location', () => {
189
+ const errors = [{ message: 'Generic error', severity: 'warning' }];
190
+ const result = formatErrors(errors);
191
+ expect(result).toContain('[warning]');
192
+ expect(result).toContain('Generic error');
193
+ });
194
+ });
195
+ describe('formatQueryResult', () => {
196
+ it('should format query results as table', () => {
197
+ const result = formatQueryResult({
198
+ columns: ['account', 'balance'],
199
+ rows: [['Assets:Checking', '100 USD']],
200
+ });
201
+ expect(result).toContain('account');
202
+ expect(result).toContain('balance');
203
+ expect(result).toContain('Assets:Checking');
204
+ });
205
+ it('should handle empty results', () => {
206
+ const result = formatQueryResult({ columns: [], rows: [] });
207
+ expect(result).toBe('No results.');
208
+ });
209
+ });
210
+ describe('response helpers', () => {
211
+ it('textResponse should create text content', () => {
212
+ const result = textResponse('Hello');
213
+ expect(result.content[0].type).toBe('text');
214
+ expect(result.content[0].text).toBe('Hello');
215
+ });
216
+ it('errorResponse should set isError flag', () => {
217
+ const result = errorResponse('Error message');
218
+ expect(result.isError).toBe(true);
219
+ expect(result.content[0].text).toBe('Error message');
220
+ });
221
+ it('jsonResponse should stringify data', () => {
222
+ const result = jsonResponse({ key: 'value' });
223
+ expect(result.content[0].text).toContain('"key"');
224
+ expect(result.content[0].text).toContain('"value"');
225
+ });
226
+ });
227
+ });
228
+ // ============================================================================
229
+ // Tool Handler Tests
230
+ // ============================================================================
231
+ describe('Tool Handlers', () => {
232
+ describe('validate', () => {
233
+ it('should validate a correct ledger', () => {
234
+ const result = handleToolCall('validate', { source: SAMPLE_LEDGER });
235
+ expect(result.isError).toBeFalsy();
236
+ expect(result.content[0].text).toContain('valid');
237
+ });
238
+ it('should report validation errors', () => {
239
+ const result = handleToolCall('validate', { source: '2024-01-01 invalid directive' });
240
+ expect(result.content[0].text).toContain('error');
241
+ });
242
+ it('should error on missing source', () => {
243
+ const result = handleToolCall('validate', {});
244
+ expect(result.isError).toBe(true);
245
+ expect(result.content[0].text).toContain('source');
246
+ });
247
+ });
248
+ describe('query', () => {
249
+ it('should execute a query', () => {
250
+ const result = handleToolCall('query', {
251
+ source: SAMPLE_LEDGER,
252
+ query: 'BALANCES',
253
+ });
254
+ expect(result.isError).toBeFalsy();
255
+ expect(result.content[0].text).toContain('account');
256
+ });
257
+ it('should report query errors', () => {
258
+ const result = handleToolCall('query', {
259
+ source: SAMPLE_LEDGER,
260
+ query: 'INVALID QUERY',
261
+ });
262
+ expect(result.isError).toBe(true);
263
+ });
264
+ it('should error on missing arguments', () => {
265
+ const result = handleToolCall('query', { source: SAMPLE_LEDGER });
266
+ expect(result.isError).toBe(true);
267
+ expect(result.content[0].text).toContain('query');
268
+ });
269
+ });
270
+ describe('balances', () => {
271
+ it('should return balances', () => {
272
+ const result = handleToolCall('balances', { source: SAMPLE_LEDGER });
273
+ expect(result.isError).toBeFalsy();
274
+ expect(result.content[0].text).toContain('Assets:Checking');
275
+ });
276
+ });
277
+ describe('format', () => {
278
+ it('should format a ledger', () => {
279
+ const result = handleToolCall('format', { source: SAMPLE_LEDGER });
280
+ expect(result.isError).toBeFalsy();
281
+ expect(result.content[0].text.length).toBeGreaterThan(0);
282
+ });
283
+ });
284
+ describe('parse', () => {
285
+ it('should parse a ledger to JSON', () => {
286
+ const result = handleToolCall('parse', { source: SAMPLE_LEDGER });
287
+ expect(result.isError).toBeFalsy();
288
+ const parsed = JSON.parse(result.content[0].text);
289
+ expect(parsed.directives).toBeDefined();
290
+ });
291
+ });
292
+ describe('list_plugins', () => {
293
+ it('should list available plugins', () => {
294
+ const result = handleToolCall('list_plugins', {});
295
+ expect(result.isError).toBeFalsy();
296
+ const plugins = JSON.parse(result.content[0].text);
297
+ expect(Array.isArray(plugins)).toBe(true);
298
+ });
299
+ });
300
+ describe('editor_completions', () => {
301
+ it('should return completions', () => {
302
+ const result = handleToolCall('editor_completions', {
303
+ source: SAMPLE_LEDGER,
304
+ line: 5,
305
+ character: 2,
306
+ });
307
+ expect(result.isError).toBeFalsy();
308
+ });
309
+ });
310
+ describe('editor_hover', () => {
311
+ it('should handle positions without hover info', () => {
312
+ const result = handleToolCall('editor_hover', {
313
+ source: SAMPLE_LEDGER,
314
+ line: 0,
315
+ character: 0,
316
+ });
317
+ expect(result.isError).toBeFalsy();
318
+ });
319
+ });
320
+ describe('editor_definition', () => {
321
+ it('should handle positions without definitions', () => {
322
+ const result = handleToolCall('editor_definition', {
323
+ source: SAMPLE_LEDGER,
324
+ line: 0,
325
+ character: 0,
326
+ });
327
+ expect(result.isError).toBeFalsy();
328
+ });
329
+ });
330
+ describe('editor_document_symbols', () => {
331
+ it('should return document symbols', () => {
332
+ const result = handleToolCall('editor_document_symbols', { source: SAMPLE_LEDGER });
333
+ expect(result.isError).toBeFalsy();
334
+ const symbols = JSON.parse(result.content[0].text);
335
+ expect(Array.isArray(symbols)).toBe(true);
336
+ expect(symbols.length).toBeGreaterThan(0);
337
+ });
338
+ });
339
+ describe('editor_references', () => {
340
+ it('should find account references', () => {
341
+ const result = handleToolCall('editor_references', {
342
+ source: SAMPLE_LEDGER,
343
+ line: 5, // Line with Assets:Checking in a posting
344
+ character: 2,
345
+ });
346
+ expect(result.isError).toBeFalsy();
347
+ // Either finds references or returns "No references found"
348
+ expect(result.content[0].text).toBeDefined();
349
+ });
350
+ it('should find currency references', () => {
351
+ const result = handleToolCall('editor_references', {
352
+ source: SAMPLE_LEDGER,
353
+ line: 5, // Line with USD
354
+ character: 22,
355
+ });
356
+ expect(result.isError).toBeFalsy();
357
+ });
358
+ it('should handle positions without references', () => {
359
+ const result = handleToolCall('editor_references', {
360
+ source: SAMPLE_LEDGER,
361
+ line: 0, // Empty line
362
+ character: 0,
363
+ });
364
+ expect(result.isError).toBeFalsy();
365
+ expect(result.content[0].text).toContain('No references found');
366
+ });
367
+ });
368
+ describe('ledger_stats', () => {
369
+ it('should return ledger statistics', () => {
370
+ const result = handleToolCall('ledger_stats', { source: SAMPLE_LEDGER });
371
+ expect(result.isError).toBeFalsy();
372
+ const stats = JSON.parse(result.content[0].text);
373
+ expect(stats.total_directives).toBeGreaterThan(0);
374
+ expect(stats.transactions).toBe(2);
375
+ expect(stats.open_accounts).toBe(3);
376
+ expect(stats.account_count).toBeGreaterThan(0);
377
+ expect(stats.currencies).toContain('USD');
378
+ });
379
+ });
380
+ describe('list_accounts', () => {
381
+ it('should list all accounts', () => {
382
+ const result = handleToolCall('list_accounts', { source: SAMPLE_LEDGER });
383
+ expect(result.isError).toBeFalsy();
384
+ const accounts = JSON.parse(result.content[0].text);
385
+ expect(accounts['Assets:Checking']).toBeDefined();
386
+ expect(accounts['Assets:Checking'].open_date).toBe('2024-01-01');
387
+ });
388
+ });
389
+ describe('list_commodities', () => {
390
+ it('should list all commodities', () => {
391
+ const result = handleToolCall('list_commodities', { source: SAMPLE_LEDGER });
392
+ expect(result.isError).toBeFalsy();
393
+ const commodities = JSON.parse(result.content[0].text);
394
+ expect(commodities).toContain('USD');
395
+ });
396
+ });
397
+ describe('account_activity', () => {
398
+ it('should return account activity', () => {
399
+ const result = handleToolCall('account_activity', {
400
+ source: SAMPLE_LEDGER,
401
+ account: 'Assets:Checking',
402
+ });
403
+ expect(result.isError).toBeFalsy();
404
+ const activity = JSON.parse(result.content[0].text);
405
+ expect(activity.account).toBe('Assets:Checking');
406
+ expect(activity.transaction_count).toBe(2);
407
+ });
408
+ });
409
+ describe('format_check', () => {
410
+ it('should check if ledger needs formatting', () => {
411
+ const result = handleToolCall('format_check', { source: SAMPLE_LEDGER });
412
+ expect(result.isError).toBeFalsy();
413
+ });
414
+ });
415
+ describe('bql_tables', () => {
416
+ it('should return BQL tables documentation', () => {
417
+ const result = handleToolCall('bql_tables', {});
418
+ expect(result.isError).toBeFalsy();
419
+ expect(result.content[0].text).toContain('entries');
420
+ });
421
+ });
422
+ describe('directive_at_line', () => {
423
+ it('should find directive at line', () => {
424
+ const result = handleToolCall('directive_at_line', {
425
+ source: SAMPLE_LEDGER,
426
+ line: 2,
427
+ });
428
+ expect(result.isError).toBeFalsy();
429
+ });
430
+ });
431
+ describe('find_transactions', () => {
432
+ it('should find transactions by payee', () => {
433
+ const result = handleToolCall('find_transactions', {
434
+ source: SAMPLE_LEDGER,
435
+ payee: 'Grocery',
436
+ });
437
+ expect(result.isError).toBeFalsy();
438
+ const transactions = JSON.parse(result.content[0].text);
439
+ expect(transactions.length).toBe(1);
440
+ expect(transactions[0].payee).toContain('Grocery');
441
+ });
442
+ it('should find transactions by tag', () => {
443
+ const result = handleToolCall('find_transactions', {
444
+ source: SAMPLE_LEDGER,
445
+ tag: 'food',
446
+ });
447
+ expect(result.isError).toBeFalsy();
448
+ const transactions = JSON.parse(result.content[0].text);
449
+ expect(transactions.length).toBe(1);
450
+ });
451
+ it('should filter by date range', () => {
452
+ const result = handleToolCall('find_transactions', {
453
+ source: SAMPLE_LEDGER,
454
+ from_date: '2024-01-12',
455
+ });
456
+ expect(result.isError).toBeFalsy();
457
+ const transactions = JSON.parse(result.content[0].text);
458
+ // Should find the groceries transaction (2024-01-15) but not the salary (2024-01-10)
459
+ expect(transactions.length).toBe(1);
460
+ });
461
+ it('should respect limit', () => {
462
+ const result = handleToolCall('find_transactions', {
463
+ source: SAMPLE_LEDGER,
464
+ limit: 1,
465
+ });
466
+ expect(result.isError).toBeFalsy();
467
+ const transactions = JSON.parse(result.content[0].text);
468
+ expect(transactions.length).toBe(1);
469
+ });
470
+ });
471
+ describe('report', () => {
472
+ it('should generate balance sheet report', () => {
473
+ const result = handleToolCall('report', {
474
+ source: SAMPLE_LEDGER,
475
+ report_type: 'balsheet',
476
+ });
477
+ expect(result.isError).toBeFalsy();
478
+ expect(result.content[0].text).toContain('BALSHEET');
479
+ });
480
+ it('should generate income report', () => {
481
+ const result = handleToolCall('report', {
482
+ source: SAMPLE_LEDGER,
483
+ report_type: 'income',
484
+ });
485
+ expect(result.isError).toBeFalsy();
486
+ expect(result.content[0].text).toContain('INCOME');
487
+ });
488
+ it('should reject unknown report type', () => {
489
+ const result = handleToolCall('report', {
490
+ source: SAMPLE_LEDGER,
491
+ report_type: 'unknown',
492
+ });
493
+ expect(result.isError).toBe(true);
494
+ });
495
+ });
496
+ describe('unknown tool', () => {
497
+ it('should return error for unknown tool', () => {
498
+ const result = handleToolCall('nonexistent_tool', {});
499
+ expect(result.isError).toBe(true);
500
+ expect(result.content[0].text).toContain('Unknown tool');
501
+ });
502
+ });
503
+ });
504
+ // ============================================================================
505
+ // Tool Definition Tests
506
+ // ============================================================================
507
+ describe('Tool Definitions', () => {
508
+ it('should have 25 tools defined', () => {
509
+ expect(TOOLS.length).toBe(25);
510
+ });
511
+ it('all tools should have required fields', () => {
512
+ for (const tool of TOOLS) {
513
+ expect(tool.name).toBeDefined();
514
+ expect(tool.description).toBeDefined();
515
+ expect(tool.inputSchema).toBeDefined();
516
+ expect(tool.inputSchema.type).toBe('object');
517
+ expect(tool.inputSchema.properties).toBeDefined();
518
+ expect(tool.inputSchema.required).toBeDefined();
519
+ }
520
+ });
521
+ });
522
+ // ============================================================================
523
+ // Resource Tests
524
+ // ============================================================================
525
+ describe('Resources', () => {
526
+ it('should have 4 resources defined', () => {
527
+ expect(RESOURCES.length).toBe(4);
528
+ });
529
+ it('all resources should have required fields', () => {
530
+ for (const resource of RESOURCES) {
531
+ expect(resource.uri).toBeDefined();
532
+ expect(resource.name).toBeDefined();
533
+ expect(resource.description).toBeDefined();
534
+ expect(resource.mimeType).toBe('text/markdown');
535
+ }
536
+ });
537
+ it('getResourceContents should return content for valid URIs', () => {
538
+ const content = getResourceContents('rustledger://docs/bql');
539
+ expect(content).not.toBeNull();
540
+ expect(content?.mimeType).toBe('text/markdown');
541
+ expect(content?.text.length).toBeGreaterThan(0);
542
+ });
543
+ it('getResourceContents should return null for invalid URIs', () => {
544
+ const content = getResourceContents('rustledger://docs/nonexistent');
545
+ expect(content).toBeNull();
546
+ });
547
+ });
548
+ // ============================================================================
549
+ // Prompt Tests
550
+ // ============================================================================
551
+ describe('Prompts', () => {
552
+ it('should have 3 prompts defined', () => {
553
+ expect(PROMPTS.length).toBe(3);
554
+ });
555
+ it('all prompts should have required fields', () => {
556
+ for (const prompt of PROMPTS) {
557
+ expect(prompt.name).toBeDefined();
558
+ expect(prompt.description).toBeDefined();
559
+ expect(prompt.arguments).toBeDefined();
560
+ }
561
+ });
562
+ describe('getPrompt', () => {
563
+ it('should return analyze_ledger prompt', () => {
564
+ const result = getPrompt('analyze_ledger', { focus: 'spending' });
565
+ expect(result.messages).toBeDefined();
566
+ expect(result.messages.length).toBe(1);
567
+ expect(result.messages[0].content.text).toContain('spending');
568
+ });
569
+ it('should return write_query prompt', () => {
570
+ const result = getPrompt('write_query', { description: 'find all expenses' });
571
+ expect(result.messages[0].content.text).toContain('find all expenses');
572
+ });
573
+ it('should return categorize_transaction prompt', () => {
574
+ const result = getPrompt('categorize_transaction', { description: 'coffee at starbucks' });
575
+ expect(result.messages[0].content.text).toContain('coffee at starbucks');
576
+ });
577
+ it('should throw for missing required argument', () => {
578
+ expect(() => getPrompt('write_query', {})).toThrow('Missing required argument');
579
+ });
580
+ it('should throw for unknown prompt', () => {
581
+ expect(() => getPrompt('unknown_prompt', {})).toThrow('Unknown prompt');
582
+ });
583
+ });
584
+ });
585
+ //# sourceMappingURL=index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/__tests__/index.test.ts"],"names":[],"mappings":"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"}