@peerbit/document 6.0.5 → 6.0.7-0691c73

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 (47) hide show
  1. package/README.md +2 -2
  2. package/dist/benchmark/index.d.ts +2 -0
  3. package/dist/benchmark/index.d.ts.map +1 -0
  4. package/dist/benchmark/index.js +126 -0
  5. package/dist/benchmark/index.js.map +1 -0
  6. package/dist/benchmark/replication.d.ts +2 -0
  7. package/dist/benchmark/replication.d.ts.map +1 -0
  8. package/dist/benchmark/replication.js +174 -0
  9. package/dist/benchmark/replication.js.map +1 -0
  10. package/dist/src/constants.d.ts +2 -0
  11. package/dist/src/constants.d.ts.map +1 -0
  12. package/dist/src/constants.js +2 -0
  13. package/dist/src/constants.js.map +1 -0
  14. package/dist/src/index.d.ts +5 -0
  15. package/dist/src/index.d.ts.map +1 -0
  16. package/dist/src/index.js +5 -0
  17. package/dist/src/index.js.map +1 -0
  18. package/dist/src/program.d.ts +90 -0
  19. package/dist/src/program.d.ts.map +1 -0
  20. package/{lib/esm/document-store.js → dist/src/program.js} +141 -109
  21. package/dist/src/program.js.map +1 -0
  22. package/dist/src/search.d.ts +118 -0
  23. package/dist/src/search.d.ts.map +1 -0
  24. package/{lib/esm/document-index.js → dist/src/search.js} +247 -447
  25. package/dist/src/search.js.map +1 -0
  26. package/package.json +69 -43
  27. package/src/constants.ts +1 -0
  28. package/src/index.ts +4 -3
  29. package/src/{document-store.ts → program.ts} +216 -183
  30. package/src/search.ts +997 -0
  31. package/LICENSE +0 -202
  32. package/lib/esm/document-index.d.ts +0 -147
  33. package/lib/esm/document-index.js.map +0 -1
  34. package/lib/esm/document-store.d.ts +0 -72
  35. package/lib/esm/document-store.js.map +0 -1
  36. package/lib/esm/index.d.ts +0 -3
  37. package/lib/esm/index.js +0 -4
  38. package/lib/esm/index.js.map +0 -1
  39. package/lib/esm/query.d.ts +0 -191
  40. package/lib/esm/query.js +0 -615
  41. package/lib/esm/query.js.map +0 -1
  42. package/lib/esm/utils.d.ts +0 -3
  43. package/lib/esm/utils.js +0 -12
  44. package/lib/esm/utils.js.map +0 -1
  45. package/src/document-index.ts +0 -1268
  46. package/src/query.ts +0 -525
  47. package/src/utils.ts +0 -17
@@ -7,17 +7,16 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
7
7
  var __metadata = (this && this.__metadata) || function (k, v) {
8
8
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
9
  };
10
- import { BorshError, deserialize, field, serialize, variant } from "@dao-xyz/borsh";
10
+ import { BorshError, field, serialize, variant } from "@dao-xyz/borsh";
11
11
  import { Entry, EntryType } from "@peerbit/log";
12
12
  import { Program } from "@peerbit/program";
13
13
  import { AccessError, DecryptedThing } from "@peerbit/crypto";
14
14
  import { logger as loggerFn } from "@peerbit/logger";
15
15
  import { CustomEvent } from "@libp2p/interface";
16
- import { Replicator, SharedLog } from "@peerbit/shared-log";
17
- import { BORSH_ENCODING_OPERATION, DeleteOperation, DocumentIndex, PutOperation, MAX_DOCUMENT_SIZE } from "./document-index.js";
18
- import { asString, checkKeyable } from "./utils.js";
19
- import { Context } from "./query.js";
20
- export { MAX_DOCUMENT_SIZE };
16
+ import { Observer, Replicator, SharedLog } from "@peerbit/shared-log";
17
+ import * as types from "@peerbit/document-interface";
18
+ import { BORSH_ENCODING_OPERATION, DeleteOperation, DocumentIndex, Operation, PutOperation } from "./search.js";
19
+ import { MAX_BATCH_SIZE } from "./constants.js";
21
20
  const logger = loggerFn({ module: "document" });
22
21
  export class OperationError extends Error {
23
22
  constructor(message) {
@@ -31,6 +30,7 @@ let Documents = class Documents extends Program {
31
30
  _clazz;
32
31
  _optionCanPerform;
33
32
  _manuallySynced;
33
+ idResolver;
34
34
  canOpen;
35
35
  constructor(properties) {
36
36
  super();
@@ -52,13 +52,31 @@ let Documents = class Documents extends Program {
52
52
  }
53
53
  this._optionCanPerform = options.canPerform;
54
54
  this._manuallySynced = new Set();
55
+ const idProperty = options.index?.idProperty || "id";
56
+ const idResolver = options.id ||
57
+ (typeof idProperty === "string"
58
+ ? (obj) => obj[idProperty]
59
+ : (obj) => types.extractFieldValue(obj, idProperty));
60
+ this.idResolver = idResolver;
61
+ let transform;
62
+ if (options.index?.fields) {
63
+ if (typeof options.index.fields === "function") {
64
+ transform = options.index.fields;
65
+ }
66
+ else {
67
+ transform = options.index.fields;
68
+ }
69
+ }
70
+ else {
71
+ transform = (obj) => obj; // TODO check types
72
+ }
55
73
  await this._index.open({
56
74
  type: this._clazz,
57
75
  log: this.log,
58
76
  canRead: options?.index?.canRead,
59
77
  canSearch: options.index?.canSearch,
60
- fields: options.index?.fields || ((obj) => obj),
61
- indexBy: options.index?.key,
78
+ fields: transform,
79
+ indexBy: idProperty,
62
80
  sync: async (result) => {
63
81
  // here we arrive for all the results we want to persist.
64
82
  // we we need to do here is
@@ -102,20 +120,43 @@ let Documents = class Documents extends Program {
102
120
  get role() {
103
121
  return this.log.role;
104
122
  }
105
- async canAppend(entry) {
106
- const l0 = await this._canAppend(entry);
123
+ async canAppend(entry, reference) {
124
+ const l0 = await this._canAppend(entry, reference);
107
125
  if (!l0) {
108
126
  return false;
109
127
  }
110
128
  try {
111
- const payload = await entry.getPayloadValue();
112
- if (payload instanceof PutOperation) {
113
- payload.getValue(this.index.valueEncoding); // Decode they value so callbacks can jsut do .value
129
+ let operation = l0;
130
+ let document = reference?.document;
131
+ if (!document) {
132
+ if (l0 instanceof PutOperation) {
133
+ document = this._index.valueEncoding.decoder(l0.data);
134
+ if (!document) {
135
+ return false;
136
+ }
137
+ }
138
+ else if (l0 instanceof DeleteOperation) {
139
+ // Nothing to do here by default
140
+ // checking if the document exists is not necessary
141
+ // since it might already be deleted
142
+ }
143
+ else {
144
+ throw new Error("Unsupported operation");
145
+ }
114
146
  }
115
147
  if (this._optionCanPerform) {
116
- if (!(await this._optionCanPerform(payload, {
117
- entry
118
- }))) {
148
+ if (!(await this._optionCanPerform(operation instanceof PutOperation
149
+ ? {
150
+ type: "put",
151
+ value: document,
152
+ operation,
153
+ entry: entry
154
+ }
155
+ : {
156
+ type: "delete",
157
+ operation,
158
+ entry: entry
159
+ }))) {
119
160
  return false;
120
161
  }
121
162
  }
@@ -129,7 +170,7 @@ let Documents = class Documents extends Program {
129
170
  }
130
171
  return true;
131
172
  }
132
- async _canAppend(entry) {
173
+ async _canAppend(entry, reference) {
133
174
  const resolve = async (history) => {
134
175
  return typeof history === "string"
135
176
  ? this.log.log.get(history) ||
@@ -155,16 +196,19 @@ let Documents = class Documents extends Program {
155
196
  encoding: this.log.log.encoding,
156
197
  keychain: this.node.services.keychain
157
198
  });
158
- const operation = entry._payload instanceof DecryptedThing
199
+ const operation = reference?.operation || entry._payload instanceof DecryptedThing
159
200
  ? entry.payload.getValue(entry.encoding)
160
201
  : await entry.getPayloadValue();
161
202
  if (operation instanceof PutOperation) {
162
203
  // check nexts
163
204
  const putOperation = operation;
164
- const key = this._index.indexByResolver(putOperation.getValue(this.index.valueEncoding));
165
- checkKeyable(key);
166
- const existingDocument = this.index.index.get(asString(key));
167
- if (existingDocument) {
205
+ let value = reference?.document ??
206
+ this.index.valueEncoding.decoder(putOperation.data);
207
+ const keyValue = this.idResolver(value);
208
+ const key = types.toId(keyValue);
209
+ const existingDocument = await this.index.engine.get(key);
210
+ if (existingDocument && existingDocument.context.head !== entry.hash) {
211
+ // econd condition can false if we reset the operation log, while not resetting the index. For example when doing .recover
168
212
  if (this.immutable) {
169
213
  //Key already exist and this instance Documents can note overrite/edit'
170
214
  return false;
@@ -177,7 +221,8 @@ let Documents = class Documents extends Program {
177
221
  logger.error("Failed to find Document from head");
178
222
  return false;
179
223
  }
180
- return pointsToHistory(doc);
224
+ const referenceHistoryCorrectly = await pointsToHistory(doc);
225
+ return referenceHistoryCorrectly ? putOperation : false;
181
226
  }
182
227
  else {
183
228
  if (entry.next.length !== 0) {
@@ -189,18 +234,26 @@ let Documents = class Documents extends Program {
189
234
  if (entry.next.length !== 1) {
190
235
  return false;
191
236
  }
192
- const existingDocument = this._index.index.get(operation.key);
237
+ const existingDocument = await this._index.engine.get(operation.key);
193
238
  if (!existingDocument) {
194
239
  // already deleted
195
- return true; // assume ok
240
+ return operation; // assume ok
196
241
  }
197
242
  let doc = await this.log.log.get(existingDocument.context.head);
198
243
  if (!doc) {
199
244
  logger.error("Failed to find Document from head");
200
245
  return false;
201
246
  }
202
- return pointsToHistory(doc); // references the existing document
247
+ if (await pointsToHistory(doc)) {
248
+ // references the existing document
249
+ return operation;
250
+ }
251
+ return false;
252
+ }
253
+ else {
254
+ throw new Error("Unsupported operation");
203
255
  }
256
+ return operation;
204
257
  }
205
258
  catch (error) {
206
259
  if (error instanceof AccessError) {
@@ -212,36 +265,43 @@ let Documents = class Documents extends Program {
212
265
  }
213
266
  throw error;
214
267
  }
215
- return true;
216
268
  }
217
269
  async put(doc, options) {
218
- const key = this._index.indexByResolver(doc);
219
- checkKeyable(key);
270
+ const keyValue = this.idResolver(doc);
271
+ // type check the key
272
+ types.checkId(keyValue);
220
273
  const ser = serialize(doc);
221
- if (ser.length > MAX_DOCUMENT_SIZE) {
222
- throw new Error(`Document is too large (${ser.length * 1e-6}) mb). Needs to be less than ${MAX_DOCUMENT_SIZE * 1e-6} mb`);
274
+ if (ser.length > MAX_BATCH_SIZE) {
275
+ throw new Error(`Document is too large (${ser.length * 1e-6}) mb). Needs to be less than ${MAX_BATCH_SIZE * 1e-6} mb`);
223
276
  }
224
277
  const existingDocument = options?.unique
225
278
  ? undefined
226
- : (await this._index.getDetailed(key, {
279
+ : (await this._index.getDetailed(keyValue, {
227
280
  local: true,
228
281
  remote: { sync: true } // only query remote if we know they exist
229
282
  }))?.[0]?.results[0];
230
- return this.log.append(new PutOperation({
231
- key: asString(key),
232
- data: ser,
233
- value: doc
234
- }), {
283
+ const operation = new PutOperation({
284
+ data: ser
285
+ });
286
+ const appended = await this.log.append(operation, {
235
287
  ...options,
236
288
  meta: {
237
289
  next: existingDocument
238
290
  ? [await this._resolveEntry(existingDocument.context.head)]
239
291
  : [],
240
292
  ...options?.meta
241
- } //
293
+ },
294
+ canAppend: (entry) => {
295
+ return this.canAppend(entry, { document: doc, operation });
296
+ },
297
+ onChange: (change) => {
298
+ return this.handleChanges(change, { document: doc, operation });
299
+ }
242
300
  });
301
+ return appended;
243
302
  }
244
- async del(key, options) {
303
+ async del(id, options) {
304
+ const key = types.toId(id);
245
305
  const existing = (await this._index.getDetailed(key, {
246
306
  local: true,
247
307
  remote: { sync: true }
@@ -250,7 +310,7 @@ let Documents = class Documents extends Program {
250
310
  throw new Error(`No entry with key '${key}' in the database`);
251
311
  }
252
312
  return this.log.append(new DeleteOperation({
253
- key: asString(key)
313
+ key
254
314
  }), {
255
315
  ...options,
256
316
  meta: {
@@ -261,50 +321,40 @@ let Documents = class Documents extends Program {
261
321
  } //
262
322
  );
263
323
  }
264
- async handleChanges(change) {
324
+ async handleChanges(change, reference) {
325
+ const isAppendOperation = change?.added.length === 1 ? !!change.added[0] : false;
265
326
  const removed = [...(change.removed || [])];
266
327
  const removedSet = new Map();
267
328
  for (const r of removed) {
268
329
  removedSet.set(r.hash, r);
269
330
  }
270
- const entries = [...change.added, ...(removed || [])]
331
+ const sortedEntries = [...change.added, ...(removed || [])]
271
332
  .sort(this.log.log.sortFn)
272
333
  .reverse(); // sort so we get newest to oldest
273
334
  // There might be a case where change.added and change.removed contains the same document id. Usaully because you use the "trim" option
274
335
  // in combination with inserting the same document. To mitigate this, we loop through the changes and modify the behaviour for this
275
- let visited = new Map();
276
- for (const item of entries) {
277
- const payload = item._payload instanceof DecryptedThing
278
- ? item.payload.getValue(item.encoding)
279
- : await item.getPayloadValue();
280
- let itemKey;
281
- if (payload instanceof PutOperation ||
282
- payload instanceof DeleteOperation) {
283
- itemKey = payload.key;
284
- }
285
- else {
286
- throw new Error("Unsupported operation type");
287
- }
288
- let arr = visited.get(itemKey);
289
- if (!arr) {
290
- arr = [];
291
- visited.set(itemKey, arr);
292
- }
293
- arr.push(item);
294
- }
295
336
  let documentsChanged = {
296
337
  added: [],
297
338
  removed: []
298
339
  };
299
- for (const [_key, entries] of visited) {
340
+ let modified = new Set();
341
+ for (const item of sortedEntries) {
300
342
  try {
301
- const item = entries[0];
302
343
  const payload = item._payload instanceof DecryptedThing
303
344
  ? item.payload.getValue(item.encoding)
304
345
  : await item.getPayloadValue();
305
346
  if (payload instanceof PutOperation && !removedSet.has(item.hash)) {
306
- const key = payload.key;
307
- let value = this.deserializeOrPass(payload);
347
+ let value = (isAppendOperation &&
348
+ reference?.operation === payload &&
349
+ reference?.document) ||
350
+ this.index.valueEncoding.decoder(payload.data);
351
+ // get index key from value
352
+ const keyObject = this.idResolver(value);
353
+ const key = types.toId(keyObject);
354
+ // document is already updated with more recent entry
355
+ if (modified.has(key.primitive)) {
356
+ continue;
357
+ }
308
358
  // Program specific
309
359
  if (value instanceof Program) {
310
360
  // if replicator, then open
@@ -319,37 +369,37 @@ let Documents = class Documents extends Program {
319
369
  }
320
370
  }
321
371
  documentsChanged.added.push(value);
322
- const context = new Context({
323
- created: this._index.index.get(key)?.context.created ||
324
- item.meta.clock.timestamp.wallTime,
325
- modified: item.meta.clock.timestamp.wallTime,
326
- head: item.hash,
327
- gid: item.gid
328
- });
329
- const valueToIndex = this._index.toIndex(value, context);
330
- this._index.index.set(key, {
331
- key: payload.key,
332
- value: isPromise(valueToIndex) ? await valueToIndex : valueToIndex,
333
- context,
334
- reference: valueToIndex === value || value instanceof Program
335
- ? { value, last: payload }
336
- : undefined
337
- });
372
+ this._index.put(value, item, key);
373
+ modified.add(key.primitive);
338
374
  }
339
375
  else if ((payload instanceof DeleteOperation && !removedSet.has(item.hash)) ||
340
376
  payload instanceof PutOperation ||
341
377
  removedSet.has(item.hash)) {
342
378
  this._manuallySynced.delete(item.gid);
343
- const key = payload.key;
344
- if (!this.index.index.has(key)) {
345
- continue;
346
- }
347
379
  let value;
380
+ let key;
348
381
  if (payload instanceof PutOperation) {
349
- value = this.deserializeOrPass(payload);
382
+ value = this.index.valueEncoding.decoder(payload.data);
383
+ key = types.toIdeable(this.idResolver(value));
384
+ // document is already updated with more recent entry
385
+ if (modified.has(key)) {
386
+ continue;
387
+ }
350
388
  }
351
389
  else if (payload instanceof DeleteOperation) {
352
- value = await this.getDocumentFromEntry(entries[1]);
390
+ key = payload.key.primitive;
391
+ // document is already updated with more recent entry
392
+ if (modified.has(key)) {
393
+ continue;
394
+ }
395
+ const document = await this._index.get(key, {
396
+ local: true,
397
+ remote: false
398
+ });
399
+ if (!document) {
400
+ continue;
401
+ }
402
+ value = document;
353
403
  }
354
404
  else {
355
405
  throw new Error("Unexpected");
@@ -359,7 +409,8 @@ let Documents = class Documents extends Program {
359
409
  await value.drop(this);
360
410
  }
361
411
  // update index
362
- this._index.index.delete(key);
412
+ this._index.del(key);
413
+ modified.add(key);
363
414
  }
364
415
  else {
365
416
  // Unknown operation
@@ -374,22 +425,6 @@ let Documents = class Documents extends Program {
374
425
  }
375
426
  this.events.dispatchEvent(new CustomEvent("change", { detail: documentsChanged }));
376
427
  }
377
- async getDocumentFromEntry(entry) {
378
- const payloadValue = await entry.getPayloadValue();
379
- if (payloadValue instanceof PutOperation) {
380
- return payloadValue.getValue(this.index.valueEncoding);
381
- }
382
- throw new Error("Unexpected");
383
- }
384
- deserializeOrPass(value) {
385
- if (value._value) {
386
- return value._value;
387
- }
388
- else {
389
- value._value = deserialize(value.data, this.index.type);
390
- return value._value;
391
- }
392
- }
393
428
  };
394
429
  __decorate([
395
430
  field({ type: SharedLog }),
@@ -408,7 +443,4 @@ Documents = __decorate([
408
443
  __metadata("design:paramtypes", [Object])
409
444
  ], Documents);
410
445
  export { Documents };
411
- function isPromise(value) {
412
- return Boolean(value && typeof value.then === "function");
413
- }
414
- //# sourceMappingURL=document-store.js.map
446
+ //# sourceMappingURL=program.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"program.js","sourceRoot":"","sources":["../../src/program.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,118 @@
1
+ import { type AbstractType } from "@dao-xyz/borsh";
2
+ import { type Encoding, Entry } from "@peerbit/log";
3
+ import { Program } from "@peerbit/program";
4
+ import * as types from "@peerbit/document-interface";
5
+ import { RPC, type RPCRequestAllOptions } from "@peerbit/rpc";
6
+ import { PublicSignKey } from "@peerbit/crypto";
7
+ import { SharedLog } from "@peerbit/shared-log";
8
+ export declare class Operation {
9
+ }
10
+ export declare const BORSH_ENCODING_OPERATION: Encoding<Operation>;
11
+ /**
12
+ * Put a complete document at a key
13
+ */
14
+ export declare class PutOperation extends Operation {
15
+ data: Uint8Array;
16
+ constructor(props?: {
17
+ data: Uint8Array;
18
+ });
19
+ }
20
+ /**
21
+ * Delete a document at a key
22
+ */
23
+ export declare class DeleteOperation extends Operation {
24
+ key: types.IdKey;
25
+ constructor(props: {
26
+ key: types.IdKey;
27
+ });
28
+ }
29
+ export type RemoteQueryOptions<R> = RPCRequestAllOptions<R> & {
30
+ sync?: boolean;
31
+ minAge?: number;
32
+ throwOnMissing?: boolean;
33
+ };
34
+ export type QueryOptions<R> = {
35
+ remote?: boolean | RemoteQueryOptions<types.AbstractSearchResult<R>>;
36
+ local?: boolean;
37
+ };
38
+ export type SearchOptions<R> = {
39
+ size?: number;
40
+ } & QueryOptions<R>;
41
+ export type IndexableFields<T> = (obj: T, context: types.Context) => Record<string, any> | Promise<Record<string, any>>;
42
+ export type ResultsIterator<T> = {
43
+ close: () => Promise<void>;
44
+ next: (number: number) => Promise<T[]>;
45
+ done: () => boolean;
46
+ };
47
+ type QueryDetailedOptions<T> = QueryOptions<T> & {
48
+ onResponse?: (response: types.AbstractSearchResult<T>, from: PublicSignKey) => void | Promise<void>;
49
+ };
50
+ export type CanSearch = (request: types.SearchRequest | types.CollectNextRequest, from: PublicSignKey) => Promise<boolean> | boolean;
51
+ export type CanRead<T> = (result: T, from: PublicSignKey) => Promise<boolean> | boolean;
52
+ export type OpenOptions<T> = {
53
+ type: AbstractType<T>;
54
+ dbType: AbstractType<types.IDocumentStore<T>>;
55
+ log: SharedLog<Operation>;
56
+ canRead?: CanRead<T>;
57
+ canSearch?: CanSearch;
58
+ engine?: types.IndexEngine;
59
+ sync: (result: types.Results<T>) => Promise<void>;
60
+ indexBy?: string | string[];
61
+ fields: IndexableFields<T>;
62
+ };
63
+ export declare class DocumentIndex<T> extends Program<OpenOptions<T>> {
64
+ _query: RPC<types.AbstractSearchRequest, types.AbstractSearchResult<T>>;
65
+ engine: types.IndexEngine;
66
+ type: AbstractType<T>;
67
+ dbType: AbstractType<types.IDocumentStore<T>>;
68
+ private indexBy;
69
+ private indexByArr;
70
+ private indexByResolver;
71
+ fields: IndexableFields<T>;
72
+ private _valueEncoding;
73
+ private _sync;
74
+ private _log;
75
+ private _resolverProgramCache?;
76
+ private _resolverCache;
77
+ private _isProgramValues;
78
+ constructor(properties?: {
79
+ query?: RPC<types.AbstractSearchRequest, types.AbstractSearchResult<T>>;
80
+ });
81
+ get valueEncoding(): Encoding<T>;
82
+ open(properties: OpenOptions<T>): Promise<void>;
83
+ close(from?: Program): Promise<boolean>;
84
+ drop(from?: Program): Promise<boolean>;
85
+ get(key: types.Ideable | types.IdKey, options?: QueryOptions<T>): Promise<T | undefined>;
86
+ put(value: T, entry: Entry<Operation>, id: types.IdKey): Promise<void>;
87
+ del(key: types.IdPrimitive): void | Promise<void>;
88
+ getDetailed(key: types.IdKey | types.IdPrimitive, options?: QueryOptions<T>): Promise<types.Results<T>[] | undefined>;
89
+ getSize(): Promise<number> | number;
90
+ private resolveDocument;
91
+ processQuery(query: types.SearchRequest | types.CollectNextRequest, from: PublicSignKey, options?: {
92
+ canRead?: CanRead<T>;
93
+ }): Promise<types.Results<T>>;
94
+ processCloseIteratorRequest(query: types.CloseIteratorRequest, publicKey: PublicSignKey): Promise<void>;
95
+ /**
96
+ * Query and retrieve results with most details
97
+ * @param queryRequest
98
+ * @param options
99
+ * @returns
100
+ */
101
+ queryDetailed(queryRequest: types.SearchRequest, options?: QueryDetailedOptions<T>): Promise<types.Results<T>[]>;
102
+ /**
103
+ * Query and retrieve results
104
+ * @param queryRequest
105
+ * @param options
106
+ * @returns
107
+ */
108
+ search(queryRequest: types.SearchRequest, options?: SearchOptions<T>): Promise<T[]>;
109
+ /**
110
+ * Query and retrieve documents in a iterator
111
+ * @param queryRequest
112
+ * @param options
113
+ * @returns
114
+ */
115
+ iterate(queryRequest: types.SearchRequest, options?: QueryOptions<T>): ResultsIterator<T>;
116
+ }
117
+ export {};
118
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/search.ts"],"names":[],"mappings":"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"}