verso-db 0.1.4 → 0.2.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 (110) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +81 -49
  3. package/dist/BinaryHeap.d.ts +16 -5
  4. package/dist/BinaryHeap.d.ts.map +1 -1
  5. package/dist/BinaryHeap.js +138 -0
  6. package/dist/BinaryHeap.js.map +1 -0
  7. package/dist/Collection.d.ts +98 -17
  8. package/dist/Collection.d.ts.map +1 -1
  9. package/dist/Collection.js +1186 -0
  10. package/dist/Collection.js.map +1 -0
  11. package/dist/HNSWIndex.d.ts +170 -15
  12. package/dist/HNSWIndex.d.ts.map +1 -1
  13. package/dist/HNSWIndex.js +2818 -0
  14. package/dist/HNSWIndex.js.map +1 -0
  15. package/dist/MaxBinaryHeap.d.ts +2 -60
  16. package/dist/MaxBinaryHeap.d.ts.map +1 -1
  17. package/dist/MaxBinaryHeap.js +5 -0
  18. package/dist/MaxBinaryHeap.js.map +1 -0
  19. package/dist/SearchWorker.d.ts +104 -0
  20. package/dist/SearchWorker.d.ts.map +1 -0
  21. package/dist/SearchWorker.js +573 -0
  22. package/dist/SearchWorker.js.map +1 -0
  23. package/dist/VectorDB.d.ts +19 -5
  24. package/dist/VectorDB.d.ts.map +1 -1
  25. package/dist/VectorDB.js +246 -0
  26. package/dist/VectorDB.js.map +1 -0
  27. package/dist/WorkerPool.d.ts +92 -0
  28. package/dist/WorkerPool.d.ts.map +1 -0
  29. package/dist/WorkerPool.js +266 -0
  30. package/dist/WorkerPool.js.map +1 -0
  31. package/dist/backends/JsDistanceBackend.d.ts +3 -20
  32. package/dist/backends/JsDistanceBackend.d.ts.map +1 -1
  33. package/dist/backends/JsDistanceBackend.js +163 -0
  34. package/dist/backends/JsDistanceBackend.js.map +1 -0
  35. package/dist/encoding/DeltaEncoder.d.ts +2 -2
  36. package/dist/encoding/DeltaEncoder.d.ts.map +1 -1
  37. package/dist/encoding/DeltaEncoder.js +199 -0
  38. package/dist/encoding/DeltaEncoder.js.map +1 -0
  39. package/dist/errors.js +97 -0
  40. package/dist/errors.js.map +1 -0
  41. package/dist/index.d.ts +16 -17
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +61 -3419
  44. package/dist/index.js.map +1 -0
  45. package/dist/presets.d.ts +9 -9
  46. package/dist/presets.d.ts.map +1 -1
  47. package/dist/presets.js +205 -0
  48. package/dist/presets.js.map +1 -0
  49. package/dist/quantization/ScalarQuantizer.d.ts +10 -34
  50. package/dist/quantization/ScalarQuantizer.d.ts.map +1 -1
  51. package/dist/quantization/ScalarQuantizer.js +346 -0
  52. package/dist/quantization/ScalarQuantizer.js.map +1 -0
  53. package/dist/storage/BatchWriter.d.ts.map +1 -1
  54. package/dist/storage/BatchWriter.js +351 -0
  55. package/dist/storage/BatchWriter.js.map +1 -0
  56. package/dist/storage/BunStorageBackend.d.ts +12 -5
  57. package/dist/storage/BunStorageBackend.d.ts.map +1 -1
  58. package/dist/storage/BunStorageBackend.js +182 -0
  59. package/dist/storage/BunStorageBackend.js.map +1 -0
  60. package/dist/storage/MemoryBackend.d.ts.map +1 -1
  61. package/dist/storage/MemoryBackend.js +109 -0
  62. package/dist/storage/MemoryBackend.js.map +1 -0
  63. package/dist/storage/OPFSBackend.d.ts +9 -1
  64. package/dist/storage/OPFSBackend.d.ts.map +1 -1
  65. package/dist/storage/OPFSBackend.js +325 -0
  66. package/dist/storage/OPFSBackend.js.map +1 -0
  67. package/dist/storage/StorageBackend.d.ts +1 -1
  68. package/dist/storage/StorageBackend.js +12 -0
  69. package/dist/storage/StorageBackend.js.map +1 -0
  70. package/dist/storage/WriteAheadLog.d.ts +15 -11
  71. package/dist/storage/WriteAheadLog.d.ts.map +1 -1
  72. package/dist/storage/WriteAheadLog.js +321 -0
  73. package/dist/storage/WriteAheadLog.js.map +1 -0
  74. package/dist/storage/createStorageBackend.d.ts +4 -0
  75. package/dist/storage/createStorageBackend.d.ts.map +1 -1
  76. package/dist/storage/createStorageBackend.js +119 -0
  77. package/dist/storage/createStorageBackend.js.map +1 -0
  78. package/dist/storage/index.d.ts +3 -3
  79. package/dist/storage/index.js +33 -0
  80. package/dist/storage/index.js.map +1 -0
  81. package/dist/storage/nodeFsRuntime.d.ts +14 -0
  82. package/dist/storage/nodeFsRuntime.d.ts.map +1 -0
  83. package/dist/storage/nodeFsRuntime.js +105 -0
  84. package/dist/storage/nodeFsRuntime.js.map +1 -0
  85. package/package.json +47 -23
  86. package/dist/Storage.d.ts +0 -54
  87. package/dist/Storage.d.ts.map +0 -1
  88. package/dist/backends/DistanceBackend.d.ts +0 -5
  89. package/dist/backends/DistanceBackend.d.ts.map +0 -1
  90. package/src/BinaryHeap.ts +0 -131
  91. package/src/Collection.ts +0 -695
  92. package/src/HNSWIndex.ts +0 -1839
  93. package/src/MaxBinaryHeap.ts +0 -175
  94. package/src/Storage.ts +0 -435
  95. package/src/VectorDB.ts +0 -109
  96. package/src/backends/DistanceBackend.ts +0 -17
  97. package/src/backends/JsDistanceBackend.ts +0 -227
  98. package/src/encoding/DeltaEncoder.ts +0 -217
  99. package/src/errors.ts +0 -110
  100. package/src/index.ts +0 -138
  101. package/src/presets.ts +0 -229
  102. package/src/quantization/ScalarQuantizer.ts +0 -383
  103. package/src/storage/BatchWriter.ts +0 -336
  104. package/src/storage/BunStorageBackend.ts +0 -161
  105. package/src/storage/MemoryBackend.ts +0 -120
  106. package/src/storage/OPFSBackend.ts +0 -250
  107. package/src/storage/StorageBackend.ts +0 -74
  108. package/src/storage/WriteAheadLog.ts +0 -326
  109. package/src/storage/createStorageBackend.ts +0 -137
  110. package/src/storage/index.ts +0 -53
@@ -0,0 +1,199 @@
1
+ /**
2
+ * Delta Encoding with Varint for Neighbor Lists
3
+ *
4
+ * Implements delta-encoded neighbor lists as used by Qdrant for ~38% storage reduction.
5
+ * Neighbor IDs are sorted, then stored as deltas with variable-length encoding.
6
+ *
7
+ * Format:
8
+ * - First ID stored as full uint32
9
+ * - Subsequent IDs stored as varint deltas from previous ID
10
+ *
11
+ * Varint encoding (like Protocol Buffers):
12
+ * - Values 0-127: 1 byte
13
+ * - Values 128-16383: 2 bytes
14
+ * - Values 16384-2097151: 3 bytes
15
+ * - Values 2097152-268435455: 4 bytes
16
+ * - Larger: 5 bytes
17
+ */
18
+ import { VectorDBError } from '../errors.js';
19
+ /**
20
+ * Encode an unsigned integer as a varint
21
+ * Returns the number of bytes written
22
+ */
23
+ export function encodeVarint(value, buffer, offset) {
24
+ let v = value >>> 0; // Ensure unsigned
25
+ let bytesWritten = 0;
26
+ while (v >= 0x80) {
27
+ buffer[offset + bytesWritten] = (v & 0x7f) | 0x80;
28
+ v >>>= 7;
29
+ bytesWritten++;
30
+ }
31
+ buffer[offset + bytesWritten] = v;
32
+ return bytesWritten + 1;
33
+ }
34
+ /**
35
+ * Decode a varint from buffer
36
+ * Returns [value, bytesRead]
37
+ */
38
+ export function decodeVarint(buffer, offset) {
39
+ let result = 0;
40
+ let shift = 0;
41
+ let bytesRead = 0;
42
+ while (offset + bytesRead < buffer.length) {
43
+ const byte = buffer[offset + bytesRead];
44
+ if (shift < 28) {
45
+ result |= (byte & 0x7f) << shift;
46
+ }
47
+ else {
48
+ // At shift >= 28, use multiplication to avoid sign-bit corruption from << on int32
49
+ result = (result + (byte & 0x7f) * (2 ** shift)) >>> 0;
50
+ }
51
+ bytesRead++;
52
+ if ((byte & 0x80) === 0) {
53
+ return [result >>> 0, bytesRead];
54
+ }
55
+ shift += 7;
56
+ if (shift > 35) {
57
+ throw new VectorDBError('Varint too long', 'CORRUPT_INDEX');
58
+ }
59
+ }
60
+ throw new VectorDBError('Unexpected end of buffer', 'CORRUPT_INDEX');
61
+ }
62
+ /**
63
+ * Calculate the number of bytes needed to encode a varint
64
+ */
65
+ export function varintSize(value) {
66
+ let v = value >>> 0;
67
+ let size = 1;
68
+ while (v >= 0x80) {
69
+ v >>>= 7;
70
+ size++;
71
+ }
72
+ return size;
73
+ }
74
+ /**
75
+ * Delta-encode a sorted array of neighbor IDs
76
+ * Returns the encoded buffer
77
+ */
78
+ export function deltaEncodeNeighbors(neighbors, preSorted = false) {
79
+ if (neighbors.length === 0) {
80
+ return new Uint8Array(0);
81
+ }
82
+ for (let i = 0; i < neighbors.length; i++) {
83
+ const id = neighbors[i];
84
+ if (!Number.isInteger(id) || id < 0 || id > 0xFFFFFFFF) {
85
+ throw new VectorDBError(`Invalid neighbor ID at index ${i}: ${id}`, 'VALIDATION_ERROR');
86
+ }
87
+ }
88
+ // Sort neighbors for optimal delta encoding
89
+ const sorted = preSorted ? neighbors : neighbors.slice().sort((a, b) => a - b);
90
+ // Calculate required buffer size
91
+ let size = 4; // First ID as uint32
92
+ let prev = sorted[0];
93
+ for (let i = 1; i < sorted.length; i++) {
94
+ const delta = sorted[i] - prev;
95
+ size += varintSize(delta);
96
+ prev = sorted[i];
97
+ }
98
+ // Encode
99
+ const buffer = new Uint8Array(size);
100
+ const view = new DataView(buffer.buffer);
101
+ // First ID as full uint32 (little-endian)
102
+ view.setUint32(0, sorted[0], true);
103
+ let offset = 4;
104
+ // Remaining as deltas
105
+ prev = sorted[0];
106
+ for (let i = 1; i < sorted.length; i++) {
107
+ const delta = sorted[i] - prev;
108
+ offset += encodeVarint(delta, buffer, offset);
109
+ prev = sorted[i];
110
+ }
111
+ return buffer;
112
+ }
113
+ /**
114
+ * Decode a delta-encoded neighbor list
115
+ * Returns the original neighbor IDs (sorted)
116
+ */
117
+ export function deltaDecodeNeighbors(buffer, count) {
118
+ if (count === 0 || buffer.length === 0) {
119
+ return [];
120
+ }
121
+ const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength);
122
+ const neighbors = new Array(count);
123
+ // First ID as full uint32
124
+ neighbors[0] = view.getUint32(0, true);
125
+ let offset = 4;
126
+ // Remaining as deltas
127
+ for (let i = 1; i < count; i++) {
128
+ const [delta, bytesRead] = decodeVarint(buffer, offset);
129
+ neighbors[i] = neighbors[i - 1] + delta;
130
+ offset += bytesRead;
131
+ }
132
+ return neighbors;
133
+ }
134
+ /**
135
+ * Calculate the encoded size for a neighbor list without actually encoding
136
+ * Useful for calculating total buffer size before serialization
137
+ */
138
+ export function deltaEncodedSize(neighbors, preSorted = false) {
139
+ if (neighbors.length === 0) {
140
+ return 0;
141
+ }
142
+ for (let i = 0; i < neighbors.length; i++) {
143
+ const id = neighbors[i];
144
+ if (!Number.isInteger(id) || id < 0 || id > 0xFFFFFFFF) {
145
+ throw new VectorDBError(`Invalid neighbor ID at index ${i}: ${id}`, 'VALIDATION_ERROR');
146
+ }
147
+ }
148
+ const sorted = preSorted ? neighbors : neighbors.slice().sort((a, b) => a - b);
149
+ let size = 4; // First ID as uint32
150
+ let prev = sorted[0];
151
+ for (let i = 1; i < sorted.length; i++) {
152
+ const delta = sorted[i] - prev;
153
+ size += varintSize(delta);
154
+ prev = sorted[i];
155
+ }
156
+ return size;
157
+ }
158
+ /**
159
+ * Batch encode multiple neighbor lists efficiently
160
+ * Returns a single buffer with all encoded lists concatenated
161
+ * Also returns offsets for each list
162
+ */
163
+ export function deltaEncodeBatch(neighborLists) {
164
+ // Sort each list once, then pass pre-sorted to both size calculation and encoding
165
+ const sortedLists = neighborLists.map(list => list.length > 0 ? list.slice().sort((a, b) => a - b) : list);
166
+ // Calculate total size and individual sizes
167
+ const sizes = sortedLists.map(list => deltaEncodedSize(list, true));
168
+ const totalSize = sizes.reduce((a, b) => a + b, 0);
169
+ // Allocate single buffer
170
+ const buffer = new Uint8Array(totalSize);
171
+ const offsets = [];
172
+ let currentOffset = 0;
173
+ for (let i = 0; i < sortedLists.length; i++) {
174
+ offsets.push(currentOffset);
175
+ if (sortedLists[i].length > 0) {
176
+ const encoded = deltaEncodeNeighbors(sortedLists[i], true);
177
+ buffer.set(encoded, currentOffset);
178
+ currentOffset += encoded.length;
179
+ }
180
+ }
181
+ return { buffer, offsets, sizes };
182
+ }
183
+ /**
184
+ * Decode a batch of neighbor lists from a single buffer
185
+ */
186
+ export function deltaDecodeBatch(buffer, offsets, sizes, counts) {
187
+ const results = [];
188
+ for (let i = 0; i < offsets.length; i++) {
189
+ if (counts[i] === 0 || sizes[i] === 0) {
190
+ results.push([]);
191
+ }
192
+ else {
193
+ const slice = buffer.subarray(offsets[i], offsets[i] + sizes[i]);
194
+ results.push(deltaDecodeNeighbors(slice, counts[i]));
195
+ }
196
+ }
197
+ return results;
198
+ }
199
+ //# sourceMappingURL=DeltaEncoder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DeltaEncoder.js","sourceRoot":"","sources":["../../src/encoding/DeltaEncoder.ts"],"names":[],"mappings":"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"}
package/dist/errors.js ADDED
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Base error class for all VectorDB errors
3
+ */
4
+ export class VectorDBError extends Error {
5
+ code;
6
+ constructor(message, code) {
7
+ super(message);
8
+ this.name = 'VectorDBError';
9
+ this.code = code;
10
+ }
11
+ }
12
+ /**
13
+ * Thrown when vector dimensions don't match expected dimensions
14
+ */
15
+ export class DimensionMismatchError extends VectorDBError {
16
+ expected;
17
+ actual;
18
+ constructor(expected, actual, context) {
19
+ const message = context
20
+ ? `${context}: expected dimension ${expected}, got ${actual}`
21
+ : `Dimension mismatch: expected ${expected}, got ${actual}`;
22
+ super(message, 'DIMENSION_MISMATCH');
23
+ this.name = 'DimensionMismatchError';
24
+ this.expected = expected;
25
+ this.actual = actual;
26
+ }
27
+ }
28
+ /**
29
+ * Thrown when attempting to add a vector with an ID that already exists
30
+ */
31
+ export class DuplicateVectorError extends VectorDBError {
32
+ ids;
33
+ constructor(ids) {
34
+ const message = ids.length === 1
35
+ ? `Vector with ID '${ids[0]}' already exists`
36
+ : `Vectors with IDs already exist: ${ids.join(', ')}`;
37
+ super(message, 'DUPLICATE_VECTOR');
38
+ this.name = 'DuplicateVectorError';
39
+ this.ids = ids;
40
+ }
41
+ }
42
+ /**
43
+ * Thrown when a requested collection does not exist
44
+ */
45
+ export class CollectionNotFoundError extends VectorDBError {
46
+ collectionName;
47
+ constructor(collectionName) {
48
+ super(`Collection '${collectionName}' does not exist`, 'COLLECTION_NOT_FOUND');
49
+ this.name = 'CollectionNotFoundError';
50
+ this.collectionName = collectionName;
51
+ }
52
+ }
53
+ /**
54
+ * Thrown when attempting to create a collection that already exists
55
+ */
56
+ export class CollectionExistsError extends VectorDBError {
57
+ collectionName;
58
+ constructor(collectionName) {
59
+ super(`Collection '${collectionName}' already exists`, 'COLLECTION_EXISTS');
60
+ this.name = 'CollectionExistsError';
61
+ this.collectionName = collectionName;
62
+ }
63
+ }
64
+ /**
65
+ * Thrown when a storage operation fails
66
+ */
67
+ export class StorageError extends VectorDBError {
68
+ operation;
69
+ path;
70
+ constructor(operation, message, path) {
71
+ super(`Storage ${operation} failed: ${message}`, 'STORAGE_ERROR');
72
+ this.name = 'StorageError';
73
+ this.operation = operation;
74
+ this.path = path;
75
+ }
76
+ }
77
+ /**
78
+ * Thrown when quantization operations fail
79
+ */
80
+ export class QuantizationError extends VectorDBError {
81
+ constructor(message) {
82
+ super(message, 'QUANTIZATION_ERROR');
83
+ this.name = 'QuantizationError';
84
+ }
85
+ }
86
+ /**
87
+ * Thrown when a vector is not found in the index
88
+ */
89
+ export class VectorNotFoundError extends VectorDBError {
90
+ vectorId;
91
+ constructor(vectorId) {
92
+ super(`Vector '${vectorId}' not found`, 'VECTOR_NOT_FOUND');
93
+ this.name = 'VectorNotFoundError';
94
+ this.vectorId = vectorId;
95
+ }
96
+ }
97
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * verso - High-performance vector search with HNSW indexing
2
+ * verso-db - High-performance vector search with HNSW indexing
3
3
  *
4
4
  * Features:
5
5
  * - HNSW algorithm for approximate nearest neighbor search
@@ -7,13 +7,13 @@
7
7
  * - Int8 scalar quantization for 4x memory reduction
8
8
  * - Batch query support for improved throughput
9
9
  * - Parameter presets for different use cases
10
- * - Multi-platform: Bun (file system) and Browser (OPFS)
10
+ * - Multi-platform: Bun/Node.js (file system) and Browser (OPFS)
11
11
  *
12
12
  * @example
13
13
  * ```typescript
14
- * import { VectorDB, getRecommendedPreset } from 'verso';
14
+ * import { VectorDB, getRecommendedPreset } from 'verso-db';
15
15
  *
16
- * const db = new VectorDB();
16
+ * const db = new VectorDB({ storagePath: './vectors' });
17
17
  * const preset = getRecommendedPreset(768);
18
18
  *
19
19
  * const collection = await db.createCollection('my-vectors', {
@@ -36,29 +36,28 @@
36
36
  * ```
37
37
  *
38
38
  * @packageDocumentation
39
- * @module verso
39
+ * @module verso-db
40
40
  */
41
41
  export { VectorDB } from './VectorDB';
42
- export type { VectorDBConfig } from './VectorDB';
42
+ export type { VectorDBConfig, CollectionConfig } from './VectorDB';
43
43
  export { Collection } from './Collection';
44
- export type { AddConfig, QueryConfig, QueryResult } from './Collection';
44
+ export type { AddConfig, QueryConfig, QueryResult, CollectionOptions } from './Collection';
45
45
  export { HNSWIndex } from './HNSWIndex';
46
- export type { DistanceMetric, Node } from './HNSWIndex';
47
- export type { DistanceBackend } from './backends/DistanceBackend';
48
- export { JsDistanceBackend, dotProductFast, l2SquaredFast, normalizeInPlace, cosineDistanceFast } from './backends/JsDistanceBackend';
49
- export { BinaryHeap } from './BinaryHeap';
50
- export { MaxBinaryHeap } from './MaxBinaryHeap';
51
- export { ScalarQuantizer, QuantizedVectorStore, dotProductInt8, l2SquaredInt8, cosineDistanceInt8 } from './quantization/ScalarQuantizer';
52
- export type { QuantizationParams } from './quantization/ScalarQuantizer';
46
+ export type { DistanceMetric } from './HNSWIndex';
53
47
  export type { HNSWPreset } from './presets';
54
48
  export { PRESET_LOW_DIM, PRESET_MEDIUM_DIM, PRESET_HIGH_DIM, PRESET_VERY_HIGH_DIM, PRESET_SMALL_DATASET, PRESET_LARGE_DATASET, PRESET_MAX_RECALL, PRESET_LOW_LATENCY, PRESETS, getRecommendedPreset, getPreset, getRAGPreset } from './presets';
49
+ export { ScalarQuantizer } from './quantization/ScalarQuantizer';
50
+ export type { QuantizationParams } from './quantization/ScalarQuantizer';
55
51
  export type { StorageBackend, StorageOptions } from './storage/StorageBackend';
56
52
  export { BunStorageBackend } from './storage/BunStorageBackend';
57
53
  export { MemoryBackend } from './storage/MemoryBackend';
58
54
  export { OPFSBackend } from './storage/OPFSBackend';
59
55
  export { createStorageBackend, getRecommendedStorageType, isStorageTypeAvailable, type StorageType, type CreateStorageOptions, } from './storage/createStorageBackend';
60
- export { WriteAheadLog, WALOperationType, type WALEntry, } from './storage/WriteAheadLog';
61
- export { BatchWriter, createBatchWriter, type BatchWriterOptions, } from './storage/BatchWriter';
62
- export { deltaEncodeNeighbors, deltaDecodeNeighbors, deltaEncodedSize, encodeVarint, decodeVarint, } from './encoding/DeltaEncoder';
56
+ export { WriteAheadLog, WALOperationType } from './storage/WriteAheadLog';
57
+ export type { WALEntry } from './storage/WriteAheadLog';
58
+ export { BatchWriter, createBatchWriter } from './storage/BatchWriter';
59
+ export type { BatchWriterOptions } from './storage/BatchWriter';
60
+ export { WorkerPool } from './WorkerPool';
61
+ export { WorkerSearchState } from './SearchWorker';
63
62
  export { VectorDBError, DimensionMismatchError, DuplicateVectorError, CollectionNotFoundError, CollectionExistsError, StorageError, QuantizationError, VectorNotFoundError, } from './errors';
64
63
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAGxD,YAAY,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,cAAc,EACd,aAAa,EACb,kBAAkB,EACnB,MAAM,gCAAgC,CAAC;AACxC,YAAY,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAIzE,YAAY,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,OAAO,EACP,oBAAoB,EACpB,SAAS,EACT,YAAY,EACb,MAAM,WAAW,CAAC;AAGnB,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EACzB,sBAAsB,EACtB,KAAK,WAAW,EAChB,KAAK,oBAAoB,GAC1B,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,KAAK,QAAQ,GACd,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,KAAK,kBAAkB,GACxB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,gBAAgB,EAChB,YAAY,EACZ,YAAY,GACb,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,oBAAoB,EACpB,uBAAuB,EACvB,qBAAqB,EACrB,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAKH,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAC3F,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD,YAAY,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,OAAO,EACP,oBAAoB,EACpB,SAAS,EACT,YAAY,EACb,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,YAAY,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAGzE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EACzB,sBAAsB,EACtB,KAAK,WAAW,EAChB,KAAK,oBAAoB,GAC1B,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC1E,YAAY,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AACvE,YAAY,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAGhE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGnD,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,oBAAoB,EACpB,uBAAuB,EACvB,qBAAqB,EACrB,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,UAAU,CAAC"}