@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,245 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Orama search engine wrapper with typed search
|
|
3
|
+
*/
|
|
4
|
+
import { create, insert, insertMultiple, update, search, remove, } from '@orama/orama';
|
|
5
|
+
import { baseSchema } from '../schema/base-schema.js';
|
|
6
|
+
import { splitCamelCase } from '../extractor/ast-parser.js';
|
|
7
|
+
/**
|
|
8
|
+
* Preprocess a search query by splitting camelCase terms.
|
|
9
|
+
* This ensures queries like "readNamespacedPodLog" match indexed documents
|
|
10
|
+
* that have "read Namespaced Pod Log" in their search tokens.
|
|
11
|
+
*
|
|
12
|
+
* Includes both the original term and the split version to handle cases like:
|
|
13
|
+
* - "readNamespacedPodLog" → "readNamespacedPodLog read Namespaced Pod Log"
|
|
14
|
+
* - "TeSt" → "TeSt" (no additional split since it's not useful camelCase)
|
|
15
|
+
*/
|
|
16
|
+
function preprocessQuery(query) {
|
|
17
|
+
const tokens = [];
|
|
18
|
+
for (const word of query.split(/\s+/)) {
|
|
19
|
+
if (!word)
|
|
20
|
+
continue;
|
|
21
|
+
// Always include the original word
|
|
22
|
+
tokens.push(word);
|
|
23
|
+
// Try camelCase splitting
|
|
24
|
+
const split = splitCamelCase(word);
|
|
25
|
+
// Only add the split version if:
|
|
26
|
+
// 1. It's different from the original
|
|
27
|
+
// 2. It produces tokens of reasonable length (at least 3 chars each)
|
|
28
|
+
if (split !== word) {
|
|
29
|
+
const splitParts = split.split(' ');
|
|
30
|
+
const allPartsReasonable = splitParts.every((part) => part.length >= 3);
|
|
31
|
+
if (allPartsReasonable) {
|
|
32
|
+
tokens.push(split);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return tokens.join(' ');
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Search engine wrapping Orama
|
|
40
|
+
*/
|
|
41
|
+
export class SearchEngine {
|
|
42
|
+
db = null;
|
|
43
|
+
options;
|
|
44
|
+
constructor(options = {}) {
|
|
45
|
+
this.options = options;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Initialize the search engine
|
|
49
|
+
*/
|
|
50
|
+
async initialize() {
|
|
51
|
+
if (this.db)
|
|
52
|
+
return;
|
|
53
|
+
const schema = this.options.schema || baseSchema;
|
|
54
|
+
this.db = await create({
|
|
55
|
+
schema,
|
|
56
|
+
components: {
|
|
57
|
+
tokenizer: {
|
|
58
|
+
stemming: this.options.tokenizerOptions?.stemming ?? true,
|
|
59
|
+
stemmerSkipProperties: this.options.tokenizerOptions?.stemmerSkipProperties || [
|
|
60
|
+
'name',
|
|
61
|
+
'className',
|
|
62
|
+
'library',
|
|
63
|
+
],
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Insert a single document (uses update if document already exists)
|
|
70
|
+
*/
|
|
71
|
+
async insert(doc) {
|
|
72
|
+
await this.ensureInitialized();
|
|
73
|
+
try {
|
|
74
|
+
await insert(this.db, doc);
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
// If document already exists, update it instead
|
|
78
|
+
if (error instanceof Error && error.message.includes('already exists')) {
|
|
79
|
+
await update(this.db, doc.id, doc);
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
throw error;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Insert multiple documents (uses update if documents already exist)
|
|
88
|
+
*/
|
|
89
|
+
async insertBatch(docs) {
|
|
90
|
+
if (docs.length === 0)
|
|
91
|
+
return;
|
|
92
|
+
await this.ensureInitialized();
|
|
93
|
+
try {
|
|
94
|
+
await insertMultiple(this.db, docs);
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
// If some documents already exist, fall back to individual upserts
|
|
98
|
+
if (error instanceof Error && error.message.includes('already exists')) {
|
|
99
|
+
for (const doc of docs) {
|
|
100
|
+
await this.insert(doc);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
throw error;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Remove a document by ID
|
|
110
|
+
*/
|
|
111
|
+
async remove(id) {
|
|
112
|
+
await this.ensureInitialized();
|
|
113
|
+
await remove(this.db, id);
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Search the index
|
|
117
|
+
*/
|
|
118
|
+
async search(options) {
|
|
119
|
+
await this.ensureInitialized();
|
|
120
|
+
const { query = '', documentType, category, library, exclude, limit = 10, offset = 0, boost, } = options;
|
|
121
|
+
const startTime = performance.now();
|
|
122
|
+
// Preprocess query to split camelCase terms
|
|
123
|
+
const processedQuery = preprocessQuery(query);
|
|
124
|
+
// Build where clause for database-level filtering (more efficient than post-filtering)
|
|
125
|
+
// For enum types in Orama, we need to use the 'eq' operator
|
|
126
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
127
|
+
const where = {};
|
|
128
|
+
if (documentType && documentType !== 'all') {
|
|
129
|
+
where.documentType = { eq: documentType };
|
|
130
|
+
}
|
|
131
|
+
if (category) {
|
|
132
|
+
where.category = { eq: category };
|
|
133
|
+
}
|
|
134
|
+
if (library) {
|
|
135
|
+
where.library = { eq: library };
|
|
136
|
+
}
|
|
137
|
+
// Build search params
|
|
138
|
+
const searchParams = {
|
|
139
|
+
term: processedQuery,
|
|
140
|
+
properties: ['name', 'description', 'searchTokens', 'properties'],
|
|
141
|
+
boost: boost || {
|
|
142
|
+
name: 3,
|
|
143
|
+
searchTokens: 2,
|
|
144
|
+
description: 1,
|
|
145
|
+
properties: 0.5,
|
|
146
|
+
},
|
|
147
|
+
tolerance: 1, // Allow fuzzy matching
|
|
148
|
+
// Fetch more results for exclusion filtering
|
|
149
|
+
limit: exclude ? Math.max(limit * 10, 500) : limit + offset + 50,
|
|
150
|
+
facets: {
|
|
151
|
+
documentType: {},
|
|
152
|
+
library: {},
|
|
153
|
+
category: {},
|
|
154
|
+
},
|
|
155
|
+
...(Object.keys(where).length > 0 ? { where } : {}),
|
|
156
|
+
};
|
|
157
|
+
// Execute search
|
|
158
|
+
const searchResult = await search(this.db, searchParams);
|
|
159
|
+
// Extract query terms for ranking (split by whitespace, filter short terms)
|
|
160
|
+
const queryTerms = processedQuery
|
|
161
|
+
.toLowerCase()
|
|
162
|
+
.split(/\s+/)
|
|
163
|
+
.filter((term) => term.length >= 2);
|
|
164
|
+
// Sort by relevance with custom ranking:
|
|
165
|
+
// 1. Exact name match
|
|
166
|
+
// 2. Name contains ALL query terms (higher = better)
|
|
167
|
+
// 3. Orama's score
|
|
168
|
+
const queryLower = query.toLowerCase();
|
|
169
|
+
const sortedHits = [...searchResult.hits].sort((a, b) => {
|
|
170
|
+
const aNameLower = a.document.name.toLowerCase();
|
|
171
|
+
const bNameLower = b.document.name.toLowerCase();
|
|
172
|
+
// Priority 1: Exact name match
|
|
173
|
+
const aExact = aNameLower === queryLower;
|
|
174
|
+
const bExact = bNameLower === queryLower;
|
|
175
|
+
if (aExact && !bExact)
|
|
176
|
+
return -1;
|
|
177
|
+
if (!aExact && bExact)
|
|
178
|
+
return 1;
|
|
179
|
+
// Priority 2: Count how many query terms appear in the name
|
|
180
|
+
// Split names by camelCase to get individual tokens for matching
|
|
181
|
+
// Note: Must split BEFORE lowercasing since camelCase detection needs case info
|
|
182
|
+
const aNameTokens = splitCamelCase(a.document.name).toLowerCase().split(/\s+/);
|
|
183
|
+
const bNameTokens = splitCamelCase(b.document.name).toLowerCase().split(/\s+/);
|
|
184
|
+
// Check if query term matches (prefix match to handle plurals like "logs" → "log")
|
|
185
|
+
const termMatches = (tokens, term) => tokens.some((token) => token.startsWith(term) || term.startsWith(token));
|
|
186
|
+
const aTermCount = queryTerms.filter((term) => termMatches(aNameTokens, term)).length;
|
|
187
|
+
const bTermCount = queryTerms.filter((term) => termMatches(bNameTokens, term)).length;
|
|
188
|
+
// Boost documents where name contains more query terms
|
|
189
|
+
if (aTermCount !== bTermCount) {
|
|
190
|
+
return bTermCount - aTermCount;
|
|
191
|
+
}
|
|
192
|
+
// Priority 3: Fall back to Orama's score
|
|
193
|
+
return (b.score || 0) - (a.score || 0);
|
|
194
|
+
});
|
|
195
|
+
// Apply exclusion filters (positive filters are handled by Orama's where clause)
|
|
196
|
+
let filtered = sortedHits.map((hit) => hit.document);
|
|
197
|
+
if (exclude?.categories) {
|
|
198
|
+
filtered = filtered.filter((doc) => !exclude.categories.includes(doc.category));
|
|
199
|
+
}
|
|
200
|
+
if (exclude?.libraries) {
|
|
201
|
+
filtered = filtered.filter((doc) => !exclude.libraries.includes(doc.library));
|
|
202
|
+
}
|
|
203
|
+
const totalMatches = filtered.length;
|
|
204
|
+
// Apply pagination
|
|
205
|
+
const paginated = filtered.slice(offset, offset + limit);
|
|
206
|
+
const searchTime = performance.now() - startTime;
|
|
207
|
+
return {
|
|
208
|
+
results: paginated,
|
|
209
|
+
totalMatches,
|
|
210
|
+
facets: {
|
|
211
|
+
documentType: (searchResult.facets?.documentType?.values || {}),
|
|
212
|
+
library: (searchResult.facets?.library?.values || {}),
|
|
213
|
+
category: (searchResult.facets?.category?.values || {}),
|
|
214
|
+
},
|
|
215
|
+
searchTime,
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Get the underlying Orama database
|
|
220
|
+
*/
|
|
221
|
+
getDb() {
|
|
222
|
+
return this.db;
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Check if the engine is initialized
|
|
226
|
+
*/
|
|
227
|
+
isInitialized() {
|
|
228
|
+
return this.db !== null;
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Shutdown the engine
|
|
232
|
+
*/
|
|
233
|
+
async shutdown() {
|
|
234
|
+
this.db = null;
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Ensure the engine is initialized
|
|
238
|
+
*/
|
|
239
|
+
async ensureInitialized() {
|
|
240
|
+
if (!this.db) {
|
|
241
|
+
await this.initialize();
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
//# sourceMappingURL=search-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-engine.js","sourceRoot":"","sources":["../../src/search/search-engine.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@prodisco/search-libs",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Generic TypeScript library indexing and search using Orama",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.js",
|
|
12
|
+
"require": "./dist/index.cjs"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"dist"
|
|
17
|
+
],
|
|
18
|
+
"scripts": {
|
|
19
|
+
"build": "tsc -p tsconfig.json",
|
|
20
|
+
"test": "vitest run",
|
|
21
|
+
"test:watch": "vitest"
|
|
22
|
+
},
|
|
23
|
+
"dependencies": {
|
|
24
|
+
"@orama/orama": "^3.1.5",
|
|
25
|
+
"typescript": "^5.9.3"
|
|
26
|
+
},
|
|
27
|
+
"devDependencies": {
|
|
28
|
+
"@types/node": "^24.10.1",
|
|
29
|
+
"vitest": "^4.0.15"
|
|
30
|
+
},
|
|
31
|
+
"keywords": [
|
|
32
|
+
"typescript",
|
|
33
|
+
"search",
|
|
34
|
+
"indexing",
|
|
35
|
+
"orama",
|
|
36
|
+
"ast",
|
|
37
|
+
"type-extraction"
|
|
38
|
+
],
|
|
39
|
+
"author": "Harshal Patil",
|
|
40
|
+
"license": "MIT"
|
|
41
|
+
}
|