@graftland/plugin-remote 0.0.0-stage → 0.3.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 (380) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +76 -2
  3. package/README.zh-CN.md +71 -0
  4. package/README.zh-TW.md +71 -0
  5. package/dist/Auth-BElTC9_X.js +6 -0
  6. package/dist/Auth.d.ts +49 -0
  7. package/dist/Auth.d.ts.map +1 -0
  8. package/dist/Auth.js +8 -0
  9. package/dist/Auth.js.map +1 -0
  10. package/dist/Bootstrap-MCwivGN1.js +9 -0
  11. package/dist/ConfigDirectory-BCC6q2R4.js +5 -0
  12. package/dist/Contract-CcpSIJm4.js +121 -0
  13. package/dist/Contract.d.ts +71 -0
  14. package/dist/Contract.d.ts.map +1 -0
  15. package/dist/Contract.js +1 -0
  16. package/dist/Contract.js.map +1 -0
  17. package/dist/Errors-oPsTLY7l.js +45 -0
  18. package/dist/Errors.d.ts +67 -0
  19. package/dist/Errors.d.ts.map +1 -0
  20. package/dist/Errors.js +47 -0
  21. package/dist/Errors.js.map +1 -0
  22. package/dist/FailureGroup-BcH0XOBi.js +53 -0
  23. package/dist/Framing-zaYdOJnT.js +61 -0
  24. package/dist/Graft-BsYq3F-J.js +985 -0
  25. package/dist/Instance.d.ts +7 -0
  26. package/dist/Instance.d.ts.map +1 -0
  27. package/dist/Instance.js +14 -0
  28. package/dist/Instance.js.map +1 -0
  29. package/dist/Packages-B1TPk8pa.js +111 -0
  30. package/dist/Peer-IJgFK6mD.js +342 -0
  31. package/dist/ProcessObservation-DEGrEMfP.js +38 -0
  32. package/dist/ServeLifecycle-CJM0gG5B.js +24 -0
  33. package/dist/Testing.d.ts +26 -0
  34. package/dist/Testing.d.ts.map +1 -0
  35. package/dist/Testing.js +69 -0
  36. package/dist/Testing.js.map +1 -0
  37. package/dist/Transport-DULzpsgR.js +6 -0
  38. package/dist/Transport.d.ts +39 -0
  39. package/dist/Transport.d.ts.map +1 -0
  40. package/dist/Transport.js +8 -0
  41. package/dist/Transport.js.map +1 -0
  42. package/dist/WatchdogProtocol-BZmVxrBP.js +17 -0
  43. package/dist/_virtual/_rolldown/runtime.js +12 -0
  44. package/dist/bin.d.ts +1 -0
  45. package/dist/bin.js +28275 -0
  46. package/dist/bin.js.map +1 -0
  47. package/dist/childRuntime-DSqtFN9o.js +188 -0
  48. package/dist/cleanup-BPWr-5U9.js +13 -0
  49. package/dist/command-9zrHdbwT.js +7 -0
  50. package/dist/connectionEnded-DUgcobEd.js +9 -0
  51. package/dist/directTransport-DrexuPSm.js +5 -0
  52. package/dist/entry-SYsx9VNb.js +708 -0
  53. package/dist/host/auth/bearer.d.ts +5 -0
  54. package/dist/host/auth/bearer.d.ts.map +1 -0
  55. package/dist/host/auth/bearer.js +4 -0
  56. package/dist/host/auth/bearer.js.map +1 -0
  57. package/dist/host/auth/jwt.d.ts +5 -0
  58. package/dist/host/auth/jwt.d.ts.map +1 -0
  59. package/dist/host/auth/jwt.js +4 -0
  60. package/dist/host/auth/jwt.js.map +1 -0
  61. package/dist/host/auth/mtls.d.ts +8 -0
  62. package/dist/host/auth/mtls.d.ts.map +1 -0
  63. package/dist/host/auth/mtls.js +34 -0
  64. package/dist/host/auth/mtls.js.map +1 -0
  65. package/dist/host/auth/none.d.ts +3 -0
  66. package/dist/host/auth/none.d.ts.map +1 -0
  67. package/dist/host/auth/none.js +13 -0
  68. package/dist/host/auth/none.js.map +1 -0
  69. package/dist/host/command.d.ts +22 -0
  70. package/dist/host/command.d.ts.map +1 -0
  71. package/dist/host/command.js +61 -0
  72. package/dist/host/command.js.map +1 -0
  73. package/dist/host/local.d.ts +4 -0
  74. package/dist/host/local.d.ts.map +1 -0
  75. package/dist/host/local.js +52 -0
  76. package/dist/host/local.js.map +1 -0
  77. package/dist/host/unix.d.ts +11 -0
  78. package/dist/host/unix.d.ts.map +1 -0
  79. package/dist/host/unix.js +39 -0
  80. package/dist/host/unix.js.map +1 -0
  81. package/dist/host/websocket.d.ts +13 -0
  82. package/dist/host/websocket.d.ts.map +1 -0
  83. package/dist/host/websocket.js +36 -0
  84. package/dist/host/websocket.js.map +1 -0
  85. package/dist/host/worker.d.ts +4 -0
  86. package/dist/host/worker.d.ts.map +1 -0
  87. package/dist/host/worker.js +52 -0
  88. package/dist/host/worker.js.map +1 -0
  89. package/dist/importer-D7zSgqxq.js +347 -0
  90. package/dist/index.d.ts +29 -0
  91. package/dist/index.d.ts.map +1 -0
  92. package/dist/index.js +86 -0
  93. package/dist/index.js.map +1 -0
  94. package/dist/internal/Certificates.js +182 -0
  95. package/dist/internal/Certificates.js.map +1 -0
  96. package/dist/internal/FailureGroup.js +55 -0
  97. package/dist/internal/FailureGroup.js.map +1 -0
  98. package/dist/internal/Limits.d.ts +1 -0
  99. package/dist/internal/Limits.js +17 -0
  100. package/dist/internal/Limits.js.map +1 -0
  101. package/dist/internal/Peer.js +6 -0
  102. package/dist/internal/Peer.js.map +1 -0
  103. package/dist/internal/ServeLifecycle.js +26 -0
  104. package/dist/internal/ServeLifecycle.js.map +1 -0
  105. package/dist/internal/Supervisor.js +7 -0
  106. package/dist/internal/Supervisor.js.map +1 -0
  107. package/dist/internal/assembly.d.ts +5 -0
  108. package/dist/internal/assembly.js +138 -0
  109. package/dist/internal/assembly.js.map +1 -0
  110. package/dist/internal/auth/mtls.js +23 -0
  111. package/dist/internal/auth/mtls.js.map +1 -0
  112. package/dist/internal/auth/token.js +19 -0
  113. package/dist/internal/auth/token.js.map +1 -0
  114. package/dist/internal/auth/tokenCredentials.d.ts +8 -0
  115. package/dist/internal/auth/tokenCredentials.d.ts.map +1 -0
  116. package/dist/internal/auth/tokenCredentials.js +33 -0
  117. package/dist/internal/auth/tokenCredentials.js.map +1 -0
  118. package/dist/internal/child.js +125 -0
  119. package/dist/internal/child.js.map +1 -0
  120. package/dist/internal/childErrors.d.ts +33 -0
  121. package/dist/internal/childErrors.d.ts.map +1 -0
  122. package/dist/internal/childErrors.js +29 -0
  123. package/dist/internal/childErrors.js.map +1 -0
  124. package/dist/internal/childRuntime.js +59 -0
  125. package/dist/internal/childRuntime.js.map +1 -0
  126. package/dist/internal/cleanup.js +15 -0
  127. package/dist/internal/cleanup.js.map +1 -0
  128. package/dist/internal/config.js +6 -0
  129. package/dist/internal/config.js.map +1 -0
  130. package/dist/internal/control.js +42 -0
  131. package/dist/internal/control.js.map +1 -0
  132. package/dist/internal/credentials.d.ts +44 -0
  133. package/dist/internal/credentials.d.ts.map +1 -0
  134. package/dist/internal/credentials.js +54 -0
  135. package/dist/internal/credentials.js.map +1 -0
  136. package/dist/internal/directTransport.d.ts +3 -0
  137. package/dist/internal/directTransport.js +7 -0
  138. package/dist/internal/directTransport.js.map +1 -0
  139. package/dist/internal/entry.d.ts +9 -0
  140. package/dist/internal/entry.d.ts.map +1 -0
  141. package/dist/internal/entry.js +144 -0
  142. package/dist/internal/entry.js.map +1 -0
  143. package/dist/internal/entryConfig.d.ts +202 -0
  144. package/dist/internal/entryConfig.d.ts.map +1 -0
  145. package/dist/internal/entryConfig.js +176 -0
  146. package/dist/internal/entryConfig.js.map +1 -0
  147. package/dist/internal/execution.d.ts +5 -0
  148. package/dist/internal/execution.js +43 -0
  149. package/dist/internal/execution.js.map +1 -0
  150. package/dist/internal/follow.js +11 -0
  151. package/dist/internal/follow.js.map +1 -0
  152. package/dist/internal/forkTree.js +7 -0
  153. package/dist/internal/forkTree.js.map +1 -0
  154. package/dist/internal/host/local.js +28 -0
  155. package/dist/internal/host/local.js.map +1 -0
  156. package/dist/internal/host/runner.js +100 -0
  157. package/dist/internal/host/runner.js.map +1 -0
  158. package/dist/internal/host.js +71 -0
  159. package/dist/internal/host.js.map +1 -0
  160. package/dist/internal/importer.js +18 -0
  161. package/dist/internal/importer.js.map +1 -0
  162. package/dist/internal/listenerStartup.js +17 -0
  163. package/dist/internal/listenerStartup.js.map +1 -0
  164. package/dist/internal/loadModule.js +20 -0
  165. package/dist/internal/loadModule.js.map +1 -0
  166. package/dist/internal/platform.js +9 -0
  167. package/dist/internal/platform.js.map +1 -0
  168. package/dist/internal/port.d.ts +13 -0
  169. package/dist/internal/port.d.ts.map +1 -0
  170. package/dist/internal/port.js +275 -0
  171. package/dist/internal/port.js.map +1 -0
  172. package/dist/internal/release.js +25 -0
  173. package/dist/internal/release.js.map +1 -0
  174. package/dist/internal/runner/Bootstrap.js +11 -0
  175. package/dist/internal/runner/Bootstrap.js.map +1 -0
  176. package/dist/internal/runner/Connection.d.ts +11 -0
  177. package/dist/internal/runner/Connection.js +56 -0
  178. package/dist/internal/runner/Connection.js.map +1 -0
  179. package/dist/internal/runner/Execution.js +115 -0
  180. package/dist/internal/runner/Execution.js.map +1 -0
  181. package/dist/internal/runner/Framing.d.ts +11 -0
  182. package/dist/internal/runner/Framing.d.ts.map +1 -0
  183. package/dist/internal/runner/Framing.js +63 -0
  184. package/dist/internal/runner/Framing.js.map +1 -0
  185. package/dist/internal/runner/Local.js +46 -0
  186. package/dist/internal/runner/Local.js.map +1 -0
  187. package/dist/internal/runner/Lock.js +25 -0
  188. package/dist/internal/runner/Lock.js.map +1 -0
  189. package/dist/internal/runner/Multiplex.d.ts +5 -0
  190. package/dist/internal/runner/Multiplex.js +49 -0
  191. package/dist/internal/runner/Multiplex.js.map +1 -0
  192. package/dist/internal/runner/Packages.d.ts +3 -0
  193. package/dist/internal/runner/Packages.js +108 -0
  194. package/dist/internal/runner/Packages.js.map +1 -0
  195. package/dist/internal/runner/ProcessObservation.js +40 -0
  196. package/dist/internal/runner/ProcessObservation.js.map +1 -0
  197. package/dist/internal/runner/Processes.js +83 -0
  198. package/dist/internal/runner/Processes.js.map +1 -0
  199. package/dist/internal/runner/Retention.js +13 -0
  200. package/dist/internal/runner/Retention.js.map +1 -0
  201. package/dist/internal/runner/Store.js +78 -0
  202. package/dist/internal/runner/Store.js.map +1 -0
  203. package/dist/internal/runner/Supervisor.js +375 -0
  204. package/dist/internal/runner/Supervisor.js.map +1 -0
  205. package/dist/internal/runner/Watchdog.js +47 -0
  206. package/dist/internal/runner/Watchdog.js.map +1 -0
  207. package/dist/internal/runner/WatchdogProtocol.js +19 -0
  208. package/dist/internal/runner/WatchdogProtocol.js.map +1 -0
  209. package/dist/internal/runner/Wire.d.ts +5 -0
  210. package/dist/internal/runner/Wire.js +64 -0
  211. package/dist/internal/runner/Wire.js.map +1 -0
  212. package/dist/internal/runner/accept.js +57 -0
  213. package/dist/internal/runner/accept.js.map +1 -0
  214. package/dist/internal/runner/command.js +9 -0
  215. package/dist/internal/runner/command.js.map +1 -0
  216. package/dist/internal/runner/connectionEnded.js +11 -0
  217. package/dist/internal/runner/connectionEnded.js.map +1 -0
  218. package/dist/internal/runner/model.d.ts +17 -0
  219. package/dist/internal/runner/model.d.ts.map +1 -0
  220. package/dist/internal/runner/model.js +231 -0
  221. package/dist/internal/runner/model.js.map +1 -0
  222. package/dist/internal/serve.js +60 -0
  223. package/dist/internal/serve.js.map +1 -0
  224. package/dist/internal/services.d.ts +18 -0
  225. package/dist/internal/services.d.ts.map +1 -0
  226. package/dist/internal/services.js +22 -0
  227. package/dist/internal/services.js.map +1 -0
  228. package/dist/internal/socketChannel.js +24 -0
  229. package/dist/internal/socketChannel.js.map +1 -0
  230. package/dist/internal/stdioChannel.js +23 -0
  231. package/dist/internal/stdioChannel.js.map +1 -0
  232. package/dist/internal/supervisorPlugin.js +1 -0
  233. package/dist/internal/supervisorPlugin.js.map +1 -0
  234. package/dist/internal/transportOptions.d.ts +18 -0
  235. package/dist/internal/transportOptions.d.ts.map +1 -0
  236. package/dist/internal/watchdogMain.d.ts +1 -0
  237. package/dist/internal/watchdogMain.js +55 -0
  238. package/dist/internal/watchdogMain.js.map +1 -0
  239. package/dist/internal/websocket.js +46 -0
  240. package/dist/internal/websocket.js.map +1 -0
  241. package/dist/internal/websocketServer.js +61 -0
  242. package/dist/internal/websocketServer.js.map +1 -0
  243. package/dist/internal/workerBootstrap.js +9 -0
  244. package/dist/internal/workerBootstrap.js.map +1 -0
  245. package/dist/internal/workerChannel.js +24 -0
  246. package/dist/internal/workerChannel.js.map +1 -0
  247. package/dist/internal/workerMain.d.ts +1 -0
  248. package/dist/internal/workerMain.js +18 -0
  249. package/dist/internal/workerMain.js.map +1 -0
  250. package/dist/port-Blbh8tms.js +285 -0
  251. package/dist/release-BY4Mlluy.js +23 -0
  252. package/dist/rolldown-runtime-DYf_mQCB.js +34 -0
  253. package/dist/runner/auth/bearer.d.ts +7 -0
  254. package/dist/runner/auth/bearer.d.ts.map +1 -0
  255. package/dist/runner/auth/bearer.js +42 -0
  256. package/dist/runner/auth/bearer.js.map +1 -0
  257. package/dist/runner/auth/jwt.d.ts +19 -0
  258. package/dist/runner/auth/jwt.d.ts.map +1 -0
  259. package/dist/runner/auth/jwt.js +65 -0
  260. package/dist/runner/auth/jwt.js.map +1 -0
  261. package/dist/runner/auth/mtls.d.ts +11 -0
  262. package/dist/runner/auth/mtls.d.ts.map +1 -0
  263. package/dist/runner/auth/mtls.js +48 -0
  264. package/dist/runner/auth/mtls.js.map +1 -0
  265. package/dist/runner/auth/none.d.ts +3 -0
  266. package/dist/runner/auth/none.d.ts.map +1 -0
  267. package/dist/runner/auth/none.js +13 -0
  268. package/dist/runner/auth/none.js.map +1 -0
  269. package/dist/runner/index.d.ts +3 -0
  270. package/dist/runner/index.d.ts.map +1 -0
  271. package/dist/runner/index.js +71 -0
  272. package/dist/runner/index.js.map +1 -0
  273. package/dist/runner/stdio.d.ts +7 -0
  274. package/dist/runner/stdio.d.ts.map +1 -0
  275. package/dist/runner/stdio.js +39 -0
  276. package/dist/runner/stdio.js.map +1 -0
  277. package/dist/runner/unix.d.ts +7 -0
  278. package/dist/runner/unix.d.ts.map +1 -0
  279. package/dist/runner/unix.js +42 -0
  280. package/dist/runner/unix.js.map +1 -0
  281. package/dist/runner/websocket.d.ts +28 -0
  282. package/dist/runner/websocket.d.ts.map +1 -0
  283. package/dist/runner/websocket.js +77 -0
  284. package/dist/runner/websocket.js.map +1 -0
  285. package/dist/socketChannel-KmtzF-9G.js +3658 -0
  286. package/dist/supervisorPlugin-Inb1S5IV.js +737 -0
  287. package/dist/token-v5ne2I0-.js +17 -0
  288. package/dist/tokenCredentials-WUJm2AKm.js +31 -0
  289. package/dist/websocketServer-MXcCJx0v.js +58 -0
  290. package/dist/workerChannel-P82YdNjh.js +27 -0
  291. package/package.json +69 -3
  292. package/src/Auth.ts +62 -0
  293. package/src/Contract.ts +100 -0
  294. package/src/Errors.ts +82 -0
  295. package/src/Instance.ts +12 -0
  296. package/src/Testing.ts +135 -0
  297. package/src/Transport.ts +52 -0
  298. package/src/bin.ts +145 -0
  299. package/src/host/auth/bearer.ts +10 -0
  300. package/src/host/auth/jwt.ts +10 -0
  301. package/src/host/auth/mtls.ts +48 -0
  302. package/src/host/auth/none.ts +13 -0
  303. package/src/host/command.ts +131 -0
  304. package/src/host/local.ts +41 -0
  305. package/src/host/unix.ts +65 -0
  306. package/src/host/websocket.ts +66 -0
  307. package/src/host/worker.ts +90 -0
  308. package/src/index.ts +115 -0
  309. package/src/internal/Certificates.ts +330 -0
  310. package/src/internal/FailureGroup.ts +176 -0
  311. package/src/internal/Limits.ts +12 -0
  312. package/src/internal/Peer.ts +4 -0
  313. package/src/internal/ServeLifecycle.ts +53 -0
  314. package/src/internal/Supervisor.ts +14 -0
  315. package/src/internal/assembly.ts +337 -0
  316. package/src/internal/auth/mtls.ts +40 -0
  317. package/src/internal/auth/token.ts +26 -0
  318. package/src/internal/auth/tokenCredentials.ts +65 -0
  319. package/src/internal/child.ts +323 -0
  320. package/src/internal/childErrors.ts +44 -0
  321. package/src/internal/childRuntime.ts +111 -0
  322. package/src/internal/cleanup.ts +34 -0
  323. package/src/internal/config.ts +8 -0
  324. package/src/internal/control.ts +49 -0
  325. package/src/internal/credentials.ts +112 -0
  326. package/src/internal/directTransport.ts +38 -0
  327. package/src/internal/entry.ts +288 -0
  328. package/src/internal/entryConfig.ts +190 -0
  329. package/src/internal/execution.ts +121 -0
  330. package/src/internal/follow.ts +17 -0
  331. package/src/internal/forkTree.ts +13 -0
  332. package/src/internal/host/local.ts +53 -0
  333. package/src/internal/host/runner.ts +187 -0
  334. package/src/internal/host.ts +209 -0
  335. package/src/internal/importer.ts +27 -0
  336. package/src/internal/listenerStartup.ts +55 -0
  337. package/src/internal/loadModule.ts +23 -0
  338. package/src/internal/platform.ts +12 -0
  339. package/src/internal/port.ts +623 -0
  340. package/src/internal/release.ts +71 -0
  341. package/src/internal/runner/Bootstrap.ts +9 -0
  342. package/src/internal/runner/Connection.ts +184 -0
  343. package/src/internal/runner/Execution.ts +244 -0
  344. package/src/internal/runner/Framing.ts +122 -0
  345. package/src/internal/runner/Local.ts +73 -0
  346. package/src/internal/runner/Lock.ts +29 -0
  347. package/src/internal/runner/Multiplex.ts +120 -0
  348. package/src/internal/runner/Packages.ts +178 -0
  349. package/src/internal/runner/ProcessObservation.ts +63 -0
  350. package/src/internal/runner/Processes.ts +109 -0
  351. package/src/internal/runner/Retention.ts +49 -0
  352. package/src/internal/runner/Store.ts +160 -0
  353. package/src/internal/runner/Supervisor.ts +901 -0
  354. package/src/internal/runner/Watchdog.ts +83 -0
  355. package/src/internal/runner/WatchdogProtocol.ts +12 -0
  356. package/src/internal/runner/Wire.ts +99 -0
  357. package/src/internal/runner/accept.ts +103 -0
  358. package/src/internal/runner/command.ts +15 -0
  359. package/src/internal/runner/connectionEnded.ts +28 -0
  360. package/src/internal/runner/model.ts +364 -0
  361. package/src/internal/serve.ts +117 -0
  362. package/src/internal/services.ts +74 -0
  363. package/src/internal/socketChannel.ts +64 -0
  364. package/src/internal/stdioChannel.ts +25 -0
  365. package/src/internal/supervisorPlugin.ts +67 -0
  366. package/src/internal/transportOptions.ts +17 -0
  367. package/src/internal/watchdogMain.ts +72 -0
  368. package/src/internal/websocket.ts +81 -0
  369. package/src/internal/websocketServer.ts +152 -0
  370. package/src/internal/workerBootstrap.ts +6 -0
  371. package/src/internal/workerChannel.ts +54 -0
  372. package/src/internal/workerMain.ts +23 -0
  373. package/src/runner/auth/bearer.ts +66 -0
  374. package/src/runner/auth/jwt.ts +114 -0
  375. package/src/runner/auth/mtls.ts +37 -0
  376. package/src/runner/auth/none.ts +13 -0
  377. package/src/runner/index.ts +97 -0
  378. package/src/runner/stdio.ts +76 -0
  379. package/src/runner/unix.ts +53 -0
  380. package/src/runner/websocket.ts +143 -0
@@ -0,0 +1,125 @@
1
+ import { loadModule } from "./loadModule.js";
2
+ import { ActivationFailed, AlreadyLoaded } from "./childErrors.js";
3
+ import { Instance } from "../Instance.js";
4
+ import { Graft, Plugin } from "@graftland/graft";
5
+ import { Array, Cause, Data, Deferred, Effect, Exit, Fiber, Logger, MutableRef, Option, Queue, Ref, References, Scope, Stream, SynchronizedRef } from "effect";
6
+ // src/internal/child.ts
7
+ const ChildEvent = Data.taggedEnum();
8
+ /** Queue data; serialization belongs to the RPC consumer, outside synchronous logger callbacks. */
9
+ const telemetry = (contract) => Effect.gen(function* () {
10
+ const events = yield* Queue.bounded(2);
11
+ const logs = yield* Queue.dropping(128);
12
+ const dropped = MutableRef.make(0);
13
+ const encode = (cause) => contract.encodeCause(cause).pipe(Effect.orDie);
14
+ return {
15
+ events,
16
+ logs,
17
+ logger: Logger.make((entry) => {
18
+ if (!Queue.offerUnsafe(logs, {
19
+ level: entry.logLevel,
20
+ message: entry.message,
21
+ cause: entry.cause,
22
+ annotations: entry.fiber.getRef(References.CurrentLogAnnotations)
23
+ })) MutableRef.increment(dropped);
24
+ }),
25
+ eventStream: Stream.fromQueue(events).pipe(Stream.mapEffect((event) => event._tag === "Failed" ? encode(event.cause).pipe(Effect.map((cause) => ({
26
+ _tag: "Failed",
27
+ cause
28
+ }))) : Effect.succeed(event))),
29
+ logStream: Stream.fromQueue(logs).pipe(Stream.mapEffect((entry) => encode(entry.cause).pipe(Effect.map((cause) => ({
30
+ _tag: "Log",
31
+ entry: {
32
+ ...entry,
33
+ cause
34
+ },
35
+ dropped: MutableRef.get(dropped)
36
+ })))), Stream.concat(Stream.sync(() => ({
37
+ _tag: "LogsEnded",
38
+ dropped: MutableRef.get(dropped)
39
+ }))))
40
+ };
41
+ });
42
+ const Lifecycle = Data.taggedEnum();
43
+ const runningOf = (state) => state._tag === "Running" ? Option.some(state.running) : state._tag === "Withdrawing" || state._tag === "Disposing" ? state.running : Option.none();
44
+ const cleanup = (running, retired) => Effect.gen(function* () {
45
+ const pluginExit = yield* Effect.exit(running.fork.dispose);
46
+ const bridgeExit = yield* Effect.exit(running.bridge.dispose);
47
+ yield* Fiber.join(running.observation);
48
+ const failed = yield* Ref.get(running.observedFailure);
49
+ return Array.reduce([bridgeExit, pluginExit], retired ? failed : Cause.empty, (cause, exit) => Exit.isFailure(exit) ? Cause.combine(cause, Cause.fromReasons(Array.flatMap(exit.cause.reasons, (reason) => reason._tag === "Fail" ? reason.error.cause.reasons : [reason]))) : cause);
50
+ });
51
+ const lifecycle = (contract, peer, identity, telemetry) => Effect.gen(function* () {
52
+ const scope = yield* Effect.scope;
53
+ const instanceScope = yield* Scope.fork(scope);
54
+ const releaseExports = yield* Deferred.make();
55
+ const state = yield* SynchronizedRef.make(Lifecycle.Idle());
56
+ const release = SynchronizedRef.update(state, (current) => Lifecycle.Disposing({ running: runningOf(current) })).pipe(Effect.andThen(Deferred.succeed(releaseExports, void 0)));
57
+ const exportBridge = Graft.plugin(Plugin.make({
58
+ name: `${contract.name}/exports`,
59
+ inject: Array.map(contract.provides, (service) => service.key),
60
+ apply: () => Effect.gen(function* () {
61
+ for (const service of contract.provides) yield* service.serve(peer).pipe(Effect.tapCause((cause) => Cause.hasInterruptsOnly(cause) ? Effect.void : Queue.offer(telemetry.events, ChildEvent.Failed({ cause }))), Effect.forkScoped);
62
+ yield* Effect.addFinalizer(() => Effect.gen(function* () {
63
+ if (yield* SynchronizedRef.modify(state, (current) => current._tag === "Disposing" ? [false, current] : [true, Lifecycle.Withdrawing({ running: runningOf(current) })])) yield* Queue.offer(telemetry.events, ChildEvent.Withdrawing());
64
+ yield* Deferred.await(releaseExports);
65
+ }));
66
+ })
67
+ })).pipe(Scope.provide(instanceScope));
68
+ const start = (input) => Effect.gen(function* () {
69
+ for (const service of contract.inject) yield* service.publish(peer).pipe(Scope.provide(scope), Effect.mapError((error) => ActivationFailed.make({
70
+ detail: "Publishing imported services failed",
71
+ cause: Cause.fail(error)
72
+ })));
73
+ const module = yield* loadModule(contract.module);
74
+ const plugin = Plugin.fromModule(module);
75
+ if (Option.isNone(plugin)) return yield* ActivationFailed.make({ detail: "The implementation module exports no plugin" });
76
+ const fork = yield* Graft.plugin({
77
+ ...plugin.value,
78
+ retry: void 0
79
+ }, input).pipe(Effect.provideService(Instance, identity), Scope.provide(instanceScope));
80
+ const observedFailure = yield* Ref.make(Cause.empty);
81
+ const observation = yield* fork.state.pipe(Stream.runForEach((state) => state._tag === "Failed" ? Ref.set(observedFailure, state.cause) : Effect.void), Effect.forkIn(instanceScope));
82
+ return {
83
+ fork,
84
+ bridge: yield* exportBridge,
85
+ observedFailure,
86
+ observation
87
+ };
88
+ });
89
+ const awaitActive = (running) => Effect.gen(function* () {
90
+ const first = yield* running.fork.state.pipe(Stream.filter((state) => state._tag !== "Loading"), Stream.runHead);
91
+ if (Option.isNone(first)) return yield* ActivationFailed.make({ detail: "The remote fork disappeared during startup" });
92
+ if (first.value._tag === "Failed") return yield* Effect.fail(contract.normalizeCause(first.value.cause));
93
+ if (first.value._tag !== "Active") return yield* ActivationFailed.make({ detail: "The remote plugin did not become active; check its declared dependencies" });
94
+ yield* running.fork.state.pipe(Stream.runForEach((state) => state._tag === "Failed" ? Queue.offer(telemetry.events, ChildEvent.Failed({ cause: state.cause })) : Effect.void), Effect.forkIn(instanceScope));
95
+ const exported = yield* running.bridge.state.pipe(Stream.filter((state) => state._tag === "Active" || state._tag === "Failed" || state._tag === "Disposed"), Stream.runHead);
96
+ if (Option.isSome(exported) && exported.value._tag === "Failed") return yield* ActivationFailed.make({
97
+ detail: "The remote export bridge failed during startup",
98
+ cause: exported.value.cause
99
+ });
100
+ if (Option.isNone(exported) || exported.value._tag !== "Active") return yield* ActivationFailed.make({ detail: "The remote export bridge stopped during startup" });
101
+ });
102
+ const load = (input) => Effect.gen(function* () {
103
+ yield* SynchronizedRef.updateEffect(state, (current) => current._tag === "Idle" ? Effect.succeed(Lifecycle.Loading()) : Effect.fail(AlreadyLoaded.make({})));
104
+ const running = yield* start(input);
105
+ yield* SynchronizedRef.update(state, (current) => current._tag === "Withdrawing" ? Lifecycle.Withdrawing({ running: Option.some(running) }) : current._tag === "Disposing" ? Lifecycle.Disposing({ running: Option.some(running) }) : Lifecycle.Running({ running }));
106
+ yield* awaitActive(running);
107
+ }).pipe(Effect.mapError((error) => Cause.isCause(error) ? error : contract.normalizeCause(Cause.fail(error))));
108
+ return {
109
+ load,
110
+ dispose: Effect.gen(function* () {
111
+ const previous = yield* SynchronizedRef.get(state);
112
+ yield* release;
113
+ const current = runningOf(previous);
114
+ const retired = previous._tag === "Withdrawing";
115
+ const cause = Option.isSome(current) ? yield* cleanup(current.value, retired) : Cause.empty;
116
+ yield* Queue.offer(telemetry.events, ChildEvent.Stopped());
117
+ yield* Queue.end(telemetry.logs);
118
+ if (cause.reasons.length > 0) return yield* Effect.fail(contract.normalizeCause(cause));
119
+ }),
120
+ release
121
+ };
122
+ });
123
+ export { lifecycle, telemetry };
124
+
125
+ //# sourceMappingURL=child.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"child.js","names":[],"sources":["../../src/internal/child.ts"],"sourcesContent":["import { loadModule } from \"./loadModule\"\nimport { AlreadyLoaded, ActivationFailed } from \"./childErrors\"\nimport { Graft, Plugin, type Fork } from \"@graftland/graft\"\nimport {\n\tArray,\n\tCause,\n\tData,\n\tDeferred,\n\tEffect,\n\tExit,\n\tFiber,\n\tLogger,\n\tMutableRef,\n\tOption,\n\tQueue,\n\tRef,\n\tReferences,\n\tScope,\n\tStream,\n\tSynchronizedRef,\n} from \"effect\"\nimport type { Schema } from \"effect\"\nimport { type RunnerContract } from \"../Contract\"\nimport { Instance, type Identity } from \"../Instance\"\nimport type * as Port from \"./port\"\nimport type { Event, Log, LogEvent } from \"./control\"\n\ntype Peer = Port.Port\ntype ChildEvent = Data.TaggedEnum<{\n\tFailed: { readonly cause: Cause.Cause<unknown> }\n\tWithdrawing: {}\n\tStopped: {}\n}>\nconst ChildEvent = Data.taggedEnum<ChildEvent>()\ntype LogEntry = Omit<typeof Log.Type, \"cause\"> & {\n\treadonly cause: Cause.Cause<unknown>\n}\n\n/** Queue data; serialization belongs to the RPC consumer, outside synchronous logger callbacks. */\nexport const telemetry = (contract: RunnerContract) =>\n\tEffect.gen(function* () {\n\t\tconst events = yield* Queue.bounded<ChildEvent>(2)\n\t\tconst logs = yield* Queue.dropping<LogEntry, Cause.Done>(128)\n\t\tconst dropped = MutableRef.make(0)\n\t\tconst encode = (cause: Cause.Cause<unknown>) =>\n\t\t\tcontract.encodeCause(cause).pipe(Effect.orDie)\n\t\tconst logger = Logger.make((entry) => {\n\t\t\t// Logger callbacks are synchronous; a dropping offer and loss counter cannot suspend.\n\t\t\tconst accepted = Queue.offerUnsafe(logs, {\n\t\t\t\tlevel: entry.logLevel,\n\t\t\t\tmessage: entry.message,\n\t\t\t\tcause: entry.cause,\n\t\t\t\tannotations: entry.fiber.getRef(References.CurrentLogAnnotations),\n\t\t\t})\n\t\t\tif (!accepted) MutableRef.increment(dropped)\n\t\t})\n\t\treturn {\n\t\t\tevents,\n\t\t\tlogs,\n\t\t\tlogger,\n\t\t\teventStream: Stream.fromQueue(events).pipe(\n\t\t\t\tStream.mapEffect((event): Effect.Effect<typeof Event.Type> =>\n\t\t\t\t\tevent._tag === \"Failed\"\n\t\t\t\t\t\t? encode(event.cause).pipe(\n\t\t\t\t\t\t\t\tEffect.map(\n\t\t\t\t\t\t\t\t\t(cause) =>\n\t\t\t\t\t\t\t\t\t\t({\n\t\t\t\t\t\t\t\t\t\t\t_tag: \"Failed\",\n\t\t\t\t\t\t\t\t\t\t\tcause,\n\t\t\t\t\t\t\t\t\t\t}) satisfies typeof Event.Type,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t: Effect.succeed(event),\n\t\t\t\t),\n\t\t\t),\n\t\t\tlogStream: Stream.fromQueue(logs).pipe(\n\t\t\t\tStream.mapEffect((entry) =>\n\t\t\t\t\tencode(entry.cause).pipe(\n\t\t\t\t\t\tEffect.map((cause): typeof LogEvent.Type => ({\n\t\t\t\t\t\t\t_tag: \"Log\",\n\t\t\t\t\t\t\tentry: { ...entry, cause },\n\t\t\t\t\t\t\tdropped: MutableRef.get(dropped),\n\t\t\t\t\t\t})),\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t\tStream.concat(\n\t\t\t\t\tStream.sync((): typeof LogEvent.Type => ({\n\t\t\t\t\t\t_tag: \"LogsEnded\",\n\t\t\t\t\t\tdropped: MutableRef.get(dropped),\n\t\t\t\t\t})),\n\t\t\t\t),\n\t\t\t),\n\t\t}\n\t})\ntype Telemetry = Effect.Success<ReturnType<typeof telemetry>>\ninterface Running {\n\treadonly fork: Pick<Fork.Fork<never, unknown>, \"dispose\" | \"state\">\n\treadonly bridge: Pick<Fork.Fork<never, never>, \"dispose\" | \"state\">\n\treadonly observation: Fiber.Fiber<void>\n\treadonly observedFailure: Ref.Ref<Cause.Cause<unknown>>\n}\ntype Lifecycle = Data.TaggedEnum<{\n\tIdle: {}\n\tLoading: {}\n\tRunning: { readonly running: Running }\n\tWithdrawing: { readonly running: Option.Option<Running> }\n\tDisposing: { readonly running: Option.Option<Running> }\n}>\nconst Lifecycle = Data.taggedEnum<Lifecycle>()\nconst runningOf = (state: Lifecycle): Option.Option<Running> =>\n\tstate._tag === \"Running\"\n\t\t? Option.some(state.running)\n\t\t: state._tag === \"Withdrawing\" || state._tag === \"Disposing\"\n\t\t\t? state.running\n\t\t\t: Option.none()\n\nconst cleanup = (running: Running, retired: boolean) =>\n\tEffect.gen(function* () {\n\t\tconst pluginExit = yield* Effect.exit(running.fork.dispose)\n\t\tconst bridgeExit = yield* Effect.exit(running.bridge.dispose)\n\t\tyield* Fiber.join(running.observation)\n\t\tconst failed = yield* Ref.get(running.observedFailure)\n\t\treturn Array.reduce(\n\t\t\t[bridgeExit, pluginExit],\n\t\t\tretired ? failed : Cause.empty,\n\t\t\t(cause, exit) =>\n\t\t\t\tExit.isFailure(exit)\n\t\t\t\t\t? Cause.combine(\n\t\t\t\t\t\t\tcause,\n\t\t\t\t\t\t\tCause.fromReasons(\n\t\t\t\t\t\t\t\tArray.flatMap(exit.cause.reasons, (reason) =>\n\t\t\t\t\t\t\t\t\treason._tag === \"Fail\"\n\t\t\t\t\t\t\t\t\t\t? reason.error.cause.reasons\n\t\t\t\t\t\t\t\t\t\t: [reason],\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t)\n\t\t\t\t\t: cause,\n\t\t)\n\t})\n\nexport const lifecycle = (\n\tcontract: RunnerContract,\n\tpeer: Peer,\n\tidentity: typeof Identity.Type,\n\ttelemetry: Telemetry,\n) =>\n\tEffect.gen(function* () {\n\t\tconst scope = yield* Effect.scope\n\t\tconst instanceScope = yield* Scope.fork(scope)\n\t\tconst releaseExports = yield* Deferred.make<void>()\n\t\tconst state = yield* SynchronizedRef.make<Lifecycle>(Lifecycle.Idle())\n\t\t// This gate represents host consumers draining, not a second lifecycle state.\n\t\tconst release = SynchronizedRef.update(state, (current) =>\n\t\t\tLifecycle.Disposing({ running: runningOf(current) }),\n\t\t).pipe(Effect.andThen(Deferred.succeed(releaseExports, undefined)))\n\n\t\tconst exportBridge = Graft.plugin(\n\t\t\tPlugin.make({\n\t\t\t\tname: `${contract.name}/exports`,\n\t\t\t\tinject: Array.map(contract.provides, (service) => service.key),\n\t\t\t\tapply: () =>\n\t\t\t\t\tEffect.gen(function* () {\n\t\t\t\t\t\tfor (const service of contract.provides)\n\t\t\t\t\t\t\tyield* service.serve(peer).pipe(\n\t\t\t\t\t\t\t\tEffect.tapCause((cause) =>\n\t\t\t\t\t\t\t\t\tCause.hasInterruptsOnly(cause)\n\t\t\t\t\t\t\t\t\t\t? Effect.void\n\t\t\t\t\t\t\t\t\t\t: Queue.offer(\n\t\t\t\t\t\t\t\t\t\t\t\ttelemetry.events,\n\t\t\t\t\t\t\t\t\t\t\t\tChildEvent.Failed({ cause }),\n\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\tEffect.forkScoped,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\tyield* Effect.addFinalizer(() =>\n\t\t\t\t\t\t\tEffect.gen(function* () {\n\t\t\t\t\t\t\t\tconst withdrawing = yield* SynchronizedRef.modify(\n\t\t\t\t\t\t\t\t\tstate,\n\t\t\t\t\t\t\t\t\t(current) =>\n\t\t\t\t\t\t\t\t\t\tcurrent._tag === \"Disposing\"\n\t\t\t\t\t\t\t\t\t\t\t? [false, current]\n\t\t\t\t\t\t\t\t\t\t\t: [\n\t\t\t\t\t\t\t\t\t\t\t\t\ttrue,\n\t\t\t\t\t\t\t\t\t\t\t\t\tLifecycle.Withdrawing({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\trunning: runningOf(current),\n\t\t\t\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tif (withdrawing)\n\t\t\t\t\t\t\t\t\tyield* Queue.offer(telemetry.events, ChildEvent.Withdrawing())\n\t\t\t\t\t\t\t\tyield* Deferred.await(releaseExports)\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t)\n\t\t\t\t\t}),\n\t\t\t}),\n\t\t).pipe(Scope.provide(instanceScope))\n\n\t\tconst start = (input: Schema.Json) =>\n\t\t\tEffect.gen(function* () {\n\t\t\t\t// Imported clients outlive Load and remain available during plugin cleanup.\n\t\t\t\tfor (const service of contract.inject)\n\t\t\t\t\tyield* service.publish(peer).pipe(\n\t\t\t\t\t\tScope.provide(scope),\n\t\t\t\t\t\tEffect.mapError((error) =>\n\t\t\t\t\t\t\tActivationFailed.make({\n\t\t\t\t\t\t\t\tdetail: \"Publishing imported services failed\",\n\t\t\t\t\t\t\t\tcause: Cause.fail(error),\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\t)\n\t\t\t\tconst module = yield* loadModule(contract.module)\n\t\t\t\tconst plugin = Plugin.fromModule(module)\n\t\t\t\tif (Option.isNone(plugin))\n\t\t\t\t\treturn yield* ActivationFailed.make({\n\t\t\t\t\t\tdetail: \"The implementation module exports no plugin\",\n\t\t\t\t\t})\n\t\t\t\tconst fork = yield* Graft.plugin(\n\t\t\t\t\t{ ...plugin.value, retry: undefined },\n\t\t\t\t\tinput,\n\t\t\t\t).pipe(\n\t\t\t\t\tEffect.provideService(Instance, identity),\n\t\t\t\t\tScope.provide(instanceScope),\n\t\t\t\t)\n\t\t\t\tconst observedFailure = yield* Ref.make<Cause.Cause<unknown>>(\n\t\t\t\t\tCause.empty,\n\t\t\t\t)\n\t\t\t\tconst observation = yield* fork.state.pipe(\n\t\t\t\t\tStream.runForEach((state) =>\n\t\t\t\t\t\tstate._tag === \"Failed\"\n\t\t\t\t\t\t\t? Ref.set(observedFailure, state.cause)\n\t\t\t\t\t\t\t: Effect.void,\n\t\t\t\t\t),\n\t\t\t\t\tEffect.forkIn(instanceScope),\n\t\t\t\t)\n\t\t\t\tconst bridge = yield* exportBridge\n\t\t\t\treturn { fork, bridge, observedFailure, observation } satisfies Running\n\t\t\t})\n\t\tconst awaitActive = (running: Running) =>\n\t\t\tEffect.gen(function* () {\n\t\t\t\tconst first = yield* running.fork.state.pipe(\n\t\t\t\t\tStream.filter((state) => state._tag !== \"Loading\"),\n\t\t\t\t\tStream.runHead,\n\t\t\t\t)\n\t\t\t\tif (Option.isNone(first))\n\t\t\t\t\treturn yield* ActivationFailed.make({\n\t\t\t\t\t\tdetail: \"The remote fork disappeared during startup\",\n\t\t\t\t\t})\n\t\t\t\tif (first.value._tag === \"Failed\")\n\t\t\t\t\treturn yield* Effect.fail(contract.normalizeCause(first.value.cause))\n\t\t\t\tif (first.value._tag !== \"Active\")\n\t\t\t\t\treturn yield* ActivationFailed.make({\n\t\t\t\t\t\tdetail:\n\t\t\t\t\t\t\t\"The remote plugin did not become active; check its declared dependencies\",\n\t\t\t\t\t})\n\t\t\t\tyield* running.fork.state.pipe(\n\t\t\t\t\tStream.runForEach((state) =>\n\t\t\t\t\t\tstate._tag === \"Failed\"\n\t\t\t\t\t\t\t? Queue.offer(\n\t\t\t\t\t\t\t\t\ttelemetry.events,\n\t\t\t\t\t\t\t\t\tChildEvent.Failed({ cause: state.cause }),\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t: Effect.void,\n\t\t\t\t\t),\n\t\t\t\t\tEffect.forkIn(instanceScope),\n\t\t\t\t)\n\t\t\t\tconst exported = yield* running.bridge.state.pipe(\n\t\t\t\t\tStream.filter(\n\t\t\t\t\t\t(state) =>\n\t\t\t\t\t\t\tstate._tag === \"Active\" ||\n\t\t\t\t\t\t\tstate._tag === \"Failed\" ||\n\t\t\t\t\t\t\tstate._tag === \"Disposed\",\n\t\t\t\t\t),\n\t\t\t\t\tStream.runHead,\n\t\t\t\t)\n\t\t\t\tif (Option.isSome(exported) && exported.value._tag === \"Failed\")\n\t\t\t\t\treturn yield* ActivationFailed.make({\n\t\t\t\t\t\tdetail: \"The remote export bridge failed during startup\",\n\t\t\t\t\t\tcause: exported.value.cause,\n\t\t\t\t\t})\n\t\t\t\tif (Option.isNone(exported) || exported.value._tag !== \"Active\")\n\t\t\t\t\treturn yield* ActivationFailed.make({\n\t\t\t\t\t\tdetail: \"The remote export bridge stopped during startup\",\n\t\t\t\t\t})\n\t\t\t})\n\t\tconst load = (input: Schema.Json) =>\n\t\t\tEffect.gen(function* () {\n\t\t\t\tyield* SynchronizedRef.updateEffect(state, (current) =>\n\t\t\t\t\tcurrent._tag === \"Idle\"\n\t\t\t\t\t\t? Effect.succeed(Lifecycle.Loading())\n\t\t\t\t\t\t: Effect.fail(AlreadyLoaded.make({})),\n\t\t\t\t)\n\t\t\t\tconst running = yield* start(input)\n\t\t\t\tyield* SynchronizedRef.update(state, (current) =>\n\t\t\t\t\tcurrent._tag === \"Withdrawing\"\n\t\t\t\t\t\t? Lifecycle.Withdrawing({ running: Option.some(running) })\n\t\t\t\t\t\t: current._tag === \"Disposing\"\n\t\t\t\t\t\t\t? Lifecycle.Disposing({ running: Option.some(running) })\n\t\t\t\t\t\t\t: Lifecycle.Running({ running }),\n\t\t\t\t)\n\t\t\t\tyield* awaitActive(running)\n\t\t\t}).pipe(\n\t\t\t\tEffect.mapError((error) =>\n\t\t\t\t\tCause.isCause(error)\n\t\t\t\t\t\t? error\n\t\t\t\t\t\t: contract.normalizeCause(Cause.fail(error)),\n\t\t\t\t),\n\t\t\t)\n\t\tconst dispose = Effect.gen(function* () {\n\t\t\tconst previous = yield* SynchronizedRef.get(state)\n\t\t\tyield* release\n\t\t\tconst current = runningOf(previous)\n\t\t\tconst retired = previous._tag === \"Withdrawing\"\n\t\t\tconst cause = Option.isSome(current)\n\t\t\t\t? yield* cleanup(current.value, retired)\n\t\t\t\t: Cause.empty\n\t\t\tyield* Queue.offer(telemetry.events, ChildEvent.Stopped())\n\t\t\tyield* Queue.end(telemetry.logs)\n\t\t\tif (cause.reasons.length > 0)\n\t\t\t\treturn yield* Effect.fail(contract.normalizeCause(cause))\n\t\t})\n\t\treturn { load, dispose, release }\n\t})\n"],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { Schema } from "effect";
2
+ declare const AlreadyLoaded_base: Schema.Class<AlreadyLoaded, Schema.TaggedStruct<"AlreadyLoaded", {}>, import("effect/Cause").YieldableError & {
3
+ readonly brand: unique symbol;
4
+ }>;
5
+ export declare class AlreadyLoaded extends AlreadyLoaded_base {}
6
+ declare const ContractNotFound_base: Schema.Class<ContractNotFound, Schema.TaggedStruct<"ContractNotFound", {
7
+ readonly module: Schema.String;
8
+ }>, import("effect/Cause").YieldableError & {
9
+ readonly brand: unique symbol;
10
+ }>;
11
+ export declare class ContractNotFound extends ContractNotFound_base {
12
+ get message(): string;
13
+ }
14
+ declare const ModuleImportFailed_base: Schema.Class<ModuleImportFailed, Schema.TaggedStruct<"ModuleImportFailed", {
15
+ readonly module: Schema.String;
16
+ readonly cause: Schema.Defect;
17
+ }>, import("effect/Cause").YieldableError & {
18
+ readonly brand: unique symbol;
19
+ }>;
20
+ export declare class ModuleImportFailed extends ModuleImportFailed_base {}
21
+ declare const ActivationFailed_base: Schema.Class<ActivationFailed, Schema.TaggedStruct<"ActivationFailed", {
22
+ readonly detail: Schema.String;
23
+ readonly cause: Schema.optionalKey<Schema.Cause<Schema.Defect, Schema.Defect>>;
24
+ }>, import("effect/Cause").YieldableError & {
25
+ readonly brand: unique symbol;
26
+ }>;
27
+ export declare class ActivationFailed extends ActivationFailed_base {
28
+ get message(): string;
29
+ }
30
+ export declare const ChildFailure: Schema.Union<readonly [typeof AlreadyLoaded, typeof ContractNotFound, typeof ModuleImportFailed, typeof ActivationFailed]>;
31
+ export type ChildFailure = typeof ChildFailure.Type;
32
+ export {};
33
+ //# sourceMappingURL=childErrors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"childErrors.d.ts","names":[],"sources":["../../src/internal/childErrors.ts"],"mappings":";;WAImB;;qBAFN,sBAAsB;;;;WAMhB;;qBAFN,yBAAyB;MAIxB;;;;;;WAMK;;qBAFN,2BAA2B;;;;;WASrB;;qBAFN,yBAAyB;MAYxB;;qBAID,cAAY,OAAA,uBAAA,sBAAA,yBAAA,2BAAA;YAMb,sBAAsB,aAAa"}
@@ -0,0 +1,29 @@
1
+ import { Schema } from "effect";
2
+ // src/internal/childErrors.ts
3
+ var AlreadyLoaded = class extends Schema.TaggedError()("AlreadyLoaded", {}) {};
4
+ var ContractNotFound = class extends Schema.TaggedError()("ContractNotFound", { module: Schema.String }) {
5
+ get message() {
6
+ return `No remote contract exported by ${this.module}`;
7
+ }
8
+ };
9
+ var ModuleImportFailed = class extends Schema.TaggedError()("ModuleImportFailed", {
10
+ module: Schema.String,
11
+ cause: Schema.Defect({ includeStack: true })
12
+ }) {};
13
+ var ActivationFailed = class extends Schema.TaggedError()("ActivationFailed", {
14
+ detail: Schema.String,
15
+ cause: Schema.optionalKey(Schema.Cause(Schema.Defect({ includeStack: true }), Schema.Defect({ includeStack: true })))
16
+ }) {
17
+ get message() {
18
+ return this.detail;
19
+ }
20
+ };
21
+ const ChildFailure = Schema.Union([
22
+ AlreadyLoaded,
23
+ ContractNotFound,
24
+ ModuleImportFailed,
25
+ ActivationFailed
26
+ ]);
27
+ export { ActivationFailed, AlreadyLoaded, ChildFailure, ContractNotFound, ModuleImportFailed };
28
+
29
+ //# sourceMappingURL=childErrors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"childErrors.js","names":[],"sources":["../../src/internal/childErrors.ts"],"sourcesContent":["import { Schema } from \"effect\"\n\nexport class AlreadyLoaded extends Schema.TaggedError<\n\tAlreadyLoaded,\n\t{ readonly brand: unique symbol }\n>()(\"AlreadyLoaded\", {}) {}\nexport class ContractNotFound extends Schema.TaggedError<\n\tContractNotFound,\n\t{ readonly brand: unique symbol }\n>()(\"ContractNotFound\", { module: Schema.String }) {\n\toverride get message() {\n\t\treturn `No remote contract exported by ${this.module}`\n\t}\n}\nexport class ModuleImportFailed extends Schema.TaggedError<\n\tModuleImportFailed,\n\t{ readonly brand: unique symbol }\n>()(\"ModuleImportFailed\", {\n\tmodule: Schema.String,\n\tcause: Schema.Defect({ includeStack: true }),\n}) {}\nexport class ActivationFailed extends Schema.TaggedError<\n\tActivationFailed,\n\t{ readonly brand: unique symbol }\n>()(\"ActivationFailed\", {\n\tdetail: Schema.String,\n\tcause: Schema.optionalKey(\n\t\tSchema.Cause(\n\t\t\tSchema.Defect({ includeStack: true }),\n\t\t\tSchema.Defect({ includeStack: true }),\n\t\t),\n\t),\n}) {\n\toverride get message() {\n\t\treturn this.detail\n\t}\n}\nexport const ChildFailure = Schema.Union([\n\tAlreadyLoaded,\n\tContractNotFound,\n\tModuleImportFailed,\n\tActivationFailed,\n])\nexport type ChildFailure = typeof ChildFailure.Type\n"],"mappings":";;AAEA,IAAa,gBAAb,cAAmC,OAAO,YAGxC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1B,IAAa,mBAAb,cAAsC,OAAO,YAG3C,CAAC,CAAC,oBAAoB,EAAE,QAAQ,OAAO,OAAO,CAAC,CAAC,CAAC;CAClD,IAAa,UAAU;EACtB,OAAO,kCAAkC,KAAK;CAC/C;AACD;AACA,IAAa,qBAAb,cAAwC,OAAO,YAG7C,CAAC,CAAC,sBAAsB;CACzB,QAAQ,OAAO;CACf,OAAO,OAAO,OAAO,EAAE,cAAc,KAAK,CAAC;AAC5C,CAAC,CAAC,CAAC,CAAC;AACJ,IAAa,mBAAb,cAAsC,OAAO,YAG3C,CAAC,CAAC,oBAAoB;CACvB,QAAQ,OAAO;CACf,OAAO,OAAO,YACb,OAAO,MACN,OAAO,OAAO,EAAE,cAAc,KAAK,CAAC,GACpC,OAAO,OAAO,EAAE,cAAc,KAAK,CAAC,CACrC,CACD;AACD,CAAC,CAAC,CAAC;CACF,IAAa,UAAU;EACtB,OAAO,KAAK;CACb;AACD;AACA,MAAa,eAAe,OAAO,MAAM;CACxC;CACA;CACA;CACA;AACD,CAAC"}
@@ -0,0 +1,59 @@
1
+ import { loadModule } from "./loadModule.js";
2
+ import { ContractNotFound } from "./childErrors.js";
3
+ import { fromModule } from "../Contract.js";
4
+ import { make } from "./port.js";
5
+ import { endpoints } from "./services.js";
6
+ import { lifecycle, telemetry } from "./child.js";
7
+ import { make as make$1 } from "./runner/Multiplex.js";
8
+ import { channel } from "./runner/Wire.js";
9
+ import { ExecutionError } from "./runner/model.js";
10
+ import { closedNormally } from "./runner/connectionEnded.js";
11
+ import { endpoint } from "./control.js";
12
+ import { Effect, Logger, Option } from "effect";
13
+ import { RpcServer } from "effect/rpc";
14
+ // src/internal/childRuntime.ts
15
+ /** Import a contract in the runner installation; importing this module performs no I/O. */
16
+ const load = (specifier) => Effect.gen(function* () {
17
+ const module = yield* loadModule(specifier);
18
+ const contract = fromModule(module);
19
+ if (Option.isNone(contract)) return yield* ContractNotFound.make({ module: specifier });
20
+ return contract.value;
21
+ });
22
+ const connect = (contract, channel$1, session, bootstrap) => Effect.gen(function* () {
23
+ const mux = bootstrap === void 0 ? void 0 : yield* make$1(channel$1);
24
+ return yield* make(mux === void 0 ? channel$1 : channel(mux, 1), {
25
+ session,
26
+ serve: {
27
+ ...endpoints(contract.provides),
28
+ [endpoint]: contract.control
29
+ },
30
+ call: endpoints(contract.inject),
31
+ ...bootstrap === void 0 ? {} : { limits: bootstrap.limits }
32
+ });
33
+ });
34
+ /** One execution unit; the executable supplies the platform and Graft services. */
35
+ const run = (contract, channel, session = "local", bootstrap, stop = Effect.never) => Effect.scoped(Effect.gen(function* () {
36
+ const telemetry$1 = yield* telemetry(contract);
37
+ const loggers = yield* Logger.CurrentLoggers;
38
+ yield* Effect.gen(function* () {
39
+ const peer = yield* connect(contract, channel, session, bootstrap);
40
+ const instance = yield* lifecycle(contract, peer, bootstrap?.identity ?? {
41
+ id: session,
42
+ generation: 1
43
+ }, telemetry$1);
44
+ const handlers = yield* contract.control.toHandlers({
45
+ Load: ({ input }) => instance.load(input),
46
+ Dispose: () => instance.dispose,
47
+ Events: () => telemetry$1.eventStream,
48
+ Logs: () => telemetry$1.logStream
49
+ });
50
+ yield* RpcServer.make(contract.control, { disableFatalDefects: true }).pipe(Effect.provideContext(handlers), Effect.provideService(RpcServer.Protocol, peer.serverProtocol(endpoint)), Effect.forkScoped);
51
+ yield* Effect.raceFirst(peer.await.pipe(Effect.catchIf((error) => closedNormally(error.cause), () => Effect.void), Effect.mapError((error) => ExecutionError.make({
52
+ detail: "Child transport failed",
53
+ cause: error.cause
54
+ }))), stop).pipe(Effect.ensuring(instance.release));
55
+ }).pipe(Effect.provideService(Logger.CurrentLoggers, /* @__PURE__ */ new Set([...loggers, telemetry$1.logger])));
56
+ }));
57
+ export { load, run };
58
+
59
+ //# sourceMappingURL=childRuntime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"childRuntime.js","names":["Multiplex.make","channel","Port.make","Wire.channel","Services.endpoints","telemetry","Child.telemetry","Child.lifecycle"],"sources":["../../src/internal/childRuntime.ts"],"sourcesContent":["import { loadModule } from \"./loadModule\"\nimport { ContractNotFound } from \"./childErrors\"\nimport type { Graft } from \"@graftland/graft\"\nimport { Effect, Logger, Option } from \"effect\"\nimport { RpcServer } from \"effect/rpc\"\nimport { fromModule, type RunnerContract } from \"../Contract\"\nimport * as Port from \"./port\"\nimport * as Services from \"./services\"\nimport * as Child from \"./child\"\nimport * as Multiplex from \"./runner/Multiplex\"\nimport * as Wire from \"./runner/Wire\"\nimport type { Bootstrap } from \"./runner/Bootstrap\"\nimport { ExecutionError } from \"./runner/model\"\nimport { closedNormally } from \"./runner/connectionEnded\"\nimport { endpoint } from \"./control\"\n\n/** Import a contract in the runner installation; importing this module performs no I/O. */\nexport const load = (specifier: string) =>\n\tEffect.gen(function* () {\n\t\tconst module = yield* loadModule(specifier)\n\t\tconst contract = fromModule(module)\n\t\tif (Option.isNone(contract))\n\t\t\treturn yield* ContractNotFound.make({ module: specifier })\n\t\treturn contract.value\n\t})\n\nconst connect = (\n\tcontract: RunnerContract,\n\tchannel: Port.Channel,\n\tsession: string,\n\tbootstrap: Bootstrap | undefined,\n) =>\n\tEffect.gen(function* () {\n\t\tconst mux =\n\t\t\tbootstrap === undefined ? undefined : yield* Multiplex.make(channel)\n\t\treturn yield* Port.make(\n\t\t\tmux === undefined ? channel : Wire.channel(mux, 1),\n\t\t\t{\n\t\t\t\tsession,\n\t\t\t\tserve: {\n\t\t\t\t\t...Services.endpoints(contract.provides),\n\t\t\t\t\t[endpoint]: contract.control,\n\t\t\t\t},\n\t\t\t\tcall: Services.endpoints(contract.inject),\n\t\t\t\t...(bootstrap === undefined ? {} : { limits: bootstrap.limits }),\n\t\t\t},\n\t\t)\n\t})\n\n/** One execution unit; the executable supplies the platform and Graft services. */\nexport const run = (\n\tcontract: RunnerContract,\n\tchannel: Port.Channel,\n\tsession = \"local\",\n\tbootstrap?: Bootstrap,\n\tstop: Effect.Effect<unknown, ExecutionError> = Effect.never,\n): Effect.Effect<void, ExecutionError, Graft.Graft> =>\n\tEffect.scoped(\n\t\tEffect.gen(function* () {\n\t\t\tconst telemetry = yield* Child.telemetry(contract)\n\t\t\tconst loggers = yield* Logger.CurrentLoggers\n\t\t\tyield* Effect.gen(function* () {\n\t\t\t\tconst peer = yield* connect(contract, channel, session, bootstrap)\n\t\t\t\tconst instance = yield* Child.lifecycle(\n\t\t\t\t\tcontract,\n\t\t\t\t\tpeer,\n\t\t\t\t\tbootstrap?.identity ?? { id: session, generation: 1 },\n\t\t\t\t\ttelemetry,\n\t\t\t\t)\n\t\t\t\tconst handlers = yield* contract.control.toHandlers({\n\t\t\t\t\tLoad: ({ input }) => instance.load(input),\n\t\t\t\t\tDispose: () => instance.dispose,\n\t\t\t\t\tEvents: () => telemetry.eventStream,\n\t\t\t\t\tLogs: () => telemetry.logStream,\n\t\t\t\t})\n\t\t\t\tyield* RpcServer.make(contract.control, {\n\t\t\t\t\tdisableFatalDefects: true,\n\t\t\t\t}).pipe(\n\t\t\t\t\tEffect.provideContext(handlers),\n\t\t\t\t\tEffect.provideService(\n\t\t\t\t\t\tRpcServer.Protocol,\n\t\t\t\t\t\tpeer.serverProtocol(endpoint),\n\t\t\t\t\t),\n\t\t\t\t\tEffect.forkScoped,\n\t\t\t\t)\n\t\t\t\tyield* Effect.raceFirst(\n\t\t\t\t\tpeer.await.pipe(\n\t\t\t\t\t\tEffect.catchIf(\n\t\t\t\t\t\t\t(error) => closedNormally(error.cause),\n\t\t\t\t\t\t\t() => Effect.void,\n\t\t\t\t\t\t),\n\t\t\t\t\t\tEffect.mapError((error) =>\n\t\t\t\t\t\t\tExecutionError.make({\n\t\t\t\t\t\t\t\tdetail: \"Child transport failed\",\n\t\t\t\t\t\t\t\tcause: error.cause,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t\tstop,\n\t\t\t\t).pipe(\n\t\t\t\t\t// Release exports before closing the instance scope, including on interruption.\n\t\t\t\t\tEffect.ensuring(instance.release),\n\t\t\t\t)\n\t\t\t}).pipe(\n\t\t\t\tEffect.provideService(\n\t\t\t\t\tLogger.CurrentLoggers,\n\t\t\t\t\tnew Set([...loggers, telemetry.logger]),\n\t\t\t\t),\n\t\t\t)\n\t\t}),\n\t)\n"],"mappings":";;;;;;;;;;;;;;;AAiBA,MAAa,QAAQ,cACpB,OAAO,IAAI,aAAa;CACvB,MAAM,SAAS,OAAO,WAAW,SAAS;CAC1C,MAAM,WAAW,WAAW,MAAM;CAClC,IAAI,OAAO,OAAO,QAAQ,GACzB,OAAO,OAAO,iBAAiB,KAAK,EAAE,QAAQ,UAAU,CAAC;CAC1D,OAAO,SAAS;AACjB,CAAC;AAEF,MAAM,WACL,UACA,WACA,SACA,cAEA,OAAO,IAAI,aAAa;CACvB,MAAM,MACL,cAAc,KAAA,IAAY,KAAA,IAAY,OAAOA,OAAeC,SAAO;CACpE,OAAO,OAAOC,KACb,QAAQ,KAAA,IAAYD,YAAUE,QAAa,KAAK,CAAC,GACjD;EACC;EACA,OAAO;GACN,GAAGC,UAAmB,SAAS,QAAQ;IACtC,WAAW,SAAS;EACtB;EACA,MAAMA,UAAmB,SAAS,MAAM;EACxC,GAAI,cAAc,KAAA,IAAY,CAAC,IAAI,EAAE,QAAQ,UAAU,OAAO;CAC/D,CACD;AACD,CAAC;;AAGF,MAAa,OACZ,UACA,SACA,UAAU,SACV,WACA,OAA+C,OAAO,UAEtD,OAAO,OACN,OAAO,IAAI,aAAa;CACvB,MAAMC,cAAY,OAAOC,UAAgB,QAAQ;CACjD,MAAM,UAAU,OAAO,OAAO;CAC9B,OAAO,OAAO,IAAI,aAAa;EAC9B,MAAM,OAAO,OAAO,QAAQ,UAAU,SAAS,SAAS,SAAS;EACjE,MAAM,WAAW,OAAOC,UACvB,UACA,MACA,WAAW,YAAY;GAAE,IAAI;GAAS,YAAY;EAAE,GACpDF,WACD;EACA,MAAM,WAAW,OAAO,SAAS,QAAQ,WAAW;GACnD,OAAO,EAAE,YAAY,SAAS,KAAK,KAAK;GACxC,eAAe,SAAS;GACxB,cAAcA,YAAU;GACxB,YAAYA,YAAU;EACvB,CAAC;EACD,OAAO,UAAU,KAAK,SAAS,SAAS,EACvC,qBAAqB,KACtB,CAAC,CAAC,CAAC,KACF,OAAO,eAAe,QAAQ,GAC9B,OAAO,eACN,UAAU,UACV,KAAK,eAAe,QAAQ,CAC7B,GACA,OAAO,UACR;EACA,OAAO,OAAO,UACb,KAAK,MAAM,KACV,OAAO,SACL,UAAU,eAAe,MAAM,KAAK,SAC/B,OAAO,IACd,GACA,OAAO,UAAU,UAChB,eAAe,KAAK;GACnB,QAAQ;GACR,OAAO,MAAM;EACd,CAAC,CACF,CACD,GACA,IACD,CAAC,CAAC,KAED,OAAO,SAAS,SAAS,OAAO,CACjC;CACD,CAAC,CAAC,CAAC,KACF,OAAO,eACN,OAAO,gCACP,IAAI,IAAI,CAAC,GAAG,SAASA,YAAU,MAAM,CAAC,CACvC,CACD;AACD,CAAC,CACF"}
@@ -0,0 +1,15 @@
1
+ import { close } from "./release.js";
2
+ import { Fork } from "@graftland/graft";
3
+ import { Array, Cause, Effect, Schema, Scope } from "effect";
4
+ // src/internal/cleanup.ts
5
+ /** Finalizers have no typed failure channel. Keep reasons and their annotations flat. */
6
+ const cleanupCause = (cause) => Cause.fromReasons(Array.flatMap(cause.reasons, (reason) => {
7
+ const error = reason._tag === "Fail" ? reason.error : reason._tag === "Die" ? reason.defect : void 0;
8
+ if (Schema.is(Fork.CleanupError)(error)) return Array.map(cleanupCause(error.cause).reasons, (inner) => inner.annotate(Cause.reasonAnnotations(reason)));
9
+ return [reason._tag === "Fail" ? Cause.makeDieReason(reason.error).annotate(Cause.reasonAnnotations(reason)) : reason];
10
+ }));
11
+ /** Assembly children close before the entry reports their cleanup as its own result. */
12
+ const children = Effect.acquireRelease(Scope.make(), (scope, exit) => close(scope, exit).pipe(Effect.catchCause((cause) => Effect.failCause(cleanupCause(cause)))));
13
+ export { children, cleanupCause };
14
+
15
+ //# sourceMappingURL=cleanup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cleanup.js","names":["Release.close"],"sources":["../../src/internal/cleanup.ts"],"sourcesContent":["import { Fork } from \"@graftland/graft\"\nimport { Array, Cause, Effect, Schema, Scope } from \"effect\"\nimport * as Release from \"./release\"\n\n/** Finalizers have no typed failure channel. Keep reasons and their annotations flat. */\nexport const cleanupCause = (cause: Cause.Cause<unknown>): Cause.Cause<never> =>\n\tCause.fromReasons(\n\t\tArray.flatMap(cause.reasons, (reason) => {\n\t\t\tconst error =\n\t\t\t\treason._tag === \"Fail\"\n\t\t\t\t\t? reason.error\n\t\t\t\t\t: reason._tag === \"Die\"\n\t\t\t\t\t\t? reason.defect\n\t\t\t\t\t\t: undefined\n\t\t\tif (Schema.is(Fork.CleanupError)(error))\n\t\t\t\treturn Array.map(cleanupCause(error.cause).reasons, (inner) =>\n\t\t\t\t\tinner.annotate(Cause.reasonAnnotations(reason)),\n\t\t\t\t)\n\t\t\treturn [\n\t\t\t\treason._tag === \"Fail\"\n\t\t\t\t\t? Cause.makeDieReason(reason.error).annotate(\n\t\t\t\t\t\t\tCause.reasonAnnotations(reason),\n\t\t\t\t\t\t)\n\t\t\t\t\t: reason,\n\t\t\t]\n\t\t}),\n\t)\n\n/** Assembly children close before the entry reports their cleanup as its own result. */\nexport const children = Effect.acquireRelease(Scope.make(), (scope, exit) =>\n\tRelease.close(scope, exit).pipe(\n\t\tEffect.catchCause((cause) => Effect.failCause(cleanupCause(cause))),\n\t),\n)\n"],"mappings":";;;;;AAKA,MAAa,gBAAgB,UAC5B,MAAM,YACL,MAAM,QAAQ,MAAM,UAAU,WAAW;CACxC,MAAM,QACL,OAAO,SAAS,SACb,OAAO,QACP,OAAO,SAAS,QACf,OAAO,SACP,KAAA;CACL,IAAI,OAAO,GAAG,KAAK,YAAY,CAAC,CAAC,KAAK,GACrC,OAAO,MAAM,IAAI,aAAa,MAAM,KAAK,CAAC,CAAC,UAAU,UACpD,MAAM,SAAS,MAAM,kBAAkB,MAAM,CAAC,CAC/C;CACD,OAAO,CACN,OAAO,SAAS,SACb,MAAM,cAAc,OAAO,KAAK,CAAC,CAAC,SAClC,MAAM,kBAAkB,MAAM,CAC/B,IACC,MACJ;AACD,CAAC,CACF;;AAGD,MAAa,WAAW,OAAO,eAAe,MAAM,KAAK,IAAI,OAAO,SACnEA,MAAc,OAAO,IAAI,CAAC,CAAC,KAC1B,OAAO,YAAY,UAAU,OAAO,UAAU,aAAa,KAAK,CAAC,CAAC,CACnE,CACD"}
@@ -0,0 +1,6 @@
1
+ import { Duration, Schema } from "effect";
2
+ // src/internal/config.ts
3
+ const PositiveDuration = Schema.DurationFromString.check(Schema.makeFilter((value) => Duration.isFinite(value) && Duration.toMillis(value) > 0, { expected: "a finite, positive duration" }));
4
+ export { PositiveDuration };
5
+
6
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","names":[],"sources":["../../src/internal/config.ts"],"sourcesContent":["import { Duration, Schema } from \"effect\"\n\nexport const PositiveDuration = Schema.DurationFromString.check(\n\tSchema.makeFilter(\n\t\t(value) => Duration.isFinite(value) && Duration.toMillis(value) > 0,\n\t\t{ expected: \"a finite, positive duration\" },\n\t),\n)\n"],"mappings":";;AAEA,MAAa,mBAAmB,OAAO,mBAAmB,MACzD,OAAO,YACL,UAAU,SAAS,SAAS,KAAK,KAAK,SAAS,SAAS,KAAK,IAAI,GAClE,EAAE,UAAU,8BAA8B,CAC3C,CACD"}
@@ -0,0 +1,42 @@
1
+ import { Priority } from "./port.js";
2
+ import { Schema } from "effect";
3
+ import { Rpc, RpcGroup } from "effect/rpc";
4
+ // src/internal/control.ts
5
+ const Log = Schema.Struct({
6
+ level: Schema.Literals([
7
+ "Fatal",
8
+ "Error",
9
+ "Warn",
10
+ "Info",
11
+ "Debug",
12
+ "Trace",
13
+ "All",
14
+ "None"
15
+ ]),
16
+ message: Schema.Defect({ includeStack: true }),
17
+ cause: Schema.Json,
18
+ annotations: Schema.Record(Schema.String, Schema.Defect({ includeStack: true }))
19
+ });
20
+ const Event = Schema.Union([
21
+ Schema.TaggedStruct("Failed", { cause: Schema.Json }),
22
+ Schema.TaggedStruct("Stopped", {}),
23
+ Schema.TaggedStruct("Withdrawing", {})
24
+ ]);
25
+ const LogEvent = Schema.Union([Schema.TaggedStruct("Log", {
26
+ entry: Log,
27
+ dropped: Schema.Int
28
+ }), Schema.TaggedStruct("LogsEnded", { dropped: Schema.Int })]);
29
+ const endpoint = "@graftland/plugin-remote/control";
30
+ const make = (cause) => RpcGroup.make(Rpc.make("Load", {
31
+ payload: { input: Schema.Json },
32
+ error: cause
33
+ }), Rpc.make("Events", {
34
+ success: Event,
35
+ stream: true
36
+ }), Rpc.make("Dispose", { error: cause })).annotateRpcs(Priority, "control").add(Rpc.make("Logs", {
37
+ success: LogEvent,
38
+ stream: true
39
+ }).annotate(Priority, "log"));
40
+ export { Event, Log, LogEvent, endpoint, make };
41
+
42
+ //# sourceMappingURL=control.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control.js","names":[],"sources":["../../src/internal/control.ts"],"sourcesContent":["import { Schema } from \"effect\"\nimport { Rpc, RpcGroup } from \"effect/rpc\"\n\nimport { Priority } from \"./port\"\n\nexport const Log = Schema.Struct({\n\tlevel: Schema.Literals([\n\t\t\"Fatal\",\n\t\t\"Error\",\n\t\t\"Warn\",\n\t\t\"Info\",\n\t\t\"Debug\",\n\t\t\"Trace\",\n\t\t\"All\",\n\t\t\"None\",\n\t]),\n\tmessage: Schema.Defect({ includeStack: true }),\n\tcause: Schema.Json,\n\tannotations: Schema.Record(\n\t\tSchema.String,\n\t\tSchema.Defect({ includeStack: true }),\n\t),\n})\nexport const Event = Schema.Union([\n\tSchema.TaggedStruct(\"Failed\", { cause: Schema.Json }),\n\tSchema.TaggedStruct(\"Stopped\", {}),\n\tSchema.TaggedStruct(\"Withdrawing\", {}),\n])\nexport const LogEvent = Schema.Union([\n\tSchema.TaggedStruct(\"Log\", { entry: Log, dropped: Schema.Int }),\n\tSchema.TaggedStruct(\"LogsEnded\", { dropped: Schema.Int }),\n])\nexport const endpoint = \"@graftland/plugin-remote/control\"\nexport const make = <C extends Schema.Top>(cause: C) =>\n\tRpcGroup.make(\n\t\tRpc.make(\"Load\", {\n\t\t\tpayload: { input: Schema.Json },\n\t\t\terror: cause,\n\t\t}),\n\t\tRpc.make(\"Events\", { success: Event, stream: true }),\n\t\tRpc.make(\"Dispose\", { error: cause }),\n\t)\n\t\t.annotateRpcs(Priority, \"control\")\n\t\t.add(\n\t\t\tRpc.make(\"Logs\", { success: LogEvent, stream: true }).annotate(\n\t\t\t\tPriority,\n\t\t\t\t\"log\",\n\t\t\t),\n\t\t)\n"],"mappings":";;;;AAKA,MAAa,MAAM,OAAO,OAAO;CAChC,OAAO,OAAO,SAAS;EACtB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACD,CAAC;CACD,SAAS,OAAO,OAAO,EAAE,cAAc,KAAK,CAAC;CAC7C,OAAO,OAAO;CACd,aAAa,OAAO,OACnB,OAAO,QACP,OAAO,OAAO,EAAE,cAAc,KAAK,CAAC,CACrC;AACD,CAAC;AACD,MAAa,QAAQ,OAAO,MAAM;CACjC,OAAO,aAAa,UAAU,EAAE,OAAO,OAAO,KAAK,CAAC;CACpD,OAAO,aAAa,WAAW,CAAC,CAAC;CACjC,OAAO,aAAa,eAAe,CAAC,CAAC;AACtC,CAAC;AACD,MAAa,WAAW,OAAO,MAAM,CACpC,OAAO,aAAa,OAAO;CAAE,OAAO;CAAK,SAAS,OAAO;AAAI,CAAC,GAC9D,OAAO,aAAa,aAAa,EAAE,SAAS,OAAO,IAAI,CAAC,CACzD,CAAC;AACD,MAAa,WAAW;AACxB,MAAa,QAA8B,UAC1C,SAAS,KACR,IAAI,KAAK,QAAQ;CAChB,SAAS,EAAE,OAAO,OAAO,KAAK;CAC9B,OAAO;AACR,CAAC,GACD,IAAI,KAAK,UAAU;CAAE,SAAS;CAAO,QAAQ;AAAK,CAAC,GACnD,IAAI,KAAK,WAAW,EAAE,OAAO,MAAM,CAAC,CACrC,CAAC,CACC,aAAa,UAAU,SAAS,CAAC,CACjC,IACA,IAAI,KAAK,QAAQ;CAAE,SAAS;CAAU,QAAQ;AAAK,CAAC,CAAC,CAAC,SACrD,UACA,KACD,CACD"}
@@ -0,0 +1,44 @@
1
+ import { ClientCertificate } from "../Auth.js";
2
+ import { Connect as Connect$1 } from "./entryConfig.js";
3
+ import { Plugin } from "@graftland/graft";
4
+ import { Effect, Redacted, Scope } from "effect";
5
+ export type Source<A, D extends ReadonlyArray<Plugin.Dependency>, E = unknown> = Effect.Effect<A, E, Scope.Scope> | {
6
+ readonly inject: D;
7
+ readonly read: Effect.Effect<A, unknown, NoInfer<Plugin.Required<D>> | Scope.Scope>;
8
+ };
9
+ type Token<D extends ReadonlyArray<Plugin.Dependency>> = string | {
10
+ readonly file: string;
11
+ } | Source<Redacted.Redacted<string>, D>;
12
+ type Authentication<D extends ReadonlyArray<Plugin.Dependency>> = {
13
+ readonly name: string;
14
+ readonly config?: unknown;
15
+ } | {
16
+ readonly none: {
17
+ readonly identity?: string;
18
+ };
19
+ } | {
20
+ readonly mtls: {
21
+ readonly cert: string;
22
+ readonly key: string;
23
+ } | Source<ClientCertificate, D>;
24
+ } | {
25
+ readonly bearer: {
26
+ readonly token: Token<D>;
27
+ };
28
+ } | {
29
+ readonly jwt: {
30
+ readonly token: Token<D>;
31
+ };
32
+ };
33
+ type WithCredentials<C, D extends ReadonlyArray<Plugin.Dependency>> = C extends {
34
+ readonly local: object;
35
+ } | {
36
+ readonly worker: object;
37
+ } | {
38
+ readonly command: ReadonlyArray<string>;
39
+ } ? C : Omit<C, "auth"> & {
40
+ readonly auth?: Authentication<D>;
41
+ };
42
+ export type Connect<D extends ReadonlyArray<Plugin.Dependency> = readonly []> = WithCredentials<typeof Connect$1.Encoded, D>;
43
+ export {};
44
+ //# sourceMappingURL=credentials.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials.d.ts","names":[],"sources":["../../src/internal/credentials.ts"],"mappings":";;;;YAOY,OAAO,GAAG,UAAU,cAAc,OAAO,aAAa,eAC/D,OAAO,OAAO,GAAG,GAAG,MAAM;WAEjB,QAAQ;WACR,MAAM,OAAO,OACrB,YAEA,QAAQ,OAAO,SAAS,MAAM,MAAM;;KAGnC,MAAM,UAAU,cAAc,OAAO;WACrB;IAAiB,OAAO,SAAS,kBAAkB;KACnE,eAAe,UAAU,cAAc,OAAO;WACrC;WAAuB;;WACvB;aAAiB;;;WAEnB;aACK;aAAuB;MAClC,OAAO,mBAAmB;;WAElB;aAAmB,OAAO,MAAM;;;WAChC;aAAgB,OAAO,MAAM;;;KACtC,gBAAgB,GAAG,UAAU,cAAc,OAAO,eAAe;WACxD;;WACA;;WACA,SAAS;IACpB,IACA,KAAK;WAAwB,OAAO,eAAe;;YAC1C,QAAQ,UAAU,cAAc,OAAO,6BAClD,uBAA6C,UAAA,SAAS"}
@@ -0,0 +1,54 @@
1
+ import { Credentials } from "../Auth.js";
2
+ import { CredentialsError } from "../Errors.js";
3
+ import { prepare } from "./auth/token.js";
4
+ import { Graft, Plugin } from "@graftland/graft";
5
+ import { Cause, Context, Effect, Scope } from "effect";
6
+ // src/internal/credentials.ts
7
+ const provider = (source, encode) => {
8
+ const input = Effect.isEffect(source) ? {
9
+ inject: [],
10
+ read: source
11
+ } : source;
12
+ return Plugin.make({
13
+ name: "remote-effect-credentials",
14
+ inject: input.inject,
15
+ apply: Effect.fnUntraced(function* () {
16
+ const context = yield* Effect.context().pipe(Effect.map(Context.omit(Scope.Scope)));
17
+ const read = input.read.pipe(Effect.provideContext(context), Effect.mapError((error) => CredentialsError.make({ cause: Cause.fail(error) })));
18
+ yield* Graft.provide(Credentials, encode(read));
19
+ })
20
+ });
21
+ };
22
+ const invocation = (connect) => {
23
+ const auth = connect.auth;
24
+ if (auth === void 0) return void 0;
25
+ if ("mtls" in auth) {
26
+ const source = auth.mtls;
27
+ if (Effect.isEffect(source) || "read" in source) return {
28
+ plugin: provider(source, (read) => ({
29
+ kind: "Certificate",
30
+ read: read.pipe(Effect.map((value) => ({
31
+ _tag: "Certificate",
32
+ value
33
+ })))
34
+ })),
35
+ config: void 0
36
+ };
37
+ }
38
+ if ("bearer" in auth || "jwt" in auth) {
39
+ const source = "bearer" in auth ? auth.bearer.token : auth.jwt.token;
40
+ if (typeof source !== "string" && (Effect.isEffect(source) || "read" in source)) return {
41
+ plugin: provider(source, (read) => ({
42
+ kind: "Authorization",
43
+ read: read.pipe(Effect.flatMap(prepare), Effect.map((value) => ({
44
+ _tag: "Authorization",
45
+ value
46
+ })))
47
+ })),
48
+ config: void 0
49
+ };
50
+ }
51
+ };
52
+ export { invocation };
53
+
54
+ //# sourceMappingURL=credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials.js","names":[],"sources":["../../src/internal/credentials.ts"],"sourcesContent":["import { Graft, Plugin } from \"@graftland/graft\"\nimport { Cause, Context, Effect, Redacted, Scope } from \"effect\"\nimport { Credentials, type ClientCertificate, type Prepared } from \"../Auth\"\nimport { CredentialsError } from \"../Errors\"\nimport { prepare } from \"./auth/token\"\nimport type * as Configuration from \"./entryConfig\"\n\nexport type Source<A, D extends ReadonlyArray<Plugin.Dependency>, E = unknown> =\n\t| Effect.Effect<A, E, Scope.Scope>\n\t| {\n\t\t\treadonly inject: D\n\t\t\treadonly read: Effect.Effect<\n\t\t\t\tA,\n\t\t\t\tunknown,\n\t\t\t\tNoInfer<Plugin.Required<D>> | Scope.Scope\n\t\t\t>\n\t }\ntype Token<D extends ReadonlyArray<Plugin.Dependency>> =\n\tstring | { readonly file: string } | Source<Redacted.Redacted<string>, D>\ntype Authentication<D extends ReadonlyArray<Plugin.Dependency>> =\n\t| { readonly name: string; readonly config?: unknown }\n\t| { readonly none: { readonly identity?: string } }\n\t| {\n\t\t\treadonly mtls:\n\t\t\t\t| { readonly cert: string; readonly key: string }\n\t\t\t\t| Source<ClientCertificate, D>\n\t }\n\t| { readonly bearer: { readonly token: Token<D> } }\n\t| { readonly jwt: { readonly token: Token<D> } }\ntype WithCredentials<C, D extends ReadonlyArray<Plugin.Dependency>> = C extends\n\t| { readonly local: object }\n\t| { readonly worker: object }\n\t| { readonly command: ReadonlyArray<string> }\n\t? C\n\t: Omit<C, \"auth\"> & { readonly auth?: Authentication<D> }\nexport type Connect<D extends ReadonlyArray<Plugin.Dependency> = readonly []> =\n\tWithCredentials<typeof Configuration.Connect.Encoded, D>\n\nconst provider = <A, E, D extends ReadonlyArray<Plugin.Dependency>>(\n\tsource: Source<A, D, E>,\n\tencode: (\n\t\tread: Effect.Effect<A, CredentialsError, Scope.Scope>,\n\t) => typeof Credentials.Service,\n) => {\n\tconst input = Effect.isEffect(source) ? { inject: [], read: source } : source\n\treturn Plugin.make({\n\t\tname: \"remote-effect-credentials\",\n\t\tinject: input.inject,\n\t\tapply: Effect.fnUntraced(function* () {\n\t\t\t// Restore the provider's context without replacing each read's owning scope.\n\t\t\tconst context = yield* Effect.context<\n\t\t\t\tPlugin.Required<D> | Scope.Scope\n\t\t\t>().pipe(Effect.map(Context.omit(Scope.Scope)))\n\t\t\tconst read = input.read.pipe(\n\t\t\t\tEffect.provideContext(context),\n\t\t\t\tEffect.mapError((error) =>\n\t\t\t\t\tCredentialsError.make({ cause: Cause.fail(error) }),\n\t\t\t\t),\n\t\t\t)\n\t\t\tyield* Graft.provide(Credentials, encode(read))\n\t\t}),\n\t})\n}\nexport const invocation = <D extends ReadonlyArray<Plugin.Dependency>>(\n\tconnect: Connect<D>,\n) => {\n\tconst auth = connect.auth\n\tif (auth === undefined) return undefined\n\tif (\"mtls\" in auth) {\n\t\tconst source = auth.mtls\n\t\tif (Effect.isEffect(source) || \"read\" in source)\n\t\t\treturn {\n\t\t\t\tplugin: provider(source, (read) => ({\n\t\t\t\t\tkind: \"Certificate\",\n\t\t\t\t\tread: read.pipe(\n\t\t\t\t\t\tEffect.map(\n\t\t\t\t\t\t\t(value): Extract<Prepared, { readonly _tag: \"Certificate\" }> => ({\n\t\t\t\t\t\t\t\t_tag: \"Certificate\",\n\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t})),\n\t\t\t\tconfig: undefined,\n\t\t\t}\n\t}\n\tif (\"bearer\" in auth || \"jwt\" in auth) {\n\t\tconst source = \"bearer\" in auth ? auth.bearer.token : auth.jwt.token\n\t\tif (\n\t\t\ttypeof source !== \"string\" &&\n\t\t\t(Effect.isEffect(source) || \"read\" in source)\n\t\t)\n\t\t\treturn {\n\t\t\t\tplugin: provider(source, (read) => ({\n\t\t\t\t\tkind: \"Authorization\",\n\t\t\t\t\tread: read.pipe(\n\t\t\t\t\t\tEffect.flatMap(prepare),\n\t\t\t\t\t\tEffect.map(\n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t): Extract<Prepared, { readonly _tag: \"Authorization\" }> => ({\n\t\t\t\t\t\t\t\t_tag: \"Authorization\",\n\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t})),\n\t\t\t\tconfig: undefined,\n\t\t\t}\n\t}\n\treturn undefined\n}\n"],"mappings":";;;;;;AAsCA,MAAM,YACL,QACA,WAGI;CACJ,MAAM,QAAQ,OAAO,SAAS,MAAM,IAAI;EAAE,QAAQ,CAAC;EAAG,MAAM;CAAO,IAAI;CACvE,OAAO,OAAO,KAAK;EAClB,MAAM;EACN,QAAQ,MAAM;EACd,OAAO,OAAO,WAAW,aAAa;GAErC,MAAM,UAAU,OAAO,OAAO,QAE5B,CAAC,CAAC,KAAK,OAAO,IAAI,QAAQ,KAAK,MAAM,KAAK,CAAC,CAAC;GAC9C,MAAM,OAAO,MAAM,KAAK,KACvB,OAAO,eAAe,OAAO,GAC7B,OAAO,UAAU,UAChB,iBAAiB,KAAK,EAAE,OAAO,MAAM,KAAK,KAAK,EAAE,CAAC,CACnD,CACD;GACA,OAAO,MAAM,QAAQ,aAAa,OAAO,IAAI,CAAC;EAC/C,CAAC;CACF,CAAC;AACF;AACA,MAAa,cACZ,YACI;CACJ,MAAM,OAAO,QAAQ;CACrB,IAAI,SAAS,KAAA,GAAW,OAAO,KAAA;CAC/B,IAAI,UAAU,MAAM;EACnB,MAAM,SAAS,KAAK;EACpB,IAAI,OAAO,SAAS,MAAM,KAAK,UAAU,QACxC,OAAO;GACN,QAAQ,SAAS,SAAS,UAAU;IACnC,MAAM;IACN,MAAM,KAAK,KACV,OAAO,KACL,WAAgE;KAChE,MAAM;KACN;IACD,EACD,CACD;GACD,EAAE;GACF,QAAQ,KAAA;EACT;CACF;CACA,IAAI,YAAY,QAAQ,SAAS,MAAM;EACtC,MAAM,SAAS,YAAY,OAAO,KAAK,OAAO,QAAQ,KAAK,IAAI;EAC/D,IACC,OAAO,WAAW,aACjB,OAAO,SAAS,MAAM,KAAK,UAAU,SAEtC,OAAO;GACN,QAAQ,SAAS,SAAS,UAAU;IACnC,MAAM;IACN,MAAM,KAAK,KACV,OAAO,QAAQ,OAAO,GACtB,OAAO,KAEL,WAC4D;KAC5D,MAAM;KACN;IACD,EACD,CACD;GACD,EAAE;GACF,QAAQ,KAAA;EACT;CACF;AAED"}
@@ -0,0 +1,3 @@
1
+ import "../Errors.js";
2
+ import "../Transport.js";
3
+ import { Context, Effect, Option, Scope } from "effect";
@@ -0,0 +1,7 @@
1
+ import { Context } from "effect";
2
+ // src/internal/directTransport.ts
3
+ var LocalTransport = class extends Context.Service()("@graftland/plugin-remote/internal/directTransport/LocalTransport") {};
4
+ var WorkerTransport = class extends Context.Service()("@graftland/plugin-remote/internal/directTransport/WorkerTransport") {};
5
+ export { LocalTransport, WorkerTransport };
6
+
7
+ //# sourceMappingURL=directTransport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"directTransport.js","names":[],"sources":["../../src/internal/directTransport.ts"],"sourcesContent":["import { Context } from \"effect\"\nimport type { Effect, Option, Scope, PlatformError } from \"effect\"\nimport type { ProcessExited, TransportError } from \"../Errors\"\nimport type { Channel } from \"../Transport\"\nexport interface LocalOptions {\n\treadonly command?: readonly [string, ...string[]]\n\treadonly contractModule: string\n\treadonly session: string\n}\nexport interface Execution {\n\treadonly channel: Channel\n\treadonly pid: Option.Option<number>\n\treadonly threadId?: number\n\treadonly exited: Effect.Effect<ProcessExited, TransportError>\n\treadonly failure: Effect.Effect<never, TransportError>\n}\nexport class LocalTransport extends Context.Service<\n\tLocalTransport,\n\t{\n\t\treadonly start: (\n\t\t\toptions: LocalOptions,\n\t\t) => Effect.Effect<Execution, PlatformError.PlatformError, Scope.Scope>\n\t}\n>()(\"@graftland/plugin-remote/internal/directTransport/LocalTransport\") {}\n\nexport interface WorkerOptions {\n\treadonly execArgv?: ReadonlyArray<string>\n\treadonly contractModule: string\n\treadonly session: string\n}\nexport class WorkerTransport extends Context.Service<\n\tWorkerTransport,\n\t{\n\t\treadonly start: (\n\t\t\toptions: WorkerOptions,\n\t\t) => Effect.Effect<Execution, TransportError, Scope.Scope>\n\t}\n>()(\"@graftland/plugin-remote/internal/directTransport/WorkerTransport\") {}\n"],"mappings":";;AAgBA,IAAa,iBAAb,cAAoC,QAAQ,QAO1C,CAAC,CAAC,kEAAkE,CAAC,CAAC,CAAC;AAOzE,IAAa,kBAAb,cAAqC,QAAQ,QAO3C,CAAC,CAAC,mEAAmE,CAAC,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import "./childErrors.js";
2
+ import "./services.js";
3
+ import "../Contract.js";
4
+ import "./directTransport.js";
5
+ import "./execution.js";
6
+ import { Fork, Graft, Plugin } from "@graftland/graft";
7
+ import { Cause, Effect, Schema, Scope } from "effect";
8
+ export declare const host: any;
9
+ //# sourceMappingURL=entry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entry.d.ts","names":[],"sources":["../../src/internal/entry.ts"],"mappings":";;;;;;;qBAqRa"}