@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,59 @@
1
+ /**
2
+ * Fluent query builder for search options
3
+ */
4
+ import type { SearchOptions } from './search-engine.js';
5
+ /**
6
+ * Fluent builder for constructing search queries
7
+ */
8
+ export declare class QueryBuilder {
9
+ private options;
10
+ /**
11
+ * Set the search query term
12
+ */
13
+ query(term: string): this;
14
+ /**
15
+ * Filter by document type
16
+ */
17
+ documentType(type: 'type' | 'method' | 'function' | 'script' | 'all'): this;
18
+ /**
19
+ * Filter by category
20
+ */
21
+ category(cat: string): this;
22
+ /**
23
+ * Filter by library
24
+ */
25
+ library(lib: string): this;
26
+ /**
27
+ * Exclude categories
28
+ */
29
+ excludeCategories(categories: string[]): this;
30
+ /**
31
+ * Exclude libraries
32
+ */
33
+ excludeLibraries(libraries: string[]): this;
34
+ /**
35
+ * Set maximum results
36
+ */
37
+ limit(n: number): this;
38
+ /**
39
+ * Set pagination offset
40
+ */
41
+ offset(n: number): this;
42
+ /**
43
+ * Set pagination by page number (1-indexed)
44
+ */
45
+ page(pageNum: number, pageSize?: number): this;
46
+ /**
47
+ * Set field boost weights
48
+ */
49
+ boost(weights: Record<string, number>): this;
50
+ /**
51
+ * Build the final search options
52
+ */
53
+ build(): SearchOptions;
54
+ /**
55
+ * Create a new QueryBuilder
56
+ */
57
+ static create(): QueryBuilder;
58
+ }
59
+ //# sourceMappingURL=query-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-builder.d.ts","sourceRoot":"","sources":["../../src/search/query-builder.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAIb;IAEF;;OAEG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKzB;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,KAAK,GAAG,IAAI;IAK3E;;OAEG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAK3B;;OAEG;IACH,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAK1B;;OAEG;IACH,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI;IAQ7C;;OAEG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI;IAQ3C;;OAEG;IACH,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAKtB;;OAEG;IACH,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAKvB;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAW,GAAG,IAAI;IAMlD;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAK5C;;OAEG;IACH,KAAK,IAAI,aAAa;IAItB;;OAEG;IACH,MAAM,CAAC,MAAM,IAAI,YAAY;CAG9B"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Fluent query builder for search options
3
+ */
4
+ /**
5
+ * Fluent builder for constructing search queries
6
+ */
7
+ export class QueryBuilder {
8
+ options = {
9
+ query: '',
10
+ limit: 10,
11
+ offset: 0,
12
+ };
13
+ /**
14
+ * Set the search query term
15
+ */
16
+ query(term) {
17
+ this.options.query = term;
18
+ return this;
19
+ }
20
+ /**
21
+ * Filter by document type
22
+ */
23
+ documentType(type) {
24
+ this.options.documentType = type;
25
+ return this;
26
+ }
27
+ /**
28
+ * Filter by category
29
+ */
30
+ category(cat) {
31
+ this.options.category = cat;
32
+ return this;
33
+ }
34
+ /**
35
+ * Filter by library
36
+ */
37
+ library(lib) {
38
+ this.options.library = lib;
39
+ return this;
40
+ }
41
+ /**
42
+ * Exclude categories
43
+ */
44
+ excludeCategories(categories) {
45
+ this.options.exclude = {
46
+ ...this.options.exclude,
47
+ categories,
48
+ };
49
+ return this;
50
+ }
51
+ /**
52
+ * Exclude libraries
53
+ */
54
+ excludeLibraries(libraries) {
55
+ this.options.exclude = {
56
+ ...this.options.exclude,
57
+ libraries,
58
+ };
59
+ return this;
60
+ }
61
+ /**
62
+ * Set maximum results
63
+ */
64
+ limit(n) {
65
+ this.options.limit = n;
66
+ return this;
67
+ }
68
+ /**
69
+ * Set pagination offset
70
+ */
71
+ offset(n) {
72
+ this.options.offset = n;
73
+ return this;
74
+ }
75
+ /**
76
+ * Set pagination by page number (1-indexed)
77
+ */
78
+ page(pageNum, pageSize = 10) {
79
+ this.options.limit = pageSize;
80
+ this.options.offset = (pageNum - 1) * pageSize;
81
+ return this;
82
+ }
83
+ /**
84
+ * Set field boost weights
85
+ */
86
+ boost(weights) {
87
+ this.options.boost = weights;
88
+ return this;
89
+ }
90
+ /**
91
+ * Build the final search options
92
+ */
93
+ build() {
94
+ return { ...this.options };
95
+ }
96
+ /**
97
+ * Create a new QueryBuilder
98
+ */
99
+ static create() {
100
+ return new QueryBuilder();
101
+ }
102
+ }
103
+ //# sourceMappingURL=query-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-builder.js","sourceRoot":"","sources":["../../src/search/query-builder.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,MAAM,OAAO,YAAY;IACf,OAAO,GAAkB;QAC/B,KAAK,EAAE,EAAE;QACT,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,CAAC;KACV,CAAC;IAEF;;OAEG;IACH,KAAK,CAAC,IAAY;QAChB,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,IAAuD;QAClE,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,GAAW;QAClB,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,GAAW;QACjB,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,GAAG,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,UAAoB;QACpC,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG;YACrB,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO;YACvB,UAAU;SACX,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,SAAmB;QAClC,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG;YACrB,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO;YACvB,SAAS;SACV,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,CAAS;QACb,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,CAAS;QACd,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,OAAe,EAAE,WAAmB,EAAE;QACzC,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC;QAC9B,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAA+B;QACnC,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,KAAK;QACH,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,MAAM;QACX,OAAO,IAAI,YAAY,EAAE,CAAC;IAC5B,CAAC;CACF"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Format search results for AI consumption
3
+ */
4
+ import type { BaseDocument } from '../schema/base-schema.js';
5
+ import type { SearchResult } from './search-engine.js';
6
+ import type { PropertyInfo, ParameterInfo } from '../extractor/types.js';
7
+ /**
8
+ * Formatted result item for display/AI consumption
9
+ */
10
+ export interface FormattedItem {
11
+ id: string;
12
+ type: 'type' | 'method' | 'function' | 'script';
13
+ name: string;
14
+ library: string;
15
+ category: string;
16
+ description: string;
17
+ typeKind?: string;
18
+ properties?: PropertyInfo[];
19
+ nestedTypes?: string[];
20
+ typeDefinition?: string;
21
+ parameters?: ParameterInfo[];
22
+ returnType?: string;
23
+ returnTypeDefinition?: string;
24
+ signature?: string;
25
+ className?: string;
26
+ filePath?: string;
27
+ keywords?: string[];
28
+ }
29
+ /**
30
+ * Formatted search result
31
+ */
32
+ export interface FormattedResult {
33
+ summary: string;
34
+ items: FormattedItem[];
35
+ totalMatches: number;
36
+ facets: Record<string, Record<string, number>>;
37
+ pagination: {
38
+ offset: number;
39
+ limit: number;
40
+ hasMore: boolean;
41
+ };
42
+ searchTime: number;
43
+ }
44
+ /**
45
+ * Options for formatting results
46
+ */
47
+ export interface FormatOptions {
48
+ /** Maximum properties to include for types */
49
+ maxProperties?: number;
50
+ /** Include file paths for scripts */
51
+ includeFilePaths?: boolean;
52
+ }
53
+ /**
54
+ * Format search results for structured output
55
+ */
56
+ export declare function formatResults(searchResult: SearchResult<BaseDocument>, options?: FormatOptions): FormattedResult;
57
+ /**
58
+ * Format results as a string for AI consumption
59
+ */
60
+ export declare function formatForAI(searchResult: SearchResult<BaseDocument>, options?: FormatOptions): string;
61
+ //# sourceMappingURL=result-formatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result-formatter.d.ts","sourceRoot":"","sources":["../../src/search/result-formatter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEzE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAAC;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IAGpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,YAAY,EAAE,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IAGxB,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC/C,UAAU,EAAE;QACV,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC;IACF,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,8CAA8C;IAC9C,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,qCAAqC;IACrC,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,YAAY,EAAE,YAAY,CAAC,YAAY,CAAC,EACxC,OAAO,GAAE,aAAkB,GAC1B,eAAe,CA+BjB;AA6HD;;GAEG;AACH,wBAAgB,WAAW,CACzB,YAAY,EAAE,YAAY,CAAC,YAAY,CAAC,EACxC,OAAO,GAAE,aAAkB,GAC1B,MAAM,CAyCR"}
@@ -0,0 +1,170 @@
1
+ /**
2
+ * Format search results for AI consumption
3
+ */
4
+ /**
5
+ * Format search results for structured output
6
+ */
7
+ export function formatResults(searchResult, options = {}) {
8
+ const { maxProperties = 10, includeFilePaths = false } = options;
9
+ const items = searchResult.results.map((doc) => formatDocument(doc, { maxProperties, includeFilePaths }));
10
+ const resultCount = searchResult.results.length;
11
+ const total = searchResult.totalMatches;
12
+ let summary;
13
+ if (resultCount === 0) {
14
+ summary = 'No results found.';
15
+ }
16
+ else if (resultCount === total) {
17
+ summary = `Found ${total} result${total === 1 ? '' : 's'}.`;
18
+ }
19
+ else {
20
+ summary = `Showing ${resultCount} of ${total} results.`;
21
+ }
22
+ return {
23
+ summary,
24
+ items,
25
+ totalMatches: searchResult.totalMatches,
26
+ facets: searchResult.facets,
27
+ pagination: {
28
+ offset: 0, // Would need to track this from search options
29
+ limit: resultCount,
30
+ hasMore: resultCount < total,
31
+ },
32
+ searchTime: searchResult.searchTime,
33
+ };
34
+ }
35
+ /**
36
+ * Format a single document
37
+ */
38
+ function formatDocument(doc, options) {
39
+ const base = {
40
+ id: doc.id,
41
+ type: doc.documentType,
42
+ name: doc.name,
43
+ library: doc.library,
44
+ category: doc.category,
45
+ description: doc.description,
46
+ };
47
+ switch (doc.documentType) {
48
+ case 'type':
49
+ return formatTypeDocument(doc, base, options);
50
+ case 'method':
51
+ return formatMethodDocument(doc, base);
52
+ case 'function':
53
+ return formatFunctionDocument(doc, base);
54
+ case 'script':
55
+ return formatScriptDocument(doc, base, options);
56
+ default:
57
+ return base;
58
+ }
59
+ }
60
+ /**
61
+ * Format a type document
62
+ */
63
+ function formatTypeDocument(doc, base, options) {
64
+ let properties = [];
65
+ try {
66
+ properties = doc.properties ? JSON.parse(doc.properties) : [];
67
+ }
68
+ catch {
69
+ // Ignore parse errors
70
+ }
71
+ const nestedTypes = doc.nestedTypes
72
+ ? doc.nestedTypes.split(',').map((t) => t.trim()).filter(Boolean)
73
+ : [];
74
+ return {
75
+ ...base,
76
+ typeKind: doc.typeKind,
77
+ properties: properties.slice(0, options.maxProperties || 10),
78
+ nestedTypes,
79
+ typeDefinition: doc.typeDefinition || undefined,
80
+ };
81
+ }
82
+ /**
83
+ * Format a method document
84
+ */
85
+ function formatMethodDocument(doc, base) {
86
+ let parameters = [];
87
+ try {
88
+ parameters = doc.parameters ? JSON.parse(doc.parameters) : [];
89
+ }
90
+ catch {
91
+ // Ignore parse errors
92
+ }
93
+ return {
94
+ ...base,
95
+ parameters,
96
+ returnType: doc.returnType || undefined,
97
+ returnTypeDefinition: doc.returnTypeDefinition || undefined,
98
+ signature: doc.signature || undefined,
99
+ className: doc.className || undefined,
100
+ };
101
+ }
102
+ /**
103
+ * Format a function document
104
+ */
105
+ function formatFunctionDocument(doc, base) {
106
+ let parameters = [];
107
+ try {
108
+ parameters = doc.parameters ? JSON.parse(doc.parameters) : [];
109
+ }
110
+ catch {
111
+ // Ignore parse errors
112
+ }
113
+ return {
114
+ ...base,
115
+ parameters,
116
+ returnType: doc.returnType || undefined,
117
+ signature: doc.signature || undefined,
118
+ };
119
+ }
120
+ /**
121
+ * Format a script document
122
+ */
123
+ function formatScriptDocument(doc, base, options) {
124
+ const keywords = doc.keywords
125
+ ? doc.keywords.split(' ').filter(Boolean)
126
+ : [];
127
+ return {
128
+ ...base,
129
+ filePath: options.includeFilePaths ? doc.filePath : undefined,
130
+ keywords: keywords.length > 0 ? keywords : undefined,
131
+ };
132
+ }
133
+ /**
134
+ * Format results as a string for AI consumption
135
+ */
136
+ export function formatForAI(searchResult, options = {}) {
137
+ const formatted = formatResults(searchResult, options);
138
+ const lines = [formatted.summary, ''];
139
+ for (const item of formatted.items) {
140
+ lines.push(`## ${item.name} (${item.type})`);
141
+ lines.push(`Library: ${item.library}`);
142
+ lines.push(`Category: ${item.category}`);
143
+ lines.push(`Description: ${item.description}`);
144
+ if (item.signature) {
145
+ lines.push(`Signature: ${item.signature}`);
146
+ }
147
+ if (item.parameters && item.parameters.length > 0) {
148
+ lines.push('Parameters:');
149
+ for (const param of item.parameters) {
150
+ const opt = param.optional ? '?' : '';
151
+ const typeDef = param.typeDefinition ? ` = ${param.typeDefinition}` : '';
152
+ lines.push(` - ${param.name}${opt}: ${param.type}${typeDef}`);
153
+ }
154
+ }
155
+ if (item.returnType) {
156
+ const returnDef = item.returnTypeDefinition ? ` = ${item.returnTypeDefinition}` : '';
157
+ lines.push(`Returns: ${item.returnType}${returnDef}`);
158
+ }
159
+ if (item.properties && item.properties.length > 0) {
160
+ lines.push('Properties:');
161
+ for (const prop of item.properties) {
162
+ const opt = prop.optional ? '?' : '';
163
+ lines.push(` - ${prop.name}${opt}: ${prop.type}`);
164
+ }
165
+ }
166
+ lines.push('');
167
+ }
168
+ return lines.join('\n');
169
+ }
170
+ //# sourceMappingURL=result-formatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result-formatter.js","sourceRoot":"","sources":["../../src/search/result-formatter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Orama search engine wrapper with typed search
3
+ */
4
+ import { type Orama } from '@orama/orama';
5
+ import { type BaseDocument, type OramaSchemaType } from '../schema/base-schema.js';
6
+ /**
7
+ * Options for initializing the search engine
8
+ */
9
+ export interface SearchEngineOptions {
10
+ /** Custom schema (defaults to baseSchema) */
11
+ schema?: OramaSchemaType;
12
+ /** Tokenizer options */
13
+ tokenizerOptions?: {
14
+ stemming?: boolean;
15
+ stemmerSkipProperties?: string[];
16
+ };
17
+ }
18
+ /**
19
+ * Search query options
20
+ */
21
+ export interface SearchOptions {
22
+ /** Full-text search term */
23
+ query?: string;
24
+ /** Filter by document type */
25
+ documentType?: string;
26
+ /** Filter by category */
27
+ category?: string;
28
+ /** Filter by library */
29
+ library?: string;
30
+ /** Exclusion filters */
31
+ exclude?: {
32
+ categories?: string[];
33
+ libraries?: string[];
34
+ };
35
+ /** Maximum results (default: 10) */
36
+ limit?: number;
37
+ /** Pagination offset (default: 0) */
38
+ offset?: number;
39
+ /** Field boost weights */
40
+ boost?: Record<string, number>;
41
+ }
42
+ /**
43
+ * Search result
44
+ */
45
+ export interface SearchResult<TDoc = BaseDocument> {
46
+ /** Matched documents */
47
+ results: TDoc[];
48
+ /** Total matches before pagination */
49
+ totalMatches: number;
50
+ /** Facet counts */
51
+ facets: {
52
+ documentType: Record<string, number>;
53
+ library: Record<string, number>;
54
+ category: Record<string, number>;
55
+ };
56
+ /** Search execution time in ms */
57
+ searchTime: number;
58
+ }
59
+ type AnyOrama = Orama<any>;
60
+ /**
61
+ * Search engine wrapping Orama
62
+ */
63
+ export declare class SearchEngine<TDoc extends BaseDocument = BaseDocument> {
64
+ private db;
65
+ private options;
66
+ constructor(options?: SearchEngineOptions);
67
+ /**
68
+ * Initialize the search engine
69
+ */
70
+ initialize(): Promise<void>;
71
+ /**
72
+ * Insert a single document (uses update if document already exists)
73
+ */
74
+ insert(doc: TDoc): Promise<void>;
75
+ /**
76
+ * Insert multiple documents (uses update if documents already exist)
77
+ */
78
+ insertBatch(docs: TDoc[]): Promise<void>;
79
+ /**
80
+ * Remove a document by ID
81
+ */
82
+ remove(id: string): Promise<void>;
83
+ /**
84
+ * Search the index
85
+ */
86
+ search(options: SearchOptions): Promise<SearchResult<TDoc>>;
87
+ /**
88
+ * Get the underlying Orama database
89
+ */
90
+ getDb(): AnyOrama | null;
91
+ /**
92
+ * Check if the engine is initialized
93
+ */
94
+ isInitialized(): boolean;
95
+ /**
96
+ * Shutdown the engine
97
+ */
98
+ shutdown(): Promise<void>;
99
+ /**
100
+ * Ensure the engine is initialized
101
+ */
102
+ private ensureInitialized;
103
+ }
104
+ export {};
105
+ //# sourceMappingURL=search-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-engine.d.ts","sourceRoot":"","sources":["../../src/search/search-engine.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAQL,KAAK,KAAK,EAGX,MAAM,cAAc,CAAC;AACtB,OAAO,EAAc,KAAK,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAG/F;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,6CAA6C;IAC7C,MAAM,CAAC,EAAE,eAAe,CAAC;IAEzB,wBAAwB;IACxB,gBAAgB,CAAC,EAAE;QACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;KAClC,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,8BAA8B;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,yBAAyB;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,wBAAwB;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,wBAAwB;IACxB,OAAO,CAAC,EAAE;QACR,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;QACtB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;KACtB,CAAC;IAEF,oCAAoC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,qCAAqC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,0BAA0B;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,IAAI,GAAG,YAAY;IAC/C,wBAAwB;IACxB,OAAO,EAAE,IAAI,EAAE,CAAC;IAEhB,sCAAsC;IACtC,YAAY,EAAE,MAAM,CAAC;IAErB,mBAAmB;IACnB,MAAM,EAAE;QACN,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACrC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAClC,CAAC;IAEF,kCAAkC;IAClC,UAAU,EAAE,MAAM,CAAC;CACpB;AAGD,KAAK,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;AAsC3B;;GAEG;AACH,qBAAa,YAAY,CAAC,IAAI,SAAS,YAAY,GAAG,YAAY;IAChE,OAAO,CAAC,EAAE,CAAyB;IACnC,OAAO,CAAC,OAAO,CAAsB;gBAEzB,OAAO,GAAE,mBAAwB;IAI7C;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBjC;;OAEG;IACG,MAAM,CAAC,GAAG,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IActC;;OAEG;IACG,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB9C;;OAEG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKvC;;OAEG;IACG,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAyIjE;;OAEG;IACH,KAAK,IAAI,QAAQ,GAAG,IAAI;IAIxB;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAI/B;;OAEG;YACW,iBAAiB;CAKhC"}