@devrev/airsync-sdk 2.0.0-beta.2 → 2.0.0-beta.4

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 (206) hide show
  1. package/README.md +5 -11
  2. package/dist/attachments-streaming/attachments-streaming-pool.d.ts +1 -8
  3. package/dist/attachments-streaming/attachments-streaming-pool.d.ts.map +1 -1
  4. package/dist/attachments-streaming/attachments-streaming-pool.interfaces.d.ts +4 -3
  5. package/dist/attachments-streaming/attachments-streaming-pool.interfaces.d.ts.map +1 -1
  6. package/dist/attachments-streaming/attachments-streaming-pool.js +11 -39
  7. package/dist/common/constants.d.ts +1 -0
  8. package/dist/common/constants.d.ts.map +1 -1
  9. package/dist/common/constants.js +2 -1
  10. package/dist/common/helpers.d.ts +0 -14
  11. package/dist/common/helpers.d.ts.map +1 -1
  12. package/dist/common/helpers.js +0 -36
  13. package/dist/http/{axios-client-internal.d.ts → client.d.ts} +1 -1
  14. package/dist/http/client.d.ts.map +1 -0
  15. package/dist/index.d.ts +25 -13
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +51 -30
  18. package/dist/logger/logger.d.ts +14 -0
  19. package/dist/logger/logger.d.ts.map +1 -1
  20. package/dist/logger/logger.js +55 -8
  21. package/dist/mappers/mappers.d.ts +9 -10
  22. package/dist/mappers/mappers.d.ts.map +1 -1
  23. package/dist/mappers/{mappers.interface.d.ts → mappers.interfaces.d.ts} +5 -5
  24. package/dist/mappers/mappers.interfaces.d.ts.map +1 -0
  25. package/dist/mappers/{mappers.interface.js → mappers.interfaces.js} +3 -3
  26. package/dist/mappers/mappers.js +13 -9
  27. package/dist/multithreading/adapters/base-adapter.d.ts +71 -0
  28. package/dist/multithreading/adapters/base-adapter.d.ts.map +1 -0
  29. package/dist/multithreading/adapters/base-adapter.js +138 -0
  30. package/dist/multithreading/adapters/extraction-adapter.d.ts +57 -0
  31. package/dist/multithreading/adapters/extraction-adapter.d.ts.map +1 -0
  32. package/dist/multithreading/adapters/extraction-adapter.js +323 -0
  33. package/dist/multithreading/adapters/loading-adapter.d.ts +44 -0
  34. package/dist/multithreading/adapters/loading-adapter.d.ts.map +1 -0
  35. package/dist/multithreading/{worker-adapter/worker-adapter.helpers.d.ts → adapters/loading-adapter.helpers.d.ts} +1 -1
  36. package/dist/multithreading/adapters/loading-adapter.helpers.d.ts.map +1 -0
  37. package/dist/multithreading/adapters/loading-adapter.js +431 -0
  38. package/dist/{common/control-protocol.d.ts → multithreading/emit.d.ts} +1 -1
  39. package/dist/multithreading/emit.d.ts.map +1 -0
  40. package/dist/{common/control-protocol.js → multithreading/emit.js} +3 -3
  41. package/dist/multithreading/process-task.d.ts +16 -1
  42. package/dist/multithreading/process-task.d.ts.map +1 -1
  43. package/dist/multithreading/process-task.js +115 -50
  44. package/dist/multithreading/spawn/spawn.helpers.d.ts +23 -3
  45. package/dist/multithreading/spawn/spawn.helpers.d.ts.map +1 -1
  46. package/dist/multithreading/spawn/spawn.helpers.js +152 -2
  47. package/dist/multithreading/spawn/spawn.js +7 -7
  48. package/dist/multithreading/worker.js +1 -2
  49. package/dist/repo/repo.js +2 -2
  50. package/dist/state/base-state.d.ts +75 -0
  51. package/dist/state/base-state.d.ts.map +1 -0
  52. package/dist/state/base-state.js +261 -0
  53. package/dist/state/extraction-state.d.ts +29 -0
  54. package/dist/state/extraction-state.d.ts.map +1 -0
  55. package/dist/state/extraction-state.js +122 -0
  56. package/dist/state/install-initial-domain-mapping.d.ts.map +1 -0
  57. package/dist/{common → state}/install-initial-domain-mapping.js +4 -4
  58. package/dist/state/loading-state.d.ts +18 -0
  59. package/dist/state/loading-state.d.ts.map +1 -0
  60. package/dist/state/loading-state.js +39 -0
  61. package/dist/state/state.d.ts +3 -35
  62. package/dist/state/state.d.ts.map +1 -1
  63. package/dist/state/state.interfaces.d.ts +20 -3
  64. package/dist/state/state.interfaces.d.ts.map +1 -1
  65. package/dist/state/state.interfaces.js +19 -1
  66. package/dist/state/state.js +9 -263
  67. package/dist/{common → state}/time-value-resolver.d.ts +4 -5
  68. package/dist/state/time-value-resolver.d.ts.map +1 -0
  69. package/dist/{common → state}/time-value-resolver.js +9 -8
  70. package/dist/{common/test-utils.d.ts → testing/mock-event.d.ts} +1 -2
  71. package/dist/testing/mock-event.d.ts.map +1 -0
  72. package/dist/{common/test-utils.js → testing/mock-event.js} +14 -3
  73. package/dist/{mock-server → testing}/mock-server.d.ts +5 -0
  74. package/dist/testing/mock-server.d.ts.map +1 -0
  75. package/dist/testing/mock-server.interfaces.d.ts.map +1 -0
  76. package/dist/{mock-server → testing}/mock-server.js +6 -1
  77. package/dist/types/errors.d.ts +9 -0
  78. package/dist/types/errors.d.ts.map +1 -0
  79. package/dist/types/extraction.d.ts +73 -18
  80. package/dist/types/extraction.d.ts.map +1 -1
  81. package/dist/types/extraction.js +4 -6
  82. package/dist/types/loading.d.ts +1 -2
  83. package/dist/types/loading.d.ts.map +1 -1
  84. package/dist/types/loading.js +0 -1
  85. package/dist/types/workers.d.ts +64 -20
  86. package/dist/types/workers.d.ts.map +1 -1
  87. package/dist/uploader/uploader.d.ts +5 -4
  88. package/dist/uploader/uploader.d.ts.map +1 -1
  89. package/dist/uploader/uploader.interfaces.d.ts +1 -1
  90. package/dist/uploader/uploader.js +10 -10
  91. package/package.json +3 -3
  92. package/dist/airsync-sdk.d.ts +0 -1802
  93. package/dist/attachments-streaming/attachments-streaming-pool.test.d.ts +0 -2
  94. package/dist/attachments-streaming/attachments-streaming-pool.test.d.ts.map +0 -1
  95. package/dist/attachments-streaming/attachments-streaming-pool.test.js +0 -516
  96. package/dist/common/control-protocol.d.ts.map +0 -1
  97. package/dist/common/errors.d.ts +0 -6
  98. package/dist/common/errors.d.ts.map +0 -1
  99. package/dist/common/install-initial-domain-mapping.d.ts.map +0 -1
  100. package/dist/common/install-initial-domain-mapping.test.d.ts +0 -2
  101. package/dist/common/install-initial-domain-mapping.test.d.ts.map +0 -1
  102. package/dist/common/install-initial-domain-mapping.test.js +0 -211
  103. package/dist/common/test-utils.d.ts.map +0 -1
  104. package/dist/common/time-value-resolver.d.ts.map +0 -1
  105. package/dist/common/time-value-resolver.test.d.ts +0 -2
  106. package/dist/common/time-value-resolver.test.d.ts.map +0 -1
  107. package/dist/common/time-value-resolver.test.js +0 -268
  108. package/dist/http/axios-client-internal.d.ts.map +0 -1
  109. package/dist/http/axios-client-internal.test.d.ts +0 -2
  110. package/dist/http/axios-client-internal.test.d.ts.map +0 -1
  111. package/dist/http/axios-client-internal.test.js +0 -175
  112. package/dist/http/axios-client.d.ts +0 -27
  113. package/dist/http/axios-client.d.ts.map +0 -1
  114. package/dist/http/axios-client.js +0 -60
  115. package/dist/http/constants.d.ts +0 -4
  116. package/dist/http/constants.d.ts.map +0 -1
  117. package/dist/http/constants.js +0 -6
  118. package/dist/http/index.d.ts +0 -2
  119. package/dist/http/index.d.ts.map +0 -1
  120. package/dist/http/index.js +0 -17
  121. package/dist/logger/logger.constants.d.ts +0 -6
  122. package/dist/logger/logger.constants.d.ts.map +0 -1
  123. package/dist/logger/logger.constants.js +0 -13
  124. package/dist/logger/logger.context.d.ts +0 -58
  125. package/dist/logger/logger.context.d.ts.map +0 -1
  126. package/dist/logger/logger.context.js +0 -86
  127. package/dist/logger/logger.test.d.ts +0 -2
  128. package/dist/logger/logger.test.d.ts.map +0 -1
  129. package/dist/logger/logger.test.js +0 -537
  130. package/dist/mappers/mappers.interface.d.ts.map +0 -1
  131. package/dist/mappers/mappers.test.d.ts +0 -2
  132. package/dist/mappers/mappers.test.d.ts.map +0 -1
  133. package/dist/mappers/mappers.test.js +0 -105
  134. package/dist/mock-server/mock-server.d.ts.map +0 -1
  135. package/dist/mock-server/mock-server.interfaces.d.ts.map +0 -1
  136. package/dist/multithreading/create-worker.test.d.ts +0 -2
  137. package/dist/multithreading/create-worker.test.d.ts.map +0 -1
  138. package/dist/multithreading/create-worker.test.js +0 -108
  139. package/dist/multithreading/process-task.test.d.ts +0 -2
  140. package/dist/multithreading/process-task.test.d.ts.map +0 -1
  141. package/dist/multithreading/process-task.test.js +0 -146
  142. package/dist/multithreading/spawn/spawn.helpers.test.d.ts +0 -2
  143. package/dist/multithreading/spawn/spawn.helpers.test.d.ts.map +0 -1
  144. package/dist/multithreading/spawn/spawn.helpers.test.js +0 -293
  145. package/dist/multithreading/spawn/spawn.test.d.ts +0 -2
  146. package/dist/multithreading/spawn/spawn.test.d.ts.map +0 -1
  147. package/dist/multithreading/spawn/spawn.test.js +0 -232
  148. package/dist/multithreading/worker-adapter/worker-adapter.artifacts.test.d.ts +0 -2
  149. package/dist/multithreading/worker-adapter/worker-adapter.artifacts.test.d.ts.map +0 -1
  150. package/dist/multithreading/worker-adapter/worker-adapter.artifacts.test.js +0 -175
  151. package/dist/multithreading/worker-adapter/worker-adapter.d.ts +0 -97
  152. package/dist/multithreading/worker-adapter/worker-adapter.d.ts.map +0 -1
  153. package/dist/multithreading/worker-adapter/worker-adapter.emit.test.d.ts +0 -2
  154. package/dist/multithreading/worker-adapter/worker-adapter.emit.test.d.ts.map +0 -1
  155. package/dist/multithreading/worker-adapter/worker-adapter.emit.test.js +0 -390
  156. package/dist/multithreading/worker-adapter/worker-adapter.extraction.test.d.ts +0 -2
  157. package/dist/multithreading/worker-adapter/worker-adapter.extraction.test.d.ts.map +0 -1
  158. package/dist/multithreading/worker-adapter/worker-adapter.extraction.test.js +0 -799
  159. package/dist/multithreading/worker-adapter/worker-adapter.helpers.d.ts.map +0 -1
  160. package/dist/multithreading/worker-adapter/worker-adapter.helpers.test.d.ts +0 -2
  161. package/dist/multithreading/worker-adapter/worker-adapter.helpers.test.d.ts.map +0 -1
  162. package/dist/multithreading/worker-adapter/worker-adapter.helpers.test.js +0 -514
  163. package/dist/multithreading/worker-adapter/worker-adapter.js +0 -846
  164. package/dist/multithreading/worker-adapter/worker-adapter.loading.test.d.ts +0 -2
  165. package/dist/multithreading/worker-adapter/worker-adapter.loading.test.d.ts.map +0 -1
  166. package/dist/multithreading/worker-adapter/worker-adapter.loading.test.js +0 -596
  167. package/dist/multithreading/worker-adapter/worker-adapter.serialization.test.d.ts +0 -2
  168. package/dist/multithreading/worker-adapter/worker-adapter.serialization.test.d.ts.map +0 -1
  169. package/dist/multithreading/worker-adapter/worker-adapter.serialization.test.js +0 -71
  170. package/dist/repo/repo.test.d.ts +0 -2
  171. package/dist/repo/repo.test.d.ts.map +0 -1
  172. package/dist/repo/repo.test.js +0 -184
  173. package/dist/state/state.extract-window.test.d.ts +0 -2
  174. package/dist/state/state.extract-window.test.d.ts.map +0 -1
  175. package/dist/state/state.extract-window.test.js +0 -163
  176. package/dist/state/state.pending-boundaries.test.d.ts +0 -2
  177. package/dist/state/state.pending-boundaries.test.d.ts.map +0 -1
  178. package/dist/state/state.pending-boundaries.test.js +0 -189
  179. package/dist/state/state.post-state.test.d.ts +0 -2
  180. package/dist/state/state.post-state.test.d.ts.map +0 -1
  181. package/dist/state/state.post-state.test.js +0 -77
  182. package/dist/state/state.test.d.ts +0 -2
  183. package/dist/state/state.test.d.ts.map +0 -1
  184. package/dist/state/state.test.js +0 -268
  185. package/dist/state/state.time-value-resolution.test.d.ts +0 -2
  186. package/dist/state/state.time-value-resolution.test.d.ts.map +0 -1
  187. package/dist/state/state.time-value-resolution.test.js +0 -175
  188. package/dist/tsdoc-metadata.json +0 -11
  189. package/dist/types/extraction.test.d.ts +0 -2
  190. package/dist/types/extraction.test.d.ts.map +0 -1
  191. package/dist/types/extraction.test.js +0 -96
  192. package/dist/types/index.d.ts +0 -11
  193. package/dist/types/index.d.ts.map +0 -1
  194. package/dist/types/index.js +0 -21
  195. package/dist/uploader/uploader.helpers.test.d.ts +0 -2
  196. package/dist/uploader/uploader.helpers.test.d.ts.map +0 -1
  197. package/dist/uploader/uploader.helpers.test.js +0 -256
  198. package/dist/uploader/uploader.test.d.ts +0 -2
  199. package/dist/uploader/uploader.test.d.ts.map +0 -1
  200. package/dist/uploader/uploader.test.js +0 -601
  201. /package/dist/http/{axios-client-internal.js → client.js} +0 -0
  202. /package/dist/multithreading/{worker-adapter/worker-adapter.helpers.js → adapters/loading-adapter.helpers.js} +0 -0
  203. /package/dist/{common → state}/install-initial-domain-mapping.d.ts +0 -0
  204. /package/dist/{mock-server → testing}/mock-server.interfaces.d.ts +0 -0
  205. /package/dist/{mock-server → testing}/mock-server.interfaces.js +0 -0
  206. /package/dist/{common → types}/errors.js +0 -0
@@ -1,108 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const worker_threads_1 = require("worker_threads");
4
- const jest_setup_1 = require("../tests/jest.setup");
5
- const test_utils_1 = require("../common/test-utils");
6
- const extraction_1 = require("../types/extraction");
7
- const create_worker_1 = require("./create-worker");
8
- describe(create_worker_1.createWorker.name, () => {
9
- it('should create a Worker instance when valid parameters are provided', async () => {
10
- // Arrange
11
- const workerPath = __dirname + '../tests/dummy-worker.ts';
12
- const event = (0, test_utils_1.createMockEvent)(jest_setup_1.mockServer.baseUrl, {
13
- payload: { event_type: extraction_1.EventType.StartExtractingExternalSyncUnits },
14
- });
15
- // Act
16
- const worker = worker_threads_1.isMainThread
17
- ? await (0, create_worker_1.createWorker)({
18
- event,
19
- initialState: {},
20
- workerPath,
21
- })
22
- : null;
23
- // Assert
24
- expect(worker).not.toBeNull();
25
- expect(worker).toBeInstanceOf(worker_threads_1.Worker);
26
- if (worker) {
27
- await worker.terminate();
28
- }
29
- });
30
- it('should throw error when not in main thread', async () => {
31
- // Arrange
32
- const originalIsMainThread = worker_threads_1.isMainThread;
33
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
34
- worker_threads_1.isMainThread = false;
35
- const workerPath = __dirname + '../tests/dummy-worker.ts';
36
- const event = (0, test_utils_1.createMockEvent)(jest_setup_1.mockServer.baseUrl, {
37
- payload: { event_type: extraction_1.EventType.StartExtractingExternalSyncUnits },
38
- });
39
- // Act & Assert
40
- await expect((0, create_worker_1.createWorker)({
41
- event,
42
- initialState: {},
43
- workerPath,
44
- })).rejects.toThrow('Worker threads can not start more worker threads.');
45
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
46
- worker_threads_1.isMainThread = originalIsMainThread;
47
- });
48
- it('[edge] should handle worker creation with minimal valid data', async () => {
49
- // Arrange
50
- const workerPath = __dirname + '../tests/dummy-worker.ts';
51
- const event = (0, test_utils_1.createMockEvent)(jest_setup_1.mockServer.baseUrl, {
52
- payload: { event_type: extraction_1.EventType.StartExtractingExternalSyncUnits },
53
- });
54
- if (worker_threads_1.isMainThread) {
55
- // Act
56
- const worker = await (0, create_worker_1.createWorker)({
57
- event,
58
- initialState: {},
59
- workerPath,
60
- });
61
- // Assert
62
- expect(worker).toBeInstanceOf(worker_threads_1.Worker);
63
- await worker.terminate();
64
- }
65
- });
66
- it('[edge] should handle worker creation with complex initial state', async () => {
67
- // Arrange
68
- const workerPath = __dirname + '../tests/dummy-worker.ts';
69
- const complexState = {
70
- nested: {
71
- data: [1, 2, 3],
72
- config: { enabled: true },
73
- },
74
- };
75
- const event = (0, test_utils_1.createMockEvent)(jest_setup_1.mockServer.baseUrl, {
76
- payload: { event_type: extraction_1.EventType.StartExtractingData },
77
- });
78
- if (worker_threads_1.isMainThread) {
79
- // Act
80
- const worker = await (0, create_worker_1.createWorker)({
81
- event,
82
- initialState: complexState,
83
- workerPath,
84
- });
85
- // Assert
86
- expect(worker).toBeInstanceOf(worker_threads_1.Worker);
87
- await worker.terminate();
88
- }
89
- });
90
- it('[edge] should handle different event types', async () => {
91
- // Arrange
92
- const workerPath = __dirname + '../tests/dummy-worker.ts';
93
- const event = (0, test_utils_1.createMockEvent)(jest_setup_1.mockServer.baseUrl, {
94
- payload: { event_type: extraction_1.EventType.StartExtractingMetadata },
95
- });
96
- if (worker_threads_1.isMainThread) {
97
- // Act
98
- const worker = await (0, create_worker_1.createWorker)({
99
- event,
100
- initialState: {},
101
- workerPath,
102
- });
103
- // Assert
104
- expect(worker).toBeInstanceOf(worker_threads_1.Worker);
105
- await worker.terminate();
106
- }
107
- });
108
- });
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=process-task.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"process-task.test.d.ts","sourceRoot":"","sources":["../../src/multithreading/process-task.test.ts"],"names":[],"mappings":""}
@@ -1,146 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const extraction_1 = require("../types/extraction");
4
- const workers_1 = require("../types/workers");
5
- // These tests cover logic that is NOT exercised by the end-to-end integration
6
- // tests under src/tests/timeout-handling/:
7
- // - translation of legacy wire event types into the new enum (mutates event in place)
8
- // - the hasWorkerEmitted guard that prevents onTimeout from firing after a
9
- // successful emit (integration tests only exercise the positive case)
10
- // - the error branch that posts WorkerMessageFailed and exits(1)
11
- // - the WorkerMessage handler's guard that only flips isTimeout on
12
- // WorkerMessageExit (integration tests can't cleanly target non-Exit messages)
13
- //
14
- // Tests for the happy path, timeout-signal-reaches-worker behavior, and main-thread
15
- // early return were removed — they either duplicate what the integration suite
16
- // already exercises or assert mocked behavior with little signal.
17
- const mockParentPortPostMessage = jest.fn();
18
- const mockParentPortOn = jest.fn();
19
- let mockIsMainThread = false;
20
- jest.mock('node:worker_threads', () => ({
21
- get isMainThread() {
22
- return mockIsMainThread;
23
- },
24
- get parentPort() {
25
- return {
26
- postMessage: mockParentPortPostMessage,
27
- on: mockParentPortOn,
28
- };
29
- },
30
- get workerData() {
31
- var _a;
32
- return (_a = global.__workerData__) !== null && _a !== void 0 ? _a : {};
33
- },
34
- }));
35
- jest.mock('../logger/logger', () => ({
36
- Logger: jest.fn().mockImplementation(() => ({
37
- log: jest.fn(),
38
- warn: jest.fn(),
39
- error: jest.fn(),
40
- info: jest.fn(),
41
- logFn: jest.fn(),
42
- })),
43
- serializeError: jest.fn((e) => String(e)),
44
- }));
45
- jest.mock('../logger/logger.context', () => ({
46
- runWithSdkLogContext: jest.fn((fn) => fn()),
47
- runWithUserLogContext: jest.fn((fn) => fn()),
48
- }));
49
- jest.mock('../state/state', () => ({
50
- createAdapterState: jest.fn(),
51
- }));
52
- jest.mock('./worker-adapter/worker-adapter', () => ({
53
- WorkerAdapter: jest.fn().mockImplementation(() => ({
54
- isTimeout: false,
55
- hasWorkerEmitted: false,
56
- })),
57
- }));
58
- const process_task_1 = require("./process-task");
59
- const state_1 = require("../state/state");
60
- const worker_adapter_1 = require("./worker-adapter/worker-adapter");
61
- const test_utils_1 = require("../common/test-utils");
62
- function setWorkerData(data) {
63
- global.__workerData__ = data;
64
- }
65
- function makeEvent(eventType = extraction_1.EventType.StartExtractingData) {
66
- return (0, test_utils_1.createMockEvent)('http://localhost:0', {
67
- payload: { event_type: eventType },
68
- });
69
- }
70
- // Flush the microtask queue enough to let the async IIFE inside processTask run.
71
- const flush = async () => new Promise((r) => setTimeout(r, 0));
72
- describe(process_task_1.processTask.name, () => {
73
- let processExitSpy;
74
- beforeEach(() => {
75
- jest.clearAllMocks();
76
- mockIsMainThread = false;
77
- processExitSpy = jest
78
- .spyOn(process, 'exit')
79
- .mockImplementation((() => { }));
80
- state_1.createAdapterState.mockResolvedValue({});
81
- });
82
- afterEach(() => {
83
- processExitSpy.mockRestore();
84
- });
85
- it('should NOT call onTimeout when the worker already emitted before timeout check', async () => {
86
- // Arrange
87
- const event = makeEvent();
88
- setWorkerData({ event, initialState: {}, options: {} });
89
- // Both flags true: a timeout arrived but the worker had already emitted —
90
- // onTimeout must be skipped. This is the guard the integration suite cannot
91
- // target cleanly because it requires a precise race between emit and timeout.
92
- const mockAdapter = { isTimeout: true, hasWorkerEmitted: true };
93
- worker_adapter_1.WorkerAdapter.mockImplementation(() => mockAdapter);
94
- const task = jest.fn().mockResolvedValue(undefined);
95
- const onTimeout = jest.fn().mockResolvedValue(undefined);
96
- // Act
97
- (0, process_task_1.processTask)({ task, onTimeout });
98
- await flush();
99
- // Assert
100
- expect(onTimeout).not.toHaveBeenCalled();
101
- expect(processExitSpy).toHaveBeenCalledWith(0);
102
- });
103
- it('should NOT flip adapter.isTimeout when a non-Exit WorkerMessage arrives', async () => {
104
- // Arrange
105
- const event = makeEvent();
106
- setWorkerData({ event, initialState: {}, options: {} });
107
- const mockAdapter = { isTimeout: false, hasWorkerEmitted: false };
108
- worker_adapter_1.WorkerAdapter.mockImplementation(() => mockAdapter);
109
- const task = jest.fn().mockResolvedValue(undefined);
110
- const onTimeout = jest.fn().mockResolvedValue(undefined);
111
- // Act
112
- (0, process_task_1.processTask)({ task, onTimeout });
113
- await flush();
114
- // Grab the handler registered for WorkerMessage events and invoke it with
115
- // subjects that must NOT flip isTimeout (log messages, unknown subjects).
116
- const messageHandlerCall = mockParentPortOn.mock.calls.find(([eventName]) => eventName === workers_1.WorkerEvent.WorkerMessage);
117
- expect(messageHandlerCall).toBeDefined();
118
- const handler = messageHandlerCall[1];
119
- handler({ subject: workers_1.WorkerMessageSubject.WorkerMessageLog });
120
- handler({ subject: 'NONSENSE_SUBJECT' });
121
- // Assert
122
- expect(mockAdapter.isTimeout).toBe(false);
123
- });
124
- it('should post WorkerMessageFailed with the error message and exit(1) when task throws', async () => {
125
- // Arrange
126
- const event = makeEvent();
127
- setWorkerData({ event, initialState: {}, options: {} });
128
- const mockAdapter = { isTimeout: false, hasWorkerEmitted: false };
129
- worker_adapter_1.WorkerAdapter.mockImplementation(() => mockAdapter);
130
- const taskError = new Error('task boom');
131
- const task = jest.fn().mockRejectedValue(taskError);
132
- const onTimeout = jest.fn().mockResolvedValue(undefined);
133
- // Act
134
- (0, process_task_1.processTask)({ task, onTimeout });
135
- await flush();
136
- // Assert
137
- expect(mockParentPortPostMessage).toHaveBeenCalledWith(expect.objectContaining({
138
- subject: workers_1.WorkerMessageSubject.WorkerMessageFailed,
139
- payload: expect.objectContaining({
140
- message: expect.stringContaining('task boom'),
141
- }),
142
- }));
143
- expect(processExitSpy).toHaveBeenCalledWith(1);
144
- expect(onTimeout).not.toHaveBeenCalled();
145
- });
146
- });
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=spawn.helpers.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"spawn.helpers.test.d.ts","sourceRoot":"","sources":["../../../src/multithreading/spawn/spawn.helpers.test.ts"],"names":[],"mappings":""}
@@ -1,293 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const extraction_1 = require("../../types/extraction");
4
- const loading_1 = require("../../types/loading");
5
- const spawn_helpers_1 = require("./spawn.helpers");
6
- describe(spawn_helpers_1.getTimeoutErrorEventType.name, () => {
7
- describe('metadata extraction', () => {
8
- it('should return MetadataExtractionError for StartExtractingMetadata', () => {
9
- // Arrange
10
- const eventType = extraction_1.EventType.StartExtractingMetadata;
11
- // Act
12
- const result = (0, spawn_helpers_1.getTimeoutErrorEventType)(eventType);
13
- // Assert
14
- expect(result.eventType).toBe(extraction_1.ExtractorEventType.MetadataExtractionError);
15
- });
16
- it('should return MetadataExtractionError for deprecated ExtractionMetadataStart', () => {
17
- // Arrange
18
- const eventType = extraction_1.EventType.StartExtractingMetadata;
19
- // Act
20
- const result = (0, spawn_helpers_1.getTimeoutErrorEventType)(eventType);
21
- // Assert
22
- expect(result.eventType).toBe(extraction_1.ExtractorEventType.MetadataExtractionError);
23
- });
24
- });
25
- describe('data extraction', () => {
26
- it('should return DataExtractionError for StartExtractingData', () => {
27
- // Arrange
28
- const eventType = extraction_1.EventType.StartExtractingData;
29
- // Act
30
- const result = (0, spawn_helpers_1.getTimeoutErrorEventType)(eventType);
31
- // Assert
32
- expect(result.eventType).toBe(extraction_1.ExtractorEventType.DataExtractionError);
33
- });
34
- it('should return DataExtractionError for ContinueExtractingData', () => {
35
- // Arrange
36
- const eventType = extraction_1.EventType.ContinueExtractingData;
37
- // Act
38
- const result = (0, spawn_helpers_1.getTimeoutErrorEventType)(eventType);
39
- // Assert
40
- expect(result.eventType).toBe(extraction_1.ExtractorEventType.DataExtractionError);
41
- });
42
- it('should return DataExtractionError for deprecated ExtractionDataStart', () => {
43
- // Arrange
44
- const eventType = extraction_1.EventType.StartExtractingData;
45
- // Act
46
- const result = (0, spawn_helpers_1.getTimeoutErrorEventType)(eventType);
47
- // Assert
48
- expect(result.eventType).toBe(extraction_1.ExtractorEventType.DataExtractionError);
49
- });
50
- it('should return DataExtractionError for deprecated ExtractionDataContinue', () => {
51
- // Arrange
52
- const eventType = extraction_1.EventType.ContinueExtractingData;
53
- // Act
54
- const result = (0, spawn_helpers_1.getTimeoutErrorEventType)(eventType);
55
- // Assert
56
- expect(result.eventType).toBe(extraction_1.ExtractorEventType.DataExtractionError);
57
- });
58
- });
59
- describe('extractor state deletion', () => {
60
- it('should return ExtractorStateDeletionError for StartDeletingExtractorState', () => {
61
- // Arrange
62
- const eventType = extraction_1.EventType.StartDeletingExtractorState;
63
- // Act
64
- const result = (0, spawn_helpers_1.getTimeoutErrorEventType)(eventType);
65
- // Assert
66
- expect(result.eventType).toBe(extraction_1.ExtractorEventType.ExtractorStateDeletionError);
67
- });
68
- it('should return ExtractorStateDeletionError for deprecated ExtractionDataDelete', () => {
69
- // Arrange
70
- const eventType = extraction_1.EventType.StartDeletingExtractorState;
71
- // Act
72
- const result = (0, spawn_helpers_1.getTimeoutErrorEventType)(eventType);
73
- // Assert
74
- expect(result.eventType).toBe(extraction_1.ExtractorEventType.ExtractorStateDeletionError);
75
- });
76
- });
77
- describe('attachments extraction', () => {
78
- it('should return AttachmentExtractionError for StartExtractingAttachments', () => {
79
- // Arrange
80
- const eventType = extraction_1.EventType.StartExtractingAttachments;
81
- // Act
82
- const result = (0, spawn_helpers_1.getTimeoutErrorEventType)(eventType);
83
- // Assert
84
- expect(result.eventType).toBe(extraction_1.ExtractorEventType.AttachmentExtractionError);
85
- });
86
- it('should return AttachmentExtractionError for ContinueExtractingAttachments', () => {
87
- // Arrange
88
- const eventType = extraction_1.EventType.ContinueExtractingAttachments;
89
- // Act
90
- const result = (0, spawn_helpers_1.getTimeoutErrorEventType)(eventType);
91
- // Assert
92
- expect(result.eventType).toBe(extraction_1.ExtractorEventType.AttachmentExtractionError);
93
- });
94
- it('should return AttachmentExtractionError for deprecated ExtractionAttachmentsStart', () => {
95
- // Arrange
96
- const eventType = extraction_1.EventType.StartExtractingAttachments;
97
- // Act
98
- const result = (0, spawn_helpers_1.getTimeoutErrorEventType)(eventType);
99
- // Assert
100
- expect(result.eventType).toBe(extraction_1.ExtractorEventType.AttachmentExtractionError);
101
- });
102
- it('should return AttachmentExtractionError for deprecated ExtractionAttachmentsContinue', () => {
103
- // Arrange
104
- const eventType = extraction_1.EventType.ContinueExtractingAttachments;
105
- // Act
106
- const result = (0, spawn_helpers_1.getTimeoutErrorEventType)(eventType);
107
- // Assert
108
- expect(result.eventType).toBe(extraction_1.ExtractorEventType.AttachmentExtractionError);
109
- });
110
- });
111
- describe('extractor attachments state deletion', () => {
112
- it('should return ExtractorAttachmentsStateDeletionError for StartDeletingExtractorAttachmentsState', () => {
113
- // Arrange
114
- const eventType = extraction_1.EventType.StartDeletingExtractorAttachmentsState;
115
- // Act
116
- const result = (0, spawn_helpers_1.getTimeoutErrorEventType)(eventType);
117
- // Assert
118
- expect(result.eventType).toBe(extraction_1.ExtractorEventType.ExtractorAttachmentsStateDeletionError);
119
- });
120
- it('should return ExtractorAttachmentsStateDeletionError for deprecated ExtractionAttachmentsDelete', () => {
121
- // Arrange
122
- const eventType = extraction_1.EventType.StartDeletingExtractorAttachmentsState;
123
- // Act
124
- const result = (0, spawn_helpers_1.getTimeoutErrorEventType)(eventType);
125
- // Assert
126
- expect(result.eventType).toBe(extraction_1.ExtractorEventType.ExtractorAttachmentsStateDeletionError);
127
- });
128
- });
129
- describe('external sync units extraction', () => {
130
- it('should return ExternalSyncUnitExtractionError for StartExtractingExternalSyncUnits', () => {
131
- // Arrange
132
- const eventType = extraction_1.EventType.StartExtractingExternalSyncUnits;
133
- // Act
134
- const result = (0, spawn_helpers_1.getTimeoutErrorEventType)(eventType);
135
- // Assert
136
- expect(result.eventType).toBe(extraction_1.ExtractorEventType.ExternalSyncUnitExtractionError);
137
- });
138
- it('should return ExternalSyncUnitExtractionError for deprecated ExtractionExternalSyncUnitsStart', () => {
139
- // Arrange
140
- const eventType = extraction_1.EventType.StartExtractingExternalSyncUnits;
141
- // Act
142
- const result = (0, spawn_helpers_1.getTimeoutErrorEventType)(eventType);
143
- // Assert
144
- expect(result.eventType).toBe(extraction_1.ExtractorEventType.ExternalSyncUnitExtractionError);
145
- });
146
- });
147
- describe('data loading', () => {
148
- it('should return DataLoadingError for StartLoadingData', () => {
149
- // Arrange
150
- const eventType = extraction_1.EventType.StartLoadingData;
151
- // Act
152
- const result = (0, spawn_helpers_1.getTimeoutErrorEventType)(eventType);
153
- // Assert
154
- expect(result.eventType).toBe(loading_1.LoaderEventType.DataLoadingError);
155
- });
156
- it('should return DataLoadingError for ContinueLoadingData', () => {
157
- // Arrange
158
- const eventType = extraction_1.EventType.ContinueLoadingData;
159
- // Act
160
- const result = (0, spawn_helpers_1.getTimeoutErrorEventType)(eventType);
161
- // Assert
162
- expect(result.eventType).toBe(loading_1.LoaderEventType.DataLoadingError);
163
- });
164
- });
165
- describe('loader state deletion', () => {
166
- it('should return LoaderStateDeletionError for StartDeletingLoaderState', () => {
167
- // Arrange
168
- const eventType = extraction_1.EventType.StartDeletingLoaderState;
169
- // Act
170
- const result = (0, spawn_helpers_1.getTimeoutErrorEventType)(eventType);
171
- // Assert
172
- expect(result.eventType).toBe(loading_1.LoaderEventType.LoaderStateDeletionError);
173
- });
174
- });
175
- describe('attachment loading', () => {
176
- it('should return AttachmentLoadingError for StartLoadingAttachments', () => {
177
- // Arrange
178
- const eventType = extraction_1.EventType.StartLoadingAttachments;
179
- // Act
180
- const result = (0, spawn_helpers_1.getTimeoutErrorEventType)(eventType);
181
- // Assert
182
- expect(result.eventType).toBe(loading_1.LoaderEventType.AttachmentLoadingError);
183
- });
184
- it('should return AttachmentLoadingError for ContinueLoadingAttachments', () => {
185
- // Arrange
186
- const eventType = extraction_1.EventType.ContinueLoadingAttachments;
187
- // Act
188
- const result = (0, spawn_helpers_1.getTimeoutErrorEventType)(eventType);
189
- // Assert
190
- expect(result.eventType).toBe(loading_1.LoaderEventType.AttachmentLoadingError);
191
- });
192
- });
193
- describe('loader attachment state deletion', () => {
194
- it('should return LoaderAttachmentStateDeletionError for StartDeletingLoaderAttachmentState', () => {
195
- // Arrange
196
- const eventType = extraction_1.EventType.StartDeletingLoaderAttachmentState;
197
- // Act
198
- const result = (0, spawn_helpers_1.getTimeoutErrorEventType)(eventType);
199
- // Assert
200
- expect(result.eventType).toBe(loading_1.LoaderEventType.LoaderAttachmentStateDeletionError);
201
- });
202
- });
203
- describe('unknown event types', () => {
204
- it('[edge] should return UnknownEventType and log error for unrecognized event type', () => {
205
- // Arrange
206
- const eventType = extraction_1.EventType.UnknownEventType;
207
- const consoleErrorSpy = jest
208
- .spyOn(console, 'error')
209
- .mockImplementation(() => { });
210
- // Act
211
- const result = (0, spawn_helpers_1.getTimeoutErrorEventType)(eventType);
212
- // Assert
213
- expect(result.eventType).toBe(loading_1.LoaderEventType.UnknownEventType);
214
- expect(consoleErrorSpy).toHaveBeenCalledWith('Event type not recognized in getTimeoutErrorEventType function: ' +
215
- eventType);
216
- // Cleanup
217
- consoleErrorSpy.mockRestore();
218
- });
219
- });
220
- });
221
- describe(spawn_helpers_1.getNoScriptEventType.name, () => {
222
- describe('extractor state deletion', () => {
223
- it('should return ExtractorStateDeletionDone for StartDeletingExtractorState', () => {
224
- // Arrange
225
- const eventType = extraction_1.EventType.StartDeletingExtractorState;
226
- // Act
227
- const result = (0, spawn_helpers_1.getNoScriptEventType)(eventType);
228
- // Assert
229
- expect(result.eventType).toBe(extraction_1.ExtractorEventType.ExtractorStateDeletionDone);
230
- });
231
- });
232
- describe('extractor attachments state deletion', () => {
233
- it('should return ExtractorAttachmentsStateDeletionDone for StartDeletingExtractorAttachmentsState', () => {
234
- // Arrange
235
- const eventType = extraction_1.EventType.StartDeletingExtractorAttachmentsState;
236
- // Act
237
- const result = (0, spawn_helpers_1.getNoScriptEventType)(eventType);
238
- // Assert
239
- expect(result.eventType).toBe(extraction_1.ExtractorEventType.ExtractorAttachmentsStateDeletionDone);
240
- });
241
- });
242
- describe('loader state deletion', () => {
243
- it('should return LoaderStateDeletionDone for StartDeletingLoaderState', () => {
244
- // Arrange
245
- const eventType = extraction_1.EventType.StartDeletingLoaderState;
246
- // Act
247
- const result = (0, spawn_helpers_1.getNoScriptEventType)(eventType);
248
- // Assert
249
- expect(result.eventType).toBe(loading_1.LoaderEventType.LoaderStateDeletionDone);
250
- });
251
- });
252
- describe('loader attachment state deletion', () => {
253
- it('should return LoaderAttachmentStateDeletionDone for StartDeletingLoaderAttachmentState', () => {
254
- // Arrange
255
- const eventType = extraction_1.EventType.StartDeletingLoaderAttachmentState;
256
- // Act
257
- const result = (0, spawn_helpers_1.getNoScriptEventType)(eventType);
258
- // Assert
259
- expect(result.eventType).toBe(loading_1.LoaderEventType.LoaderAttachmentStateDeletionDone);
260
- });
261
- });
262
- describe('unknown event types', () => {
263
- it('[edge] should return UnknownEventType and log error for unrecognized event type', () => {
264
- // Arrange
265
- const eventType = extraction_1.EventType.StartExtractingData;
266
- const consoleErrorSpy = jest
267
- .spyOn(console, 'error')
268
- .mockImplementation(() => { });
269
- // Act
270
- const result = (0, spawn_helpers_1.getNoScriptEventType)(eventType);
271
- // Assert
272
- expect(result.eventType).toBe(loading_1.LoaderEventType.UnknownEventType);
273
- expect(consoleErrorSpy).toHaveBeenCalledWith('Event type not recognized in getNoScriptEventType function: ' +
274
- eventType);
275
- // Cleanup
276
- consoleErrorSpy.mockRestore();
277
- });
278
- it('[edge] should return UnknownEventType for StartLoadingData', () => {
279
- // Arrange
280
- const eventType = extraction_1.EventType.StartLoadingData;
281
- const consoleErrorSpy = jest
282
- .spyOn(console, 'error')
283
- .mockImplementation(() => { });
284
- // Act
285
- const result = (0, spawn_helpers_1.getNoScriptEventType)(eventType);
286
- // Assert
287
- expect(result.eventType).toBe(loading_1.LoaderEventType.UnknownEventType);
288
- expect(consoleErrorSpy).toHaveBeenCalled();
289
- // Cleanup
290
- consoleErrorSpy.mockRestore();
291
- });
292
- });
293
- });
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=spawn.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"spawn.test.d.ts","sourceRoot":"","sources":["../../../src/multithreading/spawn/spawn.test.ts"],"names":[],"mappings":""}