@defai.digital/semantic-context 13.4.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.
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Similarity Computation Utilities
3
+ *
4
+ * Provides various methods for computing vector similarity.
5
+ *
6
+ * Invariants:
7
+ * - INV-SEM-003: All scores normalized to [0, 1] range
8
+ */
9
+ import type { SimilarityMethod, SimilarityOptions } from './types.js';
10
+ /**
11
+ * Default similarity options
12
+ */
13
+ export declare const DEFAULT_SIMILARITY_OPTIONS: SimilarityOptions;
14
+ /**
15
+ * Compute cosine similarity between two vectors
16
+ * Returns value in [-1, 1] (or [0, 1] if normalized)
17
+ *
18
+ * INV-SEM-003: Normalized to [0, 1] when normalize=true
19
+ */
20
+ export declare function cosineSimilarity(a: number[], b: number[], normalize?: boolean): number;
21
+ /**
22
+ * Compute dot product similarity between two vectors
23
+ * Returns raw dot product (or normalized if requested)
24
+ *
25
+ * INV-SEM-003: When normalize=true, normalizes vectors first and maps to [0, 1]
26
+ */
27
+ export declare function dotProductSimilarity(a: number[], b: number[], normalize?: boolean): number;
28
+ /**
29
+ * Compute Euclidean distance between two vectors
30
+ * Returns distance (or similarity if normalize=true)
31
+ *
32
+ * INV-SEM-003: Converted to similarity via 1/(1+distance) when normalize=true
33
+ */
34
+ export declare function euclideanDistance(a: number[], b: number[], normalize?: boolean): number;
35
+ /**
36
+ * Compute Manhattan distance between two vectors
37
+ */
38
+ export declare function manhattanDistance(a: number[], b: number[], normalize?: boolean): number;
39
+ /**
40
+ * Compute similarity using specified method
41
+ */
42
+ export declare function computeSimilarity(a: number[], b: number[], options?: Partial<SimilarityOptions>): number;
43
+ /**
44
+ * Normalize a vector to unit length
45
+ */
46
+ export declare function normalizeVector(v: number[]): number[];
47
+ /**
48
+ * Compute vector norm (magnitude)
49
+ */
50
+ export declare function vectorNorm(v: number[]): number;
51
+ /**
52
+ * Add two vectors
53
+ */
54
+ export declare function addVectors(a: number[], b: number[]): number[];
55
+ /**
56
+ * Subtract vectors: a - b
57
+ */
58
+ export declare function subtractVectors(a: number[], b: number[]): number[];
59
+ /**
60
+ * Scale a vector by a scalar
61
+ */
62
+ export declare function scaleVector(v: number[], scalar: number): number[];
63
+ /**
64
+ * Compute centroid (average) of multiple vectors
65
+ */
66
+ export declare function computeCentroid(vectors: number[][]): number[];
67
+ /**
68
+ * Find k nearest neighbors from candidates
69
+ * INV-SEM-002: Results sorted by similarity descending
70
+ */
71
+ export declare function findKNearest(query: number[], candidates: Array<{
72
+ id: string;
73
+ embedding: number[];
74
+ }>, k: number, method?: SimilarityMethod): Array<{
75
+ id: string;
76
+ similarity: number;
77
+ }>;
78
+ /**
79
+ * Filter vectors by minimum similarity threshold
80
+ * INV-SEM-003: Threshold applied after normalization
81
+ */
82
+ export declare function filterByThreshold(query: number[], candidates: Array<{
83
+ id: string;
84
+ embedding: number[];
85
+ }>, minSimilarity: number, method?: SimilarityMethod): Array<{
86
+ id: string;
87
+ similarity: number;
88
+ }>;
89
+ //# sourceMappingURL=similarity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"similarity.d.ts","sourceRoot":"","sources":["../src/similarity.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEtE;;GAEG;AACH,eAAO,MAAM,0BAA0B,EAAE,iBAGxC,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,SAAS,UAAO,GAAG,MAAM,CAyBnF;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,SAAS,UAAO,GAAG,MAAM,CAoCvF;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,SAAS,UAAO,GAAG,MAAM,CAiBpF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,SAAS,UAAO,GAAG,MAAM,CAcpF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,CAAC,EAAE,MAAM,EAAE,EACX,CAAC,EAAE,MAAM,EAAE,EACX,OAAO,GAAE,OAAO,CAAC,iBAAiB,CAAM,GACvC,MAAM,CAaR;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAIrD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAE9C;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAK7D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAKlE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAEjE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,CAgB7D;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EAAE,EACf,UAAU,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,EACtD,CAAC,EAAE,MAAM,EACT,MAAM,GAAE,gBAA2B,GAClC,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAU3C;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EAAE,EACf,UAAU,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,EACtD,aAAa,EAAE,MAAM,EACrB,MAAM,GAAE,gBAA2B,GAClC,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAQ3C"}
@@ -0,0 +1,216 @@
1
+ /**
2
+ * Similarity Computation Utilities
3
+ *
4
+ * Provides various methods for computing vector similarity.
5
+ *
6
+ * Invariants:
7
+ * - INV-SEM-003: All scores normalized to [0, 1] range
8
+ */
9
+ /**
10
+ * Default similarity options
11
+ */
12
+ export const DEFAULT_SIMILARITY_OPTIONS = {
13
+ method: 'cosine',
14
+ normalize: true,
15
+ };
16
+ /**
17
+ * Compute cosine similarity between two vectors
18
+ * Returns value in [-1, 1] (or [0, 1] if normalized)
19
+ *
20
+ * INV-SEM-003: Normalized to [0, 1] when normalize=true
21
+ */
22
+ export function cosineSimilarity(a, b, normalize = true) {
23
+ if (a.length !== b.length) {
24
+ throw new Error(`Vector dimension mismatch: ${a.length} vs ${b.length}`);
25
+ }
26
+ if (a.length === 0)
27
+ return 0;
28
+ let dotProduct = 0;
29
+ let normA = 0;
30
+ let normB = 0;
31
+ for (let i = 0; i < a.length; i++) {
32
+ dotProduct += a[i] * b[i];
33
+ normA += a[i] * a[i];
34
+ normB += b[i] * b[i];
35
+ }
36
+ const denominator = Math.sqrt(normA) * Math.sqrt(normB);
37
+ if (denominator === 0)
38
+ return 0;
39
+ const similarity = dotProduct / denominator;
40
+ // Normalize from [-1, 1] to [0, 1]
41
+ return normalize ? (similarity + 1) / 2 : similarity;
42
+ }
43
+ /**
44
+ * Compute dot product similarity between two vectors
45
+ * Returns raw dot product (or normalized if requested)
46
+ *
47
+ * INV-SEM-003: When normalize=true, normalizes vectors first and maps to [0, 1]
48
+ */
49
+ export function dotProductSimilarity(a, b, normalize = true) {
50
+ if (a.length !== b.length) {
51
+ throw new Error(`Vector dimension mismatch: ${a.length} vs ${b.length}`);
52
+ }
53
+ if (a.length === 0)
54
+ return 0;
55
+ if (!normalize) {
56
+ // Raw dot product
57
+ let dotProduct = 0;
58
+ for (let i = 0; i < a.length; i++) {
59
+ dotProduct += a[i] * b[i];
60
+ }
61
+ return dotProduct;
62
+ }
63
+ // Normalized: compute cosine similarity (dot product of unit vectors)
64
+ // This ensures result is in [-1, 1] range, then map to [0, 1]
65
+ let dotProduct = 0;
66
+ let normA = 0;
67
+ let normB = 0;
68
+ for (let i = 0; i < a.length; i++) {
69
+ dotProduct += a[i] * b[i];
70
+ normA += a[i] * a[i];
71
+ normB += b[i] * b[i];
72
+ }
73
+ const denominator = Math.sqrt(normA) * Math.sqrt(normB);
74
+ if (denominator === 0)
75
+ return 0;
76
+ const similarity = dotProduct / denominator;
77
+ // Map from [-1, 1] to [0, 1]
78
+ return (similarity + 1) / 2;
79
+ }
80
+ /**
81
+ * Compute Euclidean distance between two vectors
82
+ * Returns distance (or similarity if normalize=true)
83
+ *
84
+ * INV-SEM-003: Converted to similarity via 1/(1+distance) when normalize=true
85
+ */
86
+ export function euclideanDistance(a, b, normalize = true) {
87
+ if (a.length !== b.length) {
88
+ throw new Error(`Vector dimension mismatch: ${a.length} vs ${b.length}`);
89
+ }
90
+ if (a.length === 0)
91
+ return 0;
92
+ let sumSquares = 0;
93
+ for (let i = 0; i < a.length; i++) {
94
+ const diff = a[i] - b[i];
95
+ sumSquares += diff * diff;
96
+ }
97
+ const distance = Math.sqrt(sumSquares);
98
+ // Convert distance to similarity: smaller distance = higher similarity
99
+ return normalize ? 1 / (1 + distance) : distance;
100
+ }
101
+ /**
102
+ * Compute Manhattan distance between two vectors
103
+ */
104
+ export function manhattanDistance(a, b, normalize = true) {
105
+ if (a.length !== b.length) {
106
+ throw new Error(`Vector dimension mismatch: ${a.length} vs ${b.length}`);
107
+ }
108
+ if (a.length === 0)
109
+ return 0;
110
+ let distance = 0;
111
+ for (let i = 0; i < a.length; i++) {
112
+ distance += Math.abs(a[i] - b[i]);
113
+ }
114
+ // Convert to similarity
115
+ return normalize ? 1 / (1 + distance) : distance;
116
+ }
117
+ /**
118
+ * Compute similarity using specified method
119
+ */
120
+ export function computeSimilarity(a, b, options = {}) {
121
+ const { method, normalize } = { ...DEFAULT_SIMILARITY_OPTIONS, ...options };
122
+ switch (method) {
123
+ case 'cosine':
124
+ return cosineSimilarity(a, b, normalize);
125
+ case 'dot':
126
+ return dotProductSimilarity(a, b, normalize);
127
+ case 'euclidean':
128
+ return euclideanDistance(a, b, normalize);
129
+ default:
130
+ throw new Error(`Unknown similarity method: ${method}`);
131
+ }
132
+ }
133
+ /**
134
+ * Normalize a vector to unit length
135
+ */
136
+ export function normalizeVector(v) {
137
+ const norm = Math.sqrt(v.reduce((sum, x) => sum + x * x, 0));
138
+ if (norm === 0)
139
+ return v;
140
+ return v.map((x) => x / norm);
141
+ }
142
+ /**
143
+ * Compute vector norm (magnitude)
144
+ */
145
+ export function vectorNorm(v) {
146
+ return Math.sqrt(v.reduce((sum, x) => sum + x * x, 0));
147
+ }
148
+ /**
149
+ * Add two vectors
150
+ */
151
+ export function addVectors(a, b) {
152
+ if (a.length !== b.length) {
153
+ throw new Error(`Vector dimension mismatch: ${a.length} vs ${b.length}`);
154
+ }
155
+ return a.map((x, i) => x + b[i]);
156
+ }
157
+ /**
158
+ * Subtract vectors: a - b
159
+ */
160
+ export function subtractVectors(a, b) {
161
+ if (a.length !== b.length) {
162
+ throw new Error(`Vector dimension mismatch: ${a.length} vs ${b.length}`);
163
+ }
164
+ return a.map((x, i) => x - b[i]);
165
+ }
166
+ /**
167
+ * Scale a vector by a scalar
168
+ */
169
+ export function scaleVector(v, scalar) {
170
+ return v.map((x) => x * scalar);
171
+ }
172
+ /**
173
+ * Compute centroid (average) of multiple vectors
174
+ */
175
+ export function computeCentroid(vectors) {
176
+ if (vectors.length === 0)
177
+ return [];
178
+ const dim = vectors[0].length;
179
+ const centroid = new Array(dim).fill(0);
180
+ for (const v of vectors) {
181
+ if (v.length !== dim) {
182
+ throw new Error(`Inconsistent vector dimensions`);
183
+ }
184
+ for (let i = 0; i < dim; i++) {
185
+ centroid[i] += v[i];
186
+ }
187
+ }
188
+ return centroid.map((x) => x / vectors.length);
189
+ }
190
+ /**
191
+ * Find k nearest neighbors from candidates
192
+ * INV-SEM-002: Results sorted by similarity descending
193
+ */
194
+ export function findKNearest(query, candidates, k, method = 'cosine') {
195
+ const scored = candidates.map((c) => ({
196
+ id: c.id,
197
+ similarity: computeSimilarity(query, c.embedding, { method, normalize: true }),
198
+ }));
199
+ // Sort by similarity descending
200
+ scored.sort((a, b) => b.similarity - a.similarity);
201
+ return scored.slice(0, k);
202
+ }
203
+ /**
204
+ * Filter vectors by minimum similarity threshold
205
+ * INV-SEM-003: Threshold applied after normalization
206
+ */
207
+ export function filterByThreshold(query, candidates, minSimilarity, method = 'cosine') {
208
+ return candidates
209
+ .map((c) => ({
210
+ id: c.id,
211
+ similarity: computeSimilarity(query, c.embedding, { method, normalize: true }),
212
+ }))
213
+ .filter((s) => s.similarity >= minSimilarity)
214
+ .sort((a, b) => b.similarity - a.similarity);
215
+ }
216
+ //# sourceMappingURL=similarity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"similarity.js","sourceRoot":"","sources":["../src/similarity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,236 @@
1
+ /**
2
+ * Semantic Context Types
3
+ *
4
+ * Port interfaces and type definitions for semantic context storage.
5
+ */
6
+ import type { SemanticItem, SemanticSearchRequest, SemanticSearchResponse, SemanticStoreRequest, SemanticStoreResponse, SemanticListRequest, SemanticListResponse, SemanticDeleteResponse, EmbeddingConfig } from '@defai.digital/contracts';
7
+ /**
8
+ * Embedding request
9
+ */
10
+ export interface EmbeddingRequest {
11
+ /**
12
+ * Text to embed
13
+ */
14
+ text: string;
15
+ /**
16
+ * Model to use (optional, uses config default)
17
+ */
18
+ model?: string;
19
+ }
20
+ /**
21
+ * Embedding result
22
+ */
23
+ export interface EmbeddingResult {
24
+ /**
25
+ * The embedding vector
26
+ */
27
+ embedding: number[];
28
+ /**
29
+ * Model used
30
+ */
31
+ model: string;
32
+ /**
33
+ * Dimension of embedding
34
+ */
35
+ dimension: number;
36
+ /**
37
+ * Computation duration in ms
38
+ */
39
+ durationMs: number;
40
+ }
41
+ /**
42
+ * Port interface for embedding computation
43
+ * Implementations inject actual embedding provider at runtime
44
+ */
45
+ export interface EmbeddingPort {
46
+ /**
47
+ * Compute embedding for text
48
+ */
49
+ embed(request: EmbeddingRequest): Promise<EmbeddingResult>;
50
+ /**
51
+ * Compute embeddings for multiple texts (batch)
52
+ */
53
+ embedBatch(texts: string[]): Promise<EmbeddingResult[]>;
54
+ /**
55
+ * Get embedding configuration
56
+ */
57
+ getConfig(): EmbeddingConfig;
58
+ /**
59
+ * Check if provider is available
60
+ */
61
+ isAvailable(): Promise<boolean>;
62
+ }
63
+ /**
64
+ * Port interface for semantic storage
65
+ * Implementations provide actual persistence (SQLite, etc.)
66
+ */
67
+ export interface SemanticStorePort {
68
+ /**
69
+ * Store item with embedding
70
+ * INV-SEM-001: Embedding cached until content changes
71
+ */
72
+ store(request: SemanticStoreRequest): Promise<SemanticStoreResponse>;
73
+ /**
74
+ * Search by semantic similarity
75
+ * INV-SEM-002: Results sorted by similarity descending
76
+ * INV-SEM-003: Scores normalized to [0, 1]
77
+ * INV-SEM-004: Namespace isolation
78
+ */
79
+ search(request: SemanticSearchRequest): Promise<SemanticSearchResponse>;
80
+ /**
81
+ * Get item by key
82
+ */
83
+ get(key: string, namespace?: string): Promise<SemanticItem | null>;
84
+ /**
85
+ * List items
86
+ */
87
+ list(request: SemanticListRequest): Promise<SemanticListResponse>;
88
+ /**
89
+ * Delete item
90
+ */
91
+ delete(key: string, namespace?: string): Promise<SemanticDeleteResponse>;
92
+ /**
93
+ * Check if item exists
94
+ */
95
+ exists(key: string, namespace?: string): Promise<boolean>;
96
+ /**
97
+ * Get namespace statistics
98
+ */
99
+ getStats(namespace?: string): Promise<SemanticStoreStats>;
100
+ /**
101
+ * Clear namespace
102
+ */
103
+ clear(namespace?: string): Promise<number>;
104
+ }
105
+ /**
106
+ * Semantic store statistics
107
+ */
108
+ export interface SemanticStoreStats {
109
+ /**
110
+ * Total items in namespace
111
+ */
112
+ totalItems: number;
113
+ /**
114
+ * Items with embeddings
115
+ */
116
+ itemsWithEmbeddings: number;
117
+ /**
118
+ * Embedding dimension used
119
+ */
120
+ embeddingDimension: number | null;
121
+ /**
122
+ * Embedding model used
123
+ */
124
+ embeddingModel: string | null;
125
+ /**
126
+ * Namespace queried
127
+ */
128
+ namespace: string | null;
129
+ /**
130
+ * All namespaces (if namespace not specified)
131
+ */
132
+ namespaces?: string[];
133
+ }
134
+ /**
135
+ * High-level semantic context manager
136
+ * Combines embedding and storage
137
+ */
138
+ export interface SemanticManager {
139
+ /**
140
+ * Store content with automatic embedding
141
+ */
142
+ store(request: SemanticStoreRequest): Promise<SemanticStoreResponse>;
143
+ /**
144
+ * Search by semantic similarity
145
+ */
146
+ search(request: SemanticSearchRequest): Promise<SemanticSearchResponse>;
147
+ /**
148
+ * Get item by key
149
+ */
150
+ get(key: string, namespace?: string): Promise<SemanticItem | null>;
151
+ /**
152
+ * List items
153
+ */
154
+ list(request: SemanticListRequest): Promise<SemanticListResponse>;
155
+ /**
156
+ * Delete item
157
+ */
158
+ delete(key: string, namespace?: string): Promise<SemanticDeleteResponse>;
159
+ /**
160
+ * Get statistics
161
+ */
162
+ getStats(namespace?: string): Promise<SemanticStoreStats>;
163
+ /**
164
+ * Clear namespace
165
+ */
166
+ clear(namespace?: string): Promise<number>;
167
+ /**
168
+ * Get embedding configuration
169
+ */
170
+ getEmbeddingConfig(): EmbeddingConfig;
171
+ }
172
+ /**
173
+ * Options for creating semantic manager
174
+ */
175
+ export interface SemanticManagerOptions {
176
+ /**
177
+ * Embedding provider port
178
+ */
179
+ embeddingPort: EmbeddingPort;
180
+ /**
181
+ * Storage port
182
+ */
183
+ storePort: SemanticStorePort;
184
+ /**
185
+ * Default namespace
186
+ */
187
+ defaultNamespace?: string;
188
+ /**
189
+ * Whether to auto-compute embeddings on store
190
+ */
191
+ autoEmbed?: boolean;
192
+ }
193
+ /**
194
+ * Similarity computation method
195
+ */
196
+ export type SimilarityMethod = 'cosine' | 'dot' | 'euclidean';
197
+ /**
198
+ * Similarity computation options
199
+ */
200
+ export interface SimilarityOptions {
201
+ method: SimilarityMethod;
202
+ normalize: boolean;
203
+ }
204
+ /**
205
+ * Stub embedding port for testing
206
+ */
207
+ export declare class StubEmbeddingPort implements EmbeddingPort {
208
+ private dimension;
209
+ private model;
210
+ constructor(dimension?: number, model?: string);
211
+ embed(request: EmbeddingRequest): Promise<EmbeddingResult>;
212
+ embedBatch(texts: string[]): Promise<EmbeddingResult[]>;
213
+ getConfig(): EmbeddingConfig;
214
+ isAvailable(): Promise<boolean>;
215
+ private generateEmbedding;
216
+ }
217
+ /**
218
+ * In-memory semantic store for testing
219
+ */
220
+ export declare class InMemorySemanticStore implements SemanticStorePort {
221
+ private items;
222
+ private embeddingPort;
223
+ constructor(embeddingPort?: EmbeddingPort);
224
+ private makeKey;
225
+ store(request: SemanticStoreRequest): Promise<SemanticStoreResponse>;
226
+ search(request: SemanticSearchRequest): Promise<SemanticSearchResponse>;
227
+ get(key: string, namespace?: string): Promise<SemanticItem | null>;
228
+ list(request: SemanticListRequest): Promise<SemanticListResponse>;
229
+ delete(key: string, namespace?: string): Promise<SemanticDeleteResponse>;
230
+ exists(key: string, namespace?: string): Promise<boolean>;
231
+ getStats(namespace?: string): Promise<SemanticStoreStats>;
232
+ clear(namespace?: string): Promise<number>;
233
+ private cosineSimilarity;
234
+ private hashContent;
235
+ }
236
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}