@langchain/langgraph 0.2.61 → 0.2.63

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/README.md +14 -0
  2. package/dist/constants.cjs +2 -1
  3. package/dist/constants.d.ts +1 -0
  4. package/dist/constants.js +1 -0
  5. package/dist/constants.js.map +1 -1
  6. package/dist/prebuilt/react_agent_executor.cjs +34 -13
  7. package/dist/prebuilt/react_agent_executor.d.ts +3 -0
  8. package/dist/prebuilt/react_agent_executor.js +34 -15
  9. package/dist/prebuilt/react_agent_executor.js.map +1 -1
  10. package/dist/prebuilt/tool_node.cjs +26 -4
  11. package/dist/prebuilt/tool_node.js +27 -5
  12. package/dist/prebuilt/tool_node.js.map +1 -1
  13. package/dist/pregel/debug.cjs +9 -7
  14. package/dist/pregel/debug.d.ts +10 -0
  15. package/dist/pregel/debug.js +2 -2
  16. package/dist/pregel/debug.js.map +1 -1
  17. package/dist/pregel/debug.test.cjs +189 -0
  18. package/dist/pregel/debug.test.d.ts +1 -0
  19. package/dist/pregel/debug.test.js +187 -0
  20. package/dist/pregel/debug.test.js.map +1 -0
  21. package/dist/pregel/index.cjs +12 -4
  22. package/dist/pregel/index.d.ts +3 -0
  23. package/dist/pregel/index.js +14 -6
  24. package/dist/pregel/index.js.map +1 -1
  25. package/dist/pregel/io.mapCommand.test.cjs +151 -0
  26. package/dist/pregel/io.mapCommand.test.d.ts +1 -0
  27. package/dist/pregel/io.mapCommand.test.js +149 -0
  28. package/dist/pregel/io.mapCommand.test.js.map +1 -0
  29. package/dist/pregel/messages.test.cjs +351 -0
  30. package/dist/pregel/messages.test.d.ts +1 -0
  31. package/dist/pregel/messages.test.js +349 -0
  32. package/dist/pregel/messages.test.js.map +1 -0
  33. package/dist/pregel/read.cjs +1 -1
  34. package/dist/pregel/read.js +1 -1
  35. package/dist/pregel/read.js.map +1 -1
  36. package/dist/pregel/read.test.cjs +194 -0
  37. package/dist/pregel/read.test.d.ts +1 -0
  38. package/dist/pregel/read.test.js +192 -0
  39. package/dist/pregel/read.test.js.map +1 -0
  40. package/dist/pregel/retry.cjs +5 -0
  41. package/dist/pregel/retry.d.ts +2 -0
  42. package/dist/pregel/retry.js +5 -0
  43. package/dist/pregel/retry.js.map +1 -1
  44. package/dist/pregel/runner.cjs +95 -27
  45. package/dist/pregel/runner.d.ts +14 -0
  46. package/dist/pregel/runner.js +97 -29
  47. package/dist/pregel/runner.js.map +1 -1
  48. package/dist/pregel/runner.test.cjs +66 -0
  49. package/dist/pregel/runner.test.d.ts +1 -0
  50. package/dist/pregel/runner.test.js +64 -0
  51. package/dist/pregel/runner.test.js.map +1 -0
  52. package/dist/pregel/stream.cjs +62 -1
  53. package/dist/pregel/stream.d.ts +23 -0
  54. package/dist/pregel/stream.js +60 -0
  55. package/dist/pregel/stream.js.map +1 -1
  56. package/dist/pregel/types.d.ts +19 -0
  57. package/dist/pregel/types.js.map +1 -1
  58. package/dist/pregel/utils/config.test.cjs +214 -0
  59. package/dist/pregel/utils/config.test.d.ts +1 -0
  60. package/dist/pregel/utils/config.test.js +212 -0
  61. package/dist/pregel/utils/config.test.js.map +1 -0
  62. package/dist/pregel/utils/index.cjs +26 -1
  63. package/dist/pregel/utils/index.d.ts +6 -0
  64. package/dist/pregel/utils/index.js +24 -0
  65. package/dist/pregel/utils/index.js.map +1 -1
  66. package/dist/pregel/utils/subgraph.test.cjs +83 -0
  67. package/dist/pregel/utils/subgraph.test.d.ts +1 -0
  68. package/dist/pregel/utils/subgraph.test.js +81 -0
  69. package/dist/pregel/utils/subgraph.test.js.map +1 -0
  70. package/dist/pregel/validate.test.cjs +220 -0
  71. package/dist/pregel/validate.test.d.ts +1 -0
  72. package/dist/pregel/validate.test.js +218 -0
  73. package/dist/pregel/validate.test.js.map +1 -0
  74. package/dist/pregel/write.test.cjs +181 -0
  75. package/dist/pregel/write.test.d.ts +1 -0
  76. package/dist/pregel/write.test.js +179 -0
  77. package/dist/pregel/write.test.js.map +1 -0
  78. package/package.json +1 -1
@@ -0,0 +1,214 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const globals_1 = require("@jest/globals");
4
+ const singletons_1 = require("@langchain/core/singletons");
5
+ const config_js_1 = require("./config.cjs");
6
+ const constants_js_1 = require("../../constants.cjs");
7
+ describe("ensureLangGraphConfig", () => {
8
+ // Save original to restore after tests
9
+ const originalGetRunnableConfig = singletons_1.AsyncLocalStorageProviderSingleton.getRunnableConfig;
10
+ beforeEach(() => {
11
+ // Reset the mock before each test
12
+ singletons_1.AsyncLocalStorageProviderSingleton.getRunnableConfig = globals_1.jest.fn();
13
+ });
14
+ afterAll(() => {
15
+ // Restore the original after all tests
16
+ singletons_1.AsyncLocalStorageProviderSingleton.getRunnableConfig =
17
+ originalGetRunnableConfig;
18
+ });
19
+ it("should return a default config when no arguments provided", () => {
20
+ // Mock the AsyncLocalStorage to return undefined
21
+ singletons_1.AsyncLocalStorageProviderSingleton.getRunnableConfig = globals_1.jest
22
+ .fn()
23
+ .mockReturnValue(undefined);
24
+ const result = (0, config_js_1.ensureLangGraphConfig)();
25
+ expect(result).toEqual({
26
+ tags: [],
27
+ metadata: {},
28
+ callbacks: undefined,
29
+ recursionLimit: 25,
30
+ configurable: {},
31
+ });
32
+ });
33
+ it("should merge multiple configs, with later configs taking precedence", () => {
34
+ // Mock the AsyncLocalStorage to return undefined
35
+ singletons_1.AsyncLocalStorageProviderSingleton.getRunnableConfig = globals_1.jest
36
+ .fn()
37
+ .mockReturnValue(undefined);
38
+ const config1 = {
39
+ tags: ["tag1"],
40
+ metadata: { key1: "value1" },
41
+ configurable: { option1: "value1" },
42
+ };
43
+ const config2 = {
44
+ tags: ["tag2"],
45
+ metadata: { key2: "value2" },
46
+ configurable: { option2: "value2" },
47
+ };
48
+ const result = (0, config_js_1.ensureLangGraphConfig)(config1, config2);
49
+ // The implementation completely replaces objects rather than merging them
50
+ expect(result).toEqual({
51
+ tags: ["tag2"],
52
+ metadata: { key2: "value2", option2: "value2" },
53
+ callbacks: undefined,
54
+ recursionLimit: 25,
55
+ configurable: { option2: "value2" },
56
+ });
57
+ });
58
+ it("should copy values from AsyncLocalStorage if available", () => {
59
+ // Mock values from AsyncLocalStorage
60
+ const asyncLocalStorageConfig = {
61
+ tags: ["storage-tag"],
62
+ metadata: { storage: "value" },
63
+ callbacks: { copy: () => ({ type: "copied-callback" }) },
64
+ configurable: { storageOption: "value" },
65
+ };
66
+ singletons_1.AsyncLocalStorageProviderSingleton.getRunnableConfig = globals_1.jest
67
+ .fn()
68
+ .mockReturnValue(asyncLocalStorageConfig);
69
+ const result = (0, config_js_1.ensureLangGraphConfig)();
70
+ expect(result.tags).toEqual(["storage-tag"]);
71
+ expect(result.metadata || {}).toEqual({
72
+ storage: "value",
73
+ storageOption: "value",
74
+ });
75
+ expect(result.configurable).toEqual({ storageOption: "value" });
76
+ expect(result.callbacks).toEqual({ type: "copied-callback" });
77
+ });
78
+ it("should handle undefined config values", () => {
79
+ singletons_1.AsyncLocalStorageProviderSingleton.getRunnableConfig = globals_1.jest
80
+ .fn()
81
+ .mockReturnValue(undefined);
82
+ const config1 = undefined;
83
+ const config2 = {
84
+ tags: ["tag2"],
85
+ metadata: undefined,
86
+ };
87
+ const result = (0, config_js_1.ensureLangGraphConfig)(config1, config2);
88
+ expect(result.tags).toEqual(["tag2"]);
89
+ expect(result.metadata).toEqual({});
90
+ });
91
+ it("should copy scalar values to metadata from configurable", () => {
92
+ singletons_1.AsyncLocalStorageProviderSingleton.getRunnableConfig = globals_1.jest
93
+ .fn()
94
+ .mockReturnValue(undefined);
95
+ const config = {
96
+ configurable: {
97
+ stringValue: "string",
98
+ numberValue: 42,
99
+ booleanValue: true,
100
+ objectValue: { should: "not be copied" },
101
+ __privateValue: "should not be copied",
102
+ },
103
+ };
104
+ const result = (0, config_js_1.ensureLangGraphConfig)(config);
105
+ expect(result.metadata).toEqual({
106
+ stringValue: "string",
107
+ numberValue: 42,
108
+ booleanValue: true,
109
+ // objectValue and __privateValue should not be copied
110
+ });
111
+ });
112
+ it("should not overwrite existing metadata values with configurable values", () => {
113
+ singletons_1.AsyncLocalStorageProviderSingleton.getRunnableConfig = globals_1.jest
114
+ .fn()
115
+ .mockReturnValue(undefined);
116
+ const config = {
117
+ metadata: { key: "original value" },
118
+ configurable: {
119
+ key: "should not overwrite",
120
+ },
121
+ };
122
+ const result = (0, config_js_1.ensureLangGraphConfig)(config);
123
+ expect(result.metadata?.key).toEqual("original value");
124
+ });
125
+ });
126
+ describe("getStore, getWriter, getConfig", () => {
127
+ // Save original to restore after tests
128
+ const originalGetRunnableConfig = singletons_1.AsyncLocalStorageProviderSingleton.getRunnableConfig;
129
+ beforeEach(() => {
130
+ // Reset the mock before each test
131
+ singletons_1.AsyncLocalStorageProviderSingleton.getRunnableConfig = globals_1.jest.fn();
132
+ });
133
+ afterAll(() => {
134
+ // Restore the original after all tests
135
+ singletons_1.AsyncLocalStorageProviderSingleton.getRunnableConfig =
136
+ originalGetRunnableConfig;
137
+ });
138
+ it("getStore should return store from config", () => {
139
+ const mockStore = {};
140
+ singletons_1.AsyncLocalStorageProviderSingleton.getRunnableConfig = globals_1.jest
141
+ .fn()
142
+ .mockReturnValue({
143
+ store: mockStore,
144
+ });
145
+ const result = (0, config_js_1.getStore)();
146
+ expect(result).toBe(mockStore);
147
+ });
148
+ it("getWriter should return writer from configurable", () => {
149
+ const mockWriter = () => { };
150
+ singletons_1.AsyncLocalStorageProviderSingleton.getRunnableConfig = globals_1.jest
151
+ .fn()
152
+ .mockReturnValue({
153
+ configurable: {
154
+ writer: mockWriter,
155
+ },
156
+ });
157
+ const result = (0, config_js_1.getWriter)();
158
+ expect(result).toBe(mockWriter);
159
+ });
160
+ it("getConfig should return the full config", () => {
161
+ const mockConfig = { key: "value" };
162
+ singletons_1.AsyncLocalStorageProviderSingleton.getRunnableConfig = globals_1.jest
163
+ .fn()
164
+ .mockReturnValue(mockConfig);
165
+ const result = (0, config_js_1.getConfig)();
166
+ expect(result).toBe(mockConfig);
167
+ });
168
+ });
169
+ describe("recastCheckpointNamespace", () => {
170
+ it("should filter out numeric parts of the namespace", () => {
171
+ const namespace = `parent${constants_js_1.CHECKPOINT_NAMESPACE_SEPARATOR}123${constants_js_1.CHECKPOINT_NAMESPACE_SEPARATOR}child`;
172
+ const result = (0, config_js_1.recastCheckpointNamespace)(namespace);
173
+ expect(result).toBe(`parent${constants_js_1.CHECKPOINT_NAMESPACE_SEPARATOR}child`);
174
+ });
175
+ it("should remove parts after CHECKPOINT_NAMESPACE_END", () => {
176
+ const namespace = `part1${constants_js_1.CHECKPOINT_NAMESPACE_SEPARATOR}part2${constants_js_1.CHECKPOINT_NAMESPACE_END}extra`;
177
+ const result = (0, config_js_1.recastCheckpointNamespace)(namespace);
178
+ expect(result).toBe(`part1${constants_js_1.CHECKPOINT_NAMESPACE_SEPARATOR}part2`);
179
+ });
180
+ it("should handle complex namespace with numeric parts and CHECKPOINT_NAMESPACE_END", () => {
181
+ const namespace = `root${constants_js_1.CHECKPOINT_NAMESPACE_SEPARATOR}123${constants_js_1.CHECKPOINT_NAMESPACE_SEPARATOR}child${constants_js_1.CHECKPOINT_NAMESPACE_END}extra${constants_js_1.CHECKPOINT_NAMESPACE_SEPARATOR}456`;
182
+ const result = (0, config_js_1.recastCheckpointNamespace)(namespace);
183
+ expect(result).toBe(`root${constants_js_1.CHECKPOINT_NAMESPACE_SEPARATOR}child`);
184
+ });
185
+ it("should return the original namespace when no filtering needed", () => {
186
+ const namespace = `part1${constants_js_1.CHECKPOINT_NAMESPACE_SEPARATOR}part2`;
187
+ const result = (0, config_js_1.recastCheckpointNamespace)(namespace);
188
+ expect(result).toBe(namespace);
189
+ });
190
+ });
191
+ describe("getParentCheckpointNamespace", () => {
192
+ it("should return the parent namespace by removing the last part", () => {
193
+ const namespace = `parent${constants_js_1.CHECKPOINT_NAMESPACE_SEPARATOR}child`;
194
+ const result = (0, config_js_1.getParentCheckpointNamespace)(namespace);
195
+ expect(result).toBe("parent");
196
+ });
197
+ it("should skip trailing numeric parts", () => {
198
+ const namespace = `parent${constants_js_1.CHECKPOINT_NAMESPACE_SEPARATOR}child${constants_js_1.CHECKPOINT_NAMESPACE_SEPARATOR}123${constants_js_1.CHECKPOINT_NAMESPACE_SEPARATOR}456`;
199
+ const result = (0, config_js_1.getParentCheckpointNamespace)(namespace);
200
+ expect(result).toBe("parent");
201
+ });
202
+ it("should return empty string for top-level namespace", () => {
203
+ const namespace = "singlePart";
204
+ const result = (0, config_js_1.getParentCheckpointNamespace)(namespace);
205
+ expect(result).toBe("");
206
+ });
207
+ it("should handle namespace with mixed numeric and non-numeric parts", () => {
208
+ const namespace = `root${constants_js_1.CHECKPOINT_NAMESPACE_SEPARATOR}sub1${constants_js_1.CHECKPOINT_NAMESPACE_SEPARATOR}123${constants_js_1.CHECKPOINT_NAMESPACE_SEPARATOR}sub2`;
209
+ const result = (0, config_js_1.getParentCheckpointNamespace)(namespace);
210
+ // The implementation stops at the first numeric part, not at the last non-numeric part
211
+ expect(result).toBe(`root${constants_js_1.CHECKPOINT_NAMESPACE_SEPARATOR}sub1${constants_js_1.CHECKPOINT_NAMESPACE_SEPARATOR}123`);
212
+ });
213
+ });
214
+ //# sourceMappingURL=config.test.js.map
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,212 @@
1
+ import { jest } from "@jest/globals";
2
+ import { AsyncLocalStorageProviderSingleton } from "@langchain/core/singletons";
3
+ import { ensureLangGraphConfig, getStore, getWriter, getConfig, recastCheckpointNamespace, getParentCheckpointNamespace, } from "./config.js";
4
+ import { CHECKPOINT_NAMESPACE_SEPARATOR, CHECKPOINT_NAMESPACE_END, } from "../../constants.js";
5
+ describe("ensureLangGraphConfig", () => {
6
+ // Save original to restore after tests
7
+ const originalGetRunnableConfig = AsyncLocalStorageProviderSingleton.getRunnableConfig;
8
+ beforeEach(() => {
9
+ // Reset the mock before each test
10
+ AsyncLocalStorageProviderSingleton.getRunnableConfig = jest.fn();
11
+ });
12
+ afterAll(() => {
13
+ // Restore the original after all tests
14
+ AsyncLocalStorageProviderSingleton.getRunnableConfig =
15
+ originalGetRunnableConfig;
16
+ });
17
+ it("should return a default config when no arguments provided", () => {
18
+ // Mock the AsyncLocalStorage to return undefined
19
+ AsyncLocalStorageProviderSingleton.getRunnableConfig = jest
20
+ .fn()
21
+ .mockReturnValue(undefined);
22
+ const result = ensureLangGraphConfig();
23
+ expect(result).toEqual({
24
+ tags: [],
25
+ metadata: {},
26
+ callbacks: undefined,
27
+ recursionLimit: 25,
28
+ configurable: {},
29
+ });
30
+ });
31
+ it("should merge multiple configs, with later configs taking precedence", () => {
32
+ // Mock the AsyncLocalStorage to return undefined
33
+ AsyncLocalStorageProviderSingleton.getRunnableConfig = jest
34
+ .fn()
35
+ .mockReturnValue(undefined);
36
+ const config1 = {
37
+ tags: ["tag1"],
38
+ metadata: { key1: "value1" },
39
+ configurable: { option1: "value1" },
40
+ };
41
+ const config2 = {
42
+ tags: ["tag2"],
43
+ metadata: { key2: "value2" },
44
+ configurable: { option2: "value2" },
45
+ };
46
+ const result = ensureLangGraphConfig(config1, config2);
47
+ // The implementation completely replaces objects rather than merging them
48
+ expect(result).toEqual({
49
+ tags: ["tag2"],
50
+ metadata: { key2: "value2", option2: "value2" },
51
+ callbacks: undefined,
52
+ recursionLimit: 25,
53
+ configurable: { option2: "value2" },
54
+ });
55
+ });
56
+ it("should copy values from AsyncLocalStorage if available", () => {
57
+ // Mock values from AsyncLocalStorage
58
+ const asyncLocalStorageConfig = {
59
+ tags: ["storage-tag"],
60
+ metadata: { storage: "value" },
61
+ callbacks: { copy: () => ({ type: "copied-callback" }) },
62
+ configurable: { storageOption: "value" },
63
+ };
64
+ AsyncLocalStorageProviderSingleton.getRunnableConfig = jest
65
+ .fn()
66
+ .mockReturnValue(asyncLocalStorageConfig);
67
+ const result = ensureLangGraphConfig();
68
+ expect(result.tags).toEqual(["storage-tag"]);
69
+ expect(result.metadata || {}).toEqual({
70
+ storage: "value",
71
+ storageOption: "value",
72
+ });
73
+ expect(result.configurable).toEqual({ storageOption: "value" });
74
+ expect(result.callbacks).toEqual({ type: "copied-callback" });
75
+ });
76
+ it("should handle undefined config values", () => {
77
+ AsyncLocalStorageProviderSingleton.getRunnableConfig = jest
78
+ .fn()
79
+ .mockReturnValue(undefined);
80
+ const config1 = undefined;
81
+ const config2 = {
82
+ tags: ["tag2"],
83
+ metadata: undefined,
84
+ };
85
+ const result = ensureLangGraphConfig(config1, config2);
86
+ expect(result.tags).toEqual(["tag2"]);
87
+ expect(result.metadata).toEqual({});
88
+ });
89
+ it("should copy scalar values to metadata from configurable", () => {
90
+ AsyncLocalStorageProviderSingleton.getRunnableConfig = jest
91
+ .fn()
92
+ .mockReturnValue(undefined);
93
+ const config = {
94
+ configurable: {
95
+ stringValue: "string",
96
+ numberValue: 42,
97
+ booleanValue: true,
98
+ objectValue: { should: "not be copied" },
99
+ __privateValue: "should not be copied",
100
+ },
101
+ };
102
+ const result = ensureLangGraphConfig(config);
103
+ expect(result.metadata).toEqual({
104
+ stringValue: "string",
105
+ numberValue: 42,
106
+ booleanValue: true,
107
+ // objectValue and __privateValue should not be copied
108
+ });
109
+ });
110
+ it("should not overwrite existing metadata values with configurable values", () => {
111
+ AsyncLocalStorageProviderSingleton.getRunnableConfig = jest
112
+ .fn()
113
+ .mockReturnValue(undefined);
114
+ const config = {
115
+ metadata: { key: "original value" },
116
+ configurable: {
117
+ key: "should not overwrite",
118
+ },
119
+ };
120
+ const result = ensureLangGraphConfig(config);
121
+ expect(result.metadata?.key).toEqual("original value");
122
+ });
123
+ });
124
+ describe("getStore, getWriter, getConfig", () => {
125
+ // Save original to restore after tests
126
+ const originalGetRunnableConfig = AsyncLocalStorageProviderSingleton.getRunnableConfig;
127
+ beforeEach(() => {
128
+ // Reset the mock before each test
129
+ AsyncLocalStorageProviderSingleton.getRunnableConfig = jest.fn();
130
+ });
131
+ afterAll(() => {
132
+ // Restore the original after all tests
133
+ AsyncLocalStorageProviderSingleton.getRunnableConfig =
134
+ originalGetRunnableConfig;
135
+ });
136
+ it("getStore should return store from config", () => {
137
+ const mockStore = {};
138
+ AsyncLocalStorageProviderSingleton.getRunnableConfig = jest
139
+ .fn()
140
+ .mockReturnValue({
141
+ store: mockStore,
142
+ });
143
+ const result = getStore();
144
+ expect(result).toBe(mockStore);
145
+ });
146
+ it("getWriter should return writer from configurable", () => {
147
+ const mockWriter = () => { };
148
+ AsyncLocalStorageProviderSingleton.getRunnableConfig = jest
149
+ .fn()
150
+ .mockReturnValue({
151
+ configurable: {
152
+ writer: mockWriter,
153
+ },
154
+ });
155
+ const result = getWriter();
156
+ expect(result).toBe(mockWriter);
157
+ });
158
+ it("getConfig should return the full config", () => {
159
+ const mockConfig = { key: "value" };
160
+ AsyncLocalStorageProviderSingleton.getRunnableConfig = jest
161
+ .fn()
162
+ .mockReturnValue(mockConfig);
163
+ const result = getConfig();
164
+ expect(result).toBe(mockConfig);
165
+ });
166
+ });
167
+ describe("recastCheckpointNamespace", () => {
168
+ it("should filter out numeric parts of the namespace", () => {
169
+ const namespace = `parent${CHECKPOINT_NAMESPACE_SEPARATOR}123${CHECKPOINT_NAMESPACE_SEPARATOR}child`;
170
+ const result = recastCheckpointNamespace(namespace);
171
+ expect(result).toBe(`parent${CHECKPOINT_NAMESPACE_SEPARATOR}child`);
172
+ });
173
+ it("should remove parts after CHECKPOINT_NAMESPACE_END", () => {
174
+ const namespace = `part1${CHECKPOINT_NAMESPACE_SEPARATOR}part2${CHECKPOINT_NAMESPACE_END}extra`;
175
+ const result = recastCheckpointNamespace(namespace);
176
+ expect(result).toBe(`part1${CHECKPOINT_NAMESPACE_SEPARATOR}part2`);
177
+ });
178
+ it("should handle complex namespace with numeric parts and CHECKPOINT_NAMESPACE_END", () => {
179
+ const namespace = `root${CHECKPOINT_NAMESPACE_SEPARATOR}123${CHECKPOINT_NAMESPACE_SEPARATOR}child${CHECKPOINT_NAMESPACE_END}extra${CHECKPOINT_NAMESPACE_SEPARATOR}456`;
180
+ const result = recastCheckpointNamespace(namespace);
181
+ expect(result).toBe(`root${CHECKPOINT_NAMESPACE_SEPARATOR}child`);
182
+ });
183
+ it("should return the original namespace when no filtering needed", () => {
184
+ const namespace = `part1${CHECKPOINT_NAMESPACE_SEPARATOR}part2`;
185
+ const result = recastCheckpointNamespace(namespace);
186
+ expect(result).toBe(namespace);
187
+ });
188
+ });
189
+ describe("getParentCheckpointNamespace", () => {
190
+ it("should return the parent namespace by removing the last part", () => {
191
+ const namespace = `parent${CHECKPOINT_NAMESPACE_SEPARATOR}child`;
192
+ const result = getParentCheckpointNamespace(namespace);
193
+ expect(result).toBe("parent");
194
+ });
195
+ it("should skip trailing numeric parts", () => {
196
+ const namespace = `parent${CHECKPOINT_NAMESPACE_SEPARATOR}child${CHECKPOINT_NAMESPACE_SEPARATOR}123${CHECKPOINT_NAMESPACE_SEPARATOR}456`;
197
+ const result = getParentCheckpointNamespace(namespace);
198
+ expect(result).toBe("parent");
199
+ });
200
+ it("should return empty string for top-level namespace", () => {
201
+ const namespace = "singlePart";
202
+ const result = getParentCheckpointNamespace(namespace);
203
+ expect(result).toBe("");
204
+ });
205
+ it("should handle namespace with mixed numeric and non-numeric parts", () => {
206
+ const namespace = `root${CHECKPOINT_NAMESPACE_SEPARATOR}sub1${CHECKPOINT_NAMESPACE_SEPARATOR}123${CHECKPOINT_NAMESPACE_SEPARATOR}sub2`;
207
+ const result = getParentCheckpointNamespace(namespace);
208
+ // The implementation stops at the first numeric part, not at the last non-numeric part
209
+ expect(result).toBe(`root${CHECKPOINT_NAMESPACE_SEPARATOR}sub1${CHECKPOINT_NAMESPACE_SEPARATOR}123`);
210
+ });
211
+ });
212
+ //# sourceMappingURL=config.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.test.js","sourceRoot":"","sources":["../../../src/pregel/utils/config.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,kCAAkC,EAAE,MAAM,4BAA4B,CAAC;AAEhF,OAAO,EACL,qBAAqB,EACrB,QAAQ,EACR,SAAS,EACT,SAAS,EACT,yBAAyB,EACzB,4BAA4B,GAC7B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,8BAA8B,EAC9B,wBAAwB,GACzB,MAAM,oBAAoB,CAAC;AAE5B,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,uCAAuC;IACvC,MAAM,yBAAyB,GAC7B,kCAAkC,CAAC,iBAAiB,CAAC;IAEvD,UAAU,CAAC,GAAG,EAAE;QACd,kCAAkC;QAClC,kCAAkC,CAAC,iBAAiB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,GAAG,EAAE;QACZ,uCAAuC;QACvC,kCAAkC,CAAC,iBAAiB;YAClD,yBAAyB,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,iDAAiD;QACjD,kCAAkC,CAAC,iBAAiB,GAAG,IAAI;aACxD,EAAE,EAAE;aACJ,eAAe,CAAC,SAAS,CAAC,CAAC;QAE9B,MAAM,MAAM,GAAG,qBAAqB,EAAE,CAAC;QAEvC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,IAAI,EAAE,EAAE;YACR,QAAQ,EAAE,EAAE;YACZ,SAAS,EAAE,SAAS;YACpB,cAAc,EAAE,EAAE;YAClB,YAAY,EAAE,EAAE;SACjB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qEAAqE,EAAE,GAAG,EAAE;QAC7E,iDAAiD;QACjD,kCAAkC,CAAC,iBAAiB,GAAG,IAAI;aACxD,EAAE,EAAE;aACJ,eAAe,CAAC,SAAS,CAAC,CAAC;QAE9B,MAAM,OAAO,GAAG;YACd,IAAI,EAAE,CAAC,MAAM,CAAC;YACd,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC5B,YAAY,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE;SACpC,CAAC;QAEF,MAAM,OAAO,GAAG;YACd,IAAI,EAAE,CAAC,MAAM,CAAC;YACd,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC5B,YAAY,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE;SACpC,CAAC;QAEF,MAAM,MAAM,GAAG,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAEvD,0EAA0E;QAC1E,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,IAAI,EAAE,CAAC,MAAM,CAAC;YACd,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE;YAC/C,SAAS,EAAE,SAAS;YACpB,cAAc,EAAE,EAAE;YAClB,YAAY,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE;SACpC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,qCAAqC;QACrC,MAAM,uBAAuB,GAAG;YAC9B,IAAI,EAAE,CAAC,aAAa,CAAC;YACrB,QAAQ,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE;YAC9B,SAAS,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,EAAE;YACxD,YAAY,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE;SACzC,CAAC;QAEF,kCAAkC,CAAC,iBAAiB,GAAG,IAAI;aACxD,EAAE,EAAE;aACJ,eAAe,CAAC,uBAAuB,CAAC,CAAC;QAE5C,MAAM,MAAM,GAAG,qBAAqB,EAAE,CAAC;QAEvC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC;YACpC,OAAO,EAAE,OAAO;YAChB,aAAa,EAAE,OAAO;SACvB,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,CAAC;QAChE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,kCAAkC,CAAC,iBAAiB,GAAG,IAAI;aACxD,EAAE,EAAE;aACJ,eAAe,CAAC,SAAS,CAAC,CAAC;QAE9B,MAAM,OAAO,GAAG,SAAS,CAAC;QAC1B,MAAM,OAAO,GAAG;YACd,IAAI,EAAE,CAAC,MAAM,CAAC;YACd,QAAQ,EAAE,SAAS;SACpB,CAAC;QAEF,MAAM,MAAM,GAAG,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAEvD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,kCAAkC,CAAC,iBAAiB,GAAG,IAAI;aACxD,EAAE,EAAE;aACJ,eAAe,CAAC,SAAS,CAAC,CAAC;QAE9B,MAAM,MAAM,GAAG;YACb,YAAY,EAAE;gBACZ,WAAW,EAAE,QAAQ;gBACrB,WAAW,EAAE,EAAE;gBACf,YAAY,EAAE,IAAI;gBAClB,WAAW,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE;gBACxC,cAAc,EAAE,sBAAsB;aACvC;SACF,CAAC;QAEF,MAAM,MAAM,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAE7C,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC;YAC9B,WAAW,EAAE,QAAQ;YACrB,WAAW,EAAE,EAAE;YACf,YAAY,EAAE,IAAI;YAClB,sDAAsD;SACvD,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wEAAwE,EAAE,GAAG,EAAE;QAChF,kCAAkC,CAAC,iBAAiB,GAAG,IAAI;aACxD,EAAE,EAAE;aACJ,eAAe,CAAC,SAAS,CAAC,CAAC;QAE9B,MAAM,MAAM,GAAG;YACb,QAAQ,EAAE,EAAE,GAAG,EAAE,gBAAgB,EAAE;YACnC,YAAY,EAAE;gBACZ,GAAG,EAAE,sBAAsB;aAC5B;SACF,CAAC;QAEF,MAAM,MAAM,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAE7C,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;IAC9C,uCAAuC;IACvC,MAAM,yBAAyB,GAC7B,kCAAkC,CAAC,iBAAiB,CAAC;IAEvD,UAAU,CAAC,GAAG,EAAE;QACd,kCAAkC;QAClC,kCAAkC,CAAC,iBAAiB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,GAAG,EAAE;QACZ,uCAAuC;QACvC,kCAAkC,CAAC,iBAAiB;YAClD,yBAAyB,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,SAAS,GAAG,EAAe,CAAC;QAClC,kCAAkC,CAAC,iBAAiB,GAAG,IAAI;aACxD,EAAE,EAAE;aACJ,eAAe,CAAC;YACf,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;QAEL,MAAM,MAAM,GAAG,QAAQ,EAAE,CAAC;QAE1B,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,UAAU,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;QAC5B,kCAAkC,CAAC,iBAAiB,GAAG,IAAI;aACxD,EAAE,EAAE;aACJ,eAAe,CAAC;YACf,YAAY,EAAE;gBACZ,MAAM,EAAE,UAAU;aACnB;SACF,CAAC,CAAC;QAEL,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAE3B,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,UAAU,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;QACpC,kCAAkC,CAAC,iBAAiB,GAAG,IAAI;aACxD,EAAE,EAAE;aACJ,eAAe,CAAC,UAAU,CAAC,CAAC;QAE/B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAE3B,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,SAAS,GAAG,SAAS,8BAA8B,MAAM,8BAA8B,OAAO,CAAC;QACrG,MAAM,MAAM,GAAG,yBAAyB,CAAC,SAAS,CAAC,CAAC;QAEpD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,8BAA8B,OAAO,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,SAAS,GAAG,QAAQ,8BAA8B,QAAQ,wBAAwB,OAAO,CAAC;QAChG,MAAM,MAAM,GAAG,yBAAyB,CAAC,SAAS,CAAC,CAAC;QAEpD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,8BAA8B,OAAO,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iFAAiF,EAAE,GAAG,EAAE;QACzF,MAAM,SAAS,GAAG,OAAO,8BAA8B,MAAM,8BAA8B,QAAQ,wBAAwB,QAAQ,8BAA8B,KAAK,CAAC;QACvK,MAAM,MAAM,GAAG,yBAAyB,CAAC,SAAS,CAAC,CAAC;QAEpD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,8BAA8B,OAAO,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,MAAM,SAAS,GAAG,QAAQ,8BAA8B,OAAO,CAAC;QAChE,MAAM,MAAM,GAAG,yBAAyB,CAAC,SAAS,CAAC,CAAC;QAEpD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;IAC5C,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,SAAS,GAAG,SAAS,8BAA8B,OAAO,CAAC;QACjE,MAAM,MAAM,GAAG,4BAA4B,CAAC,SAAS,CAAC,CAAC;QAEvD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,SAAS,GAAG,SAAS,8BAA8B,QAAQ,8BAA8B,MAAM,8BAA8B,KAAK,CAAC;QACzI,MAAM,MAAM,GAAG,4BAA4B,CAAC,SAAS,CAAC,CAAC;QAEvD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,SAAS,GAAG,YAAY,CAAC;QAC/B,MAAM,MAAM,GAAG,4BAA4B,CAAC,SAAS,CAAC,CAAC;QAEvD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;QAC1E,MAAM,SAAS,GAAG,OAAO,8BAA8B,OAAO,8BAA8B,MAAM,8BAA8B,MAAM,CAAC;QACvI,MAAM,MAAM,GAAG,4BAA4B,CAAC,SAAS,CAAC,CAAC;QAEvD,uFAAuF;QACvF,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CACjB,OAAO,8BAA8B,OAAO,8BAA8B,KAAK,CAChF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.patchCheckpointMap = exports.patchConfigurable = exports._coerceToDict = exports.getNewChannelVersions = exports.getNullChannelVersion = void 0;
3
+ exports.combineAbortSignals = exports.patchCheckpointMap = exports.patchConfigurable = exports._coerceToDict = exports.getNewChannelVersions = exports.getNullChannelVersion = void 0;
4
4
  const constants_js_1 = require("../../constants.cjs");
5
5
  function getNullChannelVersion(currentVersions) {
6
6
  const versionValues = Object.values(currentVersions);
@@ -69,4 +69,29 @@ function patchCheckpointMap(config, metadata) {
69
69
  }
70
70
  }
71
71
  exports.patchCheckpointMap = patchCheckpointMap;
72
+ /**
73
+ * Combine multiple abort signals into a single abort signal.
74
+ * @param signals - The abort signals to combine.
75
+ * @returns A single abort signal that is aborted if any of the input signals are aborted.
76
+ */
77
+ function combineAbortSignals(...signals) {
78
+ if (signals.length === 1) {
79
+ return signals[0];
80
+ }
81
+ if ("any" in AbortSignal) {
82
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
83
+ return AbortSignal.any(signals);
84
+ }
85
+ const combinedController = new AbortController();
86
+ const listener = () => {
87
+ combinedController.abort();
88
+ signals.forEach((s) => s.removeEventListener("abort", listener));
89
+ };
90
+ signals.forEach((s) => s.addEventListener("abort", listener));
91
+ if (signals.some((s) => s.aborted)) {
92
+ combinedController.abort();
93
+ }
94
+ return combinedController.signal;
95
+ }
96
+ exports.combineAbortSignals = combineAbortSignals;
72
97
  //# sourceMappingURL=index.js.map
@@ -33,3 +33,9 @@ export type RetryPolicy = {
33
33
  };
34
34
  export declare function patchConfigurable(config: RunnableConfig | undefined, patch: Record<string, any>): RunnableConfig;
35
35
  export declare function patchCheckpointMap(config: RunnableConfig, metadata?: CheckpointMetadata): RunnableConfig;
36
+ /**
37
+ * Combine multiple abort signals into a single abort signal.
38
+ * @param signals - The abort signals to combine.
39
+ * @returns A single abort signal that is aborted if any of the input signals are aborted.
40
+ */
41
+ export declare function combineAbortSignals(...signals: AbortSignal[]): AbortSignal;
@@ -61,4 +61,28 @@ export function patchCheckpointMap(config, metadata) {
61
61
  return config;
62
62
  }
63
63
  }
64
+ /**
65
+ * Combine multiple abort signals into a single abort signal.
66
+ * @param signals - The abort signals to combine.
67
+ * @returns A single abort signal that is aborted if any of the input signals are aborted.
68
+ */
69
+ export function combineAbortSignals(...signals) {
70
+ if (signals.length === 1) {
71
+ return signals[0];
72
+ }
73
+ if ("any" in AbortSignal) {
74
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
75
+ return AbortSignal.any(signals);
76
+ }
77
+ const combinedController = new AbortController();
78
+ const listener = () => {
79
+ combinedController.abort();
80
+ signals.forEach((s) => s.removeEventListener("abort", listener));
81
+ };
82
+ signals.forEach((s) => s.addEventListener("abort", listener));
83
+ if (signals.some((s) => s.aborted)) {
84
+ combinedController.abort();
85
+ }
86
+ return combinedController.signal;
87
+ }
64
88
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/pregel/utils/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAE/D,MAAM,UAAU,qBAAqB,CAAC,eAAgC;IACpE,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IACrD,MAAM,WAAW,GACf,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACjE,IAAI,WAAwC,CAAC;IAC7C,IAAI,WAAW,KAAK,QAAQ,EAAE;QAC5B,WAAW,GAAG,CAAC,CAAC;KACjB;SAAM,IAAI,WAAW,KAAK,QAAQ,EAAE;QACnC,WAAW,GAAG,EAAE,CAAC;KAClB;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,gBAAiC,EACjC,eAAgC;IAEhC,2BAA2B;IAC3B,IAAI,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;QAC5C,MAAM,WAAW,GAAG,qBAAqB,CAAC,eAAe,CAAC,CAAC;QAC3D,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,MAAM,CACpC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,CACrD,CACF,CAAC;KACH;SAAM;QACL,OAAO,eAAe,CAAC;KACxB;AACH,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,aAAa,CAAC,KAAU,EAAE,UAAkB;IAC1D,OAAO,KAAK;QACV,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACrB,uDAAuD;QACvD,CAAC,CAAC,KAAK,YAAY,IAAI,CAAC;QACxB,OAAO,KAAK,KAAK,QAAQ;QACzB,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC;AAC9B,CAAC;AAiCD,MAAM,UAAU,iBAAiB,CAC/B,MAAkC;AAClC,8DAA8D;AAC9D,KAA0B;IAE1B,IAAI,MAAM,KAAK,IAAI,EAAE;QACnB,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;KAChC;SAAM,IAAI,MAAM,EAAE,YAAY,KAAK,SAAS,EAAE;QAC7C,OAAO,EAAE,GAAG,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;KAC3C;SAAM;QACL,OAAO;YACL,GAAG,MAAM;YACT,YAAY,EAAE,EAAE,GAAG,MAAM,CAAC,YAAY,EAAE,GAAG,KAAK,EAAE;SACnD,CAAC;KACH;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,MAAsB,EACtB,QAA6B;IAE7B,MAAM,OAAO,GAAG,QAAQ,EAAE,OAAO,IAAI,EAAE,CAAC;IAExC,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;QACnC,OAAO,iBAAiB,CAAC,MAAM,EAAE;YAC/B,CAAC,yBAAyB,CAAC,EAAE;gBAC3B,GAAG,OAAO;gBACV,CAAC,MAAM,CAAC,YAAY,EAAE,aAAa,IAAI,EAAE,CAAC,EACxC,MAAM,CAAC,YAAY,EAAE,aAAa;aACrC;SACF,CAAC,CAAC;KACJ;SAAM;QACL,OAAO,MAAM,CAAC;KACf;AACH,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/pregel/utils/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const globals_1 = require("@jest/globals");
4
+ const subgraph_js_1 = require("./subgraph.cjs");
5
+ (0, globals_1.describe)("isPregelLike", () => {
6
+ (0, globals_1.it)("should return true for objects with lg_is_pregel=true", () => {
7
+ const mockPregelObj = {
8
+ lg_is_pregel: true,
9
+ invoke: () => { },
10
+ someOtherProp: "value",
11
+ };
12
+ // Cast to any to test just the logic, not the type constraints
13
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
14
+ (0, globals_1.expect)((0, subgraph_js_1.isPregelLike)(mockPregelObj)).toBe(true);
15
+ });
16
+ (0, globals_1.it)("should return false for objects without lg_is_pregel property", () => {
17
+ const nonPregelObj = {
18
+ invoke: () => { },
19
+ someOtherProp: "value",
20
+ };
21
+ // Cast to any to test just the logic, not the type constraints
22
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
23
+ (0, globals_1.expect)((0, subgraph_js_1.isPregelLike)(nonPregelObj)).toBe(false);
24
+ });
25
+ (0, globals_1.it)("should return false for objects with lg_is_pregel=false", () => {
26
+ const nonPregelObj = {
27
+ lg_is_pregel: false,
28
+ invoke: () => { },
29
+ someOtherProp: "value",
30
+ };
31
+ // Cast to any to test just the logic, not the type constraints
32
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
33
+ (0, globals_1.expect)((0, subgraph_js_1.isPregelLike)(nonPregelObj)).toBe(false);
34
+ });
35
+ });
36
+ (0, globals_1.describe)("findSubgraphPregel", () => {
37
+ (0, globals_1.it)("should find Pregel object at the top level", () => {
38
+ const mockPregelObj = {
39
+ lg_is_pregel: true,
40
+ invoke: () => { },
41
+ someOtherProp: "value",
42
+ };
43
+ // Cast to Runnable to test the behavior
44
+ (0, globals_1.expect)((0, subgraph_js_1.findSubgraphPregel)(mockPregelObj)).toBe(mockPregelObj);
45
+ });
46
+ (0, globals_1.it)("should find Pregel object in a RunnableSequence", () => {
47
+ const mockPregelObj = {
48
+ lg_is_pregel: true,
49
+ invoke: () => { },
50
+ someOtherProp: "value",
51
+ };
52
+ const mockSequence = {
53
+ steps: [{ someProperty: "value", invoke: () => { } }, mockPregelObj],
54
+ };
55
+ (0, globals_1.expect)((0, subgraph_js_1.findSubgraphPregel)(mockSequence)).toBe(mockPregelObj);
56
+ });
57
+ (0, globals_1.it)("should find Pregel object in a nested RunnableSequence", () => {
58
+ const mockPregelObj = {
59
+ lg_is_pregel: true,
60
+ invoke: () => { },
61
+ someOtherProp: "value",
62
+ };
63
+ const innerSequence = {
64
+ steps: [{ someProperty: "value", invoke: () => { } }, mockPregelObj],
65
+ };
66
+ const outerSequence = {
67
+ steps: [{ someProperty: "otherValue", invoke: () => { } }, innerSequence],
68
+ };
69
+ (0, globals_1.expect)((0, subgraph_js_1.findSubgraphPregel)(outerSequence)).toBe(mockPregelObj);
70
+ });
71
+ (0, globals_1.it)("should return undefined if no Pregel object is found", () => {
72
+ const nonPregelRunnable = {
73
+ someProperty: "value",
74
+ invoke: () => { },
75
+ };
76
+ const sequence = {
77
+ steps: [{ someProperty: "value1" }, { someProperty: "value2" }],
78
+ };
79
+ (0, globals_1.expect)((0, subgraph_js_1.findSubgraphPregel)(nonPregelRunnable)).toBeUndefined();
80
+ (0, globals_1.expect)((0, subgraph_js_1.findSubgraphPregel)(sequence)).toBeUndefined();
81
+ });
82
+ });
83
+ //# sourceMappingURL=subgraph.test.js.map
@@ -0,0 +1 @@
1
+ export {};