@langchain/langgraph-checkpoint 1.0.0 → 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 +4 -5
- package/dist/base.cjs.map +1 -1
- package/dist/base.d.cts +0 -1
- package/dist/base.d.cts.map +1 -1
- package/dist/base.d.ts +0 -1
- package/dist/base.d.ts.map +1 -1
- package/dist/base.js +1 -2
- package/dist/base.js.map +1 -1
- package/dist/cache/base.cjs +2 -3
- package/dist/cache/base.cjs.map +1 -1
- package/dist/cache/base.d.cts.map +1 -1
- package/dist/cache/base.d.ts.map +1 -1
- package/dist/cache/base.js +1 -2
- package/dist/cache/base.js.map +1 -1
- package/dist/cache/index.cjs +2 -2
- package/dist/cache/index.js +3 -4
- package/dist/cache/memory.cjs +7 -10
- package/dist/cache/memory.cjs.map +1 -1
- package/dist/cache/memory.d.cts.map +1 -1
- package/dist/cache/memory.d.ts.map +1 -1
- package/dist/cache/memory.js +6 -9
- package/dist/cache/memory.js.map +1 -1
- package/dist/id.cjs +2 -4
- package/dist/id.cjs.map +1 -1
- package/dist/id.d.cts +0 -4
- package/dist/id.d.cts.map +1 -1
- package/dist/id.d.ts +0 -4
- package/dist/id.d.ts.map +1 -1
- package/dist/id.js +1 -2
- package/dist/id.js.map +1 -1
- package/dist/index.cjs +12 -12
- package/dist/index.js +1 -2
- package/dist/memory.cjs +5 -8
- package/dist/memory.cjs.map +1 -1
- package/dist/memory.d.cts +0 -1
- package/dist/memory.d.cts.map +1 -1
- package/dist/memory.d.ts +0 -1
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +3 -6
- package/dist/memory.js.map +1 -1
- package/dist/serde/base.d.cts +0 -2
- package/dist/serde/base.d.cts.map +1 -1
- package/dist/serde/base.d.ts +0 -2
- package/dist/serde/base.d.ts.map +1 -1
- package/dist/serde/jsonplus.cjs +13 -15
- package/dist/serde/jsonplus.cjs.map +1 -1
- package/dist/serde/jsonplus.js +10 -11
- package/dist/serde/jsonplus.js.map +1 -1
- package/dist/serde/types.cjs +1 -2
- package/dist/serde/types.cjs.map +1 -1
- package/dist/serde/types.d.cts +0 -3
- package/dist/serde/types.d.cts.map +1 -1
- package/dist/serde/types.d.ts +0 -3
- package/dist/serde/types.d.ts.map +1 -1
- package/dist/serde/types.js +1 -1
- package/dist/serde/utils/fast-safe-stringify/index.cjs +1 -2
- package/dist/serde/utils/fast-safe-stringify/index.cjs.map +1 -1
- package/dist/serde/utils/fast-safe-stringify/index.js +1 -1
- package/dist/serde/utils/fast-safe-stringify/index.js.map +1 -1
- package/dist/store/base.cjs +1 -2
- package/dist/store/base.cjs.map +1 -1
- package/dist/store/base.d.cts +0 -1
- package/dist/store/base.d.cts.map +1 -1
- package/dist/store/base.d.ts +0 -1
- package/dist/store/base.d.ts.map +1 -1
- package/dist/store/base.js +1 -1
- package/dist/store/base.js.map +1 -1
- package/dist/store/batch.cjs +3 -5
- package/dist/store/batch.cjs.map +1 -1
- package/dist/store/batch.d.cts +0 -3
- package/dist/store/batch.d.cts.map +1 -1
- package/dist/store/batch.d.ts +0 -3
- package/dist/store/batch.d.ts.map +1 -1
- package/dist/store/batch.js +2 -4
- package/dist/store/batch.js.map +1 -1
- package/dist/store/memory.cjs +8 -14
- package/dist/store/memory.cjs.map +1 -1
- package/dist/store/memory.d.cts +0 -2
- package/dist/store/memory.d.cts.map +1 -1
- package/dist/store/memory.d.ts +0 -2
- package/dist/store/memory.d.ts.map +1 -1
- package/dist/store/memory.js +6 -12
- package/dist/store/memory.js.map +1 -1
- package/dist/store/utils.cjs +31 -35
- package/dist/store/utils.cjs.map +1 -1
- package/dist/store/utils.js +31 -34
- package/dist/store/utils.js.map +1 -1
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +20 -19
- package/CHANGELOG.md +0 -25
- package/dist/_virtual/rolldown_runtime.cjs +0 -25
package/dist/store/utils.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.cjs","names":["tokens: string[]","current: string[]","tokens","obj","results: string[]"],"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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"}
|
|
1
|
+
{"version":3,"file":"utils.cjs","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/store/utils.js
CHANGED
|
@@ -65,23 +65,20 @@ function isFilterOperators(obj) {
|
|
|
65
65
|
* Compare values for filtering, supporting operator-based comparisons.
|
|
66
66
|
*/
|
|
67
67
|
function compareValues(itemValue, filterValue) {
|
|
68
|
-
if (isFilterOperators(filterValue)) {
|
|
69
|
-
const
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
}
|
|
83
|
-
});
|
|
84
|
-
}
|
|
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
|
+
});
|
|
85
82
|
return itemValue === filterValue;
|
|
86
83
|
}
|
|
87
84
|
/**
|
|
@@ -97,34 +94,34 @@ function compareValues(itemValue, filterValue) {
|
|
|
97
94
|
function getTextAtPath(obj, path) {
|
|
98
95
|
if (!path || path === "$") return [JSON.stringify(obj, null, 2)];
|
|
99
96
|
const tokens = Array.isArray(path) ? path : tokenizePath(path);
|
|
100
|
-
function extractFromObj(obj
|
|
101
|
-
if (pos >= tokens
|
|
102
|
-
if (typeof obj
|
|
103
|
-
if (obj
|
|
104
|
-
if (Array.isArray(obj
|
|
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)];
|
|
105
102
|
return [];
|
|
106
103
|
}
|
|
107
|
-
const token = tokens
|
|
104
|
+
const token = tokens[pos];
|
|
108
105
|
const results = [];
|
|
109
|
-
if (pos === 0 && token === "$") results.push(JSON.stringify(obj
|
|
106
|
+
if (pos === 0 && token === "$") results.push(JSON.stringify(obj, null, 2));
|
|
110
107
|
if (token.startsWith("[") && token.endsWith("]")) {
|
|
111
|
-
if (!Array.isArray(obj
|
|
108
|
+
if (!Array.isArray(obj)) return [];
|
|
112
109
|
const index = token.slice(1, -1);
|
|
113
|
-
if (index === "*") for (const item of obj
|
|
110
|
+
if (index === "*") for (const item of obj) results.push(...extractFromObj(item, tokens, pos + 1));
|
|
114
111
|
else try {
|
|
115
112
|
let idx = parseInt(index, 10);
|
|
116
|
-
if (idx < 0) idx = obj
|
|
117
|
-
if (idx >= 0 && idx < obj
|
|
113
|
+
if (idx < 0) idx = obj.length + idx;
|
|
114
|
+
if (idx >= 0 && idx < obj.length) results.push(...extractFromObj(obj[idx], tokens, pos + 1));
|
|
118
115
|
} catch {
|
|
119
116
|
return [];
|
|
120
117
|
}
|
|
121
118
|
} else if (token.startsWith("{") && token.endsWith("}")) {
|
|
122
|
-
if (typeof obj
|
|
119
|
+
if (typeof obj !== "object" || obj === null) return [];
|
|
123
120
|
const fields = token.slice(1, -1).split(",").map((f) => f.trim());
|
|
124
121
|
for (const field of fields) {
|
|
125
122
|
const nestedTokens = tokenizePath(field);
|
|
126
123
|
if (nestedTokens.length) {
|
|
127
|
-
let currentObj = obj
|
|
124
|
+
let currentObj = obj;
|
|
128
125
|
for (const nestedToken of nestedTokens) if (currentObj && typeof currentObj === "object" && nestedToken in currentObj) currentObj = currentObj[nestedToken];
|
|
129
126
|
else {
|
|
130
127
|
currentObj = void 0;
|
|
@@ -137,14 +134,14 @@ function getTextAtPath(obj, path) {
|
|
|
137
134
|
}
|
|
138
135
|
}
|
|
139
136
|
} else if (token === "*") {
|
|
140
|
-
if (Array.isArray(obj
|
|
141
|
-
else if (typeof obj
|
|
142
|
-
} else if (typeof obj
|
|
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));
|
|
143
140
|
return results;
|
|
144
141
|
}
|
|
145
142
|
return extractFromObj(obj, tokens, 0);
|
|
146
143
|
}
|
|
147
|
-
|
|
148
144
|
//#endregion
|
|
149
145
|
export { compareValues, getTextAtPath, tokenizePath };
|
|
146
|
+
|
|
150
147
|
//# sourceMappingURL=utils.js.map
|
package/dist/store/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","names":["tokens: string[]","current: string[]","tokens","obj","results: string[]"],"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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"}
|
|
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.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.cts","names":[
|
|
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.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","names":[
|
|
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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@langchain/langgraph-checkpoint",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"description": "Library with base interfaces for LangGraph checkpoint savers.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"engines": {
|
|
@@ -10,22 +10,8 @@
|
|
|
10
10
|
"types": "./dist/index.d.ts",
|
|
11
11
|
"repository": {
|
|
12
12
|
"type": "git",
|
|
13
|
-
"url": "git@github.com
|
|
14
|
-
|
|
15
|
-
"scripts": {
|
|
16
|
-
"build": "yarn turbo:command build:internal --filter=@langchain/langgraph-checkpoint",
|
|
17
|
-
"build:internal": "yarn workspace @langchain/build compile @langchain/langgraph-checkpoint",
|
|
18
|
-
"clean": "rm -rf dist/ dist-cjs/ .turbo/",
|
|
19
|
-
"lint:eslint": "NODE_OPTIONS=--max-old-space-size=4096 eslint --cache --ext .ts,.js src/",
|
|
20
|
-
"lint:dpdm": "dpdm --exit-code circular:1 --no-warning --no-tree src/*.ts src/**/*.ts",
|
|
21
|
-
"lint": "yarn lint:eslint && yarn lint:dpdm",
|
|
22
|
-
"lint:fix": "yarn lint:eslint --fix && yarn lint:dpdm",
|
|
23
|
-
"prepublish": "yarn build",
|
|
24
|
-
"test": "vitest run",
|
|
25
|
-
"test:watch": "vitest watch",
|
|
26
|
-
"test:int": "vitest run --mode int",
|
|
27
|
-
"format": "prettier --config .prettierrc --write \"src\"",
|
|
28
|
-
"format:check": "prettier --config .prettierrc --check \"src\""
|
|
13
|
+
"url": "git+ssh://git@github.com/langchain-ai/langgraphjs.git",
|
|
14
|
+
"directory": "libs/checkpoint"
|
|
29
15
|
},
|
|
30
16
|
"author": "LangChain",
|
|
31
17
|
"license": "MIT",
|
|
@@ -53,7 +39,7 @@
|
|
|
53
39
|
"rollup": "^4.37.0",
|
|
54
40
|
"tsx": "^4.19.3",
|
|
55
41
|
"typescript": "^4.9.5 || ^5.4.5",
|
|
56
|
-
"vitest": "^3.
|
|
42
|
+
"vitest": "^3.2.4"
|
|
57
43
|
},
|
|
58
44
|
"publishConfig": {
|
|
59
45
|
"access": "public",
|
|
@@ -76,5 +62,20 @@
|
|
|
76
62
|
},
|
|
77
63
|
"files": [
|
|
78
64
|
"dist/"
|
|
79
|
-
]
|
|
65
|
+
],
|
|
66
|
+
"scripts": {
|
|
67
|
+
"build": "pnpm turbo build:internal --filter=@langchain/langgraph-checkpoint",
|
|
68
|
+
"build:internal": "pnpm --filter @langchain/build compile @langchain/langgraph-checkpoint",
|
|
69
|
+
"clean": "rm -rf dist/ dist-cjs/ .turbo/",
|
|
70
|
+
"lint:eslint": "NODE_OPTIONS=--max-old-space-size=4096 eslint --cache --ext .ts,.js src/",
|
|
71
|
+
"lint:dpdm": "dpdm --exit-code circular:1 --no-warning --no-tree src/*.ts src/**/*.ts",
|
|
72
|
+
"lint": "pnpm lint:eslint && pnpm lint:dpdm",
|
|
73
|
+
"lint:fix": "pnpm lint:eslint --fix && pnpm lint:dpdm",
|
|
74
|
+
"prepublish": "pnpm build",
|
|
75
|
+
"test": "vitest run",
|
|
76
|
+
"test:watch": "vitest watch",
|
|
77
|
+
"test:int": "vitest run --mode int",
|
|
78
|
+
"format": "prettier --config .prettierrc --write \"src\"",
|
|
79
|
+
"format:check": "prettier --config .prettierrc --check \"src\""
|
|
80
|
+
}
|
|
80
81
|
}
|
package/CHANGELOG.md
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
# @langchain/langgraph-checkpoint
|
|
2
|
-
|
|
3
|
-
## 1.0.0
|
|
4
|
-
|
|
5
|
-
### Major Changes
|
|
6
|
-
|
|
7
|
-
- 1e1ecbb: This release updates the package for compatibility with LangGraph v1.0. See the [v1.0 release notes](https://docs.langchain.com/oss/javascript/releases/langgraph-v1) for details on what's new.
|
|
8
|
-
|
|
9
|
-
## 0.1.1
|
|
10
|
-
|
|
11
|
-
### Patch Changes
|
|
12
|
-
|
|
13
|
-
- 11c7807: Add support for @langchain/core 1.0.0-alpha
|
|
14
|
-
|
|
15
|
-
## 0.1.0
|
|
16
|
-
|
|
17
|
-
### Minor Changes
|
|
18
|
-
|
|
19
|
-
- 10f292a: Remove pending_sends from parent checkpoints in favour of TASKS channel
|
|
20
|
-
- 3fd7f73: Allow asynchronous serialization and deserialization
|
|
21
|
-
- 773ec0d: Remove Checkpoint.writes
|
|
22
|
-
|
|
23
|
-
### Patch Changes
|
|
24
|
-
|
|
25
|
-
- ccbcbc1: Add delete thread method to checkpointers
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
//#region rolldown:runtime
|
|
2
|
-
var __create = Object.create;
|
|
3
|
-
var __defProp = Object.defineProperty;
|
|
4
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
-
var __copyProps = (to, from, except, desc) => {
|
|
9
|
-
if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
|
|
10
|
-
key = keys[i];
|
|
11
|
-
if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
12
|
-
get: ((k) => from[k]).bind(null, key),
|
|
13
|
-
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
|
|
19
|
-
value: mod,
|
|
20
|
-
enumerable: true
|
|
21
|
-
}) : target, mod));
|
|
22
|
-
|
|
23
|
-
//#endregion
|
|
24
|
-
|
|
25
|
-
exports.__toESM = __toESM;
|