@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,231 @@
1
+ /**
2
+ * Tests for the schema module
3
+ */
4
+ import { describe, it, expect } from 'vitest';
5
+ import { baseSchema } from '../schema/base-schema.js';
6
+ import { buildTypeDocument, buildMethodDocument, buildFunctionDocument, buildScriptDocument, } from '../schema/schema-builder.js';
7
+ describe('Base Schema', () => {
8
+ it('has required id field', () => {
9
+ expect(baseSchema.id).toBe('string');
10
+ });
11
+ it('has documentType as enum', () => {
12
+ expect(baseSchema.documentType).toBe('enum');
13
+ });
14
+ it('has name field for search', () => {
15
+ expect(baseSchema.name).toBe('string');
16
+ });
17
+ it('has description field for search', () => {
18
+ expect(baseSchema.description).toBe('string');
19
+ });
20
+ it('has searchTokens field for enhanced search', () => {
21
+ expect(baseSchema.searchTokens).toBe('string');
22
+ });
23
+ it('has library and category as enum for filtering', () => {
24
+ expect(baseSchema.library).toBe('enum');
25
+ expect(baseSchema.category).toBe('enum');
26
+ });
27
+ it('has type-specific fields', () => {
28
+ expect(baseSchema.properties).toBe('string');
29
+ expect(baseSchema.typeDefinition).toBe('string');
30
+ expect(baseSchema.nestedTypes).toBe('string');
31
+ expect(baseSchema.typeKind).toBe('enum');
32
+ });
33
+ it('has method-specific fields', () => {
34
+ expect(baseSchema.parameters).toBe('string');
35
+ expect(baseSchema.returnType).toBe('string');
36
+ expect(baseSchema.signature).toBe('string');
37
+ expect(baseSchema.className).toBe('string');
38
+ });
39
+ it('has script-specific fields', () => {
40
+ expect(baseSchema.filePath).toBe('string');
41
+ expect(baseSchema.keywords).toBe('string');
42
+ });
43
+ });
44
+ describe('Schema Builder', () => {
45
+ describe('buildTypeDocument', () => {
46
+ it('builds a document from ExtractedType', () => {
47
+ const extractedType = {
48
+ name: 'V1Pod',
49
+ kind: 'class',
50
+ description: 'A Pod resource.',
51
+ library: '@kubernetes/client-node',
52
+ sourceFile: '/path/to/file.d.ts',
53
+ properties: [
54
+ { name: 'metadata', type: 'V1ObjectMeta', optional: true },
55
+ { name: 'spec', type: 'V1PodSpec', optional: true },
56
+ ],
57
+ nestedTypes: ['V1ObjectMeta', 'V1PodSpec'],
58
+ };
59
+ const doc = buildTypeDocument(extractedType);
60
+ // ID includes library for uniqueness
61
+ expect(doc.id).toBe('type:@kubernetes/client-node:V1Pod');
62
+ expect(doc.documentType).toBe('type');
63
+ expect(doc.name).toBe('V1Pod');
64
+ expect(doc.description).toBe('A Pod resource.');
65
+ expect(doc.library).toBe('@kubernetes/client-node');
66
+ expect(doc.category).toBe('class');
67
+ expect(doc.typeKind).toBe('class');
68
+ expect(doc.nestedTypes).toBe('V1ObjectMeta, V1PodSpec');
69
+ expect(doc.searchTokens).toContain('V1Pod');
70
+ });
71
+ it('includes properties as JSON', () => {
72
+ const extractedType = {
73
+ name: 'TestType',
74
+ kind: 'interface',
75
+ description: 'Test type.',
76
+ library: 'test-lib',
77
+ sourceFile: '/path/to/file.d.ts',
78
+ properties: [
79
+ { name: 'id', type: 'string', optional: false },
80
+ { name: 'value', type: 'number', optional: true },
81
+ ],
82
+ nestedTypes: [],
83
+ };
84
+ const doc = buildTypeDocument(extractedType);
85
+ const properties = JSON.parse(doc.properties);
86
+ expect(properties.length).toBe(2);
87
+ expect(properties[0].name).toBe('id');
88
+ expect(properties[1].optional).toBe(true);
89
+ });
90
+ });
91
+ describe('buildMethodDocument', () => {
92
+ it('builds a document from ExtractedMethod', () => {
93
+ const extractedMethod = {
94
+ name: 'listNamespacedPod',
95
+ className: 'CoreV1Api',
96
+ description: 'List pods in a namespace.',
97
+ library: '@kubernetes/client-node',
98
+ sourceFile: '/path/to/file.d.ts',
99
+ parameters: [
100
+ { name: 'namespace', type: 'string', optional: false },
101
+ { name: 'pretty', type: 'string', optional: true },
102
+ ],
103
+ returnType: 'Promise<V1PodList>',
104
+ isAsync: true,
105
+ isStatic: false,
106
+ };
107
+ const doc = buildMethodDocument(extractedMethod);
108
+ // ID includes library and className for uniqueness
109
+ expect(doc.id).toBe('method:@kubernetes/client-node:CoreV1Api:listNamespacedPod');
110
+ expect(doc.documentType).toBe('method');
111
+ expect(doc.name).toBe('listNamespacedPod');
112
+ expect(doc.description).toBe('List pods in a namespace.');
113
+ expect(doc.library).toBe('@kubernetes/client-node');
114
+ expect(doc.className).toBe('CoreV1Api');
115
+ expect(doc.returnType).toBe('Promise<V1PodList>');
116
+ expect(doc.searchTokens).toContain('listNamespacedPod');
117
+ });
118
+ it('extracts action category from method name', () => {
119
+ const extractedMethod = {
120
+ name: 'createDeployment',
121
+ className: 'AppsV1Api',
122
+ description: 'Create a deployment.',
123
+ library: '@kubernetes/client-node',
124
+ sourceFile: '/path/to/file.d.ts',
125
+ parameters: [],
126
+ returnType: 'Promise<V1Deployment>',
127
+ isAsync: true,
128
+ isStatic: false,
129
+ };
130
+ const doc = buildMethodDocument(extractedMethod);
131
+ expect(doc.category).toBe('create');
132
+ });
133
+ it('includes parameters as JSON', () => {
134
+ const extractedMethod = {
135
+ name: 'getItem',
136
+ className: 'Api',
137
+ description: 'Get an item.',
138
+ library: 'test-lib',
139
+ sourceFile: '/path/to/file.d.ts',
140
+ parameters: [
141
+ { name: 'id', type: 'string', optional: false },
142
+ { name: 'options', type: 'Options', optional: true },
143
+ ],
144
+ returnType: 'Promise<Item>',
145
+ isAsync: true,
146
+ isStatic: false,
147
+ };
148
+ const doc = buildMethodDocument(extractedMethod);
149
+ const parameters = JSON.parse(doc.parameters);
150
+ expect(parameters.length).toBe(2);
151
+ expect(parameters[0].name).toBe('id');
152
+ expect(parameters[1].optional).toBe(true);
153
+ });
154
+ it('builds signature from method info', () => {
155
+ const extractedMethod = {
156
+ name: 'queryRange',
157
+ className: 'LokiClient',
158
+ description: 'Query logs over a time range.',
159
+ library: '@prodisco/loki-client',
160
+ sourceFile: '/path/to/file.d.ts',
161
+ parameters: [
162
+ { name: 'logQL', type: 'string', optional: false },
163
+ { name: 'start', type: 'Date', optional: false },
164
+ { name: 'end', type: 'Date', optional: false },
165
+ ],
166
+ returnType: 'Promise<QueryResult>',
167
+ isAsync: true,
168
+ isStatic: false,
169
+ };
170
+ const doc = buildMethodDocument(extractedMethod);
171
+ expect(doc.signature).toContain('queryRange');
172
+ expect(doc.signature).toContain('logQL');
173
+ });
174
+ });
175
+ describe('buildFunctionDocument', () => {
176
+ it('builds a document from ExtractedFunction', () => {
177
+ const extractedFunction = {
178
+ name: 'mean',
179
+ description: 'Calculate the arithmetic mean.',
180
+ library: 'simple-statistics',
181
+ sourceFile: '/path/to/file.d.ts',
182
+ parameters: [{ name: 'values', type: 'number[]', optional: false }],
183
+ returnType: 'number',
184
+ isAsync: false,
185
+ signature: 'mean(values: number[]): number',
186
+ };
187
+ const doc = buildFunctionDocument(extractedFunction);
188
+ // ID includes library for uniqueness
189
+ expect(doc.id).toBe('function:simple-statistics:mean');
190
+ expect(doc.documentType).toBe('function');
191
+ expect(doc.name).toBe('mean');
192
+ expect(doc.description).toBe('Calculate the arithmetic mean.');
193
+ expect(doc.library).toBe('simple-statistics');
194
+ expect(doc.category).toBe('descriptive');
195
+ expect(doc.returnType).toBe('number');
196
+ });
197
+ });
198
+ describe('buildScriptDocument', () => {
199
+ it('builds a document from CachedScript', () => {
200
+ const script = {
201
+ filename: 'list-pods.ts',
202
+ filePath: '/path/to/list-pods.ts',
203
+ description: 'List all pods in the cluster.',
204
+ resourceTypes: ['pod'],
205
+ keywords: ['list', 'pods', 'kubernetes'],
206
+ apiClasses: ['CoreV1Api'],
207
+ };
208
+ const doc = buildScriptDocument(script);
209
+ expect(doc.id).toBe('script:list-pods.ts');
210
+ expect(doc.documentType).toBe('script');
211
+ expect(doc.name).toBe('list-pods'); // Filename without .ts extension
212
+ expect(doc.description).toBe('List all pods in the cluster.');
213
+ expect(doc.library).toBe('CoreV1Api'); // First API class
214
+ expect(doc.filePath).toBe('/path/to/list-pods.ts');
215
+ expect(doc.keywords).toBe('list pods kubernetes');
216
+ });
217
+ it('handles empty keywords', () => {
218
+ const script = {
219
+ filename: 'empty-script.ts',
220
+ filePath: '/path/to/empty-script.ts',
221
+ description: 'A script with no keywords.',
222
+ resourceTypes: [],
223
+ keywords: [],
224
+ apiClasses: [],
225
+ };
226
+ const doc = buildScriptDocument(script);
227
+ expect(doc.keywords).toBe('');
228
+ });
229
+ });
230
+ });
231
+ //# sourceMappingURL=schema.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.test.js","sourceRoot":"","sources":["../../src/__tests__/schema.test.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAqB,MAAM,0BAA0B,CAAC;AACzE,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,6BAA6B,CAAC;AAIrC,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;QAC/B,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7C,MAAM,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjD,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7C,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7C,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3C,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,MAAM,aAAa,GAAkB;gBACnC,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,OAAO;gBACb,WAAW,EAAE,iBAAiB;gBAC9B,OAAO,EAAE,yBAAyB;gBAClC,UAAU,EAAE,oBAAoB;gBAChC,UAAU,EAAE;oBACV,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE;oBAC1D,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE;iBACpD;gBACD,WAAW,EAAE,CAAC,cAAc,EAAE,WAAW,CAAC;aAC3C,CAAC;YAEF,MAAM,GAAG,GAAG,iBAAiB,CAAC,aAAa,CAAC,CAAC;YAE7C,qCAAqC;YACrC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;YAC1D,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACtC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC/B,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAChD,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;YACpD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACnC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACnC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;YACxD,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,MAAM,aAAa,GAAkB;gBACnC,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,WAAW;gBACjB,WAAW,EAAE,YAAY;gBACzB,OAAO,EAAE,UAAU;gBACnB,UAAU,EAAE,oBAAoB;gBAChC,UAAU,EAAE;oBACV,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE;oBAC/C,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;iBAClD;gBACD,WAAW,EAAE,EAAE;aAChB,CAAC;YAEF,MAAM,GAAG,GAAG,iBAAiB,CAAC,aAAa,CAAC,CAAC;YAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAE9C,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACnC,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,eAAe,GAAoB;gBACvC,IAAI,EAAE,mBAAmB;gBACzB,SAAS,EAAE,WAAW;gBACtB,WAAW,EAAE,2BAA2B;gBACxC,OAAO,EAAE,yBAAyB;gBAClC,UAAU,EAAE,oBAAoB;gBAChC,UAAU,EAAE;oBACV,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE;oBACtD,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;iBACnD;gBACD,UAAU,EAAE,oBAAoB;gBAChC,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,KAAK;aAChB,CAAC;YAEF,MAAM,GAAG,GAAG,mBAAmB,CAAC,eAAe,CAAC,CAAC;YAEjD,mDAAmD;YACnD,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;YAClF,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACxC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YAC3C,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;YAC1D,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;YACpD,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACxC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;YAClD,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACnD,MAAM,eAAe,GAAoB;gBACvC,IAAI,EAAE,kBAAkB;gBACxB,SAAS,EAAE,WAAW;gBACtB,WAAW,EAAE,sBAAsB;gBACnC,OAAO,EAAE,yBAAyB;gBAClC,UAAU,EAAE,oBAAoB;gBAChC,UAAU,EAAE,EAAE;gBACd,UAAU,EAAE,uBAAuB;gBACnC,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,KAAK;aAChB,CAAC;YAEF,MAAM,GAAG,GAAG,mBAAmB,CAAC,eAAe,CAAC,CAAC;YAEjD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,MAAM,eAAe,GAAoB;gBACvC,IAAI,EAAE,SAAS;gBACf,SAAS,EAAE,KAAK;gBAChB,WAAW,EAAE,cAAc;gBAC3B,OAAO,EAAE,UAAU;gBACnB,UAAU,EAAE,oBAAoB;gBAChC,UAAU,EAAE;oBACV,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE;oBAC/C,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE;iBACrD;gBACD,UAAU,EAAE,eAAe;gBAC3B,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,KAAK;aAChB,CAAC;YAEF,MAAM,GAAG,GAAG,mBAAmB,CAAC,eAAe,CAAC,CAAC;YACjD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAE9C,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,MAAM,eAAe,GAAoB;gBACvC,IAAI,EAAE,YAAY;gBAClB,SAAS,EAAE,YAAY;gBACvB,WAAW,EAAE,+BAA+B;gBAC5C,OAAO,EAAE,uBAAuB;gBAChC,UAAU,EAAE,oBAAoB;gBAChC,UAAU,EAAE;oBACV,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE;oBAClD,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE;oBAChD,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE;iBAC/C;gBACD,UAAU,EAAE,sBAAsB;gBAClC,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,KAAK;aAChB,CAAC;YAEF,MAAM,GAAG,GAAG,mBAAmB,CAAC,eAAe,CAAC,CAAC;YAEjD,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;YAC9C,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACrC,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,iBAAiB,GAAsB;gBAC3C,IAAI,EAAE,MAAM;gBACZ,WAAW,EAAE,gCAAgC;gBAC7C,OAAO,EAAE,mBAAmB;gBAC5B,UAAU,EAAE,oBAAoB;gBAChC,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;gBACnE,UAAU,EAAE,QAAQ;gBACpB,OAAO,EAAE,KAAK;gBACd,SAAS,EAAE,gCAAgC;aAC5C,CAAC;YAEF,MAAM,GAAG,GAAG,qBAAqB,CAAC,iBAAiB,CAAC,CAAC;YAErD,qCAAqC;YACrC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;YACvD,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC1C,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC9B,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;YAC/D,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YAC9C,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACzC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACnC,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,MAAM,MAAM,GAAiB;gBAC3B,QAAQ,EAAE,cAAc;gBACxB,QAAQ,EAAE,uBAAuB;gBACjC,WAAW,EAAE,+BAA+B;gBAC5C,aAAa,EAAE,CAAC,KAAK,CAAC;gBACtB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC;gBACxC,UAAU,EAAE,CAAC,WAAW,CAAC;aAC1B,CAAC;YAEF,MAAM,GAAG,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;YAExC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YAC3C,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACxC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,iCAAiC;YACrE,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;YAC9D,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,kBAAkB;YACzD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACnD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;YAChC,MAAM,MAAM,GAAiB;gBAC3B,QAAQ,EAAE,iBAAiB;gBAC3B,QAAQ,EAAE,0BAA0B;gBACpC,WAAW,EAAE,4BAA4B;gBACzC,aAAa,EAAE,EAAE;gBACjB,QAAQ,EAAE,EAAE;gBACZ,UAAU,EAAE,EAAE;aACf,CAAC;YAEF,MAAM,GAAG,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;YAExC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Tests for the script parser module
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=script-parser.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"script-parser.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/script-parser.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,178 @@
1
+ /**
2
+ * Tests for the script parser module
3
+ */
4
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
5
+ import { writeFileSync, existsSync, mkdirSync, rmSync } from 'fs';
6
+ import { join } from 'path';
7
+ import { parseScript, parseScriptsFromDirectory } from '../script/index.js';
8
+ describe('Script Parser', () => {
9
+ const testDir = `/tmp/search-libs-script-test-${Date.now()}`;
10
+ const testScriptPath = join(testDir, 'test-script.ts');
11
+ beforeEach(() => {
12
+ // Create test directory
13
+ if (!existsSync(testDir)) {
14
+ mkdirSync(testDir, { recursive: true });
15
+ }
16
+ });
17
+ afterEach(() => {
18
+ // Clean up test directory
19
+ if (existsSync(testDir)) {
20
+ rmSync(testDir, { recursive: true });
21
+ }
22
+ });
23
+ describe('parseScript', () => {
24
+ it('parses a script with JSDoc comment', () => {
25
+ const code = `/**
26
+ * List all pods in the default namespace.
27
+ * Uses CoreV1Api to fetch pod information.
28
+ */
29
+ import * as k8s from '@kubernetes/client-node';
30
+
31
+ const kc = new k8s.KubeConfig();
32
+ kc.loadFromDefault();
33
+ const api = kc.makeApiClient(k8s.CoreV1Api);
34
+
35
+ async function main() {
36
+ const response = await api.listNamespacedPod({ namespace: 'default' });
37
+ console.log(response.items);
38
+ }
39
+
40
+ main();
41
+ `;
42
+ writeFileSync(testScriptPath, code);
43
+ const script = parseScript(testScriptPath);
44
+ expect(script).toBeDefined();
45
+ expect(script?.filename).toBe('test-script.ts');
46
+ expect(script?.description).toContain('List all pods');
47
+ expect(script?.filePath).toBe(testScriptPath);
48
+ });
49
+ it('extracts API class references from script content', () => {
50
+ const code = `/**
51
+ * Test script.
52
+ */
53
+ import * as k8s from '@kubernetes/client-node';
54
+
55
+ const kc = new k8s.KubeConfig();
56
+ const coreApi = kc.makeApiClient(k8s.CoreV1Api);
57
+ const appsApi = kc.makeApiClient(k8s.AppsV1Api);
58
+ `;
59
+ writeFileSync(testScriptPath, code);
60
+ const script = parseScript(testScriptPath);
61
+ expect(script).toBeDefined();
62
+ expect(script?.apiClasses).toContain('CoreV1Api');
63
+ expect(script?.apiClasses).toContain('AppsV1Api');
64
+ });
65
+ it('extracts keywords from description', () => {
66
+ const code = `/**
67
+ * Get deployment replicas and scale information.
68
+ * This script monitors deployment health.
69
+ */
70
+ const x = 1;
71
+ `;
72
+ writeFileSync(testScriptPath, code);
73
+ const script = parseScript(testScriptPath);
74
+ expect(script).toBeDefined();
75
+ expect(script?.keywords.length).toBeGreaterThan(0);
76
+ expect(script?.keywords.some((k) => k.toLowerCase().includes('deployment'))).toBe(true);
77
+ });
78
+ it('returns null for non-existent file', () => {
79
+ const script = parseScript('/non/existent/path/script.ts');
80
+ expect(script).toBeNull();
81
+ });
82
+ it('handles script without JSDoc comment', () => {
83
+ const code = `
84
+ const x = 1;
85
+ console.log(x);
86
+ `;
87
+ writeFileSync(testScriptPath, code);
88
+ const script = parseScript(testScriptPath);
89
+ expect(script).toBeDefined();
90
+ // When no JSDoc, description is generated from filename
91
+ expect(script?.description).toContain('Script:');
92
+ });
93
+ it('handles multi-line JSDoc comments', () => {
94
+ const code = `/**
95
+ * First line of description.
96
+ * Second line of description.
97
+ * Third line with more details.
98
+ */
99
+ const x = 1;
100
+ `;
101
+ writeFileSync(testScriptPath, code);
102
+ const script = parseScript(testScriptPath);
103
+ expect(script).toBeDefined();
104
+ expect(script?.description).toContain('First line');
105
+ expect(script?.description).toContain('Second line');
106
+ });
107
+ it('detects Prometheus API usage', () => {
108
+ const code = `/**
109
+ * Query Prometheus metrics.
110
+ */
111
+ const { PrometheusDriver } = require('prometheus-query');
112
+ const prom = new PrometheusDriver({ endpoint: 'http://localhost:9090' });
113
+ await prom.instantQuery('up');
114
+ `;
115
+ writeFileSync(testScriptPath, code);
116
+ const script = parseScript(testScriptPath);
117
+ expect(script).toBeDefined();
118
+ expect(script?.apiClasses).toContain('PrometheusDriver');
119
+ });
120
+ it('detects Loki client usage', () => {
121
+ const code = `/**
122
+ * Query Loki logs.
123
+ */
124
+ const { LokiClient } = require('@prodisco/loki-client');
125
+ const client = new LokiClient({ baseUrl: 'http://localhost:3100' });
126
+ await client.queryRange('{app="test"}');
127
+ `;
128
+ writeFileSync(testScriptPath, code);
129
+ const script = parseScript(testScriptPath);
130
+ expect(script).toBeDefined();
131
+ expect(script?.apiClasses).toContain('LokiClient');
132
+ });
133
+ });
134
+ describe('parseScriptsFromDirectory', () => {
135
+ it('parses all TypeScript scripts in a directory', () => {
136
+ // Create multiple test scripts
137
+ writeFileSync(join(testDir, 'script1.ts'), '/** Script 1 description */\nconst x = 1;');
138
+ writeFileSync(join(testDir, 'script2.ts'), '/** Script 2 description */\nconst y = 2;');
139
+ writeFileSync(join(testDir, 'not-a-script.txt'), 'This is not a script');
140
+ const scripts = parseScriptsFromDirectory(testDir);
141
+ expect(scripts.length).toBe(2);
142
+ expect(scripts.some((s) => s.filename === 'script1.ts')).toBe(true);
143
+ expect(scripts.some((s) => s.filename === 'script2.ts')).toBe(true);
144
+ });
145
+ it('recursively parses scripts when option is set', () => {
146
+ // Create subdirectory with scripts
147
+ const subDir = join(testDir, 'subdir');
148
+ mkdirSync(subDir, { recursive: true });
149
+ writeFileSync(join(testDir, 'root-script.ts'), '/** Root */\nconst x = 1;');
150
+ writeFileSync(join(subDir, 'sub-script.ts'), '/** Sub */\nconst y = 2;');
151
+ const scripts = parseScriptsFromDirectory(testDir, { recursive: true });
152
+ expect(scripts.length).toBe(2);
153
+ expect(scripts.some((s) => s.filename === 'root-script.ts')).toBe(true);
154
+ expect(scripts.some((s) => s.filename === 'sub-script.ts')).toBe(true);
155
+ });
156
+ it('only parses root level by default', () => {
157
+ // Create subdirectory with scripts
158
+ const subDir = join(testDir, 'subdir');
159
+ mkdirSync(subDir, { recursive: true });
160
+ writeFileSync(join(testDir, 'root-script.ts'), '/** Root */\nconst x = 1;');
161
+ writeFileSync(join(subDir, 'sub-script.ts'), '/** Sub */\nconst y = 2;');
162
+ const scripts = parseScriptsFromDirectory(testDir);
163
+ expect(scripts.length).toBe(1);
164
+ expect(scripts[0].filename).toBe('root-script.ts');
165
+ });
166
+ it('returns empty array for non-existent directory', () => {
167
+ const scripts = parseScriptsFromDirectory('/non/existent/directory');
168
+ expect(scripts).toEqual([]);
169
+ });
170
+ it('returns empty array for empty directory', () => {
171
+ const emptyDir = join(testDir, 'empty');
172
+ mkdirSync(emptyDir, { recursive: true });
173
+ const scripts = parseScriptsFromDirectory(emptyDir);
174
+ expect(scripts).toEqual([]);
175
+ });
176
+ });
177
+ });
178
+ //# sourceMappingURL=script-parser.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"script-parser.test.js","sourceRoot":"","sources":["../../src/__tests__/script-parser.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Tests for the search engine module
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=search-engine.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-engine.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/search-engine.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}