@livestore/utils 0.4.0-dev.9 → 0.5.0-dev.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (316) hide show
  1. package/dist/.tsbuildinfo +1 -0
  2. package/dist/NoopTracer.d.ts +7 -8
  3. package/dist/NoopTracer.d.ts.map +1 -1
  4. package/dist/NoopTracer.js +13 -15
  5. package/dist/NoopTracer.js.map +1 -1
  6. package/dist/NoopTracer.test.d.ts +2 -0
  7. package/dist/NoopTracer.test.d.ts.map +1 -0
  8. package/dist/NoopTracer.test.js +17 -0
  9. package/dist/NoopTracer.test.js.map +1 -0
  10. package/dist/binary.js +1 -1
  11. package/dist/binary.js.map +1 -1
  12. package/dist/browser/Opfs/Opfs.d.ts +201 -0
  13. package/dist/browser/Opfs/Opfs.d.ts.map +1 -0
  14. package/dist/browser/Opfs/Opfs.js +170 -0
  15. package/dist/browser/Opfs/Opfs.js.map +1 -0
  16. package/dist/browser/Opfs/debug-utils.d.ts +20 -0
  17. package/dist/browser/Opfs/debug-utils.d.ts.map +1 -0
  18. package/dist/browser/Opfs/debug-utils.js +95 -0
  19. package/dist/browser/Opfs/debug-utils.js.map +1 -0
  20. package/dist/browser/Opfs/mod.d.ts +4 -0
  21. package/dist/browser/Opfs/mod.d.ts.map +1 -0
  22. package/dist/browser/Opfs/mod.js +4 -0
  23. package/dist/browser/Opfs/mod.js.map +1 -0
  24. package/dist/browser/Opfs/utils.d.ts +71 -0
  25. package/dist/browser/Opfs/utils.d.ts.map +1 -0
  26. package/dist/browser/Opfs/utils.js +227 -0
  27. package/dist/browser/Opfs/utils.js.map +1 -0
  28. package/dist/browser/QuotaExceededError.d.ts +60 -0
  29. package/dist/browser/QuotaExceededError.d.ts.map +1 -0
  30. package/dist/browser/QuotaExceededError.js +2 -0
  31. package/dist/browser/QuotaExceededError.js.map +1 -0
  32. package/dist/browser/WebChannelBrowser.d.ts +22 -0
  33. package/dist/browser/WebChannelBrowser.d.ts.map +1 -0
  34. package/dist/browser/WebChannelBrowser.js +87 -0
  35. package/dist/browser/WebChannelBrowser.js.map +1 -0
  36. package/dist/browser/WebError.d.ts +389 -0
  37. package/dist/browser/WebError.d.ts.map +1 -0
  38. package/dist/browser/WebError.js +423 -0
  39. package/dist/browser/WebError.js.map +1 -0
  40. package/dist/browser/WebError.test.d.ts +2 -0
  41. package/dist/browser/WebError.test.d.ts.map +1 -0
  42. package/dist/browser/WebError.test.js +46 -0
  43. package/dist/browser/WebError.test.js.map +1 -0
  44. package/dist/browser/WebLock.d.ts.map +1 -0
  45. package/dist/{effect → browser}/WebLock.js +21 -21
  46. package/dist/browser/WebLock.js.map +1 -0
  47. package/dist/{browser.d.ts → browser/detect.d.ts} +1 -1
  48. package/dist/browser/detect.d.ts.map +1 -0
  49. package/dist/{browser.js → browser/detect.js} +7 -7
  50. package/dist/browser/detect.js.map +1 -0
  51. package/dist/browser/mod.d.ts +8 -0
  52. package/dist/browser/mod.d.ts.map +1 -0
  53. package/dist/browser/mod.js +8 -0
  54. package/dist/browser/mod.js.map +1 -0
  55. package/dist/cuid/cuid.browser.js +1 -1
  56. package/dist/cuid/cuid.browser.js.map +1 -1
  57. package/dist/cuid/cuid.node.js +1 -1
  58. package/dist/cuid/cuid.node.js.map +1 -1
  59. package/dist/effect/Debug.d.ts +38 -0
  60. package/dist/effect/Debug.d.ts.map +1 -0
  61. package/dist/effect/Debug.js +350 -0
  62. package/dist/effect/Debug.js.map +1 -0
  63. package/dist/effect/Effect.d.ts +91 -22
  64. package/dist/effect/Effect.d.ts.map +1 -1
  65. package/dist/effect/Effect.js +126 -38
  66. package/dist/effect/Effect.js.map +1 -1
  67. package/dist/effect/Effect.test.d.ts +2 -0
  68. package/dist/effect/Effect.test.d.ts.map +1 -0
  69. package/dist/effect/Effect.test.js +72 -0
  70. package/dist/effect/Effect.test.js.map +1 -0
  71. package/dist/effect/Error.d.ts +4 -6
  72. package/dist/effect/Error.d.ts.map +1 -1
  73. package/dist/effect/Error.js +1 -1
  74. package/dist/effect/Error.js.map +1 -1
  75. package/dist/effect/Logger.d.ts +0 -6
  76. package/dist/effect/Logger.d.ts.map +1 -1
  77. package/dist/effect/Logger.js +0 -32
  78. package/dist/effect/Logger.js.map +1 -1
  79. package/dist/effect/OtelTracer.d.ts +1 -1
  80. package/dist/effect/OtelTracer.d.ts.map +1 -1
  81. package/dist/effect/OtelTracer.js +2 -3
  82. package/dist/effect/OtelTracer.js.map +1 -1
  83. package/dist/effect/RpcClient.d.ts +7 -7
  84. package/dist/effect/RpcClient.d.ts.map +1 -1
  85. package/dist/effect/RpcClient.js +74 -54
  86. package/dist/effect/RpcClient.js.map +1 -1
  87. package/dist/effect/Schedule.d.ts +1 -1
  88. package/dist/effect/Schedule.d.ts.map +1 -1
  89. package/dist/effect/Schedule.js +2 -2
  90. package/dist/effect/Schedule.js.map +1 -1
  91. package/dist/effect/Schema/debug-diff.d.ts +1 -1
  92. package/dist/effect/Schema/debug-diff.d.ts.map +1 -1
  93. package/dist/effect/Schema/debug-diff.js +9 -10
  94. package/dist/effect/Schema/debug-diff.js.map +1 -1
  95. package/dist/effect/Schema/debug-diff.test.js +7 -4
  96. package/dist/effect/Schema/debug-diff.test.js.map +1 -1
  97. package/dist/effect/Schema/index.d.ts +28 -18
  98. package/dist/effect/Schema/index.d.ts.map +1 -1
  99. package/dist/effect/Schema/index.js +55 -28
  100. package/dist/effect/Schema/index.js.map +1 -1
  101. package/dist/effect/Stream.d.ts +13 -5
  102. package/dist/effect/Stream.d.ts.map +1 -1
  103. package/dist/effect/Stream.js +19 -12
  104. package/dist/effect/Stream.js.map +1 -1
  105. package/dist/effect/Stream.test.js +12 -12
  106. package/dist/effect/Stream.test.js.map +1 -1
  107. package/dist/effect/Subscribable.d.ts +9 -3
  108. package/dist/effect/Subscribable.d.ts.map +1 -1
  109. package/dist/effect/Subscribable.js +20 -35
  110. package/dist/effect/Subscribable.js.map +1 -1
  111. package/dist/effect/SubscriptionRef.d.ts +5 -6
  112. package/dist/effect/SubscriptionRef.d.ts.map +1 -1
  113. package/dist/effect/SubscriptionRef.js +2 -3
  114. package/dist/effect/SubscriptionRef.js.map +1 -1
  115. package/dist/effect/TaskTracing.d.ts +1 -1
  116. package/dist/effect/TaskTracing.d.ts.map +1 -1
  117. package/dist/effect/TaskTracing.js +12 -16
  118. package/dist/effect/TaskTracing.js.map +1 -1
  119. package/dist/effect/WebChannel/WebChannel.d.ts +11 -30
  120. package/dist/effect/WebChannel/WebChannel.d.ts.map +1 -1
  121. package/dist/effect/WebChannel/WebChannel.js +70 -125
  122. package/dist/effect/WebChannel/WebChannel.js.map +1 -1
  123. package/dist/effect/WebChannel/WebChannel.test.js +16 -16
  124. package/dist/effect/WebChannel/WebChannel.test.js.map +1 -1
  125. package/dist/effect/WebChannel/broadcastChannelWithAck.d.ts.map +1 -1
  126. package/dist/effect/WebChannel/broadcastChannelWithAck.js +20 -13
  127. package/dist/effect/WebChannel/broadcastChannelWithAck.js.map +1 -1
  128. package/dist/effect/WebChannel/common.d.ts +17 -18
  129. package/dist/effect/WebChannel/common.d.ts.map +1 -1
  130. package/dist/effect/WebChannel/common.js +7 -7
  131. package/dist/effect/WebChannel/common.js.map +1 -1
  132. package/dist/effect/WebSocket.d.ts +4 -6
  133. package/dist/effect/WebSocket.d.ts.map +1 -1
  134. package/dist/effect/WebSocket.js +17 -17
  135. package/dist/effect/WebSocket.js.map +1 -1
  136. package/dist/effect/WebSocket.test.js +2 -2
  137. package/dist/effect/WebSocket.test.js.map +1 -1
  138. package/dist/effect/mod.browser-build.test.d.ts +2 -0
  139. package/dist/effect/mod.browser-build.test.d.ts.map +1 -0
  140. package/dist/effect/mod.browser-build.test.js +18 -0
  141. package/dist/effect/mod.browser-build.test.js.map +1 -0
  142. package/dist/effect/mod.d.ts +30 -0
  143. package/dist/effect/mod.d.ts.map +1 -0
  144. package/dist/effect/mod.js +30 -0
  145. package/dist/effect/mod.js.map +1 -0
  146. package/dist/effect/spanEvent.d.ts +12 -0
  147. package/dist/effect/spanEvent.d.ts.map +1 -0
  148. package/dist/effect/spanEvent.js +12 -0
  149. package/dist/effect/spanEvent.js.map +1 -0
  150. package/dist/effect/spanEvent.test.d.ts +2 -0
  151. package/dist/effect/spanEvent.test.d.ts.map +1 -0
  152. package/dist/effect/spanEvent.test.js +79 -0
  153. package/dist/effect/spanEvent.test.js.map +1 -0
  154. package/dist/env.d.ts.map +1 -1
  155. package/dist/env.js +1 -1
  156. package/dist/env.js.map +1 -1
  157. package/dist/fast-deep-equal.d.ts.map +1 -1
  158. package/dist/fast-deep-equal.js +9 -10
  159. package/dist/fast-deep-equal.js.map +1 -1
  160. package/dist/global.d.ts +3 -0
  161. package/dist/global.d.ts.map +1 -1
  162. package/dist/global.js.map +1 -1
  163. package/dist/misc.d.ts +9 -1
  164. package/dist/misc.d.ts.map +1 -1
  165. package/dist/misc.js +12 -4
  166. package/dist/misc.js.map +1 -1
  167. package/dist/mod.d.ts +177 -20
  168. package/dist/mod.d.ts.map +1 -1
  169. package/dist/mod.js +159 -22
  170. package/dist/mod.js.map +1 -1
  171. package/dist/node/mod.d.ts +45 -6
  172. package/dist/node/mod.d.ts.map +1 -1
  173. package/dist/node/mod.js +51 -9
  174. package/dist/node/mod.js.map +1 -1
  175. package/dist/object/index.d.ts +0 -9
  176. package/dist/object/index.d.ts.map +1 -1
  177. package/dist/object/index.js +0 -9
  178. package/dist/object/index.js.map +1 -1
  179. package/dist/object/stringify-object.js +2 -2
  180. package/dist/object/stringify-object.js.map +1 -1
  181. package/dist/object/stringify-object.test.js.map +1 -1
  182. package/dist/qr.d.ts +38 -0
  183. package/dist/qr.d.ts.map +1 -0
  184. package/dist/qr.js +109 -0
  185. package/dist/qr.js.map +1 -0
  186. package/dist/set.js +1 -1
  187. package/dist/set.js.map +1 -1
  188. package/dist/string.d.ts +0 -2
  189. package/dist/string.d.ts.map +1 -1
  190. package/dist/string.js +0 -2
  191. package/dist/string.js.map +1 -1
  192. package/package.json +61 -55
  193. package/src/NoopTracer.test.ts +20 -0
  194. package/src/NoopTracer.ts +28 -37
  195. package/src/binary.ts +1 -1
  196. package/src/browser/Opfs/Opfs.ts +463 -0
  197. package/src/browser/Opfs/debug-utils.ts +154 -0
  198. package/src/browser/Opfs/mod.ts +3 -0
  199. package/src/browser/Opfs/utils.ts +297 -0
  200. package/src/browser/QuotaExceededError.ts +60 -0
  201. package/src/browser/WebChannelBrowser.ts +145 -0
  202. package/src/browser/WebError.test.ts +66 -0
  203. package/src/browser/WebError.ts +587 -0
  204. package/src/{effect → browser}/WebLock.ts +27 -28
  205. package/src/{browser.ts → browser/detect.ts} +6 -6
  206. package/src/browser/mod.ts +8 -0
  207. package/src/cuid/cuid.browser.ts +1 -1
  208. package/src/cuid/cuid.node.ts +1 -1
  209. package/src/effect/Debug.ts +477 -0
  210. package/src/effect/Effect.test.ts +117 -0
  211. package/src/effect/Effect.ts +174 -79
  212. package/src/effect/Error.ts +1 -1
  213. package/src/effect/Logger.ts +0 -48
  214. package/src/effect/OtelTracer.ts +2 -3
  215. package/src/effect/RpcClient.ts +85 -65
  216. package/src/effect/Schedule.ts +4 -5
  217. package/src/effect/Schema/debug-diff.test.ts +7 -7
  218. package/src/effect/Schema/debug-diff.ts +11 -12
  219. package/src/effect/Schema/index.ts +121 -57
  220. package/src/effect/Stream.test.ts +14 -13
  221. package/src/effect/Stream.ts +23 -16
  222. package/src/effect/Subscribable.ts +31 -42
  223. package/src/effect/SubscriptionRef.ts +9 -13
  224. package/src/effect/TaskTracing.ts +13 -16
  225. package/src/effect/WebChannel/WebChannel.test.ts +24 -24
  226. package/src/effect/WebChannel/WebChannel.ts +102 -192
  227. package/src/effect/WebChannel/broadcastChannelWithAck.ts +25 -15
  228. package/src/effect/WebChannel/common.ts +16 -17
  229. package/src/effect/WebSocket.test.ts +2 -2
  230. package/src/effect/WebSocket.ts +20 -16
  231. package/src/effect/mod.browser-build.test.ts +19 -0
  232. package/src/effect/{index.ts → mod.ts} +43 -69
  233. package/src/effect/spanEvent.test.ts +92 -0
  234. package/src/effect/spanEvent.ts +17 -0
  235. package/src/env.ts +2 -1
  236. package/src/fast-deep-equal.ts +9 -10
  237. package/src/global.ts +4 -2
  238. package/src/misc.ts +13 -5
  239. package/src/mod.ts +188 -32
  240. package/src/node/mod.ts +57 -12
  241. package/src/object/index.ts +0 -24
  242. package/src/object/stringify-object.test.ts +1 -0
  243. package/src/object/stringify-object.ts +2 -2
  244. package/src/qr.ts +125 -0
  245. package/src/set.ts +1 -1
  246. package/src/string.ts +0 -3
  247. package/dist/.tsbuildinfo.json +0 -1
  248. package/dist/browser.d.ts.map +0 -1
  249. package/dist/browser.js.map +0 -1
  250. package/dist/effect/BucketQueue.d.ts +0 -20
  251. package/dist/effect/BucketQueue.d.ts.map +0 -1
  252. package/dist/effect/BucketQueue.js +0 -34
  253. package/dist/effect/BucketQueue.js.map +0 -1
  254. package/dist/effect/Scheduler.d.ts +0 -4
  255. package/dist/effect/Scheduler.d.ts.map +0 -1
  256. package/dist/effect/Scheduler.js +0 -9
  257. package/dist/effect/Scheduler.js.map +0 -1
  258. package/dist/effect/ServiceContext.d.ts +0 -37
  259. package/dist/effect/ServiceContext.d.ts.map +0 -1
  260. package/dist/effect/ServiceContext.js +0 -55
  261. package/dist/effect/ServiceContext.js.map +0 -1
  262. package/dist/effect/WebLock.d.ts.map +0 -1
  263. package/dist/effect/WebLock.js.map +0 -1
  264. package/dist/effect/index.d.ts +0 -32
  265. package/dist/effect/index.d.ts.map +0 -1
  266. package/dist/effect/index.js +0 -35
  267. package/dist/effect/index.js.map +0 -1
  268. package/dist/guards.d.ts +0 -6
  269. package/dist/guards.d.ts.map +0 -1
  270. package/dist/guards.js +0 -6
  271. package/dist/guards.js.map +0 -1
  272. package/dist/node/ChildProcessRunner/ChildProcessRunner.d.ts +0 -4
  273. package/dist/node/ChildProcessRunner/ChildProcessRunner.d.ts.map +0 -1
  274. package/dist/node/ChildProcessRunner/ChildProcessRunner.js +0 -122
  275. package/dist/node/ChildProcessRunner/ChildProcessRunner.js.map +0 -1
  276. package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/ChildProcessRunner.test.d.ts +0 -2
  277. package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/ChildProcessRunner.test.d.ts.map +0 -1
  278. package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/ChildProcessRunner.test.js +0 -218
  279. package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/ChildProcessRunner.test.js.map +0 -1
  280. package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/schema.d.ts +0 -84
  281. package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/schema.d.ts.map +0 -1
  282. package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/schema.js +0 -68
  283. package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/schema.js.map +0 -1
  284. package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/serializedWorker.d.ts +0 -2
  285. package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/serializedWorker.d.ts.map +0 -1
  286. package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/serializedWorker.js +0 -52
  287. package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/serializedWorker.js.map +0 -1
  288. package/dist/node/ChildProcessRunner/ChildProcessWorker.d.ts +0 -23
  289. package/dist/node/ChildProcessRunner/ChildProcessWorker.d.ts.map +0 -1
  290. package/dist/node/ChildProcessRunner/ChildProcessWorker.js +0 -138
  291. package/dist/node/ChildProcessRunner/ChildProcessWorker.js.map +0 -1
  292. package/dist/object/omit.d.ts +0 -3
  293. package/dist/object/omit.d.ts.map +0 -1
  294. package/dist/object/omit.js +0 -14
  295. package/dist/object/omit.js.map +0 -1
  296. package/dist/object/pick.d.ts +0 -14
  297. package/dist/object/pick.d.ts.map +0 -1
  298. package/dist/object/pick.js +0 -17
  299. package/dist/object/pick.js.map +0 -1
  300. package/dist/time.d.ts +0 -12
  301. package/dist/time.d.ts.map +0 -1
  302. package/dist/time.js +0 -22
  303. package/dist/time.js.map +0 -1
  304. package/src/effect/BucketQueue.ts +0 -49
  305. package/src/effect/Scheduler.ts +0 -13
  306. package/src/effect/ServiceContext.ts +0 -108
  307. package/src/guards.ts +0 -8
  308. package/src/node/ChildProcessRunner/ChildProcessRunner.ts +0 -135
  309. package/src/node/ChildProcessRunner/ChildProcessRunnerTest/ChildProcessRunner.test.ts +0 -302
  310. package/src/node/ChildProcessRunner/ChildProcessRunnerTest/schema.ts +0 -78
  311. package/src/node/ChildProcessRunner/ChildProcessRunnerTest/serializedWorker.ts +0 -66
  312. package/src/node/ChildProcessRunner/ChildProcessWorker.ts +0 -168
  313. package/src/object/omit.ts +0 -17
  314. package/src/object/pick.ts +0 -27
  315. package/src/time.ts +0 -25
  316. /package/dist/{effect → browser}/WebLock.d.ts +0 -0
@@ -1,218 +0,0 @@
1
- import * as ChildProcess from 'node:child_process';
2
- import * as EffectWorker from '@effect/platform/Worker';
3
- import { assert, describe, it } from '@effect/vitest';
4
- import { Chunk, Effect, Exit, Fiber, Scope, Stream } from 'effect';
5
- import * as ChildProcessWorker from "../ChildProcessWorker.js";
6
- import { GetPersonById, GetUserById, InitialMessage, Person, StartStubbornWorker, User } from "./schema.js";
7
- const WorkerLive = ChildProcessWorker.layer(() => ChildProcess.fork(new URL('../../../../dist/node/ChildProcessRunner/ChildProcessRunnerTest/serializedWorker.js', import.meta.url)));
8
- // const WorkerLive = NodeWorker.layer(
9
- // () =>
10
- // new WorkerThreads.Worker(
11
- // new URL('../../../../dist/node/ChildProcessRunner/ChildProcessRunnerTest/serializedWorker.js', import.meta.url),
12
- // ),
13
- // )
14
- describe('ChildProcessRunner', { timeout: 10_000 }, () => {
15
- it('Serialized', () => Effect.gen(function* () {
16
- const pool = yield* EffectWorker.makePoolSerialized({ size: 1 });
17
- const people = yield* pool.execute(new GetPersonById({ id: 123 })).pipe(Stream.runCollect);
18
- assert.deepStrictEqual(Chunk.toReadonlyArray(people), [
19
- new Person({ id: 123, name: 'test', data: new Uint8Array([1, 2, 3]) }),
20
- new Person({ id: 123, name: 'ing', data: new Uint8Array([4, 5, 6]) }),
21
- ]);
22
- }).pipe(Effect.scoped, Effect.provide(WorkerLive), Effect.runPromise));
23
- it('Serialized with initialMessage', () => Effect.gen(function* () {
24
- const pool = yield* EffectWorker.makePoolSerialized({
25
- size: 1,
26
- initialMessage: () => new InitialMessage({ name: 'custom', data: new Uint8Array([1, 2, 3]) }),
27
- });
28
- let user = yield* pool.executeEffect(new GetUserById({ id: 123 }));
29
- user = yield* pool.executeEffect(new GetUserById({ id: 123 }));
30
- assert.deepStrictEqual(user, new User({ id: 123, name: 'custom' }));
31
- const people = yield* pool.execute(new GetPersonById({ id: 123 })).pipe(Stream.runCollect);
32
- assert.deepStrictEqual(Chunk.toReadonlyArray(people), [
33
- new Person({ id: 123, name: 'test', data: new Uint8Array([1, 2, 3]) }),
34
- new Person({ id: 123, name: 'ing', data: new Uint8Array([4, 5, 6]) }),
35
- ]);
36
- }).pipe(Effect.scoped, Effect.provide(WorkerLive), Effect.runPromise));
37
- describe('Process Cleanup', { timeout: 15_000 }, () => {
38
- const isProcessRunning = (pid) => {
39
- try {
40
- process.kill(pid, 0); // Signal 0 checks if process exists
41
- return true;
42
- }
43
- catch {
44
- return false;
45
- }
46
- };
47
- it('should clean up child processes when Effect is interrupted', () => Effect.gen(function* () {
48
- let workerPid;
49
- const testEffect = Effect.gen(function* () {
50
- const pool = yield* EffectWorker.makePoolSerialized({
51
- size: 1,
52
- initialMessage: () => new InitialMessage({ name: 'test', data: new Uint8Array([1, 2, 3]) }),
53
- });
54
- const result = yield* pool.executeEffect(new StartStubbornWorker({ blockDuration: 30_000 }));
55
- workerPid = result.pid;
56
- // Verify the worker process is running
57
- assert.strictEqual(isProcessRunning(workerPid), true, 'Worker process should be running');
58
- // Start a long-running operation that we'll interrupt
59
- yield* Effect.sleep('60 seconds');
60
- }).pipe(Effect.scoped, Effect.provide(WorkerLive));
61
- // Run the test effect but interrupt it after 2 seconds
62
- const fiber = yield* Effect.fork(testEffect);
63
- yield* Effect.sleep('2 seconds');
64
- yield* Fiber.interrupt(fiber);
65
- // Wait a moment for cleanup to complete
66
- yield* Effect.sleep('1 second');
67
- // Verify the child process was cleaned up
68
- if (workerPid) {
69
- assert.strictEqual(isProcessRunning(workerPid), false, `Worker process ${workerPid} should be terminated after Effect interruption`);
70
- }
71
- else {
72
- assert.fail('Worker PID was not captured');
73
- }
74
- }).pipe(Effect.runPromise));
75
- it('should clean up child processes when scope is closed abruptly', () => Effect.gen(function* () {
76
- let workerPid;
77
- // Create a scope that we can close manually
78
- const scope = yield* Scope.make();
79
- try {
80
- const pool = yield* EffectWorker.makePoolSerialized({
81
- size: 1,
82
- initialMessage: () => new InitialMessage({ name: 'test', data: new Uint8Array([1, 2, 3]) }),
83
- }).pipe(Scope.extend(scope), Effect.provide(WorkerLive));
84
- const result = yield* pool.executeEffect(new StartStubbornWorker({ blockDuration: 30_000 }));
85
- workerPid = result.pid;
86
- // Verify the worker is running
87
- assert.strictEqual(isProcessRunning(workerPid), true, 'Worker process should be running');
88
- }
89
- finally {
90
- // Abruptly close the scope (simulating test abortion)
91
- yield* Scope.close(scope, Exit.void);
92
- }
93
- // Wait for cleanup
94
- yield* Effect.sleep('1 second');
95
- // This should pass but will initially fail due to zombie process issue
96
- if (workerPid) {
97
- assert.strictEqual(isProcessRunning(workerPid), false, `Worker process ${workerPid} should be terminated after scope closure`);
98
- }
99
- else {
100
- assert.fail('Worker PID was not captured');
101
- }
102
- }).pipe(Effect.runPromise));
103
- it('should clean up child processes when parent receives SIGINT', () => Effect.gen(function* () {
104
- let workerPid;
105
- const pool = yield* EffectWorker.makePoolSerialized({
106
- size: 1,
107
- initialMessage: () => new InitialMessage({ name: 'test', data: new Uint8Array([1, 2, 3]) }),
108
- });
109
- const result = yield* pool.executeEffect(new StartStubbornWorker({ blockDuration: 60_000 }));
110
- workerPid = result.pid;
111
- // Verify the worker is running
112
- assert.strictEqual(isProcessRunning(workerPid), true, 'Worker process should be running');
113
- // Simulate SIGINT being sent to current process (like Ctrl+C in vitest)
114
- // This should trigger cleanup of child processes
115
- yield* Effect.async((resume) => {
116
- // Store current listeners before we manipulate them
117
- const currentSIGINTListeners = process.listeners('SIGINT').slice();
118
- // Set up our test handler
119
- const testHandler = () => {
120
- // Emit SIGINT to all current listeners to trigger cleanup
121
- currentSIGINTListeners.forEach((listener) => {
122
- try {
123
- ;
124
- listener();
125
- }
126
- catch {
127
- // Ignore errors
128
- }
129
- });
130
- resume(Effect.void);
131
- };
132
- // Remove all current SIGINT listeners and add our test handler
133
- process.removeAllListeners('SIGINT');
134
- process.once('SIGINT', testHandler);
135
- // Send SIGINT after a short delay
136
- setTimeout(() => {
137
- process.kill(process.pid, 'SIGINT');
138
- }, 1000);
139
- });
140
- // Wait for cleanup to complete
141
- yield* Effect.sleep('2 seconds');
142
- // This test should initially fail - child process will still be running
143
- if (workerPid) {
144
- assert.strictEqual(isProcessRunning(workerPid), false, `Worker process ${workerPid} should be terminated after SIGINT`);
145
- }
146
- else {
147
- assert.fail('Worker PID was not captured');
148
- }
149
- }).pipe(Effect.scoped, Effect.provide(WorkerLive), Effect.runPromise));
150
- it('should clean up multiple concurrent child processes', () => Effect.gen(function* () {
151
- let workerPids = [];
152
- const testEffect = Effect.gen(function* () {
153
- const pool = yield* EffectWorker.makePoolSerialized({
154
- size: 3, // Multiple workers
155
- initialMessage: () => new InitialMessage({ name: 'test', data: new Uint8Array([1, 2, 3]) }),
156
- });
157
- // Start multiple stubborn workers
158
- const workers = yield* Effect.all([
159
- pool.executeEffect(new StartStubbornWorker({ blockDuration: 30_000 })),
160
- pool.executeEffect(new StartStubbornWorker({ blockDuration: 30_000 })),
161
- pool.executeEffect(new StartStubbornWorker({ blockDuration: 30_000 })),
162
- ], { concurrency: 'unbounded' });
163
- workerPids = workers.map((w) => w.pid);
164
- // Verify all workers are running
165
- for (const pid of workerPids) {
166
- assert.strictEqual(isProcessRunning(pid), true, `Worker process ${pid} should be running`);
167
- }
168
- yield* Effect.sleep('30 seconds'); // Keep running until interrupted
169
- }).pipe(Effect.scoped, Effect.provide(WorkerLive));
170
- // Run with timeout to force termination
171
- const fiber = yield* Effect.fork(testEffect);
172
- yield* Effect.sleep('2 seconds');
173
- yield* Fiber.interrupt(fiber);
174
- // Wait for cleanup
175
- yield* Effect.sleep('2 seconds');
176
- // All worker processes should be cleaned up
177
- for (const pid of workerPids) {
178
- assert.strictEqual(isProcessRunning(pid), false, `Worker process ${pid} should be terminated after pool cleanup`);
179
- }
180
- }).pipe(Effect.runPromise));
181
- it('should handle direct ChildProcess.fork cleanup (node-sync pattern)', () => Effect.gen(function* () {
182
- let childPid;
183
- // This mimics the exact pattern used in node-sync tests
184
- const nodeChildProcess = ChildProcess.fork(new URL('../../../../dist/node/ChildProcessRunner/ChildProcessRunnerTest/serializedWorker.js', import.meta.url), ['test-client']);
185
- childPid = nodeChildProcess.pid;
186
- const testEffect = Effect.gen(function* () {
187
- const worker = yield* EffectWorker.makePoolSerialized({
188
- size: 1,
189
- concurrency: 100,
190
- initialMessage: () => new InitialMessage({ name: 'test', data: new Uint8Array([1, 2, 3]) }),
191
- }).pipe(Effect.provide(ChildProcessWorker.layer(() => nodeChildProcess)));
192
- // Start stubborn worker
193
- yield* worker.executeEffect(new StartStubbornWorker({ blockDuration: 60_000 }));
194
- // Verify process is running
195
- if (childPid) {
196
- assert.strictEqual(isProcessRunning(childPid), true, 'Child process should be running');
197
- }
198
- // Keep running until interrupted
199
- yield* Effect.sleep('30 seconds');
200
- }).pipe(Effect.scoped);
201
- // Simulate the exact abortion pattern from node-sync
202
- const fiber = yield* Effect.fork(testEffect);
203
- yield* Effect.sleep('2 seconds');
204
- // Force kill the fiber without proper cleanup (simulates Ctrl+C)
205
- yield* Fiber.interrupt(fiber);
206
- // Wait for cleanup
207
- yield* Effect.sleep('3 seconds');
208
- // This test should initially fail - demonstrating the zombie process issue
209
- if (childPid) {
210
- assert.strictEqual(isProcessRunning(childPid), false, `Child process ${childPid} should be terminated after forced interruption`);
211
- }
212
- else {
213
- assert.fail('Child PID was not captured');
214
- }
215
- }).pipe(Effect.runPromise));
216
- });
217
- });
218
- //# sourceMappingURL=ChildProcessRunner.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ChildProcessRunner.test.js","sourceRoot":"","sources":["../../../../src/node/ChildProcessRunner/ChildProcessRunnerTest/ChildProcessRunner.test.ts"],"names":[],"mappings":"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"}
@@ -1,84 +0,0 @@
1
- import * as Schema from 'effect/Schema';
2
- declare const User_base: Schema.Class<User, {
3
- id: typeof Schema.Number;
4
- name: typeof Schema.String;
5
- }, Schema.Struct.Encoded<{
6
- id: typeof Schema.Number;
7
- name: typeof Schema.String;
8
- }>, never, {
9
- readonly id: number;
10
- } & {
11
- readonly name: string;
12
- }, {}, {}>;
13
- export declare class User extends User_base {
14
- }
15
- declare const GetUserById_base: Schema.TaggedRequestClass<GetUserById, "GetUserById", {
16
- readonly _tag: Schema.tag<"GetUserById">;
17
- } & {
18
- id: typeof Schema.Number;
19
- }, typeof User, typeof Schema.Never>;
20
- export declare class GetUserById extends GetUserById_base {
21
- }
22
- declare const Person_base: Schema.Class<Person, {
23
- id: typeof Schema.Number;
24
- name: typeof Schema.String;
25
- data: typeof Schema.Uint8Array;
26
- }, Schema.Struct.Encoded<{
27
- id: typeof Schema.Number;
28
- name: typeof Schema.String;
29
- data: typeof Schema.Uint8Array;
30
- }>, never, {
31
- readonly data: Uint8Array<ArrayBufferLike>;
32
- } & {
33
- readonly id: number;
34
- } & {
35
- readonly name: string;
36
- }, {}, {}>;
37
- export declare class Person extends Person_base {
38
- }
39
- declare const GetPersonById_base: Schema.TaggedRequestClass<GetPersonById, "GetPersonById", {
40
- readonly _tag: Schema.tag<"GetPersonById">;
41
- } & {
42
- id: typeof Schema.Number;
43
- }, typeof Person, typeof Schema.Never>;
44
- export declare class GetPersonById extends GetPersonById_base {
45
- }
46
- declare const RunnerInterrupt_base: Schema.TaggedRequestClass<RunnerInterrupt, "RunnerInterrupt", {
47
- readonly _tag: Schema.tag<"RunnerInterrupt">;
48
- }, typeof Schema.Void, typeof Schema.Never>;
49
- export declare class RunnerInterrupt extends RunnerInterrupt_base {
50
- }
51
- declare const StartStubbornWorker_base: Schema.TaggedRequestClass<StartStubbornWorker, "StartStubbornWorker", {
52
- readonly _tag: Schema.tag<"StartStubbornWorker">;
53
- } & {
54
- blockDuration: typeof Schema.Number;
55
- }, Schema.Struct<{
56
- pid: typeof Schema.Number;
57
- }>, typeof Schema.Never>;
58
- export declare class StartStubbornWorker extends StartStubbornWorker_base {
59
- }
60
- declare const InitialMessage_base: Schema.TaggedRequestClass<InitialMessage, "InitialMessage", {
61
- readonly _tag: Schema.tag<"InitialMessage">;
62
- } & {
63
- name: typeof Schema.String;
64
- data: typeof Schema.Uint8Array;
65
- }, typeof Schema.Void, typeof Schema.Never>;
66
- export declare class InitialMessage extends InitialMessage_base {
67
- }
68
- declare const GetSpan_base: Schema.TaggedRequestClass<GetSpan, "GetSpan", {
69
- readonly _tag: Schema.tag<"GetSpan">;
70
- }, Schema.Struct<{
71
- name: typeof Schema.String;
72
- traceId: typeof Schema.String;
73
- spanId: typeof Schema.String;
74
- parent: Schema.Option<Schema.Struct<{
75
- traceId: typeof Schema.String;
76
- spanId: typeof Schema.String;
77
- }>>;
78
- }>, typeof Schema.Never>;
79
- export declare class GetSpan extends GetSpan_base {
80
- }
81
- export declare const WorkerMessage: Schema.Union<[typeof GetUserById, typeof GetPersonById, typeof InitialMessage, typeof GetSpan, typeof RunnerInterrupt, typeof StartStubbornWorker]>;
82
- export type WorkerMessage = Schema.Schema.Type<typeof WorkerMessage>;
83
- export {};
84
- //# sourceMappingURL=schema.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../src/node/ChildProcessRunner/ChildProcessRunnerTest/schema.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;;;;;;;;;;;;AAEvC,qBAAa,IAAK,SAAQ,SAGxB;CAAG;;;;;;AAEL,qBAAa,WAAY,SAAQ,gBAM/B;CAAG;;;;;;;;;;;;;;;;AAEL,qBAAa,MAAO,SAAQ,WAK1B;CAAG;;;;;;AAEL,qBAAa,aAAc,SAAQ,kBAMjC;CAAG;;;;AAEL,qBAAa,eAAgB,SAAQ,oBAInC;CAAG;;;;;;;;AAEL,qBAAa,mBAAoB,SAAQ,wBAIvC;CAAG;;;;;;;AAEL,qBAAa,cAAe,SAAQ,mBAQlC;CAAG;;;;;;;;;;;;AAEL,qBAAa,OAAQ,SAAQ,YAc3B;CAAG;AAEL,eAAO,MAAM,aAAa,qJAOzB,CAAA;AACD,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,aAAa,CAAC,CAAA"}
@@ -1,68 +0,0 @@
1
- // import * as Transferable from '@effect/platform/Transferable'
2
- import * as Schema from 'effect/Schema';
3
- export class User extends Schema.Class('User')({
4
- id: Schema.Number,
5
- name: Schema.String,
6
- }) {
7
- }
8
- export class GetUserById extends Schema.TaggedRequest()('GetUserById', {
9
- failure: Schema.Never,
10
- success: User,
11
- payload: {
12
- id: Schema.Number,
13
- },
14
- }) {
15
- }
16
- export class Person extends Schema.Class('Person')({
17
- id: Schema.Number,
18
- name: Schema.String,
19
- // data: Transferable.Uint8Array,
20
- data: Schema.Uint8Array,
21
- }) {
22
- }
23
- export class GetPersonById extends Schema.TaggedRequest()('GetPersonById', {
24
- failure: Schema.Never,
25
- success: Person,
26
- payload: {
27
- id: Schema.Number,
28
- },
29
- }) {
30
- }
31
- export class RunnerInterrupt extends Schema.TaggedRequest()('RunnerInterrupt', {
32
- failure: Schema.Never,
33
- success: Schema.Void,
34
- payload: {},
35
- }) {
36
- }
37
- export class StartStubbornWorker extends Schema.TaggedRequest()('StartStubbornWorker', {
38
- failure: Schema.Never,
39
- success: Schema.Struct({ pid: Schema.Number }),
40
- payload: { blockDuration: Schema.Number },
41
- }) {
42
- }
43
- export class InitialMessage extends Schema.TaggedRequest()('InitialMessage', {
44
- failure: Schema.Never,
45
- success: Schema.Void,
46
- payload: {
47
- name: Schema.String,
48
- data: Schema.Uint8Array,
49
- // data: Transferable.Uint8Array,
50
- },
51
- }) {
52
- }
53
- export class GetSpan extends Schema.TaggedRequest()('GetSpan', {
54
- failure: Schema.Never,
55
- success: Schema.Struct({
56
- name: Schema.String,
57
- traceId: Schema.String,
58
- spanId: Schema.String,
59
- parent: Schema.Option(Schema.Struct({
60
- traceId: Schema.String,
61
- spanId: Schema.String,
62
- })),
63
- }),
64
- payload: {},
65
- }) {
66
- }
67
- export const WorkerMessage = Schema.Union(GetUserById, GetPersonById, InitialMessage, GetSpan, RunnerInterrupt, StartStubbornWorker);
68
- //# sourceMappingURL=schema.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../src/node/ChildProcessRunner/ChildProcessRunnerTest/schema.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,MAAM,OAAO,IAAK,SAAQ,MAAM,CAAC,KAAK,CAAO,MAAM,CAAC,CAAC;IACnD,EAAE,EAAE,MAAM,CAAC,MAAM;IACjB,IAAI,EAAE,MAAM,CAAC,MAAM;CACpB,CAAC;CAAG;AAEL,MAAM,OAAO,WAAY,SAAQ,MAAM,CAAC,aAAa,EAAe,CAAC,aAAa,EAAE;IAClF,OAAO,EAAE,MAAM,CAAC,KAAK;IACrB,OAAO,EAAE,IAAI;IACb,OAAO,EAAE;QACP,EAAE,EAAE,MAAM,CAAC,MAAM;KAClB;CACF,CAAC;CAAG;AAEL,MAAM,OAAO,MAAO,SAAQ,MAAM,CAAC,KAAK,CAAS,QAAQ,CAAC,CAAC;IACzD,EAAE,EAAE,MAAM,CAAC,MAAM;IACjB,IAAI,EAAE,MAAM,CAAC,MAAM;IACnB,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC,UAAU;CACxB,CAAC;CAAG;AAEL,MAAM,OAAO,aAAc,SAAQ,MAAM,CAAC,aAAa,EAAiB,CAAC,eAAe,EAAE;IACxF,OAAO,EAAE,MAAM,CAAC,KAAK;IACrB,OAAO,EAAE,MAAM;IACf,OAAO,EAAE;QACP,EAAE,EAAE,MAAM,CAAC,MAAM;KAClB;CACF,CAAC;CAAG;AAEL,MAAM,OAAO,eAAgB,SAAQ,MAAM,CAAC,aAAa,EAAmB,CAAC,iBAAiB,EAAE;IAC9F,OAAO,EAAE,MAAM,CAAC,KAAK;IACrB,OAAO,EAAE,MAAM,CAAC,IAAI;IACpB,OAAO,EAAE,EAAE;CACZ,CAAC;CAAG;AAEL,MAAM,OAAO,mBAAoB,SAAQ,MAAM,CAAC,aAAa,EAAuB,CAAC,qBAAqB,EAAE;IAC1G,OAAO,EAAE,MAAM,CAAC,KAAK;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;IAC9C,OAAO,EAAE,EAAE,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE;CAC1C,CAAC;CAAG;AAEL,MAAM,OAAO,cAAe,SAAQ,MAAM,CAAC,aAAa,EAAkB,CAAC,gBAAgB,EAAE;IAC3F,OAAO,EAAE,MAAM,CAAC,KAAK;IACrB,OAAO,EAAE,MAAM,CAAC,IAAI;IACpB,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC,MAAM;QACnB,IAAI,EAAE,MAAM,CAAC,UAAU;QACvB,iCAAiC;KAClC;CACF,CAAC;CAAG;AAEL,MAAM,OAAO,OAAQ,SAAQ,MAAM,CAAC,aAAa,EAAW,CAAC,SAAS,EAAE;IACtE,OAAO,EAAE,MAAM,CAAC,KAAK;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC;QACrB,IAAI,EAAE,MAAM,CAAC,MAAM;QACnB,OAAO,EAAE,MAAM,CAAC,MAAM;QACtB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM,EAAE,MAAM,CAAC,MAAM,CACnB,MAAM,CAAC,MAAM,CAAC;YACZ,OAAO,EAAE,MAAM,CAAC,MAAM;YACtB,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC,CACH;KACF,CAAC;IACF,OAAO,EAAE,EAAE;CACZ,CAAC;CAAG;AAEL,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CACvC,WAAW,EACX,aAAa,EACb,cAAc,EACd,OAAO,EACP,eAAe,EACf,mBAAmB,CACpB,CAAA"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=serializedWorker.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"serializedWorker.d.ts","sourceRoot":"","sources":["../../../../src/node/ChildProcessRunner/ChildProcessRunnerTest/serializedWorker.ts"],"names":[],"mappings":""}
@@ -1,52 +0,0 @@
1
- import * as Runner from '@effect/platform/WorkerRunner';
2
- import { Context, Effect, Layer, Option, Stream } from 'effect';
3
- // import { NodeRuntime, NodeWorkerRunner } from '@effect/platform-node'
4
- import { PlatformNode } from "../../mod.js";
5
- import * as ChildProcessRunner from "../ChildProcessRunner.js";
6
- import { Person, User, WorkerMessage } from "./schema.js";
7
- const Name = Context.GenericTag('Name');
8
- const WorkerLive = Runner.layerSerialized(WorkerMessage, {
9
- GetPersonById: (req) => {
10
- return Stream.make(new Person({ id: req.id, name: 'test', data: new Uint8Array([1, 2, 3]) }), new Person({ id: req.id, name: 'ing', data: new Uint8Array([4, 5, 6]) }));
11
- },
12
- GetUserById: (req) => Effect.map(Name, (name) => new User({ id: req.id, name })),
13
- // InitialMessage: (req) => Layer.succeed(Name, req.name),
14
- InitialMessage: (req) => Effect.gen(function* () {
15
- // yield* Effect.addFinalizer(() => Effect.log('closing worker scope'))
16
- return Layer.succeed(Name, req.name);
17
- }).pipe(Layer.unwrapScoped),
18
- // InitialMessage: (req) =>
19
- // Layer.scoped(
20
- // Name,
21
- // Effect.gen(function* () {
22
- // yield* Effect.addFinalizer(() => Effect.log('closing worker scope'))
23
- // return req.name
24
- // }),
25
- // ),
26
- GetSpan: (_) => Effect.gen(function* (_) {
27
- const span = yield* _(Effect.currentSpan, Effect.orDie);
28
- return {
29
- traceId: span.traceId,
30
- spanId: span.spanId,
31
- name: span.name,
32
- parent: Option.map(span.parent, (span) => ({
33
- traceId: span.traceId,
34
- spanId: span.spanId,
35
- })),
36
- };
37
- }).pipe(Effect.withSpan('GetSpan')),
38
- RunnerInterrupt: () => Effect.interrupt,
39
- StartStubbornWorker: ({ blockDuration }) => Effect.gen(function* () {
40
- // Start a blocking operation that won't respond to normal shutdown signals
41
- const pid = process.pid;
42
- yield* Effect.fork(Effect.gen(function* () {
43
- // Block for the specified duration, ignoring shutdown attempts
44
- yield* Effect.sleep(`${blockDuration} millis`);
45
- yield* Effect.log('Stubborn worker finished blocking');
46
- }).pipe(Effect.uninterruptible));
47
- return { pid };
48
- }),
49
- }).pipe(Layer.provide(ChildProcessRunner.layer));
50
- // }).pipe(Layer.provide(PlatformNode.NodeWorkerRunner.layer))
51
- PlatformNode.NodeRuntime.runMain(Runner.launch(WorkerLive));
52
- //# sourceMappingURL=serializedWorker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"serializedWorker.js","sourceRoot":"","sources":["../../../../src/node/ChildProcessRunner/ChildProcessRunnerTest/serializedWorker.ts"],"names":[],"mappings":"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"}
@@ -1,23 +0,0 @@
1
- import type * as ChildProcess from 'node:child_process';
2
- import * as Worker from '@effect/platform/Worker';
3
- import * as Layer from 'effect/Layer';
4
- export declare const layerWorker: Layer.Layer<Worker.PlatformWorker, never, never>;
5
- export declare const layerManager: Layer.Layer<Worker.WorkerManager, never, never>;
6
- /**
7
- * @example
8
- * ```ts
9
- * import * as ChildProcess from 'node:child_process'
10
- * import { Effect, Worker } from '@effect/platform/Worker'
11
- * import { ChildProcessWorker } from '@livestore/utils/node'
12
- *
13
- * Worker.makePoolSerialized<WorkerMessage>({
14
- * size: 1,
15
- * initialMessage: () => new InitialMessage({ name: 'test', data: new Uint8Array([1, 2, 3]) }),
16
- * }).pipe(
17
- * Effect.provide(ChildProcessWorker.layer(() => ChildProcess.fork(new URL('worker.ts', import.meta.url)))),
18
- * )
19
- * ```
20
- *
21
- */
22
- export declare const layer: (spawn: (id: number) => ChildProcess.ChildProcess) => Layer.Layer<Worker.Spawner | Worker.WorkerManager, never, never>;
23
- //# sourceMappingURL=ChildProcessWorker.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ChildProcessWorker.d.ts","sourceRoot":"","sources":["../../../src/node/ChildProcessRunner/ChildProcessWorker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,YAAY,MAAM,oBAAoB,CAAA;AACvD,OAAO,KAAK,MAAM,MAAM,yBAAyB,CAAA;AAKjD,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AA4IrC,eAAO,MAAM,WAAW,kDAA2D,CAAA;AAEnF,eAAO,MAAM,YAAY,iDAAkD,CAAA;AAE3E;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,KAAK,GAAI,OAAO,CAAC,EAAE,EAAE,MAAM,KAAK,YAAY,CAAC,YAAY,qEACf,CAAA"}
@@ -1,138 +0,0 @@
1
- import * as Worker from '@effect/platform/Worker';
2
- import { WorkerError } from '@effect/platform/WorkerError';
3
- import * as Deferred from 'effect/Deferred';
4
- import * as Effect from 'effect/Effect';
5
- import * as Exit from 'effect/Exit';
6
- import * as Layer from 'effect/Layer';
7
- import * as Scope from 'effect/Scope';
8
- // Track child processes for cleanup on process signals
9
- const childProcesses = new Set();
10
- // Force cleanup all tracked child processes
11
- const forceCleanupChildren = (signal = 'SIGKILL') => {
12
- for (const child of childProcesses) {
13
- try {
14
- if (!child.killed) {
15
- child.kill(signal);
16
- }
17
- }
18
- catch {
19
- // Ignore errors during cleanup
20
- }
21
- }
22
- childProcesses.clear();
23
- };
24
- // Install signal handlers once to clean up all child processes
25
- let signalHandlersInstalled = false;
26
- const installSignalHandlers = () => {
27
- if (signalHandlersInstalled)
28
- return;
29
- signalHandlersInstalled = true;
30
- // Use 'beforeExit' instead of signal handlers since tests may interfere with signals
31
- process.on('beforeExit', () => {
32
- forceCleanupChildren('SIGKILL');
33
- });
34
- // Also try to cleanup on uncaught exceptions
35
- process.on('uncaughtException', () => {
36
- forceCleanupChildren('SIGKILL');
37
- });
38
- // Install signal handlers but make them more robust
39
- const sigintHandler = () => {
40
- forceCleanupChildren('SIGINT');
41
- };
42
- const sigtermHandler = () => {
43
- forceCleanupChildren('SIGTERM');
44
- };
45
- const exitHandler = () => {
46
- forceCleanupChildren('SIGKILL');
47
- };
48
- // Add handlers that will persist even if tests remove/add other handlers
49
- process.prependListener('SIGINT', sigintHandler);
50
- process.prependListener('SIGTERM', sigtermHandler);
51
- process.prependListener('exit', exitHandler);
52
- };
53
- const platformWorkerImpl = Worker.makePlatform()({
54
- setup({ scope, worker: childProcess }) {
55
- return Effect.flatMap(Deferred.make(), (exitDeferred) => {
56
- // Install signal handlers for process-wide cleanup
57
- installSignalHandlers();
58
- // Track this child process for cleanup
59
- childProcesses.add(childProcess);
60
- childProcess.on('exit', () => {
61
- // Remove from tracking when process exits
62
- childProcesses.delete(childProcess);
63
- Deferred.unsafeDone(exitDeferred, Exit.void);
64
- });
65
- childProcess.send(['setup-parent-death-detection', { parentPid: process.pid }]);
66
- return Effect.as(Scope.addFinalizer(scope, Effect.suspend(() => {
67
- // Try graceful shutdown first
68
- try {
69
- childProcess.send([1]);
70
- }
71
- catch {
72
- // IPC channel might be closed, proceed to forceful termination
73
- }
74
- return Deferred.await(exitDeferred);
75
- }).pipe(Effect.timeout(3000), // Reduced timeout for faster cleanup
76
- Effect.interruptible, Effect.catchAllCause(() => Effect.sync(() => {
77
- // Enhanced cleanup with escalating signals
78
- if (!childProcess.killed) {
79
- try {
80
- // First try SIGTERM
81
- childProcess.kill('SIGTERM');
82
- // If still running after a short delay, use SIGKILL
83
- setTimeout(() => {
84
- if (!childProcess.killed) {
85
- childProcess.kill('SIGKILL');
86
- }
87
- }, 1000);
88
- }
89
- catch {
90
- // Process might already be dead
91
- }
92
- finally {
93
- // Ensure it's removed from tracking
94
- childProcesses.delete(childProcess);
95
- }
96
- }
97
- })))), {
98
- postMessage: (message) => childProcess.send(message),
99
- on: (event, handler) => childProcess.on(event, handler),
100
- });
101
- });
102
- },
103
- listen({ deferred, emit, port }) {
104
- port.on('message', (message) => {
105
- emit(message);
106
- });
107
- port.on('messageerror', (cause) => {
108
- Deferred.unsafeDone(deferred, new WorkerError({ reason: 'decode', cause }));
109
- });
110
- port.on('error', (cause) => {
111
- Deferred.unsafeDone(deferred, new WorkerError({ reason: 'unknown', cause }));
112
- });
113
- port.on('exit', (code) => {
114
- Deferred.unsafeDone(deferred, new WorkerError({ reason: 'unknown', cause: new Error(`exited with code ${code}`) }));
115
- });
116
- return Effect.void;
117
- },
118
- });
119
- export const layerWorker = Layer.succeed(Worker.PlatformWorker, platformWorkerImpl);
120
- export const layerManager = Layer.provide(Worker.layerManager, layerWorker);
121
- /**
122
- * @example
123
- * ```ts
124
- * import * as ChildProcess from 'node:child_process'
125
- * import { Effect, Worker } from '@effect/platform/Worker'
126
- * import { ChildProcessWorker } from '@livestore/utils/node'
127
- *
128
- * Worker.makePoolSerialized<WorkerMessage>({
129
- * size: 1,
130
- * initialMessage: () => new InitialMessage({ name: 'test', data: new Uint8Array([1, 2, 3]) }),
131
- * }).pipe(
132
- * Effect.provide(ChildProcessWorker.layer(() => ChildProcess.fork(new URL('worker.ts', import.meta.url)))),
133
- * )
134
- * ```
135
- *
136
- */
137
- export const layer = (spawn) => Layer.merge(layerManager, Worker.layerSpawner(spawn));
138
- //# sourceMappingURL=ChildProcessWorker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ChildProcessWorker.js","sourceRoot":"","sources":["../../../src/node/ChildProcessRunner/ChildProcessWorker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,yBAAyB,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAC1D,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAC3C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,IAAI,MAAM,aAAa,CAAA;AACnC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAErC,uDAAuD;AACvD,MAAM,cAAc,GAAG,IAAI,GAAG,EAA6B,CAAA;AAE3D,4CAA4C;AAC5C,MAAM,oBAAoB,GAAG,CAAC,SAAyB,SAAS,EAAE,EAAE;IAClE,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBAClB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YACpB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,+BAA+B;QACjC,CAAC;IACH,CAAC;IACD,cAAc,CAAC,KAAK,EAAE,CAAA;AACxB,CAAC,CAAA;AAED,+DAA+D;AAC/D,IAAI,uBAAuB,GAAG,KAAK,CAAA;AAEnC,MAAM,qBAAqB,GAAG,GAAG,EAAE;IACjC,IAAI,uBAAuB;QAAE,OAAM;IACnC,uBAAuB,GAAG,IAAI,CAAA;IAE9B,qFAAqF;IACrF,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE;QAC5B,oBAAoB,CAAC,SAAS,CAAC,CAAA;IACjC,CAAC,CAAC,CAAA;IAEF,6CAA6C;IAC7C,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACnC,oBAAoB,CAAC,SAAS,CAAC,CAAA;IACjC,CAAC,CAAC,CAAA;IAEF,oDAAoD;IACpD,MAAM,aAAa,GAAG,GAAG,EAAE;QACzB,oBAAoB,CAAC,QAAQ,CAAC,CAAA;IAChC,CAAC,CAAA;IAED,MAAM,cAAc,GAAG,GAAG,EAAE;QAC1B,oBAAoB,CAAC,SAAS,CAAC,CAAA;IACjC,CAAC,CAAA;IAED,MAAM,WAAW,GAAG,GAAG,EAAE;QACvB,oBAAoB,CAAC,SAAS,CAAC,CAAA;IACjC,CAAC,CAAA;IAED,yEAAyE;IACzE,OAAO,CAAC,eAAe,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAA;IAChD,OAAO,CAAC,eAAe,CAAC,SAAS,EAAE,cAAc,CAAC,CAAA;IAClD,OAAO,CAAC,eAAe,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;AAC9C,CAAC,CAAA;AAED,MAAM,kBAAkB,GAAG,MAAM,CAAC,YAAY,EAA6B,CAAC;IAC1E,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE;QACnC,OAAO,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAqB,EAAE,CAAC,YAAY,EAAE,EAAE;YACzE,mDAAmD;YACnD,qBAAqB,EAAE,CAAA;YAEvB,uCAAuC;YACvC,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;YAEhC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;gBAC3B,0CAA0C;gBAC1C,cAAc,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;gBACnC,QAAQ,CAAC,UAAU,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;YAC9C,CAAC,CAAC,CAAA;YAEF,YAAY,CAAC,IAAI,CAAC,CAAC,8BAA8B,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;YAE/E,OAAO,MAAM,CAAC,EAAE,CACd,KAAK,CAAC,YAAY,CAChB,KAAK,EACL,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE;gBAClB,8BAA8B;gBAC9B,IAAI,CAAC;oBACH,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;gBACxB,CAAC;gBAAC,MAAM,CAAC;oBACP,+DAA+D;gBACjE,CAAC;gBAED,OAAO,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;YACrC,CAAC,CAAC,CAAC,IAAI,CACL,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,qCAAqC;YAC3D,MAAM,CAAC,aAAa,EACpB,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,CACxB,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;gBACf,2CAA2C;gBAC3C,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;oBACzB,IAAI,CAAC;wBACH,oBAAoB;wBACpB,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;wBAE5B,oDAAoD;wBACpD,UAAU,CAAC,GAAG,EAAE;4BACd,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;gCACzB,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;4BAC9B,CAAC;wBACH,CAAC,EAAE,IAAI,CAAC,CAAA;oBACV,CAAC;oBAAC,MAAM,CAAC;wBACP,gCAAgC;oBAClC,CAAC;4BAAS,CAAC;wBACT,oCAAoC;wBACpC,cAAc,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;oBACrC,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CACH,CACF,CACF,EACD;gBACE,WAAW,EAAE,CAAC,OAAY,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;gBACzD,EAAE,EAAE,CAAC,KAAa,EAAE,OAA+B,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC;aACxF,CACF,CAAA;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IACD,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE;QAC7B,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE;YAC7B,IAAI,CAAC,OAAO,CAAC,CAAA;QACf,CAAC,CAAC,CAAA;QACF,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE;YAChC,QAAQ,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,WAAW,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;QAC7E,CAAC,CAAC,CAAA;QACF,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACzB,QAAQ,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,WAAW,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;QAC9E,CAAC,CAAC,CAAA;QACF,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACvB,QAAQ,CAAC,UAAU,CACjB,QAAQ,EACR,IAAI,WAAW,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,oBAAoB,IAAI,EAAE,CAAC,EAAE,CAAC,CACrF,CAAA;QACH,CAAC,CAAC,CAAA;QACF,OAAO,MAAM,CAAC,IAAI,CAAA;IACpB,CAAC;CACF,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAA;AAEnF,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,WAAW,CAAC,CAAA;AAE3E;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,KAAgD,EAAE,EAAE,CACxE,KAAK,CAAC,KAAK,CAAC,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAA"}