@langchain/langgraph-checkpoint 0.1.1 → 1.0.1
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.
- package/dist/base.cjs +73 -88
- package/dist/base.cjs.map +1 -0
- package/dist/base.d.cts +94 -0
- package/dist/base.d.cts.map +1 -0
- package/dist/base.d.ts +78 -73
- package/dist/base.d.ts.map +1 -0
- package/dist/base.js +68 -80
- package/dist/base.js.map +1 -1
- package/dist/cache/base.cjs +16 -21
- package/dist/cache/base.cjs.map +1 -0
- package/dist/cache/base.d.cts +43 -0
- package/dist/cache/base.d.cts.map +1 -0
- package/dist/cache/base.d.ts +41 -36
- package/dist/cache/base.d.ts.map +1 -0
- package/dist/cache/base.js +15 -16
- package/dist/cache/base.js.map +1 -1
- package/dist/cache/index.cjs +2 -19
- package/dist/cache/index.js +3 -3
- package/dist/cache/memory.cjs +50 -58
- package/dist/cache/memory.cjs.map +1 -0
- package/dist/cache/memory.d.cts +19 -0
- package/dist/cache/memory.d.cts.map +1 -0
- package/dist/cache/memory.d.ts +18 -13
- package/dist/cache/memory.d.ts.map +1 -0
- package/dist/cache/memory.js +49 -53
- package/dist/cache/memory.js.map +1 -1
- package/dist/id.cjs +10 -16
- package/dist/id.cjs.map +1 -0
- package/dist/id.d.cts +6 -0
- package/dist/id.d.cts.map +1 -0
- package/dist/id.d.ts +6 -2
- package/dist/id.d.ts.map +1 -0
- package/dist/id.js +9 -12
- package/dist/id.js.map +1 -1
- package/dist/index.cjs +36 -27
- package/dist/index.d.cts +12 -0
- package/dist/index.d.ts +12 -8
- package/dist/index.js +11 -9
- package/dist/memory.cjs +191 -268
- package/dist/memory.cjs.map +1 -0
- package/dist/memory.d.cts +21 -0
- package/dist/memory.d.cts.map +1 -0
- package/dist/memory.d.ts +18 -12
- package/dist/memory.d.ts.map +1 -0
- package/dist/memory.js +190 -263
- package/dist/memory.js.map +1 -1
- package/dist/serde/base.d.cts +8 -0
- package/dist/serde/base.d.cts.map +1 -0
- package/dist/serde/base.d.ts +7 -3
- package/dist/serde/base.d.ts.map +1 -0
- package/dist/serde/jsonplus.cjs +90 -141
- package/dist/serde/jsonplus.cjs.map +1 -0
- package/dist/serde/jsonplus.js +89 -136
- package/dist/serde/jsonplus.js.map +1 -1
- package/dist/serde/types.cjs +14 -9
- package/dist/serde/types.cjs.map +1 -0
- package/dist/serde/types.d.cts +52 -0
- package/dist/serde/types.d.cts.map +1 -0
- package/dist/serde/types.d.ts +50 -47
- package/dist/serde/types.d.ts.map +1 -0
- package/dist/serde/types.js +9 -5
- package/dist/serde/types.js.map +1 -1
- package/dist/serde/utils/fast-safe-stringify/index.cjs +87 -208
- package/dist/serde/utils/fast-safe-stringify/index.cjs.map +1 -0
- package/dist/serde/utils/fast-safe-stringify/index.js +87 -205
- package/dist/serde/utils/fast-safe-stringify/index.js.map +1 -1
- package/dist/store/base.cjs +199 -209
- package/dist/store/base.cjs.map +1 -0
- package/dist/store/base.d.cts +391 -0
- package/dist/store/base.d.cts.map +1 -0
- package/dist/store/base.d.ts +335 -332
- package/dist/store/base.d.ts.map +1 -0
- package/dist/store/base.js +198 -204
- package/dist/store/base.js.map +1 -1
- package/dist/store/batch.cjs +114 -147
- package/dist/store/batch.cjs.map +1 -0
- package/dist/store/batch.d.cts +46 -0
- package/dist/store/batch.d.cts.map +1 -0
- package/dist/store/batch.d.ts +45 -40
- package/dist/store/batch.d.ts.map +1 -0
- package/dist/store/batch.js +114 -143
- package/dist/store/batch.js.map +1 -1
- package/dist/store/memory.cjs +256 -363
- package/dist/store/memory.cjs.map +1 -0
- package/dist/store/memory.d.cts +62 -0
- package/dist/store/memory.d.cts.map +1 -0
- package/dist/store/memory.d.ts +28 -24
- package/dist/store/memory.d.ts.map +1 -0
- package/dist/store/memory.js +255 -358
- package/dist/store/memory.js.map +1 -1
- package/dist/store/utils.cjs +137 -249
- package/dist/store/utils.cjs.map +1 -0
- package/dist/store/utils.js +137 -245
- package/dist/store/utils.js.map +1 -1
- package/dist/types.d.cts +35 -0
- package/dist/types.d.cts.map +1 -0
- package/dist/types.d.ts +29 -28
- package/dist/types.d.ts.map +1 -0
- package/package.json +33 -34
- package/CHANGELOG.md +0 -19
- package/dist/cache/index.d.ts +0 -2
- package/dist/cache/index.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/serde/base.cjs +0 -3
- package/dist/serde/base.js +0 -2
- package/dist/serde/base.js.map +0 -1
- package/dist/serde/jsonplus.d.ts +0 -7
- package/dist/serde/utils/fast-safe-stringify/index.d.ts +0 -1
- package/dist/store/index.cjs +0 -20
- package/dist/store/index.d.ts +0 -3
- package/dist/store/index.js +0 -4
- package/dist/store/index.js.map +0 -1
- package/dist/store/utils.d.ts +0 -26
- package/dist/types.cjs +0 -3
- package/dist/types.js +0 -2
- package/dist/types.js.map +0 -1
- package/index.cjs +0 -1
- package/index.d.cts +0 -1
- package/index.d.ts +0 -1
- package/index.js +0 -1
package/dist/store/utils.js
CHANGED
|
@@ -1,255 +1,147 @@
|
|
|
1
|
+
//#region src/store/utils.ts
|
|
1
2
|
/**
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
}
|
|
57
|
-
tokens.push(fieldChars.join(""));
|
|
58
|
-
continue;
|
|
59
|
-
}
|
|
60
|
-
else if (char === ".") {
|
|
61
|
-
// Handle regular field
|
|
62
|
-
if (current.length) {
|
|
63
|
-
tokens.push(current.join(""));
|
|
64
|
-
current = [];
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
else {
|
|
68
|
-
current.push(char);
|
|
69
|
-
}
|
|
70
|
-
i += 1;
|
|
71
|
-
}
|
|
72
|
-
if (current.length) {
|
|
73
|
-
tokens.push(current.join(""));
|
|
74
|
-
}
|
|
75
|
-
return tokens;
|
|
3
|
+
* Tokenize a JSON path into parts.
|
|
4
|
+
* @example
|
|
5
|
+
* tokenizePath("metadata.title") // -> ["metadata", "title"]
|
|
6
|
+
* tokenizePath("chapters[*].content") // -> ["chapters[*]", "content"]
|
|
7
|
+
*/
|
|
8
|
+
function tokenizePath(path) {
|
|
9
|
+
if (!path) return [];
|
|
10
|
+
const tokens = [];
|
|
11
|
+
let current = [];
|
|
12
|
+
let i = 0;
|
|
13
|
+
while (i < path.length) {
|
|
14
|
+
const char = path[i];
|
|
15
|
+
if (char === "[") {
|
|
16
|
+
if (current.length) {
|
|
17
|
+
tokens.push(current.join(""));
|
|
18
|
+
current = [];
|
|
19
|
+
}
|
|
20
|
+
let bracketCount = 1;
|
|
21
|
+
const indexChars = ["["];
|
|
22
|
+
i += 1;
|
|
23
|
+
while (i < path.length && bracketCount > 0) {
|
|
24
|
+
if (path[i] === "[") bracketCount += 1;
|
|
25
|
+
else if (path[i] === "]") bracketCount -= 1;
|
|
26
|
+
indexChars.push(path[i]);
|
|
27
|
+
i += 1;
|
|
28
|
+
}
|
|
29
|
+
tokens.push(indexChars.join(""));
|
|
30
|
+
continue;
|
|
31
|
+
} else if (char === "{") {
|
|
32
|
+
if (current.length) {
|
|
33
|
+
tokens.push(current.join(""));
|
|
34
|
+
current = [];
|
|
35
|
+
}
|
|
36
|
+
let braceCount = 1;
|
|
37
|
+
const fieldChars = ["{"];
|
|
38
|
+
i += 1;
|
|
39
|
+
while (i < path.length && braceCount > 0) {
|
|
40
|
+
if (path[i] === "{") braceCount += 1;
|
|
41
|
+
else if (path[i] === "}") braceCount -= 1;
|
|
42
|
+
fieldChars.push(path[i]);
|
|
43
|
+
i += 1;
|
|
44
|
+
}
|
|
45
|
+
tokens.push(fieldChars.join(""));
|
|
46
|
+
continue;
|
|
47
|
+
} else if (char === ".") {
|
|
48
|
+
if (current.length) {
|
|
49
|
+
tokens.push(current.join(""));
|
|
50
|
+
current = [];
|
|
51
|
+
}
|
|
52
|
+
} else current.push(char);
|
|
53
|
+
i += 1;
|
|
54
|
+
}
|
|
55
|
+
if (current.length) tokens.push(current.join(""));
|
|
56
|
+
return tokens;
|
|
76
57
|
}
|
|
77
58
|
/**
|
|
78
|
-
|
|
79
|
-
|
|
59
|
+
* Type guard to check if an object is a FilterOperators
|
|
60
|
+
*/
|
|
80
61
|
function isFilterOperators(obj) {
|
|
81
|
-
|
|
82
|
-
obj !== null &&
|
|
83
|
-
Object.keys(obj).every((key) => key === "$eq" ||
|
|
84
|
-
key === "$ne" ||
|
|
85
|
-
key === "$gt" ||
|
|
86
|
-
key === "$gte" ||
|
|
87
|
-
key === "$lt" ||
|
|
88
|
-
key === "$lte" ||
|
|
89
|
-
key === "$in" ||
|
|
90
|
-
key === "$nin"));
|
|
62
|
+
return typeof obj === "object" && obj !== null && Object.keys(obj).every((key) => key === "$eq" || key === "$ne" || key === "$gt" || key === "$gte" || key === "$lt" || key === "$lte" || key === "$in" || key === "$nin");
|
|
91
63
|
}
|
|
92
64
|
/**
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
case "$lte":
|
|
112
|
-
return Number(itemValue) <= Number(value);
|
|
113
|
-
case "$in":
|
|
114
|
-
return Array.isArray(value) ? value.includes(itemValue) : false;
|
|
115
|
-
case "$nin":
|
|
116
|
-
return Array.isArray(value) ? !value.includes(itemValue) : true;
|
|
117
|
-
default:
|
|
118
|
-
return false;
|
|
119
|
-
}
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
// If no operators, do a direct comparison
|
|
123
|
-
return itemValue === filterValue;
|
|
65
|
+
* Compare values for filtering, supporting operator-based comparisons.
|
|
66
|
+
*/
|
|
67
|
+
function compareValues(itemValue, filterValue) {
|
|
68
|
+
if (isFilterOperators(filterValue)) return Object.keys(filterValue).filter((k) => k.startsWith("$")).every((op) => {
|
|
69
|
+
const value = filterValue[op];
|
|
70
|
+
switch (op) {
|
|
71
|
+
case "$eq": return itemValue === value;
|
|
72
|
+
case "$ne": return itemValue !== value;
|
|
73
|
+
case "$gt": return Number(itemValue) > Number(value);
|
|
74
|
+
case "$gte": return Number(itemValue) >= Number(value);
|
|
75
|
+
case "$lt": return Number(itemValue) < Number(value);
|
|
76
|
+
case "$lte": return Number(itemValue) <= Number(value);
|
|
77
|
+
case "$in": return Array.isArray(value) ? value.includes(itemValue) : false;
|
|
78
|
+
case "$nin": return Array.isArray(value) ? !value.includes(itemValue) : true;
|
|
79
|
+
default: return false;
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
return itemValue === filterValue;
|
|
124
83
|
}
|
|
125
84
|
/**
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
else if (token.startsWith("{") && token.endsWith("}")) {
|
|
185
|
-
if (typeof obj !== "object" || obj === null)
|
|
186
|
-
return [];
|
|
187
|
-
const fields = token
|
|
188
|
-
.slice(1, -1)
|
|
189
|
-
.split(",")
|
|
190
|
-
.map((f) => f.trim());
|
|
191
|
-
for (const field of fields) {
|
|
192
|
-
const nestedTokens = tokenizePath(field);
|
|
193
|
-
if (nestedTokens.length) {
|
|
194
|
-
let currentObj = obj;
|
|
195
|
-
for (const nestedToken of nestedTokens) {
|
|
196
|
-
if (currentObj &&
|
|
197
|
-
typeof currentObj === "object" &&
|
|
198
|
-
nestedToken in currentObj) {
|
|
199
|
-
currentObj = currentObj[nestedToken];
|
|
200
|
-
}
|
|
201
|
-
else {
|
|
202
|
-
currentObj = undefined;
|
|
203
|
-
break;
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
if (currentObj !== undefined) {
|
|
207
|
-
if (typeof currentObj === "string" ||
|
|
208
|
-
typeof currentObj === "number" ||
|
|
209
|
-
typeof currentObj === "boolean") {
|
|
210
|
-
results.push(String(currentObj));
|
|
211
|
-
}
|
|
212
|
-
else if (Array.isArray(currentObj) ||
|
|
213
|
-
typeof currentObj === "object") {
|
|
214
|
-
results.push(JSON.stringify(currentObj, null, 2));
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
else if (token === "*") {
|
|
221
|
-
if (Array.isArray(obj)) {
|
|
222
|
-
for (const item of obj) {
|
|
223
|
-
results.push(...extractFromObj(item, tokens, pos + 1));
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
else if (typeof obj === "object" && obj !== null) {
|
|
227
|
-
for (const value of Object.values(obj)) {
|
|
228
|
-
results.push(...extractFromObj(value, tokens, pos + 1));
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
else {
|
|
233
|
-
if (typeof obj === "object" && obj !== null && token in obj) {
|
|
234
|
-
results.push(...extractFromObj(obj[token], tokens, pos + 1));
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
return results;
|
|
238
|
-
}
|
|
239
|
-
return extractFromObj(obj, tokens, 0);
|
|
240
|
-
}
|
|
241
|
-
/**
|
|
242
|
-
* Calculate cosine similarity between two vectors.
|
|
243
|
-
*/
|
|
244
|
-
export function cosineSimilarity(vector1, vector2) {
|
|
245
|
-
if (vector1.length !== vector2.length) {
|
|
246
|
-
throw new Error("Vectors must have the same length");
|
|
247
|
-
}
|
|
248
|
-
const dotProduct = vector1.reduce((acc, val, i) => acc + val * vector2[i], 0);
|
|
249
|
-
const magnitude1 = Math.sqrt(vector1.reduce((acc, val) => acc + val * val, 0));
|
|
250
|
-
const magnitude2 = Math.sqrt(vector2.reduce((acc, val) => acc + val * val, 0));
|
|
251
|
-
if (magnitude1 === 0 || magnitude2 === 0)
|
|
252
|
-
return 0;
|
|
253
|
-
return dotProduct / (magnitude1 * magnitude2);
|
|
85
|
+
* Extract text from a value at a specific JSON path.
|
|
86
|
+
*
|
|
87
|
+
* Supports:
|
|
88
|
+
* - Simple paths: "field1.field2"
|
|
89
|
+
* - Array indexing: "[0]", "[*]", "[-1]"
|
|
90
|
+
* - Wildcards: "*"
|
|
91
|
+
* - Multi-field selection: "{field1,field2}"
|
|
92
|
+
* - Nested paths in multi-field: "{field1,nested.field2}"
|
|
93
|
+
*/
|
|
94
|
+
function getTextAtPath(obj, path) {
|
|
95
|
+
if (!path || path === "$") return [JSON.stringify(obj, null, 2)];
|
|
96
|
+
const tokens = Array.isArray(path) ? path : tokenizePath(path);
|
|
97
|
+
function extractFromObj(obj, tokens, pos) {
|
|
98
|
+
if (pos >= tokens.length) {
|
|
99
|
+
if (typeof obj === "string" || typeof obj === "number" || typeof obj === "boolean") return [String(obj)];
|
|
100
|
+
if (obj === null || obj === void 0) return [];
|
|
101
|
+
if (Array.isArray(obj) || typeof obj === "object") return [JSON.stringify(obj, null, 2)];
|
|
102
|
+
return [];
|
|
103
|
+
}
|
|
104
|
+
const token = tokens[pos];
|
|
105
|
+
const results = [];
|
|
106
|
+
if (pos === 0 && token === "$") results.push(JSON.stringify(obj, null, 2));
|
|
107
|
+
if (token.startsWith("[") && token.endsWith("]")) {
|
|
108
|
+
if (!Array.isArray(obj)) return [];
|
|
109
|
+
const index = token.slice(1, -1);
|
|
110
|
+
if (index === "*") for (const item of obj) results.push(...extractFromObj(item, tokens, pos + 1));
|
|
111
|
+
else try {
|
|
112
|
+
let idx = parseInt(index, 10);
|
|
113
|
+
if (idx < 0) idx = obj.length + idx;
|
|
114
|
+
if (idx >= 0 && idx < obj.length) results.push(...extractFromObj(obj[idx], tokens, pos + 1));
|
|
115
|
+
} catch {
|
|
116
|
+
return [];
|
|
117
|
+
}
|
|
118
|
+
} else if (token.startsWith("{") && token.endsWith("}")) {
|
|
119
|
+
if (typeof obj !== "object" || obj === null) return [];
|
|
120
|
+
const fields = token.slice(1, -1).split(",").map((f) => f.trim());
|
|
121
|
+
for (const field of fields) {
|
|
122
|
+
const nestedTokens = tokenizePath(field);
|
|
123
|
+
if (nestedTokens.length) {
|
|
124
|
+
let currentObj = obj;
|
|
125
|
+
for (const nestedToken of nestedTokens) if (currentObj && typeof currentObj === "object" && nestedToken in currentObj) currentObj = currentObj[nestedToken];
|
|
126
|
+
else {
|
|
127
|
+
currentObj = void 0;
|
|
128
|
+
break;
|
|
129
|
+
}
|
|
130
|
+
if (currentObj !== void 0) {
|
|
131
|
+
if (typeof currentObj === "string" || typeof currentObj === "number" || typeof currentObj === "boolean") results.push(String(currentObj));
|
|
132
|
+
else if (Array.isArray(currentObj) || typeof currentObj === "object") results.push(JSON.stringify(currentObj, null, 2));
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
} else if (token === "*") {
|
|
137
|
+
if (Array.isArray(obj)) for (const item of obj) results.push(...extractFromObj(item, tokens, pos + 1));
|
|
138
|
+
else if (typeof obj === "object" && obj !== null) for (const value of Object.values(obj)) results.push(...extractFromObj(value, tokens, pos + 1));
|
|
139
|
+
} else if (typeof obj === "object" && obj !== null && token in obj) results.push(...extractFromObj(obj[token], tokens, pos + 1));
|
|
140
|
+
return results;
|
|
141
|
+
}
|
|
142
|
+
return extractFromObj(obj, tokens, 0);
|
|
254
143
|
}
|
|
144
|
+
//#endregion
|
|
145
|
+
export { compareValues, getTextAtPath, tokenizePath };
|
|
146
|
+
|
|
255
147
|
//# sourceMappingURL=utils.js.map
|
package/dist/store/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/store/utils.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utils.js","names":[],"sources":["../../src/store/utils.ts"],"sourcesContent":["/**\n * Tokenize a JSON path into parts.\n * @example\n * tokenizePath(\"metadata.title\") // -> [\"metadata\", \"title\"]\n * tokenizePath(\"chapters[*].content\") // -> [\"chapters[*]\", \"content\"]\n */\nexport function tokenizePath(path: string): string[] {\n if (!path) {\n return [];\n }\n\n const tokens: string[] = [];\n let current: string[] = [];\n let i = 0;\n\n while (i < path.length) {\n const char = path[i];\n\n if (char === \"[\") {\n // Handle array index\n if (current.length) {\n tokens.push(current.join(\"\"));\n current = [];\n }\n let bracketCount = 1;\n const indexChars = [\"[\"];\n i += 1;\n while (i < path.length && bracketCount > 0) {\n if (path[i] === \"[\") {\n bracketCount += 1;\n } else if (path[i] === \"]\") {\n bracketCount -= 1;\n }\n indexChars.push(path[i]);\n i += 1;\n }\n tokens.push(indexChars.join(\"\"));\n continue;\n } else if (char === \"{\") {\n // Handle multi-field selection\n if (current.length) {\n tokens.push(current.join(\"\"));\n current = [];\n }\n let braceCount = 1;\n const fieldChars = [\"{\"];\n i += 1;\n while (i < path.length && braceCount > 0) {\n if (path[i] === \"{\") {\n braceCount += 1;\n } else if (path[i] === \"}\") {\n braceCount -= 1;\n }\n fieldChars.push(path[i]);\n i += 1;\n }\n tokens.push(fieldChars.join(\"\"));\n continue;\n } else if (char === \".\") {\n // Handle regular field\n if (current.length) {\n tokens.push(current.join(\"\"));\n current = [];\n }\n } else {\n current.push(char);\n }\n i += 1;\n }\n\n if (current.length) {\n tokens.push(current.join(\"\"));\n }\n\n return tokens;\n}\n\n/**\n * Represents the supported filter operators\n */\ntype FilterOperators = {\n $eq?: unknown;\n $ne?: unknown;\n $gt?: unknown;\n $gte?: unknown;\n $lt?: unknown;\n $lte?: unknown;\n $in?: unknown[];\n $nin?: unknown[];\n};\n\n/**\n * Type guard to check if an object is a FilterOperators\n */\nfunction isFilterOperators(obj: unknown): obj is FilterOperators {\n return (\n typeof obj === \"object\" &&\n obj !== null &&\n Object.keys(obj).every(\n (key) =>\n key === \"$eq\" ||\n key === \"$ne\" ||\n key === \"$gt\" ||\n key === \"$gte\" ||\n key === \"$lt\" ||\n key === \"$lte\" ||\n key === \"$in\" ||\n key === \"$nin\"\n )\n );\n}\n\n/**\n * Compare values for filtering, supporting operator-based comparisons.\n */\nexport function compareValues(\n itemValue: unknown,\n filterValue: unknown\n): boolean {\n if (isFilterOperators(filterValue)) {\n const operators = Object.keys(filterValue).filter((k) => k.startsWith(\"$\"));\n return operators.every((op) => {\n const value = filterValue[op as keyof FilterOperators];\n switch (op) {\n case \"$eq\":\n return itemValue === value;\n case \"$ne\":\n return itemValue !== value;\n case \"$gt\":\n return Number(itemValue) > Number(value);\n case \"$gte\":\n return Number(itemValue) >= Number(value);\n case \"$lt\":\n return Number(itemValue) < Number(value);\n case \"$lte\":\n return Number(itemValue) <= Number(value);\n case \"$in\":\n return Array.isArray(value) ? value.includes(itemValue) : false;\n case \"$nin\":\n return Array.isArray(value) ? !value.includes(itemValue) : true;\n default:\n return false;\n }\n });\n }\n\n // If no operators, do a direct comparison\n return itemValue === filterValue;\n}\n\n/**\n * Extract text from a value at a specific JSON path.\n *\n * Supports:\n * - Simple paths: \"field1.field2\"\n * - Array indexing: \"[0]\", \"[*]\", \"[-1]\"\n * - Wildcards: \"*\"\n * - Multi-field selection: \"{field1,field2}\"\n * - Nested paths in multi-field: \"{field1,nested.field2}\"\n */\nexport function getTextAtPath(obj: unknown, path: string[] | string): string[] {\n if (!path || path === \"$\") {\n return [JSON.stringify(obj, null, 2)];\n }\n const tokens = Array.isArray(path) ? path : tokenizePath(path);\n\n function extractFromObj(\n obj: unknown,\n tokens: string[],\n pos: number\n ): string[] {\n if (pos >= tokens.length) {\n if (\n typeof obj === \"string\" ||\n typeof obj === \"number\" ||\n typeof obj === \"boolean\"\n ) {\n return [String(obj)];\n }\n if (obj === null || obj === undefined) {\n return [];\n }\n if (Array.isArray(obj) || typeof obj === \"object\") {\n return [JSON.stringify(obj, null, 2)];\n }\n return [];\n }\n\n const token = tokens[pos];\n const results: string[] = [];\n if (pos === 0 && token === \"$\") {\n results.push(JSON.stringify(obj, null, 2));\n }\n\n if (token.startsWith(\"[\") && token.endsWith(\"]\")) {\n if (!Array.isArray(obj)) return [];\n\n const index = token.slice(1, -1);\n if (index === \"*\") {\n for (const item of obj) {\n results.push(...extractFromObj(item, tokens, pos + 1));\n }\n } else {\n try {\n let idx = parseInt(index, 10);\n if (idx < 0) {\n idx = obj.length + idx;\n }\n if (idx >= 0 && idx < obj.length) {\n results.push(...extractFromObj(obj[idx], tokens, pos + 1));\n }\n } catch {\n return [];\n }\n }\n } else if (token.startsWith(\"{\") && token.endsWith(\"}\")) {\n if (typeof obj !== \"object\" || obj === null) return [];\n\n const fields = token\n .slice(1, -1)\n .split(\",\")\n .map((f) => f.trim());\n for (const field of fields) {\n const nestedTokens = tokenizePath(field);\n if (nestedTokens.length) {\n let currentObj = obj as Record<string, unknown> | undefined;\n for (const nestedToken of nestedTokens) {\n if (\n currentObj &&\n typeof currentObj === \"object\" &&\n nestedToken in currentObj\n ) {\n currentObj = currentObj[nestedToken] as Record<string, unknown>;\n } else {\n currentObj = undefined;\n break;\n }\n }\n if (currentObj !== undefined) {\n if (\n typeof currentObj === \"string\" ||\n typeof currentObj === \"number\" ||\n typeof currentObj === \"boolean\"\n ) {\n results.push(String(currentObj));\n } else if (\n Array.isArray(currentObj) ||\n typeof currentObj === \"object\"\n ) {\n results.push(JSON.stringify(currentObj, null, 2));\n }\n }\n }\n }\n } else if (token === \"*\") {\n if (Array.isArray(obj)) {\n for (const item of obj) {\n results.push(...extractFromObj(item, tokens, pos + 1));\n }\n } else if (typeof obj === \"object\" && obj !== null) {\n for (const value of Object.values(obj)) {\n results.push(...extractFromObj(value, tokens, pos + 1));\n }\n }\n } else {\n if (typeof obj === \"object\" && obj !== null && token in obj) {\n results.push(\n ...extractFromObj(\n (obj as Record<string, unknown>)[token],\n tokens,\n pos + 1\n )\n );\n }\n }\n\n return results;\n }\n\n return extractFromObj(obj, tokens, 0);\n}\n\n/**\n * Calculate cosine similarity between two vectors.\n */\nexport function cosineSimilarity(vector1: number[], vector2: number[]): number {\n if (vector1.length !== vector2.length) {\n throw new Error(\"Vectors must have the same length\");\n }\n\n const dotProduct = vector1.reduce((acc, val, i) => acc + val * vector2[i], 0);\n const magnitude1 = Math.sqrt(\n vector1.reduce((acc, val) => acc + val * val, 0)\n );\n const magnitude2 = Math.sqrt(\n vector2.reduce((acc, val) => acc + val * val, 0)\n );\n\n if (magnitude1 === 0 || magnitude2 === 0) return 0;\n return dotProduct / (magnitude1 * magnitude2);\n}\n"],"mappings":"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"}
|
package/dist/types.d.cts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
//#region src/types.d.ts
|
|
2
|
+
type All = "*";
|
|
3
|
+
type PendingWriteValue = unknown;
|
|
4
|
+
type PendingWrite<Channel = string> = [Channel, PendingWriteValue];
|
|
5
|
+
type CheckpointPendingWrite<TaskId = string> = [TaskId, ...PendingWrite<string>];
|
|
6
|
+
/**
|
|
7
|
+
* Additional details about the checkpoint, including the source, step, writes, and parents.
|
|
8
|
+
*
|
|
9
|
+
* @typeParam ExtraProperties - Optional additional properties to include in the metadata.
|
|
10
|
+
*/
|
|
11
|
+
type CheckpointMetadata<ExtraProperties extends object = object> = {
|
|
12
|
+
/**
|
|
13
|
+
* The source of the checkpoint.
|
|
14
|
+
* - "input": The checkpoint was created from an input to invoke/stream/batch.
|
|
15
|
+
* - "loop": The checkpoint was created from inside the pregel loop.
|
|
16
|
+
* - "update": The checkpoint was created from a manual state update.
|
|
17
|
+
* - "fork": The checkpoint was created as a copy of another checkpoint.
|
|
18
|
+
*/
|
|
19
|
+
source: "input" | "loop" | "update" | "fork";
|
|
20
|
+
/**
|
|
21
|
+
* The step number of the checkpoint.
|
|
22
|
+
* -1 for the first "input" checkpoint.
|
|
23
|
+
* 0 for the first "loop" checkpoint.
|
|
24
|
+
* ... for the nth checkpoint afterwards.
|
|
25
|
+
*/
|
|
26
|
+
step: number;
|
|
27
|
+
/**
|
|
28
|
+
* The IDs of the parent checkpoints.
|
|
29
|
+
* Mapping from checkpoint namespace to checkpoint ID.
|
|
30
|
+
*/
|
|
31
|
+
parents: Record<string, string>;
|
|
32
|
+
} & ExtraProperties;
|
|
33
|
+
//#endregion
|
|
34
|
+
export { All, CheckpointMetadata, CheckpointPendingWrite, PendingWrite, PendingWriteValue };
|
|
35
|
+
//# sourceMappingURL=types.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.cts","names":[],"sources":["../src/types.ts"],"mappings":";KAAY,GAAA;AAAA,KAEA,iBAAA;AAAA,KAEA,YAAA,sBAAkC,OAAA,EAAS,iBAAA;AAAA,KAE3C,sBAAA,qBACV,MAAA,KACG,YAAA;;;;;AAJL;KAYY,kBAAA;EAZY;;;;;;;EAoBtB,MAAA;EAlBgC;;;;;;EA0BhC,IAAA;EAxBe;AAQjB;;;EAsBE,OAAA,EAAS,MAAA;AAAA,IACP,eAAA"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,34 +1,35 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
...PendingWrite<string>
|
|
7
|
-
];
|
|
1
|
+
//#region src/types.d.ts
|
|
2
|
+
type All = "*";
|
|
3
|
+
type PendingWriteValue = unknown;
|
|
4
|
+
type PendingWrite<Channel = string> = [Channel, PendingWriteValue];
|
|
5
|
+
type CheckpointPendingWrite<TaskId = string> = [TaskId, ...PendingWrite<string>];
|
|
8
6
|
/**
|
|
9
7
|
* Additional details about the checkpoint, including the source, step, writes, and parents.
|
|
10
8
|
*
|
|
11
9
|
* @typeParam ExtraProperties - Optional additional properties to include in the metadata.
|
|
12
10
|
*/
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
11
|
+
type CheckpointMetadata<ExtraProperties extends object = object> = {
|
|
12
|
+
/**
|
|
13
|
+
* The source of the checkpoint.
|
|
14
|
+
* - "input": The checkpoint was created from an input to invoke/stream/batch.
|
|
15
|
+
* - "loop": The checkpoint was created from inside the pregel loop.
|
|
16
|
+
* - "update": The checkpoint was created from a manual state update.
|
|
17
|
+
* - "fork": The checkpoint was created as a copy of another checkpoint.
|
|
18
|
+
*/
|
|
19
|
+
source: "input" | "loop" | "update" | "fork";
|
|
20
|
+
/**
|
|
21
|
+
* The step number of the checkpoint.
|
|
22
|
+
* -1 for the first "input" checkpoint.
|
|
23
|
+
* 0 for the first "loop" checkpoint.
|
|
24
|
+
* ... for the nth checkpoint afterwards.
|
|
25
|
+
*/
|
|
26
|
+
step: number;
|
|
27
|
+
/**
|
|
28
|
+
* The IDs of the parent checkpoints.
|
|
29
|
+
* Mapping from checkpoint namespace to checkpoint ID.
|
|
30
|
+
*/
|
|
31
|
+
parents: Record<string, string>;
|
|
34
32
|
} & ExtraProperties;
|
|
33
|
+
//#endregion
|
|
34
|
+
export { All, CheckpointMetadata, CheckpointPendingWrite, PendingWrite, PendingWriteValue };
|
|
35
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","names":[],"sources":["../src/types.ts"],"mappings":";KAAY,GAAA;AAAA,KAEA,iBAAA;AAAA,KAEA,YAAA,sBAAkC,OAAA,EAAS,iBAAA;AAAA,KAE3C,sBAAA,qBACV,MAAA,KACG,YAAA;;;;;AAJL;KAYY,kBAAA;EAZY;;;;;;;EAoBtB,MAAA;EAlBgC;;;;;;EA0BhC,IAAA;EAxBe;AAQjB;;;EAsBE,OAAA,EAAS,MAAA;AAAA,IACP,eAAA"}
|