@prodisco/search-libs 0.1.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 (99) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +379 -0
  3. package/dist/__tests__/extractor.test.d.ts +5 -0
  4. package/dist/__tests__/extractor.test.d.ts.map +1 -0
  5. package/dist/__tests__/extractor.test.js +452 -0
  6. package/dist/__tests__/extractor.test.js.map +1 -0
  7. package/dist/__tests__/library-indexer.test.d.ts +5 -0
  8. package/dist/__tests__/library-indexer.test.d.ts.map +1 -0
  9. package/dist/__tests__/library-indexer.test.js +611 -0
  10. package/dist/__tests__/library-indexer.test.js.map +1 -0
  11. package/dist/__tests__/schema.test.d.ts +5 -0
  12. package/dist/__tests__/schema.test.d.ts.map +1 -0
  13. package/dist/__tests__/schema.test.js +231 -0
  14. package/dist/__tests__/schema.test.js.map +1 -0
  15. package/dist/__tests__/script-parser.test.d.ts +5 -0
  16. package/dist/__tests__/script-parser.test.d.ts.map +1 -0
  17. package/dist/__tests__/script-parser.test.js +178 -0
  18. package/dist/__tests__/script-parser.test.js.map +1 -0
  19. package/dist/__tests__/search-engine.test.d.ts +5 -0
  20. package/dist/__tests__/search-engine.test.d.ts.map +1 -0
  21. package/dist/__tests__/search-engine.test.js +497 -0
  22. package/dist/__tests__/search-engine.test.js.map +1 -0
  23. package/dist/extractor/ast-parser.d.ts +48 -0
  24. package/dist/extractor/ast-parser.d.ts.map +1 -0
  25. package/dist/extractor/ast-parser.js +118 -0
  26. package/dist/extractor/ast-parser.js.map +1 -0
  27. package/dist/extractor/function-extractor.d.ts +20 -0
  28. package/dist/extractor/function-extractor.d.ts.map +1 -0
  29. package/dist/extractor/function-extractor.js +169 -0
  30. package/dist/extractor/function-extractor.js.map +1 -0
  31. package/dist/extractor/index.d.ts +22 -0
  32. package/dist/extractor/index.d.ts.map +1 -0
  33. package/dist/extractor/index.js +194 -0
  34. package/dist/extractor/index.js.map +1 -0
  35. package/dist/extractor/method-extractor.d.ts +30 -0
  36. package/dist/extractor/method-extractor.d.ts.map +1 -0
  37. package/dist/extractor/method-extractor.js +163 -0
  38. package/dist/extractor/method-extractor.js.map +1 -0
  39. package/dist/extractor/package-resolver.d.ts +77 -0
  40. package/dist/extractor/package-resolver.d.ts.map +1 -0
  41. package/dist/extractor/package-resolver.js +766 -0
  42. package/dist/extractor/package-resolver.js.map +1 -0
  43. package/dist/extractor/type-extractor.d.ts +15 -0
  44. package/dist/extractor/type-extractor.d.ts.map +1 -0
  45. package/dist/extractor/type-extractor.js +206 -0
  46. package/dist/extractor/type-extractor.js.map +1 -0
  47. package/dist/extractor/types.d.ts +116 -0
  48. package/dist/extractor/types.d.ts.map +1 -0
  49. package/dist/extractor/types.js +5 -0
  50. package/dist/extractor/types.js.map +1 -0
  51. package/dist/index.d.ts +18 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +21 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/library-indexer.d.ts +104 -0
  56. package/dist/library-indexer.d.ts.map +1 -0
  57. package/dist/library-indexer.js +295 -0
  58. package/dist/library-indexer.js.map +1 -0
  59. package/dist/schema/base-schema.d.ts +63 -0
  60. package/dist/schema/base-schema.d.ts.map +1 -0
  61. package/dist/schema/base-schema.js +63 -0
  62. package/dist/schema/base-schema.js.map +1 -0
  63. package/dist/schema/index.d.ts +6 -0
  64. package/dist/schema/index.d.ts.map +1 -0
  65. package/dist/schema/index.js +6 -0
  66. package/dist/schema/index.js.map +1 -0
  67. package/dist/schema/schema-builder.d.ts +47 -0
  68. package/dist/schema/schema-builder.d.ts.map +1 -0
  69. package/dist/schema/schema-builder.js +236 -0
  70. package/dist/schema/schema-builder.js.map +1 -0
  71. package/dist/script/index.d.ts +6 -0
  72. package/dist/script/index.d.ts.map +1 -0
  73. package/dist/script/index.js +5 -0
  74. package/dist/script/index.js.map +1 -0
  75. package/dist/script/script-parser.d.ts +18 -0
  76. package/dist/script/script-parser.d.ts.map +1 -0
  77. package/dist/script/script-parser.js +246 -0
  78. package/dist/script/script-parser.js.map +1 -0
  79. package/dist/script/types.d.ts +32 -0
  80. package/dist/script/types.d.ts.map +1 -0
  81. package/dist/script/types.js +5 -0
  82. package/dist/script/types.js.map +1 -0
  83. package/dist/search/index.d.ts +7 -0
  84. package/dist/search/index.d.ts.map +1 -0
  85. package/dist/search/index.js +7 -0
  86. package/dist/search/index.js.map +1 -0
  87. package/dist/search/query-builder.d.ts +59 -0
  88. package/dist/search/query-builder.d.ts.map +1 -0
  89. package/dist/search/query-builder.js +103 -0
  90. package/dist/search/query-builder.js.map +1 -0
  91. package/dist/search/result-formatter.d.ts +61 -0
  92. package/dist/search/result-formatter.d.ts.map +1 -0
  93. package/dist/search/result-formatter.js +170 -0
  94. package/dist/search/result-formatter.js.map +1 -0
  95. package/dist/search/search-engine.d.ts +105 -0
  96. package/dist/search/search-engine.d.ts.map +1 -0
  97. package/dist/search/search-engine.js +245 -0
  98. package/dist/search/search-engine.js.map +1 -0
  99. package/package.json +41 -0
@@ -0,0 +1,611 @@
1
+ /**
2
+ * Tests for the LibraryIndexer - the high-level API
3
+ */
4
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
5
+ import { writeFileSync, mkdirSync, rmSync, existsSync } from 'fs';
6
+ import { join } from 'path';
7
+ import { LibraryIndexer } from '../library-indexer.js';
8
+ describe('LibraryIndexer', () => {
9
+ const testDir = `/tmp/search-libs-indexer-test-${Date.now()}`;
10
+ beforeEach(() => {
11
+ if (!existsSync(testDir)) {
12
+ mkdirSync(testDir, { recursive: true });
13
+ }
14
+ });
15
+ afterEach(async () => {
16
+ if (existsSync(testDir)) {
17
+ rmSync(testDir, { recursive: true });
18
+ }
19
+ });
20
+ describe('initialization', () => {
21
+ it('initializes with empty package list', async () => {
22
+ const indexer = new LibraryIndexer({ packages: [] });
23
+ const result = await indexer.initialize();
24
+ expect(result.indexed).toBe(0);
25
+ expect(result.errors.length).toBe(0);
26
+ expect(indexer.isInitialized()).toBe(true);
27
+ await indexer.shutdown();
28
+ });
29
+ it('returns early if already initialized', async () => {
30
+ const indexer = new LibraryIndexer({ packages: [] });
31
+ const first = await indexer.initialize();
32
+ const second = await indexer.initialize();
33
+ expect(second.indexed).toBe(0);
34
+ await indexer.shutdown();
35
+ });
36
+ it('handles non-existent package gracefully', async () => {
37
+ const indexer = new LibraryIndexer({
38
+ packages: [{ name: 'non-existent-package-12345' }],
39
+ });
40
+ const result = await indexer.initialize();
41
+ expect(result.errors.length).toBeGreaterThan(0);
42
+ expect(result.indexed).toBe(0);
43
+ await indexer.shutdown();
44
+ });
45
+ it('indexes package if available', async () => {
46
+ const indexer = new LibraryIndexer({
47
+ packages: [{ name: '@kubernetes/client-node' }],
48
+ });
49
+ const result = await indexer.initialize();
50
+ // Package may not be installed in test environment
51
+ if (result.errors.length === 0) {
52
+ expect(result.indexed).toBeGreaterThan(0);
53
+ expect(result.packageCounts['@kubernetes/client-node']).toBeGreaterThan(0);
54
+ }
55
+ await indexer.shutdown();
56
+ }, 30000); // Allow 30s for large package indexing
57
+ it('applies type filter during initialization if package available', async () => {
58
+ const indexer = new LibraryIndexer({
59
+ packages: [
60
+ {
61
+ name: '@kubernetes/client-node',
62
+ typeFilter: /^V1Pod$/,
63
+ },
64
+ ],
65
+ });
66
+ const result = await indexer.initialize();
67
+ // Package may not be installed in test environment
68
+ if (result.errors.length === 0) {
69
+ expect(result.indexed).toBeGreaterThan(0);
70
+ // Search should find V1Pod
71
+ const searchResult = await indexer.search({ query: 'V1Pod' });
72
+ expect(searchResult.results.some((r) => r.name === 'V1Pod')).toBe(true);
73
+ }
74
+ await indexer.shutdown();
75
+ }, 30000); // Allow 30s for large package indexing
76
+ });
77
+ describe('end-to-end package indexing (fixtures)', () => {
78
+ it('indexes and searches a TypeScript declaration package fixture (.d.ts)', async () => {
79
+ const basePath = `/tmp/search-libs-ts-fixture-${Date.now()}`;
80
+ const pkgDir = join(basePath, 'node_modules', 'my-ts-lib');
81
+ const distDir = join(pkgDir, 'dist');
82
+ let indexer;
83
+ try {
84
+ mkdirSync(distDir, { recursive: true });
85
+ writeFileSync(join(pkgDir, 'package.json'), JSON.stringify({
86
+ name: 'my-ts-lib',
87
+ version: '1.0.0',
88
+ types: 'dist/index.d.ts',
89
+ }, null, 2));
90
+ writeFileSync(join(distDir, 'index.d.ts'), [
91
+ "export { InternalApi as Api } from './api';",
92
+ "export { add } from './functions';",
93
+ "export * from './types';",
94
+ '',
95
+ ].join('\n'));
96
+ writeFileSync(join(distDir, 'types.d.ts'), [
97
+ '/** Item model. */',
98
+ 'export interface Item {',
99
+ ' id: string;',
100
+ ' name?: string;',
101
+ '}',
102
+ '',
103
+ ].join('\n'));
104
+ writeFileSync(join(distDir, 'functions.d.ts'), [
105
+ '/** Add two numbers. */',
106
+ 'export declare function add(a: number, b: number): number;',
107
+ '',
108
+ ].join('\n'));
109
+ writeFileSync(join(distDir, 'api.d.ts'), [
110
+ "import type { Item } from './types';",
111
+ '',
112
+ '/** Public API (aliased from InternalApi). */',
113
+ 'export declare class InternalApi {',
114
+ ' /** List items in a namespace. */',
115
+ ' listItems(namespace: string): Promise<Item[]>;',
116
+ ' /** Get a single item. */',
117
+ ' getItem(name: string, namespace?: string): Promise<Item>;',
118
+ ' _internal(): void;',
119
+ '}',
120
+ '',
121
+ '/** Not exported from the package entry - should not have methods indexed. */',
122
+ 'export declare class InternalHidden {',
123
+ ' secret(): void;',
124
+ '}',
125
+ '',
126
+ ].join('\n'));
127
+ indexer = new LibraryIndexer({
128
+ basePath,
129
+ packages: [{ name: 'my-ts-lib' }],
130
+ });
131
+ const init = await indexer.initialize();
132
+ expect(init.errors).toHaveLength(0);
133
+ expect(init.packageCounts['my-ts-lib']).toBeGreaterThan(0);
134
+ // Method indexing should reflect the public alias: InternalApi -> Api
135
+ const methods = await indexer.search({
136
+ query: 'listItems',
137
+ documentType: 'method',
138
+ library: 'my-ts-lib',
139
+ limit: 10,
140
+ });
141
+ expect(methods.results.some((r) => r.name === 'listItems' && r.className === 'Api')).toBe(true);
142
+ expect(methods.results.some((r) => r.className === 'InternalApi')).toBe(false);
143
+ // Private/internal method should not be indexed
144
+ const internalMethod = await indexer.search({
145
+ query: '_internal',
146
+ documentType: 'method',
147
+ library: 'my-ts-lib',
148
+ limit: 10,
149
+ });
150
+ expect(internalMethod.results.length).toBe(0);
151
+ // Non-exported class should not have its methods indexed
152
+ const secret = await indexer.search({
153
+ query: 'secret',
154
+ documentType: 'method',
155
+ library: 'my-ts-lib',
156
+ limit: 10,
157
+ });
158
+ expect(secret.results.length).toBe(0);
159
+ // Types should be searchable
160
+ const types = await indexer.search({
161
+ query: 'Item',
162
+ documentType: 'type',
163
+ library: 'my-ts-lib',
164
+ limit: 10,
165
+ });
166
+ expect(types.results.some((r) => r.name === 'Item')).toBe(true);
167
+ // Functions should be searchable
168
+ const funcs = await indexer.search({
169
+ query: 'add',
170
+ documentType: 'function',
171
+ library: 'my-ts-lib',
172
+ limit: 10,
173
+ });
174
+ expect(funcs.results.some((r) => r.name === 'add')).toBe(true);
175
+ }
176
+ finally {
177
+ if (indexer) {
178
+ await indexer.shutdown();
179
+ }
180
+ if (existsSync(basePath)) {
181
+ rmSync(basePath, { recursive: true });
182
+ }
183
+ }
184
+ });
185
+ it('indexes and searches an ESM JavaScript package fixture (.js) via source fallback', async () => {
186
+ const basePath = `/tmp/search-libs-js-fixture-${Date.now()}`;
187
+ const pkgDir = join(basePath, 'node_modules', 'my-esm-js-lib');
188
+ let indexer;
189
+ try {
190
+ mkdirSync(pkgDir, { recursive: true });
191
+ writeFileSync(join(pkgDir, 'package.json'), JSON.stringify({
192
+ name: 'my-esm-js-lib',
193
+ version: '1.0.0',
194
+ type: 'module',
195
+ exports: {
196
+ '.': {
197
+ import: './index.js',
198
+ },
199
+ },
200
+ }, null, 2));
201
+ writeFileSync(join(pkgDir, 'index.js'), [
202
+ "export { foo, internalFn as publicFn } from './a.js';",
203
+ "import { importedFn as localImported } from './a.js';",
204
+ 'export { localImported as importedFnPublic };',
205
+ "export * from './b.js';",
206
+ '',
207
+ ].join('\n'));
208
+ writeFileSync(join(pkgDir, 'a.js'), [
209
+ '/** Exported foo. */',
210
+ 'export function foo() { return 1; }',
211
+ '',
212
+ '/** Internal name, exported as publicFn from entry. */',
213
+ 'export function internalFn() { return 2; }',
214
+ '',
215
+ '/** Exported, then re-exported via import+export as importedFnPublic. */',
216
+ 'export function importedFn() { return 3; }',
217
+ '',
218
+ '/** Not exported - should NOT be indexed. */',
219
+ 'function nonExportedFn() { return 4; }',
220
+ '',
221
+ ].join('\n'));
222
+ writeFileSync(join(pkgDir, 'b.js'), [
223
+ '/** Exported class. */',
224
+ 'export class MyClass {',
225
+ ' greet(name) { return `hi ${name}`; }',
226
+ '}',
227
+ '',
228
+ '/** Internal class - should NOT be indexed. */',
229
+ 'class Internal {',
230
+ ' doIt() { return 123; }',
231
+ '}',
232
+ '',
233
+ ].join('\n'));
234
+ indexer = new LibraryIndexer({
235
+ basePath,
236
+ packages: [{ name: 'my-esm-js-lib' }],
237
+ });
238
+ const init = await indexer.initialize();
239
+ expect(init.errors).toHaveLength(0);
240
+ expect(init.packageCounts['my-esm-js-lib']).toBeGreaterThan(0);
241
+ // Public functions should be searchable and use the public names
242
+ const publicFn = await indexer.search({
243
+ query: 'publicFn',
244
+ documentType: 'function',
245
+ library: 'my-esm-js-lib',
246
+ limit: 10,
247
+ });
248
+ expect(publicFn.results.some((r) => r.name === 'publicFn')).toBe(true);
249
+ expect(publicFn.results.some((r) => r.name === 'internalFn')).toBe(false);
250
+ const imported = await indexer.search({
251
+ query: 'importedFnPublic',
252
+ documentType: 'function',
253
+ library: 'my-esm-js-lib',
254
+ limit: 10,
255
+ });
256
+ expect(imported.results.some((r) => r.name === 'importedFnPublic')).toBe(true);
257
+ expect(imported.results.some((r) => r.name === 'importedFn')).toBe(false);
258
+ // Non-exported helper function should not be indexed
259
+ const nonExported = await indexer.search({
260
+ query: 'nonExportedFn',
261
+ library: 'my-esm-js-lib',
262
+ limit: 10,
263
+ });
264
+ expect(nonExported.results.length).toBe(0);
265
+ // Exported class should be indexed as a type and its methods should be indexed
266
+ const typeRes = await indexer.search({
267
+ query: 'MyClass',
268
+ documentType: 'type',
269
+ library: 'my-esm-js-lib',
270
+ limit: 10,
271
+ });
272
+ expect(typeRes.results.some((r) => r.name === 'MyClass')).toBe(true);
273
+ const greet = await indexer.search({
274
+ query: 'greet',
275
+ documentType: 'method',
276
+ library: 'my-esm-js-lib',
277
+ limit: 10,
278
+ });
279
+ expect(greet.results.some((r) => r.name === 'greet' && r.className === 'MyClass')).toBe(true);
280
+ // Internal class should not be indexed (no type doc, no method docs)
281
+ const internalClass = await indexer.search({
282
+ query: 'Internal',
283
+ library: 'my-esm-js-lib',
284
+ limit: 10,
285
+ });
286
+ expect(internalClass.results.some((r) => r.name === 'Internal')).toBe(false);
287
+ }
288
+ finally {
289
+ if (indexer) {
290
+ await indexer.shutdown();
291
+ }
292
+ if (existsSync(basePath)) {
293
+ rmSync(basePath, { recursive: true });
294
+ }
295
+ }
296
+ });
297
+ });
298
+ describe('addScript', () => {
299
+ it('adds a script to the index', async () => {
300
+ const indexer = new LibraryIndexer({ packages: [] });
301
+ await indexer.initialize();
302
+ const scriptPath = join(testDir, 'test-script.ts');
303
+ writeFileSync(scriptPath, '/** List all pods. */\nconst x = 1;');
304
+ const added = await indexer.addScript(scriptPath);
305
+ expect(added).toBe(true);
306
+ // Should be searchable - name is the display name without extension
307
+ const result = await indexer.search({ query: 'pods', documentType: 'script' });
308
+ expect(result.results.some((r) => r.name === 'test-script')).toBe(true);
309
+ await indexer.shutdown();
310
+ });
311
+ it('returns false for already indexed script', async () => {
312
+ const indexer = new LibraryIndexer({ packages: [] });
313
+ await indexer.initialize();
314
+ const scriptPath = join(testDir, 'test-script.ts');
315
+ writeFileSync(scriptPath, '/** Test */\nconst x = 1;');
316
+ const firstAdd = await indexer.addScript(scriptPath);
317
+ const secondAdd = await indexer.addScript(scriptPath);
318
+ expect(firstAdd).toBe(true);
319
+ expect(secondAdd).toBe(false);
320
+ await indexer.shutdown();
321
+ });
322
+ it('returns false for non-existent script', async () => {
323
+ const indexer = new LibraryIndexer({ packages: [] });
324
+ await indexer.initialize();
325
+ const added = await indexer.addScript('/non/existent/script.ts');
326
+ expect(added).toBe(false);
327
+ await indexer.shutdown();
328
+ });
329
+ });
330
+ describe('addScriptsFromDirectory', () => {
331
+ it('adds all scripts from a directory', async () => {
332
+ const indexer = new LibraryIndexer({ packages: [] });
333
+ await indexer.initialize();
334
+ writeFileSync(join(testDir, 'script1.ts'), '/** Script 1 */\nconst a = 1;');
335
+ writeFileSync(join(testDir, 'script2.ts'), '/** Script 2 */\nconst b = 2;');
336
+ const count = await indexer.addScriptsFromDirectory(testDir);
337
+ expect(count).toBe(2);
338
+ await indexer.shutdown();
339
+ });
340
+ it('supports recursive option', async () => {
341
+ const indexer = new LibraryIndexer({ packages: [] });
342
+ await indexer.initialize();
343
+ const subDir = join(testDir, 'subdir');
344
+ mkdirSync(subDir, { recursive: true });
345
+ writeFileSync(join(testDir, 'root.ts'), '/** Root */\nconst a = 1;');
346
+ writeFileSync(join(subDir, 'sub.ts'), '/** Sub */\nconst b = 2;');
347
+ const count = await indexer.addScriptsFromDirectory(testDir, { recursive: true });
348
+ expect(count).toBe(2);
349
+ await indexer.shutdown();
350
+ });
351
+ });
352
+ describe('removeScript', () => {
353
+ it('removes a script from the index', async () => {
354
+ const indexer = new LibraryIndexer({ packages: [] });
355
+ await indexer.initialize();
356
+ const scriptPath = join(testDir, 'removable.ts');
357
+ writeFileSync(scriptPath, '/** Removable */\nconst x = 1;');
358
+ await indexer.addScript(scriptPath);
359
+ // Verify it's indexed
360
+ let result = await indexer.search({ query: 'Removable', documentType: 'script' });
361
+ expect(result.results.length).toBe(1);
362
+ // Remove it
363
+ const removed = await indexer.removeScript(scriptPath);
364
+ expect(removed).toBe(true);
365
+ // Verify it's gone
366
+ result = await indexer.search({ query: 'Removable', documentType: 'script' });
367
+ expect(result.results.length).toBe(0);
368
+ await indexer.shutdown();
369
+ });
370
+ it('returns false for non-indexed script', async () => {
371
+ const indexer = new LibraryIndexer({ packages: [] });
372
+ await indexer.initialize();
373
+ const removed = await indexer.removeScript('/non/existent/script.ts');
374
+ expect(removed).toBe(false);
375
+ await indexer.shutdown();
376
+ });
377
+ });
378
+ describe('addDocuments', () => {
379
+ it('adds custom documents to the index', async () => {
380
+ const indexer = new LibraryIndexer({ packages: [] });
381
+ await indexer.initialize();
382
+ await indexer.addDocuments([
383
+ {
384
+ id: 'custom:1',
385
+ documentType: 'type',
386
+ name: 'CustomType',
387
+ description: 'A custom type.',
388
+ searchTokens: 'Custom Type',
389
+ library: 'custom-lib',
390
+ category: 'class',
391
+ properties: '[]',
392
+ typeDefinition: '',
393
+ nestedTypes: '',
394
+ typeKind: 'class',
395
+ parameters: '',
396
+ returnType: '',
397
+ returnTypeDefinition: '',
398
+ signature: '',
399
+ className: '',
400
+ filePath: '',
401
+ keywords: '',
402
+ },
403
+ ]);
404
+ const result = await indexer.search({ query: 'CustomType' });
405
+ expect(result.results.length).toBe(1);
406
+ expect(result.results[0].name).toBe('CustomType');
407
+ await indexer.shutdown();
408
+ });
409
+ });
410
+ describe('search', () => {
411
+ it('searches across all document types', async () => {
412
+ const indexer = new LibraryIndexer({ packages: [] });
413
+ await indexer.initialize();
414
+ // Add a test document manually
415
+ await indexer.addDocuments([
416
+ {
417
+ id: 'test:pod',
418
+ documentType: 'type',
419
+ name: 'V1Pod',
420
+ description: 'A pod resource.',
421
+ searchTokens: 'V1 Pod',
422
+ library: 'test-lib',
423
+ category: 'class',
424
+ properties: '[]',
425
+ typeDefinition: '',
426
+ nestedTypes: '',
427
+ typeKind: 'class',
428
+ parameters: '',
429
+ returnType: '',
430
+ returnTypeDefinition: '',
431
+ signature: '',
432
+ className: '',
433
+ filePath: '',
434
+ keywords: '',
435
+ },
436
+ ]);
437
+ const result = await indexer.search({ query: 'Pod' });
438
+ expect(result.results.length).toBeGreaterThan(0);
439
+ await indexer.shutdown();
440
+ });
441
+ it('filters by document type', async () => {
442
+ const indexer = new LibraryIndexer({ packages: [] });
443
+ await indexer.initialize();
444
+ // Add test documents of different types
445
+ await indexer.addDocuments([
446
+ {
447
+ id: 'type:TestType',
448
+ documentType: 'type',
449
+ name: 'TestPod',
450
+ description: 'A pod type.',
451
+ searchTokens: 'Test Pod',
452
+ library: 'test-lib',
453
+ category: 'class',
454
+ properties: '[]',
455
+ typeDefinition: '',
456
+ nestedTypes: '',
457
+ typeKind: 'class',
458
+ parameters: '',
459
+ returnType: '',
460
+ returnTypeDefinition: '',
461
+ signature: '',
462
+ className: '',
463
+ filePath: '',
464
+ keywords: '',
465
+ },
466
+ {
467
+ id: 'method:TestMethod',
468
+ documentType: 'method',
469
+ name: 'getPod',
470
+ description: 'Get a pod.',
471
+ searchTokens: 'get Pod',
472
+ library: 'test-lib',
473
+ category: 'read',
474
+ properties: '',
475
+ typeDefinition: '',
476
+ nestedTypes: '',
477
+ typeKind: '',
478
+ parameters: '[]',
479
+ returnType: 'Pod',
480
+ returnTypeDefinition: '',
481
+ signature: 'getPod(): Pod',
482
+ className: 'Api',
483
+ filePath: '',
484
+ keywords: '',
485
+ },
486
+ ]);
487
+ const typeResult = await indexer.search({
488
+ query: 'Pod',
489
+ documentType: 'type',
490
+ limit: 10,
491
+ });
492
+ expect(typeResult.results.every((r) => r.documentType === 'type')).toBe(true);
493
+ await indexer.shutdown();
494
+ });
495
+ it('returns facets', async () => {
496
+ const indexer = new LibraryIndexer({ packages: [] });
497
+ await indexer.initialize();
498
+ await indexer.addDocuments([
499
+ {
500
+ id: 'test:facet',
501
+ documentType: 'type',
502
+ name: 'TestType',
503
+ description: 'A test type.',
504
+ searchTokens: 'Test Type',
505
+ library: 'test-lib',
506
+ category: 'class',
507
+ properties: '[]',
508
+ typeDefinition: '',
509
+ nestedTypes: '',
510
+ typeKind: 'class',
511
+ parameters: '',
512
+ returnType: '',
513
+ returnTypeDefinition: '',
514
+ signature: '',
515
+ className: '',
516
+ filePath: '',
517
+ keywords: '',
518
+ },
519
+ ]);
520
+ const result = await indexer.search({ query: 'Test', limit: 10 });
521
+ expect(result.facets).toBeDefined();
522
+ expect(result.facets.documentType).toBeDefined();
523
+ expect(result.facets.library).toBeDefined();
524
+ await indexer.shutdown();
525
+ });
526
+ it('supports pagination', async () => {
527
+ const indexer = new LibraryIndexer({ packages: [] });
528
+ await indexer.initialize();
529
+ // Add multiple documents
530
+ const docs = [];
531
+ for (let i = 0; i < 10; i++) {
532
+ docs.push({
533
+ id: `test:page${i}`,
534
+ documentType: 'type',
535
+ name: `TestItem${i}`,
536
+ description: 'A test item.',
537
+ searchTokens: 'Test Item',
538
+ library: 'test-lib',
539
+ category: 'class',
540
+ properties: '[]',
541
+ typeDefinition: '',
542
+ nestedTypes: '',
543
+ typeKind: 'class',
544
+ parameters: '',
545
+ returnType: '',
546
+ returnTypeDefinition: '',
547
+ signature: '',
548
+ className: '',
549
+ filePath: '',
550
+ keywords: '',
551
+ });
552
+ }
553
+ await indexer.addDocuments(docs);
554
+ const firstPage = await indexer.search({ query: 'Test', limit: 5, offset: 0 });
555
+ const secondPage = await indexer.search({ query: 'Test', limit: 5, offset: 5 });
556
+ if (firstPage.totalMatches > 5) {
557
+ expect(firstPage.results[0].id).not.toBe(secondPage.results[0]?.id);
558
+ }
559
+ await indexer.shutdown();
560
+ });
561
+ });
562
+ describe('addPackage', () => {
563
+ it('adds a new package to initialized indexer if available', async () => {
564
+ const indexer = new LibraryIndexer({ packages: [] });
565
+ await indexer.initialize();
566
+ const result = await indexer.addPackage({ name: 'prometheus-query' });
567
+ // Package may not be installed in test environment
568
+ if (result.errors.length === 0 && result.indexed > 0) {
569
+ // Should be able to search prometheus-query methods
570
+ const searchResult = await indexer.search({
571
+ query: 'instantQuery',
572
+ library: 'prometheus-query',
573
+ });
574
+ expect(searchResult.results.length).toBeGreaterThanOrEqual(0);
575
+ }
576
+ await indexer.shutdown();
577
+ });
578
+ });
579
+ describe('shutdown', () => {
580
+ it('shuts down cleanly', async () => {
581
+ const indexer = new LibraryIndexer({ packages: [] });
582
+ await indexer.initialize();
583
+ await indexer.shutdown();
584
+ expect(indexer.isInitialized()).toBe(false);
585
+ });
586
+ it('clears script tracking on shutdown', async () => {
587
+ const indexer = new LibraryIndexer({ packages: [] });
588
+ await indexer.initialize();
589
+ const scriptPath = join(testDir, 'test.ts');
590
+ writeFileSync(scriptPath, '/** Test */\nconst x = 1;');
591
+ await indexer.addScript(scriptPath);
592
+ await indexer.shutdown();
593
+ // Re-initialize and add same script - should succeed
594
+ await indexer.initialize();
595
+ const added = await indexer.addScript(scriptPath);
596
+ expect(added).toBe(true);
597
+ await indexer.shutdown();
598
+ });
599
+ });
600
+ describe('getEngine', () => {
601
+ it('returns the underlying search engine', async () => {
602
+ const indexer = new LibraryIndexer({ packages: [] });
603
+ await indexer.initialize();
604
+ const engine = indexer.getEngine();
605
+ expect(engine).toBeDefined();
606
+ expect(engine.isInitialized()).toBe(true);
607
+ await indexer.shutdown();
608
+ });
609
+ });
610
+ });
611
+ //# sourceMappingURL=library-indexer.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"library-indexer.test.js","sourceRoot":"","sources":["../../src/__tests__/library-indexer.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Tests for the schema module
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=schema.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/schema.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}