@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,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":"AAAA;;GAEG;AAEH,OAAO,EACL,MAAM,EACN,MAAM,EACN,cAAc,EACd,MAAM,EAEN,MAAM,EACN,MAAM,GAIP,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,UAAU,EAA2C,MAAM,0BAA0B,CAAC;AAC/F,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAwE5D;;;;;;;;GAQG;AACH,SAAS,eAAe,CAAC,KAAa;IACpC,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACtC,IAAI,CAAC,IAAI;YAAE,SAAS;QAEpB,mCAAmC;QACnC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAElB,0BAA0B;QAC1B,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QAEnC,iCAAiC;QACjC,sCAAsC;QACtC,qEAAqE;QACrE,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACpC,MAAM,kBAAkB,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;YACxE,IAAI,kBAAkB,EAAE,CAAC;gBACvB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,YAAY;IACf,EAAE,GAAoB,IAAI,CAAC;IAC3B,OAAO,CAAsB;IAErC,YAAY,UAA+B,EAAE;QAC3C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,IAAI,IAAI,CAAC,EAAE;YAAE,OAAO;QAEpB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,UAAU,CAAC;QAEjD,IAAI,CAAC,EAAE,GAAG,MAAM,MAAM,CAAC;YACrB,MAAM;YACN,UAAU,EAAE;gBACV,SAAS,EAAE;oBACT,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,QAAQ,IAAI,IAAI;oBACzD,qBAAqB,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,qBAAqB,IAAI;wBAC7E,MAAM;wBACN,WAAW;wBACX,SAAS;qBACV;iBACF;aACF;SACF,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,GAAS;QACpB,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,IAAI,CAAC,EAAG,EAAE,GAAG,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,gDAAgD;YAChD,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBACvE,MAAM,MAAM,CAAC,IAAI,CAAC,EAAG,EAAG,GAAsB,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAC1D,CAAC;iBAAM,CAAC;gBACN,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,IAAY;QAC5B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAC9B,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,cAAc,CAAC,IAAI,CAAC,EAAG,EAAE,IAAI,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,mEAAmE;YACnE,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBACvE,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;oBACvB,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,EAAU;QACrB,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC/B,MAAM,MAAM,CAAC,IAAI,CAAC,EAAG,EAAE,EAAE,CAAC,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,OAAsB;QACjC,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAE/B,MAAM,EACJ,KAAK,GAAG,EAAE,EACV,YAAY,EACZ,QAAQ,EACR,OAAO,EACP,OAAO,EACP,KAAK,GAAG,EAAE,EACV,MAAM,GAAG,CAAC,EACV,KAAK,GACN,GAAG,OAAO,CAAC;QAEZ,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAEpC,4CAA4C;QAC5C,MAAM,cAAc,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QAE9C,uFAAuF;QACvF,4DAA4D;QAC5D,8DAA8D;QAC9D,MAAM,KAAK,GAAwB,EAAE,CAAC;QAEtC,IAAI,YAAY,IAAI,YAAY,KAAK,KAAK,EAAE,CAAC;YAC3C,KAAK,CAAC,YAAY,GAAG,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC;QAC5C,CAAC;QAED,IAAI,QAAQ,EAAE,CAAC;YACb,KAAK,CAAC,QAAQ,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC;QACpC,CAAC;QAED,IAAI,OAAO,EAAE,CAAC;YACZ,KAAK,CAAC,OAAO,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;QAClC,CAAC;QAED,sBAAsB;QACtB,MAAM,YAAY,GAAiC;YACjD,IAAI,EAAE,cAAc;YACpB,UAAU,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,CAAC;YACjE,KAAK,EAAE,KAAK,IAAI;gBACd,IAAI,EAAE,CAAC;gBACP,YAAY,EAAE,CAAC;gBACf,WAAW,EAAE,CAAC;gBACd,UAAU,EAAE,GAAG;aAChB;YACD,SAAS,EAAE,CAAC,EAAE,uBAAuB;YACrC,6CAA6C;YAC7C,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,MAAM,GAAG,EAAE;YAChE,MAAM,EAAE;gBACN,YAAY,EAAE,EAAE;gBAChB,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,EAAE;aACb;YACD,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACpD,CAAC;QAEF,iBAAiB;QACjB,MAAM,YAAY,GAAkB,MAAM,MAAM,CAAC,IAAI,CAAC,EAAG,EAAE,YAAY,CAAC,CAAC;QAEzE,4EAA4E;QAC5E,MAAM,UAAU,GAAG,cAAc;aAC9B,WAAW,EAAE;aACb,KAAK,CAAC,KAAK,CAAC;aACZ,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;QAEtC,yCAAyC;QACzC,sBAAsB;QACtB,qDAAqD;QACrD,mBAAmB;QACnB,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,UAAU,GAAG,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACtD,MAAM,UAAU,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACjD,MAAM,UAAU,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YAEjD,+BAA+B;YAC/B,MAAM,MAAM,GAAG,UAAU,KAAK,UAAU,CAAC;YACzC,MAAM,MAAM,GAAG,UAAU,KAAK,UAAU,CAAC;YACzC,IAAI,MAAM,IAAI,CAAC,MAAM;gBAAE,OAAO,CAAC,CAAC,CAAC;YACjC,IAAI,CAAC,MAAM,IAAI,MAAM;gBAAE,OAAO,CAAC,CAAC;YAEhC,4DAA4D;YAC5D,iEAAiE;YACjE,gFAAgF;YAChF,MAAM,WAAW,GAAG,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC/E,MAAM,WAAW,GAAG,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAE/E,mFAAmF;YACnF,MAAM,WAAW,GAAG,CAAC,MAAgB,EAAE,IAAY,EAAE,EAAE,CACrD,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;YAE3E,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;YACtF,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;YAEtF,uDAAuD;YACvD,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;gBAC9B,OAAO,UAAU,GAAG,UAAU,CAAC;YACjC,CAAC;YAED,yCAAyC;YACzC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,iFAAiF;QACjF,IAAI,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAErD,IAAI,OAAO,EAAE,UAAU,EAAE,CAAC;YACxB,QAAQ,GAAG,QAAQ,CAAC,MAAM,CACxB,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,UAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CACrD,CAAC;QACJ,CAAC;QAED,IAAI,OAAO,EAAE,SAAS,EAAE,CAAC;YACvB,QAAQ,GAAG,QAAQ,CAAC,MAAM,CACxB,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CACnD,CAAC;QACJ,CAAC;QAED,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC;QAErC,mBAAmB;QACnB,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC;QAEzD,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAEjD,OAAO;YACL,OAAO,EAAE,SAAS;YAClB,YAAY;YACZ,MAAM,EAAE;gBACN,YAAY,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,IAAI,EAAE,CAA2B;gBACzF,OAAO,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,EAAE,CAA2B;gBAC/E,QAAQ,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,EAAE,CAA2B;aAClF;YACD,UAAU;SACX,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK;QACH,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,iBAAiB;QAC7B,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;CACF"}
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
+ }