@graftland/plugin-remote 0.3.3 → 0.4.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 (323) hide show
  1. package/README.md +18 -54
  2. package/README.zh-CN.md +17 -51
  3. package/README.zh-TW.md +17 -51
  4. package/dist/Auth.d.ts.map +1 -1
  5. package/dist/Auth.js.map +1 -1
  6. package/dist/Config.d.ts +1151 -0
  7. package/dist/Config.d.ts.map +1 -0
  8. package/dist/Config.js +183 -0
  9. package/dist/Config.js.map +1 -0
  10. package/dist/Contract.d.ts +1 -1
  11. package/dist/Contract.d.ts.map +1 -1
  12. package/dist/Contract.js +32 -1
  13. package/dist/Contract.js.map +1 -1
  14. package/dist/Instance.d.ts.map +1 -1
  15. package/dist/Instance.js.map +1 -1
  16. package/dist/Testing.d.ts +1 -1
  17. package/dist/Testing.d.ts.map +1 -1
  18. package/dist/Testing.js.map +1 -1
  19. package/dist/Transport.d.ts +1 -1
  20. package/dist/Transport.d.ts.map +1 -1
  21. package/dist/Transport.js.map +1 -1
  22. package/dist/cli.d.ts +4 -0
  23. package/dist/cli.d.ts.map +1 -0
  24. package/dist/cli.js +25 -0
  25. package/dist/cli.js.map +1 -0
  26. package/dist/host/auth/bearer.d.ts.map +1 -1
  27. package/dist/host/auth/bearer.js +4 -2
  28. package/dist/host/auth/bearer.js.map +1 -1
  29. package/dist/host/auth/jwt.d.ts.map +1 -1
  30. package/dist/host/auth/jwt.js +4 -2
  31. package/dist/host/auth/jwt.js.map +1 -1
  32. package/dist/host/auth/mtls.d.ts +3 -7
  33. package/dist/host/auth/mtls.d.ts.map +1 -1
  34. package/dist/host/auth/mtls.js +13 -14
  35. package/dist/host/auth/mtls.js.map +1 -1
  36. package/dist/host/auth/none.d.ts +1 -1
  37. package/dist/host/auth/none.js +7 -5
  38. package/dist/host/auth/none.js.map +1 -1
  39. package/dist/host/command.d.ts +1 -1
  40. package/dist/host/command.d.ts.map +1 -1
  41. package/dist/host/command.js +11 -9
  42. package/dist/host/command.js.map +1 -1
  43. package/dist/host/local.d.ts.map +1 -1
  44. package/dist/host/local.js +9 -30
  45. package/dist/host/local.js.map +1 -1
  46. package/dist/host/unix.d.ts +1 -1
  47. package/dist/host/unix.d.ts.map +1 -1
  48. package/dist/host/unix.js +13 -9
  49. package/dist/host/unix.js.map +1 -1
  50. package/dist/host/websocket.d.ts +1 -1
  51. package/dist/host/websocket.d.ts.map +1 -1
  52. package/dist/host/websocket.js +11 -8
  53. package/dist/host/websocket.js.map +1 -1
  54. package/dist/host/worker.d.ts +1 -1
  55. package/dist/host/worker.d.ts.map +1 -1
  56. package/dist/host/worker.js +13 -9
  57. package/dist/host/worker.js.map +1 -1
  58. package/dist/index.d.ts +6 -8
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/index.js +30 -64
  61. package/dist/index.js.map +1 -1
  62. package/dist/internal/Certificates.js.map +1 -1
  63. package/dist/internal/FailureGroup.js +6 -6
  64. package/dist/internal/FailureGroup.js.map +1 -1
  65. package/dist/internal/Peer.js.map +1 -1
  66. package/dist/internal/{ServeLifecycle.js → RunnerLifecycle.js} +6 -6
  67. package/dist/internal/RunnerLifecycle.js.map +1 -0
  68. package/dist/internal/Supervisor.js.map +1 -1
  69. package/dist/internal/assembly.d.ts +3 -3
  70. package/dist/internal/assembly.js +8 -8
  71. package/dist/internal/assembly.js.map +1 -1
  72. package/dist/internal/auth/config.d.ts +27 -0
  73. package/dist/internal/auth/config.d.ts.map +1 -0
  74. package/dist/internal/auth/config.js +29 -0
  75. package/dist/internal/auth/config.js.map +1 -0
  76. package/dist/internal/auth/mtls.js.map +1 -1
  77. package/dist/internal/auth/token.js.map +1 -1
  78. package/dist/internal/auth/tokenCredentials.d.ts +1 -1
  79. package/dist/internal/auth/tokenCredentials.d.ts.map +1 -1
  80. package/dist/internal/auth/tokenCredentials.js +1 -1
  81. package/dist/internal/auth/tokenCredentials.js.map +1 -1
  82. package/dist/internal/child.js +3 -3
  83. package/dist/internal/child.js.map +1 -1
  84. package/dist/internal/childMain.js +47 -0
  85. package/dist/internal/childMain.js.map +1 -0
  86. package/dist/internal/childRuntime.js +8 -8
  87. package/dist/internal/childRuntime.js.map +1 -1
  88. package/dist/internal/cleanup.js +3 -3
  89. package/dist/internal/cleanup.js.map +1 -1
  90. package/dist/internal/contract.js.map +1 -1
  91. package/dist/internal/credentials.d.ts +3 -2
  92. package/dist/internal/credentials.d.ts.map +1 -1
  93. package/dist/internal/credentials.js +1 -1
  94. package/dist/internal/credentials.js.map +1 -1
  95. package/dist/internal/directTransport.js.map +1 -1
  96. package/dist/internal/entry.d.ts +104 -26
  97. package/dist/internal/entry.d.ts.map +1 -1
  98. package/dist/internal/entry.js +22 -9
  99. package/dist/internal/entry.js.map +1 -1
  100. package/dist/internal/entryConfig.d.ts +2 -202
  101. package/dist/internal/entryConfig.js +2 -136
  102. package/dist/internal/entryConfig.js.map +1 -1
  103. package/dist/internal/execution.d.ts +4 -4
  104. package/dist/internal/execution.js +11 -11
  105. package/dist/internal/execution.js.map +1 -1
  106. package/dist/internal/follow.js +1 -1
  107. package/dist/internal/follow.js.map +1 -1
  108. package/dist/internal/forkTree.js.map +1 -1
  109. package/dist/internal/host/local.js.map +1 -1
  110. package/dist/internal/host/runner.js +4 -4
  111. package/dist/internal/host/runner.js.map +1 -1
  112. package/dist/internal/host.js +2 -2
  113. package/dist/internal/host.js.map +1 -1
  114. package/dist/internal/importer.js +1 -1
  115. package/dist/internal/importer.js.map +1 -1
  116. package/dist/internal/listenerStartup.js +1 -1
  117. package/dist/internal/listenerStartup.js.map +1 -1
  118. package/dist/internal/loadModule.js.map +1 -1
  119. package/dist/internal/platform.js +1 -9
  120. package/dist/internal/port.d.ts +1 -1
  121. package/dist/internal/port.js +2 -2
  122. package/dist/internal/port.js.map +1 -1
  123. package/dist/internal/runner/Bootstrap.js.map +1 -1
  124. package/dist/internal/runner/Connection.d.ts +3 -2
  125. package/dist/internal/runner/Connection.js +6 -6
  126. package/dist/internal/runner/Connection.js.map +1 -1
  127. package/dist/internal/runner/Execution.js +6 -6
  128. package/dist/internal/runner/Execution.js.map +1 -1
  129. package/dist/internal/runner/Local.js +1 -1
  130. package/dist/internal/runner/Local.js.map +1 -1
  131. package/dist/internal/runner/Lock.js.map +1 -1
  132. package/dist/internal/runner/Multiplex.js.map +1 -1
  133. package/dist/internal/runner/Packages.js.map +1 -1
  134. package/dist/internal/runner/ProcessObservation.js.map +1 -1
  135. package/dist/internal/runner/Processes.js.map +1 -1
  136. package/dist/internal/runner/Retention.js.map +1 -1
  137. package/dist/internal/runner/Store.js.map +1 -1
  138. package/dist/internal/runner/Supervisor.js +5 -5
  139. package/dist/internal/runner/Supervisor.js.map +1 -1
  140. package/dist/internal/runner/Watchdog.js.map +1 -1
  141. package/dist/internal/runner/Wire.d.ts +1 -1
  142. package/dist/internal/runner/Wire.js.map +1 -1
  143. package/dist/internal/runner/accept.js +2 -2
  144. package/dist/internal/runner/accept.js.map +1 -1
  145. package/dist/internal/runner/command.js +1 -1
  146. package/dist/internal/runner/command.js.map +1 -1
  147. package/dist/internal/runner/connectionEnded.js +1 -1
  148. package/dist/internal/runner/connectionEnded.js.map +1 -1
  149. package/dist/internal/runner/model.d.ts.map +1 -1
  150. package/dist/internal/runner/model.js.map +1 -1
  151. package/dist/internal/services.d.ts.map +1 -1
  152. package/dist/internal/services.js +1 -1
  153. package/dist/internal/services.js.map +1 -1
  154. package/dist/internal/socketChannel.js.map +1 -1
  155. package/dist/internal/stdioChannel.js.map +1 -1
  156. package/dist/internal/supervisorPlugin.js +48 -1
  157. package/dist/internal/supervisorPlugin.js.map +1 -1
  158. package/dist/internal/transportOptions.d.ts.map +1 -1
  159. package/dist/internal/watchdogMain.js +5 -3
  160. package/dist/internal/watchdogMain.js.map +1 -1
  161. package/dist/internal/websocket.js.map +1 -1
  162. package/dist/internal/websocketServer.js +1 -1
  163. package/dist/internal/websocketServer.js.map +1 -1
  164. package/dist/internal/workerChannel.js.map +1 -1
  165. package/dist/internal/workerMain.js +13 -6
  166. package/dist/internal/workerMain.js.map +1 -1
  167. package/dist/runner/auth/bearer.d.ts +3 -5
  168. package/dist/runner/auth/bearer.d.ts.map +1 -1
  169. package/dist/runner/auth/bearer.js +13 -11
  170. package/dist/runner/auth/bearer.js.map +1 -1
  171. package/dist/runner/auth/jwt.d.ts +4 -18
  172. package/dist/runner/auth/jwt.d.ts.map +1 -1
  173. package/dist/runner/auth/jwt.js +16 -28
  174. package/dist/runner/auth/jwt.js.map +1 -1
  175. package/dist/runner/auth/mtls.d.ts +3 -6
  176. package/dist/runner/auth/mtls.d.ts.map +1 -1
  177. package/dist/runner/auth/mtls.js +13 -29
  178. package/dist/runner/auth/mtls.js.map +1 -1
  179. package/dist/runner/auth/none.d.ts +1 -1
  180. package/dist/runner/auth/none.js +7 -5
  181. package/dist/runner/auth/none.js.map +1 -1
  182. package/dist/runner/index.d.ts +3 -308
  183. package/dist/runner/index.d.ts.map +1 -1
  184. package/dist/runner/index.js +62 -30
  185. package/dist/runner/index.js.map +1 -1
  186. package/dist/runner/stdio.d.ts +1 -1
  187. package/dist/runner/stdio.d.ts.map +1 -1
  188. package/dist/runner/stdio.js +11 -9
  189. package/dist/runner/stdio.js.map +1 -1
  190. package/dist/runner/unix.d.ts +1 -1
  191. package/dist/runner/unix.d.ts.map +1 -1
  192. package/dist/runner/unix.js +10 -8
  193. package/dist/runner/unix.js.map +1 -1
  194. package/dist/runner/websocket.d.ts +1 -1
  195. package/dist/runner/websocket.d.ts.map +1 -1
  196. package/dist/runner/websocket.js +12 -10
  197. package/dist/runner/websocket.js.map +1 -1
  198. package/package.json +14 -12
  199. package/schema.json +2269 -0
  200. package/src/Auth.ts +8 -2
  201. package/src/Config.ts +196 -0
  202. package/src/Contract.ts +12 -3
  203. package/src/Instance.ts +1 -0
  204. package/src/Testing.ts +6 -4
  205. package/src/Transport.ts +12 -3
  206. package/src/cli.ts +60 -0
  207. package/src/host/auth/bearer.ts +1 -0
  208. package/src/host/auth/jwt.ts +1 -0
  209. package/src/host/auth/mtls.ts +7 -12
  210. package/src/host/auth/none.ts +3 -1
  211. package/src/host/command.ts +8 -5
  212. package/src/host/local.ts +4 -2
  213. package/src/host/unix.ts +11 -7
  214. package/src/host/websocket.ts +10 -7
  215. package/src/host/worker.ts +8 -5
  216. package/src/index.ts +36 -23
  217. package/src/internal/Certificates.ts +1 -0
  218. package/src/internal/FailureGroup.ts +5 -3
  219. package/src/internal/Peer.ts +1 -0
  220. package/src/internal/{ServeLifecycle.ts → RunnerLifecycle.ts} +7 -5
  221. package/src/internal/Supervisor.ts +5 -4
  222. package/src/internal/assembly.ts +11 -9
  223. package/src/internal/auth/config.ts +44 -0
  224. package/src/internal/auth/mtls.ts +1 -0
  225. package/src/internal/auth/token.ts +1 -0
  226. package/src/internal/auth/tokenCredentials.ts +4 -2
  227. package/src/internal/child.ts +8 -6
  228. package/src/{bin.ts → internal/childMain.ts} +16 -61
  229. package/src/internal/childRuntime.ts +12 -10
  230. package/src/internal/cleanup.ts +3 -2
  231. package/src/internal/contract.ts +1 -0
  232. package/src/internal/credentials.ts +3 -1
  233. package/src/internal/directTransport.ts +9 -2
  234. package/src/internal/entry.ts +53 -16
  235. package/src/internal/entryConfig.ts +10 -132
  236. package/src/internal/execution.ts +17 -15
  237. package/src/internal/follow.ts +2 -1
  238. package/src/internal/forkTree.ts +2 -1
  239. package/src/internal/host/local.ts +1 -0
  240. package/src/internal/host/runner.ts +7 -5
  241. package/src/internal/host.ts +9 -8
  242. package/src/internal/importer.ts +3 -2
  243. package/src/internal/listenerStartup.ts +4 -2
  244. package/src/internal/loadModule.ts +1 -0
  245. package/src/internal/platform.ts +1 -12
  246. package/src/internal/port.ts +11 -6
  247. package/src/internal/runner/Bootstrap.ts +1 -0
  248. package/src/internal/runner/Connection.ts +13 -11
  249. package/src/internal/runner/Execution.ts +14 -13
  250. package/src/internal/runner/Local.ts +3 -2
  251. package/src/internal/runner/Lock.ts +1 -0
  252. package/src/internal/runner/Multiplex.ts +2 -1
  253. package/src/internal/runner/Packages.ts +7 -5
  254. package/src/internal/runner/ProcessObservation.ts +2 -1
  255. package/src/internal/runner/Processes.ts +3 -1
  256. package/src/internal/runner/Retention.ts +1 -0
  257. package/src/internal/runner/Store.ts +3 -2
  258. package/src/internal/runner/Supervisor.ts +22 -20
  259. package/src/internal/runner/Watchdog.ts +3 -1
  260. package/src/internal/runner/Wire.ts +13 -12
  261. package/src/internal/runner/accept.ts +6 -5
  262. package/src/internal/runner/command.ts +3 -2
  263. package/src/internal/runner/connectionEnded.ts +2 -1
  264. package/src/internal/runner/model.ts +5 -3
  265. package/src/internal/services.ts +9 -2
  266. package/src/internal/socketChannel.ts +2 -1
  267. package/src/internal/stdioChannel.ts +4 -2
  268. package/src/internal/supervisorPlugin.ts +10 -8
  269. package/src/internal/transportOptions.ts +1 -0
  270. package/src/internal/watchdogMain.ts +5 -3
  271. package/src/internal/websocket.ts +5 -2
  272. package/src/internal/websocketServer.ts +6 -4
  273. package/src/internal/workerChannel.ts +1 -0
  274. package/src/internal/workerMain.ts +21 -5
  275. package/src/runner/auth/bearer.ts +10 -6
  276. package/src/runner/auth/jwt.ts +10 -41
  277. package/src/runner/auth/mtls.ts +6 -3
  278. package/src/runner/auth/none.ts +3 -1
  279. package/src/runner/index.ts +102 -11
  280. package/src/runner/stdio.ts +15 -10
  281. package/src/runner/unix.ts +7 -4
  282. package/src/runner/websocket.ts +9 -7
  283. package/dist/Auth-BElTC9_X.js +0 -6
  284. package/dist/Bootstrap-H9gDsgsC.js +0 -9
  285. package/dist/ConfigDirectory-BCC6q2R4.js +0 -5
  286. package/dist/Contract-DsJtisvL.js +0 -83
  287. package/dist/Errors-DYhsGZcZ.js +0 -58
  288. package/dist/FailureGroup-BgT73AaR.js +0 -63
  289. package/dist/Framing-G9eSaeLb.js +0 -61
  290. package/dist/Graft-B71CPA2Y.js +0 -996
  291. package/dist/Packages-AgoCGotL.js +0 -108
  292. package/dist/Peer-DXeVrGBh.js +0 -342
  293. package/dist/ProcessObservation-gLgGirYv.js +0 -38
  294. package/dist/ServeLifecycle-Bd1FPJ6e.js +0 -24
  295. package/dist/Transport-DULzpsgR.js +0 -6
  296. package/dist/WatchdogProtocol-BZmVxrBP.js +0 -17
  297. package/dist/bin.js +0 -28276
  298. package/dist/bin.js.map +0 -1
  299. package/dist/childRuntime-Bm3iSg_N.js +0 -192
  300. package/dist/command-9zrHdbwT.js +0 -7
  301. package/dist/connectionEnded-BwcxQ7W8.js +0 -54
  302. package/dist/directTransport-DrexuPSm.js +0 -5
  303. package/dist/entry-psOpX3Bj.js +0 -736
  304. package/dist/importer-Cvf88eAY.js +0 -344
  305. package/dist/internal/ServeLifecycle.js.map +0 -1
  306. package/dist/internal/entryConfig.d.ts.map +0 -1
  307. package/dist/internal/platform.js.map +0 -1
  308. package/dist/internal/release.js +0 -25
  309. package/dist/internal/release.js.map +0 -1
  310. package/dist/internal/serve.js +0 -60
  311. package/dist/internal/serve.js.map +0 -1
  312. package/dist/port--3x2zJ4D.js +0 -285
  313. package/dist/release-DfZPuIcK.js +0 -23
  314. package/dist/rolldown-runtime-DYf_mQCB.js +0 -34
  315. package/dist/socketChannel-CJvL2DiB.js +0 -3658
  316. package/dist/supervisorPlugin-t6Z6PrhD.js +0 -733
  317. package/dist/token-CYBNNlhS.js +0 -17
  318. package/dist/tokenCredentials-CbCuk-Rt.js +0 -31
  319. package/dist/websocketServer-NQhODlEt.js +0 -60
  320. package/dist/workerChannel-C8hhBJzA.js +0 -27
  321. package/src/internal/release.ts +0 -72
  322. package/src/internal/serve.ts +0 -119
  323. /package/dist/{bin.d.ts → internal/childMain.d.ts} +0 -0
@@ -1,344 +0,0 @@
1
- import { s as fromModule } from "./Graft-B71CPA2Y.js";
2
- import { t as ConfigDirectory } from "./ConfigDirectory-BCC6q2R4.js";
3
- import { registerHooks } from "node:module";
4
- import { Array, Cause, Config, Context, Data, Effect, Exit, HashMap, MutableList, Option, Path, Predicate, Record, Ref, Result, Schema, Scope, String } from "effect";
5
- import { SecureRandom } from "effect/crypto";
6
- // packages/remote/src/internal/forkTree.ts
7
- const findSubtree = (trees, id) => Array.findFirst(trees, (tree) => tree.id === id ? Option.some(tree) : findSubtree(tree.children, id));
8
- const isSubtreeActive = (tree) => tree.state._tag === "Active" && Array.every(tree.children, isSubtreeActive);
9
- // packages/loader/src/internal/snapshot.ts
10
- /** Class instances are opaque; only arrays and plain records belong to the data graph. */
11
- const isContainer = (value) => Predicate.isObjectOrArray(value) && (Array.isArray(value) || Object.getPrototypeOf(value) === Object.prototype || Object.getPrototypeOf(value) === null);
12
- const owned = /* @__PURE__ */ new WeakSet();
13
- /** Internal evidence that every plain container in this graph has been captured. */
14
- const isSnapshot = (value) => owned.has(value);
15
- /**
16
- * Copy and freeze a data graph without changing the caller's objects. Sharing,
17
- * cycles, sparse arrays and null prototypes survive the copy. Own properties
18
- * are captured as values; class instances (including Env) retain their identity.
19
- */
20
- const snapshot = (value) => {
21
- const copies = /* @__PURE__ */ new WeakMap();
22
- const pending = MutableList.make();
23
- const copyOf = (source) => {
24
- if (!isContainer(source) || owned.has(source)) return source;
25
- const existing = copies.get(source);
26
- if (existing !== void 0) return existing;
27
- const copy = Array.isArray(source) ? [] : Object.create(Object.getPrototypeOf(source));
28
- copies.set(source, copy);
29
- MutableList.append(pending, {
30
- source,
31
- copy
32
- });
33
- return copy;
34
- };
35
- const result = copyOf(value);
36
- while (pending.length > 0) {
37
- const item = MutableList.take(pending);
38
- if (item === MutableList.Empty) break;
39
- const { source, copy } = item;
40
- for (const key of Reflect.ownKeys(source)) Object.defineProperty(copy, key, {
41
- value: copyOf(Reflect.get(source, key)),
42
- enumerable: Object.prototype.propertyIsEnumerable.call(source, key),
43
- configurable: !(Array.isArray(source) && key === "length"),
44
- writable: true
45
- });
46
- Object.freeze(copy);
47
- owned.add(copy);
48
- }
49
- return result;
50
- };
51
- // packages/loader/src/Entry.ts
52
- /**
53
- * Entries describe which plugins to load and how, as plain data that a
54
- * config file can hold.
55
- */
56
- /** A value read from an environment variable when the entry is loaded (`!env NAME` in YAML). */
57
- var Env = class extends Data.TaggedClass("Env") {};
58
- /**
59
- * The id of the entry a plugin was loaded from. Ids persist in the config
60
- * file, so a plugin can use this as a name that survives restarts.
61
- */
62
- const CurrentId = Context.Reference("@graftland/loader/Entry/CurrentId", { defaultValue: () => Option.none() });
63
- /** The descriptions also document the config file's JSON Schema. */
64
- const Fields = Schema.Struct({
65
- id: Schema.String.annotate({ description: "Identifies the entry." }),
66
- name: Schema.String.annotate({ description: "The plugin's module: a relative path, a package name, or a short name. Ignored for groups." }),
67
- config: Schema.optionalKey(Schema.Unknown).annotateKey({ description: "The plugin's input. For a group, its list of entries." }),
68
- disabled: Schema.optionalKey(Schema.Boolean.annotate({ description: "true unloads the entry but keeps it in the file." })),
69
- group: Schema.optionalKey(Schema.Boolean.annotate({ description: "true makes the entry a group of other entries." })),
70
- inject: Schema.optionalKey(Schema.Array(Schema.String).annotate({ description: "Service keys to wait for before loading the plugin, in addition to its own inject." })),
71
- isolate: Schema.optionalKey(Schema.Record(Schema.String, Schema.Union([Schema.Literal(true), Schema.String])).annotate({ description: "Service or event keys to isolate: true for a private realm, or a label for a shared one." })),
72
- intercept: Schema.optionalKey(Schema.Record(Schema.String, Schema.Unknown).annotate({ description: "Patches for registered references, applying to this entry and its descendants. Each value is resolved, decoded with the registered Schema, then merged." }))
73
- });
74
- /** Known fields are validated; additional entry metadata is preserved as unknown data. */
75
- const Entry = Schema.StructWithRest(Fields, [Schema.Record(Schema.String, Schema.Unknown)]);
76
- var CyclicConfig = class extends Schema.TaggedError()("CyclicConfig", { path: Schema.Array(Schema.String) }) {
77
- get message() {
78
- return `Configuration contains a cycle at ${Array.join(this.path, ".") || "<root>"}`;
79
- }
80
- };
81
- /** Identity-based graph traversal; sharing is allowed, but a back edge is not. */
82
- const checkAcyclic = (value) => {
83
- const active = /* @__PURE__ */ new WeakSet();
84
- const finished = /* @__PURE__ */ new WeakSet();
85
- const work = MutableList.make();
86
- MutableList.prepend(work, {
87
- value,
88
- path: [],
89
- leave: false
90
- });
91
- while (work.length > 0) {
92
- const frame = MutableList.take(work);
93
- if (frame === MutableList.Empty) break;
94
- const { value, path, leave } = frame;
95
- if (!isContainer(value)) continue;
96
- if (leave) {
97
- active.delete(value);
98
- finished.add(value);
99
- continue;
100
- }
101
- if (active.has(value)) return Result.fail(CyclicConfig.make({ path }));
102
- if (finished.has(value)) continue;
103
- active.add(value);
104
- MutableList.prepend(work, {
105
- value,
106
- path,
107
- leave: true
108
- });
109
- for (const [key, child] of Record.toEntries(value)) MutableList.prepend(work, {
110
- value: child,
111
- path: [...path, key],
112
- leave: false
113
- });
114
- }
115
- return Result.succeed(void 0);
116
- };
117
- /** Rejects cycles and resolves Env while preserving sharing within each execution. */
118
- const resolveEnv = (value) => Effect.suspend(() => {
119
- const resolved = /* @__PURE__ */ new WeakMap();
120
- const resolve = (value) => Effect.suspend(() => {
121
- if (value instanceof Env) return Config.String(value.name);
122
- if (!isContainer(value)) return Effect.succeed(value);
123
- if (resolved.has(value)) return Effect.succeed(resolved.get(value));
124
- const result = Array.isArray(value) ? Effect.forEach(value, resolve) : Effect.map(Effect.forEach(Record.toEntries(value), ([key, inner]) => Effect.map(resolve(inner), (value) => [key, value])), Record.fromEntries);
125
- return Effect.map(result, (result) => {
126
- resolved.set(value, result);
127
- return result;
128
- });
129
- });
130
- return Effect.andThen(Effect.fromResult(checkAcyclic(value)), resolve(value));
131
- });
132
- // packages/loader/src/internal/recovery.ts
133
- /** Recovery is safe only when no companion failure, defect or interruption would be discarded. */
134
- const isOnlyFailure = (cause, matches) => cause.reasons.length === 1 && Array.some(cause.reasons, (reason) => Cause.isFailReason(reason) && matches(reason.error));
135
- // packages/loader/src/ModuleResolver.ts
136
- /**
137
- * Turns the `name` of an entry into a plugin.
138
- */
139
- var ModuleNotFound = class extends Schema.TaggedError()("ModuleNotFound", {
140
- plugin: Schema.String,
141
- tried: Schema.Array(Schema.String)
142
- }) {
143
- get message() {
144
- return `No plugin found for "${this.plugin}" (tried ${Array.join(this.tried, ", ")})`;
145
- }
146
- };
147
- /** A module could not be imported, or plugin resolution found no plugin export. */
148
- var ModuleInvalid = class extends Schema.TaggedError()("ModuleInvalid", {
149
- specifier: Schema.String,
150
- cause: Schema.Unknown
151
- }) {
152
- get message() {
153
- return `Module "${this.specifier}" could not be loaded`;
154
- }
155
- };
156
- var ModuleResolver = class extends Context.Service()("@graftland/loader/ModuleResolver") {};
157
- const isPath = (name) => String.startsWith(".")(name) || String.startsWith("/")(name);
158
- /** The specifiers tried for a name, in order: as written, then the naming conventions for short names. */
159
- const candidates = (name) => isPath(name) || String.includes(":")(name) || String.startsWith("@")(name) ? [name] : [
160
- name,
161
- `@graftland/plugin-${name}`,
162
- `graft-plugin-${name}`
163
- ];
164
- /** An error followed by its causes, outermost first. */
165
- const causes = (error, depth = 0) => depth < 8 && Predicate.hasProperty(error, "cause") && error.cause !== void 0 ? [error, ...causes(error.cause, depth + 1)] : [error];
166
- /** Node's message for a missing package or file, followed by its importer. */
167
- const decodeNotFound = Schema.decodeUnknownOption(Schema.TemplateLiteralParser([
168
- "Cannot find ",
169
- Schema.Literals(["package", "module"]),
170
- " '",
171
- Schema.String.check(Schema.isPattern(/^[^']+$/)),
172
- "'",
173
- Schema.String
174
- ]));
175
- /** What a module resolution error says is missing, if it is one. */
176
- const missingName = (error) => Predicate.hasProperty(error, "code") && error.code === "ERR_MODULE_NOT_FOUND" && Predicate.hasProperty(error, "message") && Predicate.isString(error.message) ? Option.map(decodeNotFound(error.message), ([, , , name]) => name) : Option.none();
177
- /**
178
- * Whether an import failed because the candidate itself does not exist, as
179
- * opposed to something it imports. Only then is the next candidate tried.
180
- */
181
- const isMissing = (error, candidate) => Array.some(causes(error), (error) => Option.exists(missingName(error), (name) => Array.contains(candidate, name)));
182
- /** The package a bare specifier belongs to: `@scope/name` or `name`. */
183
- const packageOf = (specifier) => Array.join(Array.take(String.split("/")(specifier), String.startsWith("@")(specifier) ? 2 : 1), "/");
184
- var PlanKey = class extends Data.Class {};
185
- /** Failed attempts release their resources before recovery; successful leases stay with the entry. */
186
- const inCandidateScope = (effect) => Effect.uninterruptibleMask((restore) => Effect.gen(function* () {
187
- const parent = yield* Effect.scope;
188
- const scope = yield* Scope.fork(parent);
189
- const result = yield* Effect.exit(restore(effect).pipe(Scope.provide(scope)));
190
- if (Exit.isSuccess(result)) return result.value;
191
- const closed = yield* Effect.exit(Scope.close(scope, result));
192
- return yield* Effect.failCause(Exit.isFailure(closed) ? Cause.combine(result.cause, closed.cause) : result.cause);
193
- }));
194
- /**
195
- * Resolves names with dynamic `import`. Relative specifiers are resolved
196
- * against `ConfigDirectory` when supplied, otherwise `base`; file URLs retain their query and fragment for importing, while
197
- * their decoded paths identify missing candidates. Bare specifiers go through
198
- * `importer`, which should run in the application so its dependencies are visible.
199
- * Effect importers may acquire
200
- * resources in a candidate scope owned by the entry lifecycle. A failed candidate
201
- * closes before fallback; a successful candidate remains leased until entry disposal.
202
- * Importers may attach observation-only leases to the separate observationScope.
203
- * The caller keeps that scope through failure and closes it on retry or disposal.
204
- */
205
- const make$1 = Effect.fnUntraced(function* (options) {
206
- const path = yield* Path.Path;
207
- /** Keep the import target and Node's possible missing names in one normalization step. */
208
- const normalize = Effect.fnUntraced(function* (specifier) {
209
- const invalid = (cause) => ModuleInvalid.make({
210
- specifier,
211
- cause
212
- });
213
- if (isPath(specifier)) {
214
- const directory = yield* ConfigDirectory;
215
- const file = path.resolve(Option.getOrElse(directory, () => options.base), specifier);
216
- const url = yield* path.toFileUrl(file).pipe(Effect.mapError(invalid));
217
- return {
218
- target: url.href,
219
- names: [
220
- specifier,
221
- file,
222
- url.href
223
- ]
224
- };
225
- }
226
- if (String.startsWith("file:")(String.toLowerCase(specifier))) {
227
- const url = yield* Effect.try({
228
- try: () => new URL(specifier),
229
- catch: invalid
230
- });
231
- return {
232
- target: specifier,
233
- names: [
234
- specifier,
235
- yield* path.fromFileUrl(url).pipe(Effect.mapError(invalid)),
236
- url.href
237
- ]
238
- };
239
- }
240
- return {
241
- target: specifier,
242
- names: String.includes(":")(specifier) ? [specifier] : [specifier, packageOf(specifier)]
243
- };
244
- });
245
- const plans = yield* Ref.make({
246
- revision: -1,
247
- entries: HashMap.empty()
248
- });
249
- const plan = Effect.fnUntraced(function* (name) {
250
- const key = new PlanKey({
251
- name,
252
- target: (yield* normalize(name)).target
253
- });
254
- const environment = options.resolution;
255
- const revision = environment === void 0 ? 0 : yield* environment.revision;
256
- const found = yield* Ref.modify(plans, (current) => current.revision === revision ? [HashMap.get(current.entries, key), current] : revision > current.revision ? [Option.none(), {
257
- revision,
258
- entries: HashMap.empty()
259
- }] : [Option.none(), current]);
260
- if (Option.isSome(found)) return found.value;
261
- const normalized = yield* Effect.forEach(candidates(name), (specifier) => Effect.map(normalize(specifier), (candidate) => ({
262
- ...candidate,
263
- specifier
264
- })));
265
- const selected = yield* Effect.forEach(normalized, (candidate) => Effect.map(environment === void 0 ? Effect.succeed(Result.succeed(true)) : environment.exists(candidate.target).pipe(Effect.mapError((cause) => ModuleInvalid.make({
266
- specifier: candidate.specifier,
267
- cause
268
- })), Effect.result), (exists) => ({
269
- ...candidate,
270
- exists
271
- })));
272
- yield* Ref.update(plans, (current) => current.revision !== revision || Array.some(selected, (candidate) => Result.isFailure(candidate.exists)) ? current : {
273
- ...current,
274
- entries: HashMap.set(current.entries, key, selected)
275
- });
276
- return selected;
277
- });
278
- const load = Effect.fnUntraced(function* (specifier, candidate, observationScope) {
279
- const context = yield* Effect.context();
280
- return yield* Effect.tryPromise({
281
- try: (signal) => {
282
- const imported = options.importer(candidate.target, { observationScope });
283
- return Effect.isEffect(imported) ? Promise.resolve(imported) : imported.then(Effect.succeed, (cause) => {
284
- if (signal.aborted) Effect.runSyncWith(context)(Effect.logError("Module import failed after cancellation", Cause.die(cause)).pipe(Effect.annotateLogs({ specifier })));
285
- throw cause;
286
- });
287
- },
288
- catch: (cause) => ModuleInvalid.make({
289
- specifier,
290
- cause
291
- })
292
- }).pipe(Effect.flatMap((imported) => imported.pipe(Effect.mapError((cause) => ModuleInvalid.make({
293
- specifier,
294
- cause
295
- })))));
296
- });
297
- /** Only a missing candidate permits short-name fallback. */
298
- const attempt = Effect.fnUntraced(function* (candidate, observationScope) {
299
- const { specifier } = candidate;
300
- return yield* load(specifier, candidate, observationScope).pipe(Effect.flatMap((module) => Effect.fromOption(fromModule(module), () => ModuleInvalid.make({
301
- specifier,
302
- cause: "it exports no plugin"
303
- }))), inCandidateScope, Effect.asSome, Effect.catchCauseIf((cause) => isOnlyFailure(cause, (error) => isMissing(error.cause, candidate.names)), () => Effect.succeedNone));
304
- });
305
- return {
306
- importModule: Effect.fnUntraced(function* (specifier, options) {
307
- const caller = yield* Effect.scope;
308
- const candidate = yield* normalize(specifier);
309
- return yield* load(specifier, candidate, options?.observationScope ?? caller).pipe(inCandidateScope);
310
- }),
311
- resolve: Effect.fnUntraced(function* (name, importOptions) {
312
- const caller = yield* Effect.scope;
313
- const observationScope = importOptions?.observationScope ?? caller;
314
- const tried = candidates(name);
315
- if (options.resolution !== void 0) yield* inCandidateScope(options.resolution.observe(tried, { observationScope }).pipe(Effect.mapError((cause) => ModuleInvalid.make({
316
- specifier: name,
317
- cause
318
- }))));
319
- const selected = yield* plan(name);
320
- for (const candidate of selected) {
321
- if (!(yield* Effect.fromResult(candidate.exists))) continue;
322
- const plugin = yield* attempt(candidate, observationScope);
323
- if (Option.isSome(plugin)) return plugin.value;
324
- }
325
- return yield* ModuleNotFound.make({
326
- plugin: name,
327
- tried
328
- });
329
- })
330
- };
331
- });
332
- // packages/remote/src/internal/importer.ts
333
- /** Bare names resolve from the application; imported dependencies keep their own parent URLs. */
334
- const make = Effect.fnUntraced(function* (directory) {
335
- const path = yield* Path.Path;
336
- const base = yield* path.toFileUrl(path.join(directory, "graft.yml"));
337
- const prefix = `graft-remote-${yield* (yield* SecureRandom.SecureRandom).uuidV4()}:`;
338
- yield* Effect.acquireRelease(Effect.sync(() => registerHooks({ resolve: (specifier, context, next) => String.startsWith(prefix)(specifier) ? next(String.slice(prefix.length)(specifier), {
339
- ...context,
340
- parentURL: base.href
341
- }) : next(specifier, context) })), (hooks) => Effect.sync(() => hooks.deregister()));
342
- return (specifier) => import(prefix + specifier);
343
- });
344
- export { isOnlyFailure as a, Env as c, isSnapshot as d, snapshot as f, make$1 as i, resolveEnv as l, isSubtreeActive as m, ModuleInvalid as n, CurrentId as o, findSubtree as p, ModuleResolver as r, Entry as s, make as t, isContainer as u };
@@ -1 +0,0 @@
1
- {"version":3,"file":"ServeLifecycle.js","names":["Release.close"],"sources":["../../src/internal/ServeLifecycle.ts"],"sourcesContent":["import { Context, Deferred, Effect, Exit, Option, Schema, Scope } from \"effect\"\nimport * as Release from \"./release\"\nimport type { TransportError } from \"../Errors\"\n\nexport class StartupError extends Schema.TaggedError<\n\tStartupError,\n\t{ readonly brand: unique symbol }\n>()(\"RunnerStartupError\", {\n\tdetail: Schema.String,\n\tcause: Schema.optionalKey(Schema.Cause(Schema.Unknown, Schema.Defect())),\n}) {\n\toverride get message() {\n\t\treturn this.detail\n\t}\n}\n\nexport class ServeLifecycle extends Context.Service<\n\tServeLifecycle,\n\t{\n\t\treadonly ended: Deferred.Deferred<void, TransportError>\n\t\treadonly released: Deferred.Deferred<void, StartupError>\n\t}\n>()(\"@graftland/plugin-remote/internal/ServeLifecycle\") {}\n\nexport const make = Effect.all({\n\tended: Deferred.make<void, TransportError>(),\n\treleased: Deferred.make<void, StartupError>(),\n})\n\n/** Observe shutdown independently of the loader, which logs child cleanup failures. */\nexport const resources = Effect.fnUntraced(function* (\n\tlifecycle: Option.Option<typeof ServeLifecycle.Service>,\n) {\n\treturn yield* Effect.acquireRelease(Scope.make(), (scope, exit) =>\n\t\tRelease.close(scope, exit).pipe(\n\t\t\tEffect.onExit((released) =>\n\t\t\t\tOption.isNone(lifecycle)\n\t\t\t\t\t? Effect.void\n\t\t\t\t\t: Deferred.done(\n\t\t\t\t\t\t\tlifecycle.value.released,\n\t\t\t\t\t\t\tExit.isSuccess(released)\n\t\t\t\t\t\t\t\t? Exit.void\n\t\t\t\t\t\t\t\t: Exit.fail(\n\t\t\t\t\t\t\t\t\t\tStartupError.make({\n\t\t\t\t\t\t\t\t\t\t\tdetail: \"Supervisor shutdown failed\",\n\t\t\t\t\t\t\t\t\t\t\tcause: released.cause,\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t).pipe(Effect.asVoid),\n\t\t\t),\n\t\t),\n\t)\n})\n"],"mappings":";;;AAIA,IAAa,eAAb,cAAkC,OAAO,YAGvC,CAAC,CAAC,sBAAsB;CACzB,QAAQ,OAAO;CACf,OAAO,OAAO,YAAY,OAAO,MAAM,OAAO,SAAS,OAAO,OAAO,CAAC,CAAC;AACxE,CAAC,CAAC,CAAC;CACF,IAAa,UAAU;EACtB,OAAO,KAAK;CACb;AACD;AAEA,IAAa,iBAAb,cAAoC,QAAQ,QAM1C,CAAC,CAAC,kDAAkD,CAAC,CAAC,CAAC;AAEzD,MAAa,OAAO,OAAO,IAAI;CAC9B,OAAO,SAAS,KAA2B;CAC3C,UAAU,SAAS,KAAyB;AAC7C,CAAC;;AAGD,MAAa,YAAY,OAAO,WAAW,WAC1C,WACC;CACD,OAAO,OAAO,OAAO,eAAe,MAAM,KAAK,IAAI,OAAO,SACzDA,MAAc,OAAO,IAAI,CAAC,CAAC,KAC1B,OAAO,QAAQ,aACd,OAAO,OAAO,SAAS,IACpB,OAAO,OACP,SAAS,KACT,UAAU,MAAM,UAChB,KAAK,UAAU,QAAQ,IACpB,KAAK,OACL,KAAK,KACL,aAAa,KAAK;EACjB,QAAQ;EACR,OAAO,SAAS;CACjB,CAAC,CACF,CACH,CAAC,CAAC,KAAK,OAAO,MAAM,CACvB,CACD,CACD;AACD,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"entryConfig.d.ts","names":[],"sources":["../../src/internal/entryConfig.ts"],"mappings":";qBAyDa,SAAO,OAAA,gBAAA,OAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YAuCR,iBAAiB,QAAQ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"platform.js","names":[],"sources":["../../src/internal/platform.ts"],"sourcesContent":["import { NodeServices } from \"@effect/platform-node\"\nimport { Layer } from \"effect\"\nimport { Digest, SecureRandom, Signature } from \"effect/crypto\"\nimport { FetchHttpClient } from \"effect/http\"\n\nexport const platform = Layer.mergeAll(\n\tNodeServices.layer,\n\tFetchHttpClient.layer,\n\tDigest.layerWebCrypto,\n\tSecureRandom.layerWebCrypto,\n\tSignature.layerWebCrypto.pipe(Layer.provide(SecureRandom.layerWebCrypto)),\n)\n"],"mappings":";;;;;AAKA,MAAa,WAAW,MAAM,SAC7B,aAAa,OACb,gBAAgB,OAChB,OAAO,gBACP,aAAa,gBACb,UAAU,eAAe,KAAK,MAAM,QAAQ,aAAa,cAAc,CAAC,CACzE"}
@@ -1,25 +0,0 @@
1
- import { Array, Cause, Effect, Exit, Result, Schema, Scope } from "effect";
2
- // src/internal/release.ts
3
- /** Resource release was interrupted, rather than successfully cancelled. */
4
- var ReleaseInterrupted = class extends Schema.TaggedError()("ReleaseInterrupted", { cause: Schema.Cause(Schema.Never, Schema.Unknown) }) {
5
- get message() {
6
- return "Resource release was interrupted";
7
- }
8
- };
9
- /** Keep a known release failure distinguishable from cancellation through enclosing scopes. */
10
- const close = (scope, exit) => Effect.uninterruptible(Scope.close(scope, exit).pipe(Effect.catchCauseIf(Cause.hasInterruptsOnly, Effect.fnUntraced(function* (cause) {
11
- const pending = yield* Effect.exit(Effect.interruptible(Effect.void));
12
- const [cancelled, interrupted] = Array.partition(cause.reasons, (reason) => Exit.isFailure(pending) && Array.some(pending.cause.reasons, (external) => reason._tag === "Interrupt" && external._tag === "Interrupt" && reason.fiberId === external.fiberId) ? Result.succeed(reason) : Result.fail(reason));
13
- if (interrupted.length === 0) return yield* Effect.failCause(cause);
14
- return yield* Effect.failCause(Cause.combine(Cause.fromReasons(cancelled), Cause.die(ReleaseInterrupted.make({ cause: Cause.fromReasons(interrupted) }))));
15
- }))));
16
- const scoped = (effect) => Effect.uninterruptibleMask((restore) => Effect.gen(function* () {
17
- const scope = yield* Scope.make();
18
- const body = yield* Effect.exit(restore(Scope.provide(scope)(effect)));
19
- const closed = yield* Effect.exit(close(scope, body));
20
- if (Exit.isFailure(closed)) return yield* Effect.failCause(Exit.isFailure(body) ? Cause.combine(body.cause, closed.cause) : closed.cause);
21
- return yield* body;
22
- }));
23
- export { ReleaseInterrupted, close, scoped };
24
-
25
- //# sourceMappingURL=release.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"release.js","names":[],"sources":["../../src/internal/release.ts"],"sourcesContent":["import { Array, Cause, Effect, Exit, Result, Schema, Scope } from \"effect\"\n\n/** Resource release was interrupted, rather than successfully cancelled. */\nexport class ReleaseInterrupted extends Schema.TaggedError<\n\tReleaseInterrupted,\n\t{ readonly brand: unique symbol }\n>()(\"ReleaseInterrupted\", {\n\tcause: Schema.Cause(Schema.Never, Schema.Unknown),\n}) {\n\toverride get message() {\n\t\treturn \"Resource release was interrupted\"\n\t}\n}\n\n/** Keep a known release failure distinguishable from cancellation through enclosing scopes. */\nexport const close = (\n\tscope: Scope.Closeable,\n\texit: Exit.Exit<unknown, unknown>,\n) =>\n\tEffect.uninterruptible(\n\t\tScope.close(scope, exit).pipe(\n\t\t\tEffect.catchCauseIf(\n\t\t\t\tCause.hasInterruptsOnly,\n\t\t\t\tEffect.fnUntraced(function* (cause) {\n\t\t\t\t\t// Re-entering interruptibility observes pending external cancellation without producing a self-interrupt.\n\t\t\t\t\t// Read it after release so cancellation arriving during a finalizer is included too.\n\t\t\t\t\tconst pending = yield* Effect.exit(Effect.interruptible(Effect.void))\n\t\t\t\t\tconst [cancelled, interrupted] = Array.partition(\n\t\t\t\t\t\tcause.reasons,\n\t\t\t\t\t\t(reason) =>\n\t\t\t\t\t\t\tExit.isFailure(pending) &&\n\t\t\t\t\t\t\tArray.some(\n\t\t\t\t\t\t\t\tpending.cause.reasons,\n\t\t\t\t\t\t\t\t(external) =>\n\t\t\t\t\t\t\t\t\treason._tag === \"Interrupt\" &&\n\t\t\t\t\t\t\t\t\texternal._tag === \"Interrupt\" &&\n\t\t\t\t\t\t\t\t\treason.fiberId === external.fiberId,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t? Result.succeed(reason)\n\t\t\t\t\t\t\t\t: Result.fail(reason),\n\t\t\t\t\t)\n\t\t\t\t\tif (interrupted.length === 0) return yield* Effect.failCause(cause)\n\t\t\t\t\treturn yield* Effect.failCause(\n\t\t\t\t\t\tCause.combine(\n\t\t\t\t\t\t\tCause.fromReasons(cancelled),\n\t\t\t\t\t\t\tCause.die(\n\t\t\t\t\t\t\t\tReleaseInterrupted.make({\n\t\t\t\t\t\t\t\t\tcause: Cause.fromReasons(interrupted),\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)\n\t\t\t\t}),\n\t\t\t),\n\t\t),\n\t)\n\nexport const scoped = <A, E, R>(effect: Effect.Effect<A, E, R>) =>\n\tEffect.uninterruptibleMask((restore) =>\n\t\tEffect.gen(function* () {\n\t\t\tconst scope = yield* Scope.make()\n\t\t\tconst body = yield* Effect.exit(restore(Scope.provide(scope)(effect)))\n\t\t\tconst closed = yield* Effect.exit(close(scope, body))\n\t\t\tif (Exit.isFailure(closed))\n\t\t\t\treturn yield* Effect.failCause(\n\t\t\t\t\tExit.isFailure(body)\n\t\t\t\t\t\t? Cause.combine(body.cause, closed.cause)\n\t\t\t\t\t\t: closed.cause,\n\t\t\t\t)\n\t\t\treturn yield* body\n\t\t}),\n\t)\n"],"mappings":";;;AAGA,IAAa,qBAAb,cAAwC,OAAO,YAG7C,CAAC,CAAC,sBAAsB,EACzB,OAAO,OAAO,MAAM,OAAO,OAAO,OAAO,OAAO,EACjD,CAAC,CAAC,CAAC;CACF,IAAa,UAAU;EACtB,OAAO;CACR;AACD;;AAGA,MAAa,SACZ,OACA,SAEA,OAAO,gBACN,MAAM,MAAM,OAAO,IAAI,CAAC,CAAC,KACxB,OAAO,aACN,MAAM,mBACN,OAAO,WAAW,WAAW,OAAO;CAGnC,MAAM,UAAU,OAAO,OAAO,KAAK,OAAO,cAAc,OAAO,IAAI,CAAC;CACpE,MAAM,CAAC,WAAW,eAAe,MAAM,UACtC,MAAM,UACL,WACA,KAAK,UAAU,OAAO,KACtB,MAAM,KACL,QAAQ,MAAM,UACb,aACA,OAAO,SAAS,eAChB,SAAS,SAAS,eAClB,OAAO,YAAY,SAAS,OAC9B,IACG,OAAO,QAAQ,MAAM,IACrB,OAAO,KAAK,MAAM,CACvB;CACA,IAAI,YAAY,WAAW,GAAG,OAAO,OAAO,OAAO,UAAU,KAAK;CAClE,OAAO,OAAO,OAAO,UACpB,MAAM,QACL,MAAM,YAAY,SAAS,GAC3B,MAAM,IACL,mBAAmB,KAAK,EACvB,OAAO,MAAM,YAAY,WAAW,EACrC,CAAC,CACF,CACD,CACD;AACD,CAAC,CACF,CACD,CACD;AAED,MAAa,UAAmB,WAC/B,OAAO,qBAAqB,YAC3B,OAAO,IAAI,aAAa;CACvB,MAAM,QAAQ,OAAO,MAAM,KAAK;CAChC,MAAM,OAAO,OAAO,OAAO,KAAK,QAAQ,MAAM,QAAQ,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;CACrE,MAAM,SAAS,OAAO,OAAO,KAAK,MAAM,OAAO,IAAI,CAAC;CACpD,IAAI,KAAK,UAAU,MAAM,GACxB,OAAO,OAAO,OAAO,UACpB,KAAK,UAAU,IAAI,IAChB,MAAM,QAAQ,KAAK,OAAO,OAAO,KAAK,IACtC,OAAO,KACX;CACD,OAAO,OAAO;AACf,CAAC,CACF"}
@@ -1,60 +0,0 @@
1
- import { findSubtree, isSubtreeActive } from "./forkTree.js";
2
- import { make } from "./importer.js";
3
- import { ServeLifecycle, StartupError, make as make$1 } from "./ServeLifecycle.js";
4
- import { cleanupCause } from "./cleanup.js";
5
- import { Graft, Plugin } from "@graftland/graft";
6
- import { ConfigDirectory, Include, Loader, ModuleResolver } from "@graftland/loader";
7
- import { Array, Cause, Deferred, Effect, Exit, Logger, Option, Path, Stream } from "effect";
8
- // src/internal/serve.ts
9
- const check = (trees) => Effect.forEach(trees, (tree) => {
10
- if (tree.state._tag === "Failed") return Effect.fail(StartupError.make({
11
- detail: `Runner entry ${tree.name} failed`,
12
- cause: tree.state.cause
13
- }));
14
- return check(tree.children);
15
- }, { discard: true });
16
- const ready = Plugin.make({
17
- name: "remote-ready",
18
- inject: [Loader.Loader],
19
- apply: Effect.fnUntraced(function* () {
20
- const loader = yield* Loader.Loader;
21
- yield* loader.ready.pipe(Effect.raceFirst(Graft.forks.pipe(Stream.map((trees) => findSubtree(trees, loader.root.id)), Stream.filter(Option.isSome), Stream.runForEach((tree) => check([tree.value])))));
22
- yield* Graft.forks.pipe(Stream.map((trees) => findSubtree(trees, loader.root.id)), Stream.filter(Option.isSome), Stream.map((tree) => tree.value), Stream.tap((tree) => check([tree])), Stream.filter(isSubtreeActive), Stream.runHead);
23
- })
24
- });
25
- /** Loader logs child cleanup errors; the supervisor's release signal also reaches the command exit. */
26
- const close = Effect.fnUntraced(function* (entries, lifecycle) {
27
- const disposed = yield* Effect.exit(entries.dispose);
28
- const released = yield* Effect.exit(Deferred.await(lifecycle.released));
29
- const cause = Array.reduce([disposed, released], Cause.empty, (cause, exit) => Exit.isFailure(exit) ? Cause.combine(cause, exit.cause) : cause);
30
- if (cause.reasons.length > 0) return yield* Effect.failCause(cleanupCause(cause));
31
- });
32
- const load = Effect.fnUntraced(function* (config, directory) {
33
- const lifecycle = yield* make$1;
34
- yield* Graft.provide(ServeLifecycle, lifecycle);
35
- const importer = yield* make(directory);
36
- const resolver = yield* ModuleResolver.make({
37
- base: directory,
38
- importer
39
- });
40
- yield* Graft.provide(ModuleResolver.ModuleResolver, resolver);
41
- const entries = yield* Graft.plugin(Include.Include, {
42
- path: config,
43
- watch: false
44
- });
45
- yield* entries.await;
46
- yield* (yield* Graft.plugin(ready)).await;
47
- return yield* Deferred.await(lifecycle.ended).pipe(Effect.ensuring(close(entries, lifecycle)));
48
- });
49
- const run = Effect.fnUntraced(function* (config) {
50
- const path = yield* Path.Path;
51
- const file = path.resolve(config);
52
- const directory = path.dirname(file);
53
- return yield* load(file, directory).pipe(Effect.mapError((error) => StartupError.make({
54
- detail: "Starting the runner failed",
55
- cause: Cause.fail(error)
56
- })), Effect.provideService(ConfigDirectory, Option.some(directory)), Effect.provideService(Logger.LogToStderr, true));
57
- });
58
- export { run };
59
-
60
- //# sourceMappingURL=serve.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"serve.js","names":["make","Importer.make"],"sources":["../../src/internal/serve.ts"],"sourcesContent":["import { findSubtree, isSubtreeActive } from \"./forkTree\"\nimport { Graft, Plugin, type Fork } from \"@graftland/graft\"\nimport {\n\tConfigDirectory,\n\tInclude,\n\tLoader,\n\tModuleResolver,\n} from \"@graftland/loader\"\nimport {\n\tArray,\n\tCause,\n\tDeferred,\n\tEffect,\n\tExit,\n\tLogger,\n\tOption,\n\tPath,\n\tStream,\n} from \"effect\"\nimport * as Importer from \"./importer\"\n\nimport { ServeLifecycle, StartupError, make } from \"./ServeLifecycle\"\nimport { cleanupCause } from \"./cleanup\"\nexport { StartupError } from \"./ServeLifecycle\"\n\nconst check = (\n\ttrees: ReadonlyArray<Fork.ForkTree>,\n): Effect.Effect<void, StartupError> =>\n\tEffect.forEach(\n\t\ttrees,\n\t\t(tree) => {\n\t\t\tif (tree.state._tag === \"Failed\")\n\t\t\t\treturn Effect.fail(\n\t\t\t\t\tStartupError.make({\n\t\t\t\t\t\tdetail: `Runner entry ${tree.name} failed`,\n\t\t\t\t\t\tcause: tree.state.cause,\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\treturn check(tree.children)\n\t\t},\n\t\t{ discard: true },\n\t)\nconst ready = Plugin.make({\n\tname: \"remote-ready\",\n\tinject: [Loader.Loader],\n\tapply: Effect.fnUntraced(function* () {\n\t\tconst loader = yield* Loader.Loader\n\t\t// A failed authenticator can leave its listener child Pending while the outer plugin is Applying.\n\t\tyield* loader.ready.pipe(\n\t\t\tEffect.raceFirst(\n\t\t\t\tGraft.forks.pipe(\n\t\t\t\t\tStream.map((trees) => findSubtree(trees, loader.root.id)),\n\t\t\t\t\tStream.filter(Option.isSome),\n\t\t\t\t\tStream.runForEach((tree) => check([tree.value])),\n\t\t\t\t),\n\t\t\t),\n\t\t)\n\t\t// Pending can still be reacting to a provider published during startup.\n\t\t// Observe the loader's subtree, excluding this startup observer itself.\n\t\tyield* Graft.forks.pipe(\n\t\t\tStream.map((trees) => findSubtree(trees, loader.root.id)),\n\t\t\tStream.filter(Option.isSome),\n\t\t\tStream.map((tree) => tree.value),\n\t\t\tStream.tap((tree) => check([tree])),\n\t\t\tStream.filter(isSubtreeActive),\n\t\t\tStream.runHead,\n\t\t)\n\t}),\n})\n\n/** Loader logs child cleanup errors; the supervisor's release signal also reaches the command exit. */\nconst close = Effect.fnUntraced(function* (\n\tentries: Fork.Fork,\n\tlifecycle: typeof ServeLifecycle.Service,\n) {\n\tconst disposed = yield* Effect.exit(entries.dispose)\n\tconst released = yield* Effect.exit(Deferred.await(lifecycle.released))\n\tconst cause = Array.reduce(\n\t\t[disposed, released],\n\t\tCause.empty,\n\t\t(cause: Cause.Cause<unknown>, exit: Exit.Exit<void, unknown>) =>\n\t\t\tExit.isFailure(exit) ? Cause.combine(cause, exit.cause) : cause,\n\t)\n\tif (cause.reasons.length > 0)\n\t\treturn yield* Effect.failCause(cleanupCause(cause))\n})\n\nconst load = Effect.fnUntraced(function* (config: string, directory: string) {\n\tconst lifecycle = yield* make\n\tyield* Graft.provide(ServeLifecycle, lifecycle)\n\tconst importer = yield* Importer.make(directory)\n\tconst resolver = yield* ModuleResolver.make({ base: directory, importer })\n\tyield* Graft.provide(ModuleResolver.ModuleResolver, resolver)\n\tconst entries = yield* Graft.plugin(Include.Include, {\n\t\tpath: config,\n\t\twatch: false,\n\t})\n\tyield* entries.await\n\tconst startup = yield* Graft.plugin(ready)\n\tyield* startup.await\n\treturn yield* Deferred.await(lifecycle.ended).pipe(\n\t\tEffect.ensuring(close(entries, lifecycle)),\n\t)\n})\nexport const run = Effect.fnUntraced(function* (config: string) {\n\tconst path = yield* Path.Path\n\tconst file = path.resolve(config)\n\tconst directory = path.dirname(file)\n\treturn yield* load(file, directory).pipe(\n\t\tEffect.mapError((error) =>\n\t\t\tStartupError.make({\n\t\t\t\tdetail: \"Starting the runner failed\",\n\t\t\t\tcause: Cause.fail(error),\n\t\t\t}),\n\t\t),\n\t\tEffect.provideService(ConfigDirectory, Option.some(directory)),\n\t\tEffect.provideService(Logger.LogToStderr, true),\n\t)\n})\n"],"mappings":";;;;;;;;AAyBA,MAAM,SACL,UAEA,OAAO,QACN,QACC,SAAS;CACT,IAAI,KAAK,MAAM,SAAS,UACvB,OAAO,OAAO,KACb,aAAa,KAAK;EACjB,QAAQ,gBAAgB,KAAK,KAAK;EAClC,OAAO,KAAK,MAAM;CACnB,CAAC,CACF;CACD,OAAO,MAAM,KAAK,QAAQ;AAC3B,GACA,EAAE,SAAS,KAAK,CACjB;AACD,MAAM,QAAQ,OAAO,KAAK;CACzB,MAAM;CACN,QAAQ,CAAC,OAAO,MAAM;CACtB,OAAO,OAAO,WAAW,aAAa;EACrC,MAAM,SAAS,OAAO,OAAO;EAE7B,OAAO,OAAO,MAAM,KACnB,OAAO,UACN,MAAM,MAAM,KACX,OAAO,KAAK,UAAU,YAAY,OAAO,OAAO,KAAK,EAAE,CAAC,GACxD,OAAO,OAAO,OAAO,MAAM,GAC3B,OAAO,YAAY,SAAS,MAAM,CAAC,KAAK,KAAK,CAAC,CAAC,CAChD,CACD,CACD;EAGA,OAAO,MAAM,MAAM,KAClB,OAAO,KAAK,UAAU,YAAY,OAAO,OAAO,KAAK,EAAE,CAAC,GACxD,OAAO,OAAO,OAAO,MAAM,GAC3B,OAAO,KAAK,SAAS,KAAK,KAAK,GAC/B,OAAO,KAAK,SAAS,MAAM,CAAC,IAAI,CAAC,CAAC,GAClC,OAAO,OAAO,eAAe,GAC7B,OAAO,OACR;CACD,CAAC;AACF,CAAC;;AAGD,MAAM,QAAQ,OAAO,WAAW,WAC/B,SACA,WACC;CACD,MAAM,WAAW,OAAO,OAAO,KAAK,QAAQ,OAAO;CACnD,MAAM,WAAW,OAAO,OAAO,KAAK,SAAS,MAAM,UAAU,QAAQ,CAAC;CACtE,MAAM,QAAQ,MAAM,OACnB,CAAC,UAAU,QAAQ,GACnB,MAAM,QACL,OAA6B,SAC7B,KAAK,UAAU,IAAI,IAAI,MAAM,QAAQ,OAAO,KAAK,KAAK,IAAI,KAC5D;CACA,IAAI,MAAM,QAAQ,SAAS,GAC1B,OAAO,OAAO,OAAO,UAAU,aAAa,KAAK,CAAC;AACpD,CAAC;AAED,MAAM,OAAO,OAAO,WAAW,WAAW,QAAgB,WAAmB;CAC5E,MAAM,YAAY,OAAOA;CACzB,OAAO,MAAM,QAAQ,gBAAgB,SAAS;CAC9C,MAAM,WAAW,OAAOC,KAAc,SAAS;CAC/C,MAAM,WAAW,OAAO,eAAe,KAAK;EAAE,MAAM;EAAW;CAAS,CAAC;CACzE,OAAO,MAAM,QAAQ,eAAe,gBAAgB,QAAQ;CAC5D,MAAM,UAAU,OAAO,MAAM,OAAO,QAAQ,SAAS;EACpD,MAAM;EACN,OAAO;CACR,CAAC;CACD,OAAO,QAAQ;CAEf,QAAO,OADgB,MAAM,OAAO,KAAK,EAAA,CAC1B;CACf,OAAO,OAAO,SAAS,MAAM,UAAU,KAAK,CAAC,CAAC,KAC7C,OAAO,SAAS,MAAM,SAAS,SAAS,CAAC,CAC1C;AACD,CAAC;AACD,MAAa,MAAM,OAAO,WAAW,WAAW,QAAgB;CAC/D,MAAM,OAAO,OAAO,KAAK;CACzB,MAAM,OAAO,KAAK,QAAQ,MAAM;CAChC,MAAM,YAAY,KAAK,QAAQ,IAAI;CACnC,OAAO,OAAO,KAAK,MAAM,SAAS,CAAC,CAAC,KACnC,OAAO,UAAU,UAChB,aAAa,KAAK;EACjB,QAAQ;EACR,OAAO,MAAM,KAAK,KAAK;CACxB,CAAC,CACF,GACA,OAAO,eAAe,iBAAiB,OAAO,KAAK,SAAS,CAAC,GAC7D,OAAO,eAAe,OAAO,aAAa,IAAI,CAC/C;AACD,CAAC"}