@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.
- package/LICENSE +21 -0
- package/README.md +379 -0
- package/dist/__tests__/extractor.test.d.ts +5 -0
- package/dist/__tests__/extractor.test.d.ts.map +1 -0
- package/dist/__tests__/extractor.test.js +452 -0
- package/dist/__tests__/extractor.test.js.map +1 -0
- package/dist/__tests__/library-indexer.test.d.ts +5 -0
- package/dist/__tests__/library-indexer.test.d.ts.map +1 -0
- package/dist/__tests__/library-indexer.test.js +611 -0
- package/dist/__tests__/library-indexer.test.js.map +1 -0
- package/dist/__tests__/schema.test.d.ts +5 -0
- package/dist/__tests__/schema.test.d.ts.map +1 -0
- package/dist/__tests__/schema.test.js +231 -0
- package/dist/__tests__/schema.test.js.map +1 -0
- package/dist/__tests__/script-parser.test.d.ts +5 -0
- package/dist/__tests__/script-parser.test.d.ts.map +1 -0
- package/dist/__tests__/script-parser.test.js +178 -0
- package/dist/__tests__/script-parser.test.js.map +1 -0
- package/dist/__tests__/search-engine.test.d.ts +5 -0
- package/dist/__tests__/search-engine.test.d.ts.map +1 -0
- package/dist/__tests__/search-engine.test.js +497 -0
- package/dist/__tests__/search-engine.test.js.map +1 -0
- package/dist/extractor/ast-parser.d.ts +48 -0
- package/dist/extractor/ast-parser.d.ts.map +1 -0
- package/dist/extractor/ast-parser.js +118 -0
- package/dist/extractor/ast-parser.js.map +1 -0
- package/dist/extractor/function-extractor.d.ts +20 -0
- package/dist/extractor/function-extractor.d.ts.map +1 -0
- package/dist/extractor/function-extractor.js +169 -0
- package/dist/extractor/function-extractor.js.map +1 -0
- package/dist/extractor/index.d.ts +22 -0
- package/dist/extractor/index.d.ts.map +1 -0
- package/dist/extractor/index.js +194 -0
- package/dist/extractor/index.js.map +1 -0
- package/dist/extractor/method-extractor.d.ts +30 -0
- package/dist/extractor/method-extractor.d.ts.map +1 -0
- package/dist/extractor/method-extractor.js +163 -0
- package/dist/extractor/method-extractor.js.map +1 -0
- package/dist/extractor/package-resolver.d.ts +77 -0
- package/dist/extractor/package-resolver.d.ts.map +1 -0
- package/dist/extractor/package-resolver.js +766 -0
- package/dist/extractor/package-resolver.js.map +1 -0
- package/dist/extractor/type-extractor.d.ts +15 -0
- package/dist/extractor/type-extractor.d.ts.map +1 -0
- package/dist/extractor/type-extractor.js +206 -0
- package/dist/extractor/type-extractor.js.map +1 -0
- package/dist/extractor/types.d.ts +116 -0
- package/dist/extractor/types.d.ts.map +1 -0
- package/dist/extractor/types.js +5 -0
- package/dist/extractor/types.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/library-indexer.d.ts +104 -0
- package/dist/library-indexer.d.ts.map +1 -0
- package/dist/library-indexer.js +295 -0
- package/dist/library-indexer.js.map +1 -0
- package/dist/schema/base-schema.d.ts +63 -0
- package/dist/schema/base-schema.d.ts.map +1 -0
- package/dist/schema/base-schema.js +63 -0
- package/dist/schema/base-schema.js.map +1 -0
- package/dist/schema/index.d.ts +6 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +6 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/schema-builder.d.ts +47 -0
- package/dist/schema/schema-builder.d.ts.map +1 -0
- package/dist/schema/schema-builder.js +236 -0
- package/dist/schema/schema-builder.js.map +1 -0
- package/dist/script/index.d.ts +6 -0
- package/dist/script/index.d.ts.map +1 -0
- package/dist/script/index.js +5 -0
- package/dist/script/index.js.map +1 -0
- package/dist/script/script-parser.d.ts +18 -0
- package/dist/script/script-parser.d.ts.map +1 -0
- package/dist/script/script-parser.js +246 -0
- package/dist/script/script-parser.js.map +1 -0
- package/dist/script/types.d.ts +32 -0
- package/dist/script/types.d.ts.map +1 -0
- package/dist/script/types.js +5 -0
- package/dist/script/types.js.map +1 -0
- package/dist/search/index.d.ts +7 -0
- package/dist/search/index.d.ts.map +1 -0
- package/dist/search/index.js +7 -0
- package/dist/search/index.js.map +1 -0
- package/dist/search/query-builder.d.ts +59 -0
- package/dist/search/query-builder.d.ts.map +1 -0
- package/dist/search/query-builder.js +103 -0
- package/dist/search/query-builder.js.map +1 -0
- package/dist/search/result-formatter.d.ts +61 -0
- package/dist/search/result-formatter.d.ts.map +1 -0
- package/dist/search/result-formatter.js +170 -0
- package/dist/search/result-formatter.js.map +1 -0
- package/dist/search/search-engine.d.ts +105 -0
- package/dist/search/search-engine.d.ts.map +1 -0
- package/dist/search/search-engine.js +245 -0
- package/dist/search/search-engine.js.map +1 -0
- 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 @@
|
|
|
1
|
+
{"version":3,"file":"schema.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/schema.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|