vectra 0.12.2 → 0.12.3

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 (73) hide show
  1. package/LICENSE +1 -1
  2. package/README.draft.md +499 -0
  3. package/README.draft.outline.md +160 -0
  4. package/README.research.md +2159 -0
  5. package/bin/vectra.js +3 -0
  6. package/lib/FileFetcher.d.ts +5 -0
  7. package/lib/FileFetcher.d.ts.map +1 -0
  8. package/lib/FileFetcher.js +79 -0
  9. package/lib/FileFetcher.js.map +1 -0
  10. package/lib/GPT3Tokenizer.d.ts +9 -0
  11. package/lib/ItemSelector.d.ts +41 -0
  12. package/lib/ItemSelector.d.ts.map +1 -0
  13. package/lib/ItemSelector.js +168 -0
  14. package/lib/ItemSelector.js.map +1 -0
  15. package/lib/LocalDocument.d.ts +54 -0
  16. package/lib/LocalDocument.js +156 -0
  17. package/lib/LocalDocument.js.map +1 -0
  18. package/lib/LocalDocumentIndex.d.ts +132 -0
  19. package/lib/LocalDocumentIndex.js +456 -0
  20. package/lib/LocalDocumentIndex.js.map +1 -0
  21. package/lib/LocalDocumentResult.d.ts +45 -0
  22. package/lib/LocalDocumentResult.js +328 -0
  23. package/lib/LocalDocumentResult.js.map +1 -0
  24. package/lib/LocalIndex.d.ts +150 -0
  25. package/lib/LocalIndex.d.ts.map +1 -1
  26. package/lib/LocalIndex.js +515 -0
  27. package/lib/LocalIndex.js.map +1 -0
  28. package/lib/LocalIndex.spec.d.ts +2 -0
  29. package/lib/LocalIndex.spec.js +218 -7
  30. package/lib/LocalIndex.spec.js.map +1 -1
  31. package/lib/OpenAIEmbeddings.d.ts +126 -0
  32. package/lib/OpenAIEmbeddings.d.ts.map +1 -0
  33. package/lib/OpenAIEmbeddings.js +174 -0
  34. package/lib/OpenAIEmbeddings.js.map +1 -0
  35. package/lib/TextSplitter.d.ts +19 -0
  36. package/lib/TextSplitter.d.ts.map +1 -1
  37. package/lib/TextSplitter.js +457 -0
  38. package/lib/TextSplitter.js.map +1 -0
  39. package/lib/TextSplitter.spec.d.ts +2 -0
  40. package/lib/TextSplitter.spec.d.ts.map +1 -0
  41. package/lib/TextSplitter.spec.js +109 -0
  42. package/lib/TextSplitter.spec.js.map +1 -0
  43. package/lib/WebFetcher.d.ts +15 -0
  44. package/lib/WebFetcher.d.ts.map +1 -0
  45. package/lib/WebFetcher.js +234 -0
  46. package/lib/WebFetcher.js.map +1 -0
  47. package/lib/index.d.ts +12 -0
  48. package/lib/index.js +28 -0
  49. package/lib/index.js.map +1 -0
  50. package/lib/internals/Colorize.d.ts +14 -0
  51. package/lib/internals/Colorize.d.ts.map +1 -0
  52. package/lib/internals/Colorize.js +64 -0
  53. package/lib/internals/Colorize.js.map +1 -0
  54. package/lib/internals/index.d.ts +3 -0
  55. package/lib/internals/index.d.ts.map +1 -0
  56. package/lib/internals/index.js +19 -0
  57. package/lib/internals/index.js.map +1 -0
  58. package/lib/internals/types.d.ts +43 -0
  59. package/lib/internals/types.d.ts.map +1 -0
  60. package/lib/internals/types.js +3 -0
  61. package/lib/internals/types.js.map +1 -0
  62. package/lib/types.d.ts +146 -0
  63. package/lib/types.d.ts.map +1 -0
  64. package/lib/types.js +3 -0
  65. package/lib/types.js.map +1 -0
  66. package/lib/vectra-cli.d.ts +2 -0
  67. package/lib/vectra-cli.js +323 -0
  68. package/lib/vectra-cli.js.map +1 -0
  69. package/package.json +3 -1
  70. package/src/LocalIndex.spec.ts +265 -8
  71. package/src/LocalIndex.ts +1 -0
  72. package/src/TextSplitter.spec.ts +87 -0
  73. package/src/TextSplitter.ts +459 -531
@@ -0,0 +1,132 @@
1
+ import { CreateIndexConfig, LocalIndex } from "./LocalIndex";
2
+ import { TextSplitterConfig } from "./TextSplitter";
3
+ import { MetadataFilter, EmbeddingsModel, Tokenizer, MetadataTypes, DocumentChunkMetadata, DocumentCatalogStats } from "./types";
4
+ import { LocalDocumentResult } from './LocalDocumentResult';
5
+ import { LocalDocument } from './LocalDocument';
6
+ /**
7
+ * Options for querying documents in the index.
8
+ */
9
+ export interface DocumentQueryOptions {
10
+ /**
11
+ * Optional. Maximum number of documents to return.
12
+ * @remarks
13
+ * Default is 10.
14
+ */
15
+ maxDocuments?: number;
16
+ /**
17
+ * Maximum number of chunks to return per document.
18
+ * @remarks
19
+ * Default is 50.
20
+ */
21
+ maxChunks?: number;
22
+ /**
23
+ * Optional. Filter to apply to the document metadata.
24
+ */
25
+ filter?: MetadataFilter;
26
+ /**
27
+ * Optional. Turn on bm25 keyword search to perform hybrid search - semantic + keyword
28
+ */
29
+ isBm25?: boolean;
30
+ }
31
+ /**
32
+ * Configuration settings for a local document index.
33
+ */
34
+ export interface LocalDocumentIndexConfig {
35
+ /**
36
+ * Folder path where the index is stored.
37
+ */
38
+ folderPath: string;
39
+ /**
40
+ * Optional. Embeddings model to use for generating document embeddings.
41
+ */
42
+ embeddings?: EmbeddingsModel;
43
+ /**
44
+ * Optional. Tokenizer to use for splitting text into tokens.
45
+ */
46
+ tokenizer?: Tokenizer;
47
+ /**
48
+ * Optional. Configuration settings for splitting text into chunks.
49
+ */
50
+ chunkingConfig?: Partial<TextSplitterConfig>;
51
+ }
52
+ /**
53
+ * Represents a local index of documents stored on disk.
54
+ */
55
+ export declare class LocalDocumentIndex extends LocalIndex<DocumentChunkMetadata> {
56
+ private readonly _embeddings?;
57
+ private readonly _tokenizer;
58
+ private readonly _chunkingConfig?;
59
+ private _catalog?;
60
+ private _newCatalog?;
61
+ /**
62
+ * Creates a new `LocalDocumentIndex` instance.
63
+ * @param config Configuration settings for the document index.
64
+ */
65
+ constructor(config: LocalDocumentIndexConfig);
66
+ /**
67
+ * Returns the embeddings model used by the index (if configured.)
68
+ */
69
+ get embeddings(): EmbeddingsModel | undefined;
70
+ /**
71
+ * Returns the tokenizer used by the index.
72
+ */
73
+ get tokenizer(): Tokenizer;
74
+ /**
75
+ * Returns true if the document catalog exists.
76
+ */
77
+ isCatalogCreated(): Promise<boolean>;
78
+ /**
79
+ * Returns the document ID for the given URI.
80
+ * @param uri URI of the document to lookup.
81
+ * @returns Document ID or undefined if not found.
82
+ */
83
+ getDocumentId(uri: string): Promise<string | undefined>;
84
+ /**
85
+ * Returns the document URI for the given ID.
86
+ * @param documentId ID of the document to lookup.
87
+ * @returns Document URI or undefined if not found.
88
+ */
89
+ getDocumentUri(documentId: string): Promise<string | undefined>;
90
+ /**
91
+ * Loads the document catalog from disk and returns its stats.
92
+ * @returns Catalog stats.
93
+ */
94
+ getCatalogStats(): Promise<DocumentCatalogStats>;
95
+ /**
96
+ * Deletes a document from the index.
97
+ * @param uri URI of the document to delete.
98
+ */
99
+ deleteDocument(uri: string): Promise<void>;
100
+ /**
101
+ * Adds a document to the catalog.
102
+ * @remarks
103
+ * A new update is started if one is not already in progress. If an document with the same uri
104
+ * already exists, it will be replaced.
105
+ * @param uri - Document URI
106
+ * @param text - Document text
107
+ * @param docType - Optional. Document type
108
+ * @param metadata - Optional. Document metadata to index
109
+ * @returns Inserted document
110
+ */
111
+ upsertDocument(uri: string, text: string, docType?: string, metadata?: Record<string, MetadataTypes>): Promise<LocalDocument>;
112
+ /**
113
+ * Returns all documents in the index.
114
+ * @remarks
115
+ * Each document will contain all of the documents indexed chunks.
116
+ * @returns Array of documents.
117
+ */
118
+ listDocuments(): Promise<LocalDocumentResult[]>;
119
+ /**
120
+ * Queries the index for documents similar to the given query.
121
+ * @param query Text to query for.
122
+ * @param options Optional. Query options.
123
+ * @returns Array of document results.
124
+ */
125
+ queryDocuments(query: string, options?: DocumentQueryOptions): Promise<LocalDocumentResult[]>;
126
+ beginUpdate(): Promise<void>;
127
+ cancelUpdate(): void;
128
+ createIndex(config?: CreateIndexConfig): Promise<void>;
129
+ endUpdate(): Promise<void>;
130
+ protected loadIndexData(): Promise<void>;
131
+ }
132
+ //# sourceMappingURL=LocalDocumentIndex.d.ts.map
@@ -0,0 +1,456 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
36
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
37
+ return new (P || (P = Promise))(function (resolve, reject) {
38
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
39
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
40
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
41
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
42
+ });
43
+ };
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.LocalDocumentIndex = void 0;
46
+ const fs = __importStar(require("fs/promises"));
47
+ const path = __importStar(require("path"));
48
+ const uuid_1 = require("uuid");
49
+ const GPT3Tokenizer_1 = require("./GPT3Tokenizer");
50
+ const LocalIndex_1 = require("./LocalIndex");
51
+ const TextSplitter_1 = require("./TextSplitter");
52
+ const LocalDocumentResult_1 = require("./LocalDocumentResult");
53
+ const LocalDocument_1 = require("./LocalDocument");
54
+ /**
55
+ * Represents a local index of documents stored on disk.
56
+ */
57
+ class LocalDocumentIndex extends LocalIndex_1.LocalIndex {
58
+ /**
59
+ * Creates a new `LocalDocumentIndex` instance.
60
+ * @param config Configuration settings for the document index.
61
+ */
62
+ constructor(config) {
63
+ var _a, _b;
64
+ super(config.folderPath);
65
+ this._embeddings = config.embeddings;
66
+ this._chunkingConfig = Object.assign({
67
+ keepSeparators: true,
68
+ chunkSize: 512,
69
+ chunkOverlap: 0,
70
+ }, config.chunkingConfig);
71
+ this._tokenizer = (_b = (_a = config.tokenizer) !== null && _a !== void 0 ? _a : this._chunkingConfig.tokenizer) !== null && _b !== void 0 ? _b : new GPT3Tokenizer_1.GPT3Tokenizer();
72
+ this._chunkingConfig.tokenizer = this._tokenizer;
73
+ }
74
+ /**
75
+ * Returns the embeddings model used by the index (if configured.)
76
+ */
77
+ get embeddings() {
78
+ return this._embeddings;
79
+ }
80
+ /**
81
+ * Returns the tokenizer used by the index.
82
+ */
83
+ get tokenizer() {
84
+ return this._tokenizer;
85
+ }
86
+ /**
87
+ * Returns true if the document catalog exists.
88
+ */
89
+ isCatalogCreated() {
90
+ return __awaiter(this, void 0, void 0, function* () {
91
+ try {
92
+ yield fs.access(path.join(this.folderPath, 'catalog.json'));
93
+ return true;
94
+ }
95
+ catch (err) {
96
+ return false;
97
+ }
98
+ });
99
+ }
100
+ /**
101
+ * Returns the document ID for the given URI.
102
+ * @param uri URI of the document to lookup.
103
+ * @returns Document ID or undefined if not found.
104
+ */
105
+ getDocumentId(uri) {
106
+ return __awaiter(this, void 0, void 0, function* () {
107
+ var _a;
108
+ yield this.loadIndexData();
109
+ return (_a = this._catalog) === null || _a === void 0 ? void 0 : _a.uriToId[uri];
110
+ });
111
+ }
112
+ /**
113
+ * Returns the document URI for the given ID.
114
+ * @param documentId ID of the document to lookup.
115
+ * @returns Document URI or undefined if not found.
116
+ */
117
+ getDocumentUri(documentId) {
118
+ return __awaiter(this, void 0, void 0, function* () {
119
+ var _a;
120
+ yield this.loadIndexData();
121
+ return (_a = this._catalog) === null || _a === void 0 ? void 0 : _a.idToUri[documentId];
122
+ });
123
+ }
124
+ /**
125
+ * Loads the document catalog from disk and returns its stats.
126
+ * @returns Catalog stats.
127
+ */
128
+ getCatalogStats() {
129
+ return __awaiter(this, void 0, void 0, function* () {
130
+ const stats = yield this.getIndexStats();
131
+ return {
132
+ version: this._catalog.version,
133
+ documents: this._catalog.count,
134
+ chunks: stats.items,
135
+ metadata_config: stats.metadata_config
136
+ };
137
+ });
138
+ }
139
+ /**
140
+ * Deletes a document from the index.
141
+ * @param uri URI of the document to delete.
142
+ */
143
+ deleteDocument(uri) {
144
+ return __awaiter(this, void 0, void 0, function* () {
145
+ // Lookup document ID
146
+ const documentId = yield this.getDocumentId(uri);
147
+ if (documentId == undefined) {
148
+ return;
149
+ }
150
+ // Delete document chunks from index and remove from catalog
151
+ yield this.beginUpdate();
152
+ try {
153
+ // Get list of chunks for document
154
+ const chunks = yield this.listItemsByMetadata({ documentId });
155
+ // Delete chunks
156
+ for (const chunk of chunks) {
157
+ yield this.deleteItem(chunk.id);
158
+ }
159
+ // Remove entry from catalog
160
+ delete this._newCatalog.uriToId[uri];
161
+ delete this._newCatalog.idToUri[documentId];
162
+ this._newCatalog.count--;
163
+ // Commit changes
164
+ yield this.endUpdate();
165
+ }
166
+ catch (err) {
167
+ // Cancel update and raise error
168
+ this.cancelUpdate();
169
+ throw new Error(`Error deleting document "${uri}": ${err.toString()}`);
170
+ }
171
+ // Delete text file from disk
172
+ try {
173
+ yield fs.unlink(path.join(this.folderPath, `${documentId}.txt`));
174
+ }
175
+ catch (err) {
176
+ throw new Error(`Error removing text file for document "${uri}" from disk: ${err.toString()}`);
177
+ }
178
+ // Delete metadata file from disk
179
+ try {
180
+ yield fs.unlink(path.join(this.folderPath, `${documentId}.json`));
181
+ }
182
+ catch (err) {
183
+ // Ignore error
184
+ }
185
+ });
186
+ }
187
+ /**
188
+ * Adds a document to the catalog.
189
+ * @remarks
190
+ * A new update is started if one is not already in progress. If an document with the same uri
191
+ * already exists, it will be replaced.
192
+ * @param uri - Document URI
193
+ * @param text - Document text
194
+ * @param docType - Optional. Document type
195
+ * @param metadata - Optional. Document metadata to index
196
+ * @returns Inserted document
197
+ */
198
+ upsertDocument(uri, text, docType, metadata) {
199
+ return __awaiter(this, void 0, void 0, function* () {
200
+ // Ensure embeddings configured
201
+ if (!this._embeddings) {
202
+ throw new Error(`Embeddings model not configured.`);
203
+ }
204
+ // Check for existing document ID
205
+ let documentId = yield this.getDocumentId(uri);
206
+ if (documentId != undefined) {
207
+ // Delete existing document
208
+ yield this.deleteDocument(uri);
209
+ }
210
+ else {
211
+ // Generate new document ID
212
+ documentId = (0, uuid_1.v4)();
213
+ }
214
+ // Initialize text splitter settings
215
+ const config = Object.assign({ docType }, this._chunkingConfig);
216
+ if (config.docType == undefined) {
217
+ // Populate docType based on extension
218
+ const pos = uri.lastIndexOf('.');
219
+ if (pos >= 0) {
220
+ const ext = uri.substring(pos + 1).toLowerCase();
221
+ config.docType = ext;
222
+ }
223
+ }
224
+ // Split text into chunks
225
+ const splitter = new TextSplitter_1.TextSplitter(config);
226
+ const chunks = splitter.split(text);
227
+ // Break chunks into batches for embedding generation
228
+ let totalTokens = 0;
229
+ const chunkBatches = [];
230
+ let currentBatch = [];
231
+ for (const chunk of chunks) {
232
+ totalTokens += chunk.tokens.length;
233
+ if (totalTokens > this._embeddings.maxTokens) {
234
+ chunkBatches.push(currentBatch);
235
+ currentBatch = [];
236
+ totalTokens = chunk.tokens.length;
237
+ }
238
+ currentBatch.push(chunk.text.replace(/\n/g, ' '));
239
+ }
240
+ if (currentBatch.length > 0) {
241
+ chunkBatches.push(currentBatch);
242
+ }
243
+ // Generate embeddings for chunks
244
+ const embeddings = [];
245
+ for (const batch of chunkBatches) {
246
+ let response;
247
+ try {
248
+ response = yield this._embeddings.createEmbeddings(batch);
249
+ }
250
+ catch (err) {
251
+ throw new Error(`Error generating embeddings: ${err.toString()}`);
252
+ }
253
+ // Check for error
254
+ if (response.status != 'success') {
255
+ throw new Error(`Error generating embeddings: ${response.message}`);
256
+ }
257
+ // Add embeddings to output
258
+ for (const embedding of response.output) {
259
+ embeddings.push(embedding);
260
+ }
261
+ }
262
+ // Add document chunks to index
263
+ yield this.beginUpdate();
264
+ try {
265
+ // Add chunks to index
266
+ for (let i = 0; i < chunks.length; i++) {
267
+ const chunk = chunks[i];
268
+ const embedding = embeddings[i];
269
+ const chunkMetadata = Object.assign({
270
+ documentId,
271
+ startPos: chunk.startPos,
272
+ endPos: chunk.endPos,
273
+ }, metadata);
274
+ yield this.insertItem({
275
+ id: (0, uuid_1.v4)(),
276
+ metadata: chunkMetadata,
277
+ vector: embedding,
278
+ });
279
+ }
280
+ // Save metadata file to disk
281
+ if (metadata != undefined) {
282
+ yield fs.writeFile(path.join(this.folderPath, `${documentId}.json`), JSON.stringify(metadata));
283
+ }
284
+ // Save text file to disk
285
+ yield fs.writeFile(path.join(this.folderPath, `${documentId}.txt`), text);
286
+ // Add entry to catalog
287
+ this._newCatalog.uriToId[uri] = documentId;
288
+ this._newCatalog.idToUri[documentId] = uri;
289
+ this._newCatalog.count++;
290
+ // Commit changes
291
+ yield this.endUpdate();
292
+ }
293
+ catch (err) {
294
+ // Cancel update and raise error
295
+ this.cancelUpdate();
296
+ throw new Error(`Error adding document "${uri}": ${err.toString()}`);
297
+ }
298
+ // Return document
299
+ return new LocalDocument_1.LocalDocument(this, documentId, uri);
300
+ });
301
+ }
302
+ /**
303
+ * Returns all documents in the index.
304
+ * @remarks
305
+ * Each document will contain all of the documents indexed chunks.
306
+ * @returns Array of documents.
307
+ */
308
+ listDocuments() {
309
+ return __awaiter(this, void 0, void 0, function* () {
310
+ // Sort chunks by document ID
311
+ const docs = {};
312
+ const chunks = yield this.listItems();
313
+ chunks.forEach(chunk => {
314
+ const metadata = chunk.metadata;
315
+ if (docs[metadata.documentId] == undefined) {
316
+ docs[metadata.documentId] = [];
317
+ }
318
+ docs[metadata.documentId].push({ item: chunk, score: 1.0 });
319
+ });
320
+ // Create document results
321
+ const results = [];
322
+ for (const documentId in docs) {
323
+ const uri = yield this.getDocumentUri(documentId);
324
+ const documentResult = new LocalDocumentResult_1.LocalDocumentResult(this, documentId, uri, docs[documentId], this._tokenizer);
325
+ results.push(documentResult);
326
+ }
327
+ return results;
328
+ });
329
+ }
330
+ /**
331
+ * Queries the index for documents similar to the given query.
332
+ * @param query Text to query for.
333
+ * @param options Optional. Query options.
334
+ * @returns Array of document results.
335
+ */
336
+ queryDocuments(query, options) {
337
+ return __awaiter(this, void 0, void 0, function* () {
338
+ // Ensure embeddings configured
339
+ if (!this._embeddings) {
340
+ throw new Error(`Embeddings model not configured.`);
341
+ }
342
+ // Ensure options are defined
343
+ options = Object.assign({
344
+ maxDocuments: 10,
345
+ maxChunks: 50,
346
+ }, options);
347
+ // Generate embeddings for query
348
+ let embeddings;
349
+ try {
350
+ embeddings = yield this._embeddings.createEmbeddings(query.replace(/\n/g, ' '));
351
+ }
352
+ catch (err) {
353
+ throw new Error(`Error generating embeddings for query: ${err.toString()}`);
354
+ }
355
+ // Check for error
356
+ if (embeddings.status != 'success') {
357
+ throw new Error(`Error generating embeddings for query: ${embeddings.message}`);
358
+ }
359
+ // Query index for chunks
360
+ const results = yield this.queryItems(embeddings.output[0], query, options.maxChunks, options.filter, options.isBm25);
361
+ // Group chunks by document
362
+ const documentChunks = {};
363
+ for (const result of results) {
364
+ const metadata = result.item.metadata;
365
+ if (documentChunks[metadata.documentId] == undefined) {
366
+ documentChunks[metadata.documentId] = [];
367
+ }
368
+ documentChunks[metadata.documentId].push(result);
369
+ }
370
+ // Create a document result for each document
371
+ const documentResults = [];
372
+ for (const documentId in documentChunks) {
373
+ const chunks = documentChunks[documentId];
374
+ const uri = yield this.getDocumentUri(documentId);
375
+ const documentResult = new LocalDocumentResult_1.LocalDocumentResult(this, documentId, uri, chunks, this._tokenizer);
376
+ documentResults.push(documentResult);
377
+ }
378
+ // Sort document results by score and return top results
379
+ return documentResults.sort((a, b) => b.score - a.score).slice(0, options.maxDocuments);
380
+ });
381
+ }
382
+ // Overrides
383
+ beginUpdate() {
384
+ const _super = Object.create(null, {
385
+ beginUpdate: { get: () => super.beginUpdate }
386
+ });
387
+ return __awaiter(this, void 0, void 0, function* () {
388
+ yield _super.beginUpdate.call(this);
389
+ this._newCatalog = Object.assign({}, this._catalog);
390
+ });
391
+ }
392
+ cancelUpdate() {
393
+ super.cancelUpdate();
394
+ this._newCatalog = undefined;
395
+ }
396
+ createIndex(config) {
397
+ const _super = Object.create(null, {
398
+ createIndex: { get: () => super.createIndex }
399
+ });
400
+ return __awaiter(this, void 0, void 0, function* () {
401
+ yield _super.createIndex.call(this, config);
402
+ yield this.loadIndexData();
403
+ });
404
+ }
405
+ endUpdate() {
406
+ const _super = Object.create(null, {
407
+ endUpdate: { get: () => super.endUpdate }
408
+ });
409
+ return __awaiter(this, void 0, void 0, function* () {
410
+ yield _super.endUpdate.call(this);
411
+ try {
412
+ // Save catalog
413
+ yield fs.writeFile(path.join(this.folderPath, 'catalog.json'), JSON.stringify(this._newCatalog));
414
+ this._catalog = this._newCatalog;
415
+ this._newCatalog = undefined;
416
+ }
417
+ catch (err) {
418
+ throw new Error(`Error saving document catalog: ${err.toString()}`);
419
+ }
420
+ });
421
+ }
422
+ loadIndexData() {
423
+ const _super = Object.create(null, {
424
+ loadIndexData: { get: () => super.loadIndexData }
425
+ });
426
+ return __awaiter(this, void 0, void 0, function* () {
427
+ yield _super.loadIndexData.call(this);
428
+ if (this._catalog) {
429
+ return;
430
+ }
431
+ const catalogPath = path.join(this.folderPath, 'catalog.json');
432
+ if (yield this.isCatalogCreated()) {
433
+ // Load catalog
434
+ const buffer = yield fs.readFile(catalogPath);
435
+ this._catalog = JSON.parse(buffer.toString());
436
+ }
437
+ else {
438
+ try {
439
+ // Initialize catalog
440
+ this._catalog = {
441
+ version: 1,
442
+ count: 0,
443
+ uriToId: {},
444
+ idToUri: {},
445
+ };
446
+ yield fs.writeFile(catalogPath, JSON.stringify(this._catalog));
447
+ }
448
+ catch (err) {
449
+ throw new Error(`Error creating document catalog: ${err.toString()}`);
450
+ }
451
+ }
452
+ });
453
+ }
454
+ }
455
+ exports.LocalDocumentIndex = LocalDocumentIndex;
456
+ //# sourceMappingURL=LocalDocumentIndex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocalDocumentIndex.js","sourceRoot":"","sources":["../src/LocalDocumentIndex.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAkC;AAClC,2CAA6B;AAC7B,+BAA0B;AAC1B,mDAAgD;AAChD,6CAA6D;AAC7D,iDAAkE;AAElE,+DAA4D;AAC5D,mDAAgD;AAyDhD;;GAEG;AACH,MAAa,kBAAmB,SAAQ,uBAAiC;IAOrE;;;OAGG;IACH,YAAmB,MAAgC;;QAC/C,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACzB,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC;YACjC,cAAc,EAAE,IAAI;YACpB,SAAS,EAAE,GAAG;YACd,YAAY,EAAE,CAAC;SACI,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;QAChD,IAAI,CAAC,UAAU,GAAG,MAAA,MAAA,MAAM,CAAC,SAAS,mCAAI,IAAI,CAAC,eAAe,CAAC,SAAS,mCAAI,IAAI,6BAAa,EAAE,CAAC;QAC5F,IAAI,CAAC,eAAe,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,IAAW,UAAU;QACjB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,IAAW,SAAS;QAChB,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED;;OAEG;IACU,gBAAgB;;YACzB,IAAI,CAAC;gBACD,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC,CAAC;gBAC5D,OAAO,IAAI,CAAC;YAChB,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACpB,OAAO,KAAK,CAAC;YACjB,CAAC;QACL,CAAC;KAAA;IAED;;;;OAIG;IACU,aAAa,CAAC,GAAW;;;YAClC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;YAC3B,OAAO,MAAA,IAAI,CAAC,QAAQ,0CAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QACvC,CAAC;KAAA;IAED;;;;OAIG;IACU,cAAc,CAAC,UAAkB;;;YAC1C,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;YAC3B,OAAO,MAAA,IAAI,CAAC,QAAQ,0CAAE,OAAO,CAAC,UAAU,CAAC,CAAC;QAC9C,CAAC;KAAA;IAED;;;OAGG;IACU,eAAe;;YACxB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAA;YACxC,OAAO;gBACH,OAAO,EAAE,IAAI,CAAC,QAAS,CAAC,OAAO;gBAC/B,SAAS,EAAE,IAAI,CAAC,QAAS,CAAC,KAAK;gBAC/B,MAAM,EAAE,KAAK,CAAC,KAAK;gBACnB,eAAe,EAAE,KAAK,CAAC,eAAe;aACzC,CAAC;QACN,CAAC;KAAA;IAED;;;OAGG;IACU,cAAc,CAAC,GAAW;;YACnC,qBAAqB;YACrB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YACjD,IAAI,UAAU,IAAI,SAAS,EAAE,CAAC;gBAC1B,OAAO;YACX,CAAC;YAED,4DAA4D;YAC5D,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;YACzB,IAAI,CAAC;gBACD,kCAAkC;gBAClC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;gBAE9D,gBAAgB;gBAChB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBACzB,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACpC,CAAC;gBAED,4BAA4B;gBAC5B,OAAO,IAAI,CAAC,WAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACtC,OAAO,IAAI,CAAC,WAAY,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;gBAC7C,IAAI,CAAC,WAAY,CAAC,KAAK,EAAE,CAAC;gBAE1B,iBAAiB;gBACjB,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YAC3B,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACpB,gCAAgC;gBAChC,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,MAAO,GAAW,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YACpF,CAAC;YAED,6BAA6B;YAC7B,IAAI,CAAC;gBACD,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,UAAU,MAAM,CAAC,CAAC,CAAC;YACrE,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACpB,MAAM,IAAI,KAAK,CAAC,0CAA0C,GAAG,gBAAiB,GAAW,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAC5G,CAAC;YAED,iCAAiC;YACjC,IAAI,CAAC;gBACD,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,UAAU,OAAO,CAAC,CAAC,CAAC;YACtE,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACpB,eAAe;YACnB,CAAC;QACL,CAAC;KAAA;IAED;;;;;;;;;;OAUG;IACU,cAAc,CAAC,GAAW,EAAE,IAAY,EAAE,OAAgB,EAAE,QAAwC;;YAC7G,+BAA+B;YAC/B,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACpB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;YACxD,CAAC;YAED,iCAAiC;YACjC,IAAI,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YAC/C,IAAI,UAAU,IAAI,SAAS,EAAE,CAAC;gBAC1B,2BAA2B;gBAC3B,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;YACnC,CAAC;iBAAM,CAAC;gBACJ,2BAA2B;gBAC3B,UAAU,GAAG,IAAA,SAAE,GAAE,CAAC;YACtB,CAAC;YAED,oCAAoC;YACpC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;YAChE,IAAI,MAAM,CAAC,OAAO,IAAI,SAAS,EAAE,CAAC;gBAC9B,sCAAsC;gBACtC,MAAM,GAAG,GAAG,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;gBACjC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;oBACX,MAAM,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;oBACjD,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC;gBACzB,CAAC;YACL,CAAC;YAED,yBAAyB;YACzB,MAAM,QAAQ,GAAG,IAAI,2BAAY,CAAC,MAAM,CAAC,CAAC;YAC1C,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAEpC,qDAAqD;YACrD,IAAI,WAAW,GAAG,CAAC,CAAC;YACpB,MAAM,YAAY,GAAe,EAAE,CAAC;YACpC,IAAI,YAAY,GAAa,EAAE,CAAC;YAChC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBACzB,WAAW,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;gBACnC,IAAI,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC;oBAC3C,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;oBAChC,YAAY,GAAG,EAAE,CAAC;oBAClB,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;gBACtC,CAAC;gBACD,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;YACtD,CAAC;YACD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACpC,CAAC;YAED,iCAAiC;YACjC,MAAM,UAAU,GAAe,EAAE,CAAC;YAClC,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;gBAC/B,IAAI,QAA4B,CAAC;gBACjC,IAAI,CAAC;oBACD,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBAC9D,CAAC;gBAAC,OAAO,GAAY,EAAE,CAAC;oBACpB,MAAM,IAAI,KAAK,CAAC,gCAAiC,GAAW,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBAC/E,CAAC;gBAED,kBAAkB;gBAClB,IAAI,QAAQ,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;oBAC/B,MAAM,IAAI,KAAK,CAAC,gCAAgC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;gBACxE,CAAC;gBAED,2BAA2B;gBAC3B,KAAK,MAAM,SAAS,IAAI,QAAQ,CAAC,MAAO,EAAE,CAAC;oBACvC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC/B,CAAC;YACL,CAAC;YAED,+BAA+B;YAC/B,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;YACzB,IAAI,CAAC;gBACD,sBAAsB;gBACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACrC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;oBACxB,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;oBAChC,MAAM,aAAa,GAA0B,MAAM,CAAC,MAAM,CAAC;wBACvD,UAAU;wBACV,QAAQ,EAAE,KAAK,CAAC,QAAQ;wBACxB,MAAM,EAAE,KAAK,CAAC,MAAM;qBACvB,EAAE,QAAQ,CAAC,CAAC;oBACb,MAAM,IAAI,CAAC,UAAU,CAAC;wBAClB,EAAE,EAAE,IAAA,SAAE,GAAE;wBACR,QAAQ,EAAE,aAAa;wBACvB,MAAM,EAAE,SAAS;qBACpB,CAAC,CAAC;gBACP,CAAC;gBAED,6BAA6B;gBAC7B,IAAI,QAAQ,IAAI,SAAS,EAAE,CAAC;oBACxB,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,UAAU,OAAO,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACnG,CAAC;gBAED,yBAAyB;gBACzB,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,UAAU,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;gBAE1E,uBAAuB;gBACvB,IAAI,CAAC,WAAY,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC;gBAC5C,IAAI,CAAC,WAAY,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC;gBAC5C,IAAI,CAAC,WAAY,CAAC,KAAK,EAAE,CAAC;gBAE1B,iBAAiB;gBACjB,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YAC3B,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACpB,gCAAgC;gBAChC,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,MAAO,GAAW,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAClF,CAAC;YAED,kBAAkB;YAClB,OAAO,IAAI,6BAAa,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;QACpD,CAAC;KAAA;IAED;;;;;OAKG;IACU,aAAa;;YACtB,6BAA6B;YAC7B,MAAM,IAAI,GAAoE,EAAE,CAAC;YACjF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACnB,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;gBAChC,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,SAAS,EAAE,CAAC;oBACzC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;gBACnC,CAAC;gBACD,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;YAChE,CAAC,CAAC,CAAC;YAEH,0BAA0B;YAC1B,MAAM,OAAO,GAA0B,EAAE,CAAC;YAC1C,KAAK,MAAM,UAAU,IAAI,IAAI,EAAE,CAAC;gBAC5B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CAAW,CAAC;gBAC5D,MAAM,cAAc,GAAG,IAAI,yCAAmB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;gBACzG,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACjC,CAAC;YAED,OAAO,OAAO,CAAC;QACnB,CAAC;KAAA;IAED;;;;;OAKG;IACU,cAAc,CAAC,KAAa,EAAE,OAA8B;;YACrE,+BAA+B;YAC/B,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACpB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;YACxD,CAAC;YAED,6BAA6B;YAC7B,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;gBACpB,YAAY,EAAE,EAAE;gBAChB,SAAS,EAAE,EAAE;aAChB,EAAE,OAAO,CAAC,CAAC;YAEZ,gCAAgC;YAChC,IAAI,UAA8B,CAAC;YACnC,IAAI,CAAC;gBACD,UAAU,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;YACpF,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACpB,MAAM,IAAI,KAAK,CAAC,0CAA2C,GAAW,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YACzF,CAAC;YAED,kBAAkB;YAClB,IAAI,UAAU,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;gBACjC,MAAM,IAAI,KAAK,CAAC,0CAA0C,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;YACpF,CAAC;YAED,yBAAyB;YACzB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,MAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,SAAU,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YAExH,2BAA2B;YAC3B,MAAM,cAAc,GAAoE,EAAE,CAAC;YAC3F,KAAK,MAAM,MAAM,IAAK,OAAO,EAAE,CAAC;gBAC5B,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;gBACtC,IAAI,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,SAAS,EAAE,CAAC;oBACnD,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;gBAC7C,CAAC;gBACD,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrD,CAAC;YAED,6CAA6C;YAC7C,MAAM,eAAe,GAA0B,EAAE,CAAC;YAClD,KAAK,MAAM,UAAU,IAAI,cAAc,EAAE,CAAC;gBACtC,MAAM,MAAM,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;gBAC1C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CAAW,CAAC;gBAC5D,MAAM,cAAc,GAAG,IAAI,yCAAmB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC/F,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACzC,CAAC;YAED,wDAAwD;YACxD,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,YAAa,CAAC,CAAC;QAC7F,CAAC;KAAA;IAED,YAAY;IAEC,WAAW;;;;;YACpB,MAAM,OAAM,WAAW,WAAE,CAAC;YAC1B,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxD,CAAC;KAAA;IAEM,YAAY;QACf,KAAK,CAAC,YAAY,EAAE,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;IACjC,CAAC;IAEY,WAAW,CAAC,MAA0B;;;;;YAC/C,MAAM,OAAM,WAAW,YAAC,MAAM,CAAC,CAAC;YAChC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC/B,CAAC;KAAA;IAEY,SAAS;;;;;YAClB,MAAM,OAAM,SAAS,WAAE,CAAC;YAExB,IAAI,CAAC;gBACD,eAAe;gBACf,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;gBACjG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC;gBACjC,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;YACjC,CAAC;YAAC,OAAM,GAAY,EAAE,CAAC;gBACnB,MAAM,IAAI,KAAK,CAAC,kCAAmC,GAAW,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YACjF,CAAC;QACL,CAAC;KAAA;IAEe,aAAa;;;;;YACzB,MAAM,OAAM,aAAa,WAAE,CAAC;YAE5B,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAChB,OAAO;YACX,CAAC;YAED,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;YAC/D,IAAI,MAAM,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC;gBAChC,eAAe;gBACf,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;gBAC9C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;YAClD,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC;oBACD,qBAAqB;oBACrB,IAAI,CAAC,QAAQ,GAAG;wBACZ,OAAO,EAAE,CAAC;wBACV,KAAK,EAAE,CAAC;wBACR,OAAO,EAAE,EAAE;wBACX,OAAO,EAAE,EAAE;qBACd,CAAC;oBACF,MAAM,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACnE,CAAC;gBAAC,OAAM,GAAY,EAAE,CAAC;oBACnB,MAAM,IAAI,KAAK,CAAC,oCAAqC,GAAW,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBACnF,CAAC;YACL,CAAC;QACL,CAAC;KAAA;CACJ;AAhZD,gDAgZC"}
@@ -0,0 +1,45 @@
1
+ import { LocalDocument } from "./LocalDocument";
2
+ import { LocalDocumentIndex } from "./LocalDocumentIndex";
3
+ import { QueryResult, DocumentChunkMetadata, Tokenizer, DocumentTextSection } from "./types";
4
+ /**
5
+ * Represents a search result for a document stored on disk.
6
+ */
7
+ export declare class LocalDocumentResult extends LocalDocument {
8
+ private readonly _chunks;
9
+ private readonly _tokenizer;
10
+ private readonly _score;
11
+ /**
12
+ * @private
13
+ * Internal constructor for `LocalDocumentResult` instances.
14
+ */
15
+ constructor(index: LocalDocumentIndex, id: string, uri: string, chunks: QueryResult<DocumentChunkMetadata>[], tokenizer: Tokenizer);
16
+ /**
17
+ * Returns the chunks of the document that matched the query.
18
+ */
19
+ get chunks(): QueryResult<DocumentChunkMetadata>[];
20
+ /**
21
+ * Returns the average score of the document result.
22
+ */
23
+ get score(): number;
24
+ /**
25
+ * Renders all of the results chunks as spans of text (sections.)
26
+ * @remarks
27
+ * The returned sections will be sorted by document order and limited to maxTokens in length.
28
+ * @param maxTokens Maximum number of tokens per section.
29
+ * @returns Array of rendered text sections.
30
+ */
31
+ renderAllSections(maxTokens: number): Promise<DocumentTextSection[]>;
32
+ /**
33
+ * Renders the top spans of text (sections) of the document based on the query result.
34
+ * @remarks
35
+ * The returned sections will be sorted by relevance and limited to the top `maxSections`.
36
+ * @param maxTokens Maximum number of tokens per section.
37
+ * @param maxSections Maximum number of sections to return.
38
+ * @param overlappingChunks Optional. If true, overlapping chunks of text will be added to each section until the maxTokens is reached.
39
+ * @returns Array of rendered text sections.
40
+ */
41
+ renderSections(maxTokens: number, maxSections: number, overlappingChunks?: boolean): Promise<DocumentTextSection[]>;
42
+ private encodeBeforeText;
43
+ private encodeAfterText;
44
+ }
45
+ //# sourceMappingURL=LocalDocumentResult.d.ts.map