@fougere/core 0.10.0-alpha.0 → 0.12.0-alpha.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 (215) hide show
  1. package/dist/CallIdentity.d.ts.map +1 -1
  2. package/dist/CallIdentity.js +2 -0
  3. package/dist/CallIdentity.js.map +1 -1
  4. package/dist/Constraint.d.ts +1 -1
  5. package/dist/Constraint.d.ts.map +1 -1
  6. package/dist/FougereConfig.d.ts +10 -6
  7. package/dist/FougereConfig.d.ts.map +1 -1
  8. package/dist/FougereConfig.js +19 -4
  9. package/dist/FougereConfig.js.map +1 -1
  10. package/dist/FrondConfig.d.ts +0 -6
  11. package/dist/FrondConfig.d.ts.map +1 -1
  12. package/dist/FrondConfig.js.map +1 -1
  13. package/dist/FrondDeclaration.d.ts +2 -9
  14. package/dist/FrondDeclaration.d.ts.map +1 -1
  15. package/dist/FrondDeclaration.js +0 -1
  16. package/dist/FrondDeclaration.js.map +1 -1
  17. package/dist/FrondsStated.d.ts +54 -0
  18. package/dist/FrondsStated.d.ts.map +1 -0
  19. package/dist/FrondsStated.js +26 -0
  20. package/dist/FrondsStated.js.map +1 -0
  21. package/dist/Source.d.ts.map +1 -1
  22. package/dist/Source.js +4 -3
  23. package/dist/Source.js.map +1 -1
  24. package/dist/StatedFrond.d.ts +21 -0
  25. package/dist/StatedFrond.d.ts.map +1 -0
  26. package/dist/StatedFrond.js +34 -0
  27. package/dist/StatedFrond.js.map +1 -0
  28. package/dist/StatedModules.d.ts +19 -0
  29. package/dist/StatedModules.d.ts.map +1 -0
  30. package/dist/StatedModules.js +37 -0
  31. package/dist/StatedModules.js.map +1 -0
  32. package/dist/boot/CreateAppOptions.d.ts +19 -2
  33. package/dist/boot/CreateAppOptions.d.ts.map +1 -1
  34. package/dist/boot/Emissions.d.ts +9 -0
  35. package/dist/boot/Emissions.d.ts.map +1 -1
  36. package/dist/boot/Emissions.js +11 -5
  37. package/dist/boot/Emissions.js.map +1 -1
  38. package/dist/boot/Hosting.d.ts +38 -0
  39. package/dist/boot/Hosting.d.ts.map +1 -0
  40. package/dist/boot/Hosting.js +2 -0
  41. package/dist/boot/Hosting.js.map +1 -0
  42. package/dist/boot/Peer.d.ts +16 -0
  43. package/dist/boot/Peer.d.ts.map +1 -0
  44. package/dist/boot/Peer.js +2 -0
  45. package/dist/boot/Peer.js.map +1 -0
  46. package/dist/boot/bootstrap.d.ts.map +1 -1
  47. package/dist/boot/bootstrap.js +372 -235
  48. package/dist/boot/bootstrap.js.map +1 -1
  49. package/dist/boot/declared.d.ts.map +1 -1
  50. package/dist/boot/declared.js +38 -3
  51. package/dist/boot/declared.js.map +1 -1
  52. package/dist/boot/frame.d.ts +0 -4
  53. package/dist/boot/frame.d.ts.map +1 -1
  54. package/dist/boot/frame.js +31 -14
  55. package/dist/boot/frame.js.map +1 -1
  56. package/dist/boot/hosted.d.ts.map +1 -1
  57. package/dist/boot/hosted.js +4 -3
  58. package/dist/boot/hosted.js.map +1 -1
  59. package/dist/boot/install.d.ts +19 -0
  60. package/dist/boot/install.d.ts.map +1 -1
  61. package/dist/boot/install.js +273 -178
  62. package/dist/boot/install.js.map +1 -1
  63. package/dist/boot/nesting.d.ts +33 -0
  64. package/dist/boot/nesting.d.ts.map +1 -0
  65. package/dist/boot/nesting.js +164 -0
  66. package/dist/boot/nesting.js.map +1 -0
  67. package/dist/boot/ownership.d.ts +0 -1
  68. package/dist/boot/ownership.d.ts.map +1 -1
  69. package/dist/boot/ownership.js +66 -51
  70. package/dist/boot/ownership.js.map +1 -1
  71. package/dist/boot/peerOver.d.ts +4 -0
  72. package/dist/boot/peerOver.d.ts.map +1 -0
  73. package/dist/boot/peerOver.js +12 -0
  74. package/dist/boot/peerOver.js.map +1 -0
  75. package/dist/boot/ports.js +30 -25
  76. package/dist/boot/ports.js.map +1 -1
  77. package/dist/boot/relations.d.ts +54 -0
  78. package/dist/boot/relations.d.ts.map +1 -0
  79. package/dist/boot/relations.js +150 -0
  80. package/dist/boot/relations.js.map +1 -0
  81. package/dist/boot/remote.d.ts.map +1 -1
  82. package/dist/boot/remote.js +31 -28
  83. package/dist/boot/remote.js.map +1 -1
  84. package/dist/boot/seed.d.ts.map +1 -1
  85. package/dist/boot/seed.js +27 -20
  86. package/dist/boot/seed.js.map +1 -1
  87. package/dist/boot/together.d.ts +3 -0
  88. package/dist/boot/together.d.ts.map +1 -1
  89. package/dist/boot/together.js +72 -56
  90. package/dist/boot/together.js.map +1 -1
  91. package/dist/contract.d.ts +1 -0
  92. package/dist/contract.d.ts.map +1 -1
  93. package/dist/contract.js.map +1 -1
  94. package/dist/descriptor/FrondDescriptor.d.ts +7 -0
  95. package/dist/descriptor/FrondDescriptor.d.ts.map +1 -1
  96. package/dist/descriptor/MiddlewareEntry.d.ts +6 -5
  97. package/dist/descriptor/MiddlewareEntry.d.ts.map +1 -1
  98. package/dist/descriptor/ProviderEntry.d.ts +7 -0
  99. package/dist/descriptor/ProviderEntry.d.ts.map +1 -1
  100. package/dist/dispatch/Dependent.d.ts +19 -0
  101. package/dist/dispatch/Dependent.d.ts.map +1 -0
  102. package/dist/dispatch/Dependent.js +2 -0
  103. package/dist/dispatch/Dependent.js.map +1 -0
  104. package/dist/dispatch/Dispatcher.d.ts +14 -1
  105. package/dist/dispatch/Dispatcher.d.ts.map +1 -1
  106. package/dist/dispatch/Dispatcher.js +36 -8
  107. package/dist/dispatch/Dispatcher.js.map +1 -1
  108. package/dist/dispatch/HandlerFacade.d.ts +6 -1
  109. package/dist/dispatch/HandlerFacade.d.ts.map +1 -1
  110. package/dist/dispatch/HandlerFacade.js +23 -20
  111. package/dist/dispatch/HandlerFacade.js.map +1 -1
  112. package/dist/dispatch/Journal.d.ts +25 -0
  113. package/dist/dispatch/Journal.d.ts.map +1 -0
  114. package/dist/dispatch/Journal.js +3 -0
  115. package/dist/dispatch/Journal.js.map +1 -0
  116. package/dist/dispatch/PresenterExecutor.d.ts +6 -0
  117. package/dist/dispatch/PresenterExecutor.d.ts.map +1 -1
  118. package/dist/dispatch/PresenterExecutor.js +30 -22
  119. package/dist/dispatch/PresenterExecutor.js.map +1 -1
  120. package/dist/dispatch/RelationCheck.d.ts +22 -0
  121. package/dist/dispatch/RelationCheck.d.ts.map +1 -0
  122. package/dist/dispatch/RelationCheck.js +2 -0
  123. package/dist/dispatch/RelationCheck.js.map +1 -0
  124. package/dist/dispatch/Release.d.ts +36 -0
  125. package/dist/dispatch/Release.d.ts.map +1 -0
  126. package/dist/dispatch/Release.js +130 -0
  127. package/dist/dispatch/Release.js.map +1 -0
  128. package/dist/dispatch/StorageGuard.d.ts +39 -1
  129. package/dist/dispatch/StorageGuard.d.ts.map +1 -1
  130. package/dist/dispatch/StorageGuard.js +128 -54
  131. package/dist/dispatch/StorageGuard.js.map +1 -1
  132. package/dist/index.d.ts +8 -0
  133. package/dist/index.d.ts.map +1 -1
  134. package/dist/index.js +6 -0
  135. package/dist/index.js.map +1 -1
  136. package/dist/node.d.ts +2 -1
  137. package/dist/node.d.ts.map +1 -1
  138. package/dist/node.js +2 -1
  139. package/dist/node.js.map +1 -1
  140. package/dist/storage/Storage.js +1 -1
  141. package/dist/storage/Storage.js.map +1 -1
  142. package/dist/storage/Store.d.ts.map +1 -1
  143. package/dist/storage/Store.js +29 -21
  144. package/dist/storage/Store.js.map +1 -1
  145. package/dist/verify.d.ts.map +1 -1
  146. package/dist/verify.js +14 -0
  147. package/dist/verify.js.map +1 -1
  148. package/dist/wire/Emit.d.ts +9 -0
  149. package/dist/wire/Emit.d.ts.map +1 -1
  150. package/dist/wire/Emit.js +16 -0
  151. package/dist/wire/Emit.js.map +1 -1
  152. package/dist/wire/Invocation.d.ts +3 -2
  153. package/dist/wire/Invocation.d.ts.map +1 -1
  154. package/dist/wire/Invocation.js +5 -2
  155. package/dist/wire/Invocation.js.map +1 -1
  156. package/dist/wire/InvocationContext.d.ts +2 -0
  157. package/dist/wire/InvocationContext.d.ts.map +1 -1
  158. package/dist/wire/SignedCall.d.ts +2 -0
  159. package/dist/wire/SignedCall.d.ts.map +1 -1
  160. package/dist/wire/binding.d.ts.map +1 -1
  161. package/dist/wire/binding.js +29 -57
  162. package/dist/wire/binding.js.map +1 -1
  163. package/dist/wire/drift.d.ts.map +1 -1
  164. package/dist/wire/drift.js +22 -19
  165. package/dist/wire/drift.js.map +1 -1
  166. package/package.json +4 -4
  167. package/src/CallIdentity.ts +2 -0
  168. package/src/Constraint.ts +1 -1
  169. package/src/FougereConfig.ts +24 -10
  170. package/src/FrondConfig.ts +0 -6
  171. package/src/FrondDeclaration.ts +2 -7
  172. package/src/FrondsStated.ts +72 -0
  173. package/src/Source.ts +3 -2
  174. package/src/StatedFrond.ts +51 -0
  175. package/src/StatedModules.ts +58 -0
  176. package/src/boot/CreateAppOptions.ts +19 -2
  177. package/src/boot/Emissions.ts +16 -5
  178. package/src/boot/Hosting.ts +38 -0
  179. package/src/boot/Peer.ts +15 -0
  180. package/src/boot/bootstrap.ts +512 -271
  181. package/src/boot/declared.ts +38 -3
  182. package/src/boot/frame.ts +42 -11
  183. package/src/boot/hosted.ts +4 -3
  184. package/src/boot/install.ts +400 -203
  185. package/src/boot/nesting.ts +196 -0
  186. package/src/boot/ownership.ts +79 -51
  187. package/src/boot/peerOver.ts +17 -0
  188. package/src/boot/ports.ts +45 -31
  189. package/src/boot/relations.ts +172 -0
  190. package/src/boot/remote.ts +47 -29
  191. package/src/boot/seed.ts +36 -27
  192. package/src/boot/together.ts +102 -63
  193. package/src/contract.ts +1 -0
  194. package/src/descriptor/FrondDescriptor.ts +7 -0
  195. package/src/descriptor/MiddlewareEntry.ts +6 -5
  196. package/src/descriptor/ProviderEntry.ts +7 -0
  197. package/src/dispatch/Dependent.ts +19 -0
  198. package/src/dispatch/Dispatcher.ts +43 -7
  199. package/src/dispatch/HandlerFacade.ts +27 -17
  200. package/src/dispatch/Journal.ts +26 -0
  201. package/src/dispatch/PresenterExecutor.ts +33 -22
  202. package/src/dispatch/RelationCheck.ts +21 -0
  203. package/src/dispatch/Release.ts +180 -0
  204. package/src/dispatch/StorageGuard.ts +138 -55
  205. package/src/index.ts +8 -0
  206. package/src/node.ts +2 -1
  207. package/src/storage/Storage.ts +2 -2
  208. package/src/storage/Store.ts +39 -18
  209. package/src/verify.ts +15 -0
  210. package/src/wire/Emit.ts +23 -0
  211. package/src/wire/Invocation.ts +5 -2
  212. package/src/wire/InvocationContext.ts +2 -0
  213. package/src/wire/SignedCall.ts +2 -0
  214. package/src/wire/binding.ts +26 -58
  215. package/src/wire/drift.ts +48 -21
@@ -32,6 +32,13 @@ export interface FrondDescriptor {
32
32
  * domain. Set by the boot, never by a declaration.
33
33
  */
34
34
  brought?: true;
35
+ /**
36
+ * The frond this one inherits code from — its scope hangs off that one's, so a service, a
37
+ * repository, a port or a middleware declared there answers here too. The same word the
38
+ * config uses, set by the boot from `FougereConfig.fronds` and never by a scan: the disk is
39
+ * flat, and a directory says nothing about who shares its code.
40
+ */
41
+ extends?: string;
35
42
  /** The ops that finish a fact, in order — see `FrondConfig.pipes`. */
36
43
  pipes?: Record<string, string[]>;
37
44
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"FrondDescriptor.d.ts","sourceRoot":"","sources":["../../src/descriptor/FrondDescriptor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D;;;GAGG;AACH,eAAO,MAAM,MAAM,GAAI,UAAU,aAAa,KAAG,MAA6C,CAAC;AAE/F,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,CAAC;IACpB,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,WAAW,EAAE,eAAe,EAAE,CAAC;IAC/B,0FAA0F;IAC1F,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;IAC9B;;;;;OAKG;IACH,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,sEAAsE;IACtE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACjC;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACpC,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,oDAAoD;IACpD,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG;QACvD,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;QAC3B,kFAAkF;QAClF,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,iEAAiE;QACjE,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,6EAA6E;QAC7E,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,kFAAkF;QAClF,IAAI,CAAC,EAAE;YAAE,MAAM,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KAC5D,CAAC,CAAC;CACJ"}
1
+ {"version":3,"file":"FrondDescriptor.d.ts","sourceRoot":"","sources":["../../src/descriptor/FrondDescriptor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D;;;GAGG;AACH,eAAO,MAAM,MAAM,GAAI,UAAU,aAAa,KAAG,MAA6C,CAAC;AAE/F,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,CAAC;IACpB,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,WAAW,EAAE,eAAe,EAAE,CAAC;IAC/B,0FAA0F;IAC1F,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;IAC9B;;;;;OAKG;IACH,OAAO,CAAC,EAAE,IAAI,CAAC;IACf;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sEAAsE;IACtE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACjC;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACpC,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,oDAAoD;IACpD,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG;QACvD,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;QAC3B,kFAAkF;QAClF,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,iEAAiE;QACjE,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,6EAA6E;QAC7E,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,kFAAkF;QAClF,IAAI,CAAC,EAAE;YAAE,MAAM,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KAC5D,CAAC,CAAC;CACJ"}
@@ -1,14 +1,15 @@
1
1
  /**
2
- * A discovered middleware — a class declaring `around(ctx, next)`, which runs before and
3
- * after every operation in its scope.
2
+ * A discovered middleware — a class declaring `around(ctx, next)`, which runs before and after
3
+ * every operation of its frond, and of the fronds that inherit from it.
4
+ *
5
+ * How far it reaches is not written here: it is where the frond sits in `FougereConfig.fronds`,
6
+ * and stating it twice would put one decision in two places.
4
7
  */
5
8
  export interface MiddlewareEntry {
6
- /** Class name — what `frond.config.ts` addresses to widen the scope. */
9
+ /** Class name — the key it registers under in its frond's scope. */
7
10
  name: string;
8
11
  /** The middleware class. */
9
12
  ctor: new (...args: never[]) => unknown;
10
- /** How far it reaches: its own frond's entities, or every operation in the process. */
11
- scope: 'frond' | 'app';
12
13
  /** Constructor dependency type names (from AST scan). */
13
14
  deps: string[];
14
15
  /** Absolute file path (for debugging). */
@@ -1 +1 @@
1
- {"version":3,"file":"MiddlewareEntry.d.ts","sourceRoot":"","sources":["../../src/descriptor/MiddlewareEntry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAC;IACb,4BAA4B;IAC5B,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,CAAC;IACxC,uFAAuF;IACvF,KAAK,EAAE,OAAO,GAAG,KAAK,CAAC;IACvB,yDAAyD;IACzD,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC;CAClB"}
1
+ {"version":3,"file":"MiddlewareEntry.d.ts","sourceRoot":"","sources":["../../src/descriptor/MiddlewareEntry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B,oEAAoE;IACpE,IAAI,EAAE,MAAM,CAAC;IACb,4BAA4B;IAC5B,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,CAAC;IACxC,yDAAyD;IACzD,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC;CAClB"}
@@ -15,5 +15,12 @@ export interface ProviderEntry {
15
15
  deps: string[];
16
16
  /** Absolute file path (for debugging). */
17
17
  filePath: string;
18
+ /**
19
+ * It stated `implements AsyncDisposable` — so there is ONE of it per frond, and that frond's
20
+ * scope closes it. The language's own marker, which `App` already answers; a provider that
21
+ * says nothing is built per consumer and closed by nobody, which is right for one that holds
22
+ * nothing.
23
+ */
24
+ kept?: true;
18
25
  }
19
26
  //# sourceMappingURL=ProviderEntry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProviderEntry.d.ts","sourceRoot":"","sources":["../../src/descriptor/ProviderEntry.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,MAAM,WAAW,aAAa;IAC5B;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,CAAC;IACxC,yDAAyD;IACzD,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC;CAClB"}
1
+ {"version":3,"file":"ProviderEntry.d.ts","sourceRoot":"","sources":["../../src/descriptor/ProviderEntry.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,MAAM,WAAW,aAAa;IAC5B;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,CAAC;IACxC,yDAAyD;IACzD,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,IAAI,CAAC;CACb"}
@@ -0,0 +1,19 @@
1
+ import type { OnDelete } from '@fougere/schema';
2
+ /**
3
+ * A `ref()` read from the TARGET's side: rows that name it, and what becomes of them.
4
+ *
5
+ * The dual of `RelationCheck`, which reads the same declaration from the child's side to judge
6
+ * a write. Only what no foreign key holds reaches here — a key answers at the rows, inside the
7
+ * delete's own transaction, and nothing in this process would see it happen.
8
+ *
9
+ * Documented: [entities](https://fougere.dev/docs/schema/entities).
10
+ */
11
+ export interface Dependent {
12
+ /** The entity whose rows name the target — `post`. */
13
+ entity: string;
14
+ /** The field carrying the key — `authorId`. */
15
+ field: string;
16
+ /** Unstated is `restrict`: what a foreign key does when nothing is said. */
17
+ onDelete: OnDelete;
18
+ }
19
+ //# sourceMappingURL=Dependent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dependent.d.ts","sourceRoot":"","sources":["../../src/dispatch/Dependent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEhD;;;;;;;;GAQG;AACH,MAAM,WAAW,SAAS;IACxB,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,4EAA4E;IAC5E,QAAQ,EAAE,QAAQ,CAAC;CACpB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Dependent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dependent.js","sourceRoot":"","sources":["../../src/dispatch/Dependent.ts"],"names":[],"mappings":""}
@@ -4,13 +4,26 @@ import type { DispatchPort } from './DispatchPort.js';
4
4
  import type { RoutePolicy } from './RoutePolicy.js';
5
5
  import { RouteRegistry } from './RouteRegistry.js';
6
6
  import type { InFlight } from './InFlight.js';
7
+ import type { Journal } from './Journal.js';
7
8
  /** Resolves and executes every call through the same transverse lifecycle. */
8
9
  export declare class Dispatcher implements DispatchPort {
9
10
  private readonly routes;
10
11
  private readonly inFlight;
11
12
  private readonly lifecycle;
12
13
  private readonly policy?;
13
- constructor(routes: RouteRegistry, inFlight: InFlight, lifecycle?: DispatchLifecycle, policy?: RoutePolicy | undefined);
14
+ private readonly journalOf?;
15
+ constructor(routes: RouteRegistry, inFlight: InFlight, lifecycle?: DispatchLifecycle, policy?: RoutePolicy | undefined, journalOf?: (() => Journal | undefined) | undefined);
16
+ /** The route that answers this address, or the refusal naming what is served instead. */
17
+ private routeFor;
18
+ /**
19
+ * A kept call publishes no dispatch event and enters no flight: it has not been answered,
20
+ * and counting it here would report one call spanning the days until its hour.
21
+ *
22
+ * Its address is resolved all the same. What is kept is made hours later, by then against
23
+ * whatever the app still serves — so an address nothing answers is refused to the caller who
24
+ * can still fix it, rather than to a beat nobody is watching.
25
+ */
26
+ private keep;
14
27
  dispatch(call: Call): Promise<unknown>;
15
28
  }
16
29
  //# sourceMappingURL=Dispatcher.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Dispatcher.d.ts","sourceRoot":"","sources":["../../src/dispatch/Dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,8EAA8E;AAC9E,qBAAa,UAAW,YAAW,YAAY;IAE3C,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAHP,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,QAAQ,EAClB,SAAS,oBAA0B,EACnC,MAAM,CAAC,EAAE,WAAW,YAAA;IAGjC,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;CA4B7C"}
1
+ {"version":3,"file":"Dispatcher.d.ts","sourceRoot":"","sources":["../../src/dispatch/Dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,8EAA8E;AAC9E,qBAAa,UAAW,YAAW,YAAY;IAE3C,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAJV,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,QAAQ,EAClB,SAAS,oBAA0B,EACnC,MAAM,CAAC,EAAE,WAAW,YAAA,EACpB,SAAS,CAAC,GAAE,MAAM,OAAO,GAAG,SAAS,aAAA;IAGxD,yFAAyF;YAC3E,QAAQ;IAYtB;;;;;;;OAOG;YACW,IAAI;IAgBZ,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;CAyB7C"}
@@ -7,25 +7,53 @@ export class Dispatcher {
7
7
  inFlight;
8
8
  lifecycle;
9
9
  policy;
10
- constructor(routes, inFlight, lifecycle = new DispatchLifecycle(), policy) {
10
+ journalOf;
11
+ constructor(routes, inFlight, lifecycle = new DispatchLifecycle(), policy, journalOf) {
11
12
  this.routes = routes;
12
13
  this.inFlight = inFlight;
13
14
  this.lifecycle = lifecycle;
14
15
  this.policy = policy;
16
+ this.journalOf = journalOf;
17
+ }
18
+ /** The route that answers this address, or the refusal naming what is served instead. */
19
+ async routeFor(call) {
20
+ const known = this.routes.find(call.address);
21
+ const resolved = known ?? await this.routes.resolve(call.address);
22
+ const route = resolved && (!this.policy || this.policy.accepts(resolved)) ? resolved : undefined;
23
+ if (!route) {
24
+ throw this.policy?.notFound?.(call, this.routes.routes())
25
+ ?? routeNotFound(call, servedOperations(call, this.routes.routes(), this.policy));
26
+ }
27
+ return route;
28
+ }
29
+ /**
30
+ * A kept call publishes no dispatch event and enters no flight: it has not been answered,
31
+ * and counting it here would report one call spanning the days until its hour.
32
+ *
33
+ * Its address is resolved all the same. What is kept is made hours later, by then against
34
+ * whatever the app still serves — so an address nothing answers is refused to the caller who
35
+ * can still fix it, rather than to a beat nobody is watching.
36
+ */
37
+ async keep(call, runAt) {
38
+ await this.routeFor(call);
39
+ const journal = this.journalOf?.();
40
+ if (!journal) {
41
+ throw new Error(`${call.address.toString()} asks to run at ${new Date(runAt).toISOString()}, and nothing keeps it.`
42
+ + ' Install a package answering Journal — @fougere/workflow.');
43
+ }
44
+ await journal.keep(call, runAt);
45
+ return undefined;
15
46
  }
16
47
  async dispatch(call) {
48
+ const { runAt } = call.invocation;
49
+ if (runAt !== undefined)
50
+ return this.keep(call, runAt);
17
51
  let route;
18
52
  let release;
19
53
  this.lifecycle.publish(DispatchEvent.received(call));
20
54
  try {
21
55
  release = this.inFlight.enter(call.address.entity, call.address.operation);
22
- const known = this.routes.find(call.address);
23
- const resolved = known ?? await this.routes.resolve(call.address);
24
- route = resolved && (!this.policy || this.policy.accepts(resolved)) ? resolved : undefined;
25
- if (!route) {
26
- throw this.policy?.notFound?.(call, this.routes.routes())
27
- ?? routeNotFound(call, servedOperations(call, this.routes.routes(), this.policy));
28
- }
56
+ route = await this.routeFor(call);
29
57
  this.lifecycle.publish(DispatchEvent.resolved(call, route.kind));
30
58
  const result = await route.execute(call);
31
59
  this.lifecycle.publish(DispatchEvent.completed(call, route.kind));
@@ -1 +1 @@
1
- {"version":3,"file":"Dispatcher.js","sourceRoot":"","sources":["../../src/dispatch/Dispatcher.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAK3D,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGrE,8EAA8E;AAC9E,MAAM,OAAO,UAAU;IAEF;IACA;IACA;IACA;IAJnB,YACmB,MAAqB,EACrB,QAAkB,EAClB,YAAY,IAAI,iBAAiB,EAAE,EACnC,MAAoB;QAHpB,WAAM,GAAN,MAAM,CAAe;QACrB,aAAQ,GAAR,QAAQ,CAAU;QAClB,cAAS,GAAT,SAAS,CAA0B;QACnC,WAAM,GAAN,MAAM,CAAc;IACpC,CAAC;IAEJ,KAAK,CAAC,QAAQ,CAAC,IAAU;QACvB,IAAI,KAAwB,CAAC;QAC7B,IAAI,OAAiC,CAAC;QACtC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAErD,IAAI,CAAC;YACH,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAC3E,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC7C,MAAM,QAAQ,GAAG,KAAK,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAClE,KAAK,GAAG,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;YAC3F,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;uBACpD,aAAa,CAAC,IAAI,EAAE,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YACtF,CAAC;YAED,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YACjE,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACzC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YAClE,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;YACvE,MAAM,KAAK,CAAC;QACd,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;YACjE,OAAO,EAAE,EAAE,CAAC;QACd,CAAC;IACH,CAAC;CAEF"}
1
+ {"version":3,"file":"Dispatcher.js","sourceRoot":"","sources":["../../src/dispatch/Dispatcher.ts"],"names":[],"mappings":"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"}
@@ -20,9 +20,15 @@ export declare class HandlerFacade {
20
20
  private readonly arguments;
21
21
  /** A computed field's parameters and the collectors in scope are both boot-time facts. */
22
22
  private readonly presenterPlans;
23
+ private collectorResolver;
23
24
  constructor(handler: HandlerEntry, scope: Container, facade: Facade);
24
25
  /** One operation, through the same ordered boundary steps on every route. */
25
26
  execute(op: string, input?: Partial<InvocationContext>): Promise<unknown>;
27
+ /**
28
+ * What the handler answers, once the middlewares let the call through: the input judged, the
29
+ * arguments bound, the row projected onto the view this audience sees.
30
+ */
31
+ private answer;
26
32
  /** The computed fields a presenter adds, over the page the façade just projected. */
27
33
  private present;
28
34
  private get handlerKey();
@@ -31,7 +37,6 @@ export declare class HandlerFacade {
31
37
  private refuseCrudWithoutRepository;
32
38
  /** Resolve and cache the output view declared for one operation. */
33
39
  private viewOf;
34
- private collectorResolver;
35
40
  /** The handler itself, resolved on first call — never at boot. */
36
41
  private resolveHandler;
37
42
  private isBaseImplementation;
@@ -1 +1 @@
1
- {"version":3,"file":"HandlerFacade.d.ts","sourceRoot":"","sources":["../../src/dispatch/HandlerFacade.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AASpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAG3E,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAOlE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,0DAA0D;AAC1D,qBAAa,aAAa;IAiBtB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAlBzB,oEAAoE;IACpE,QAAQ,CAAC,mBAAmB,EAAE,sBAAsB,CAAC;IACrD,uCAAuC;IACvC,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;IAElC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiC;IAC7D,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA6B;IAChE,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAA0B;IAClE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAExB;IACF,0FAA0F;IAC1F,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA2B;gBAGvC,OAAO,EAAE,YAAY,EACrB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,MAAM;IA6BjC,6EAA6E;IACvE,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAoC/E,qFAAqF;IACrF,OAAO,CAAC,OAAO;IAkBf,OAAO,KAAK,UAAU,GAErB;IAED,OAAO,CAAC,MAAM;IASd,wEAAwE;IACxE,OAAO,CAAC,2BAA2B;IAWnC,oEAAoE;IACpE,OAAO,CAAC,MAAM;IAcd,OAAO,CAAC,iBAAiB,CAGvB;IAEF,kEAAkE;IAClE,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,oBAAoB;IAM5B,uFAAuF;IACvF,OAAO,CAAC,qBAAqB;IAe7B,OAAO,CAAC,qBAAqB;CAgB9B"}
1
+ {"version":3,"file":"HandlerFacade.d.ts","sourceRoot":"","sources":["../../src/dispatch/HandlerFacade.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AASpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAG3E,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAOlE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,0DAA0D;AAC1D,qBAAa,aAAa;IAsBtB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAvBzB,oEAAoE;IACpE,QAAQ,CAAC,mBAAmB,EAAE,sBAAsB,CAAC;IACrD,uCAAuC;IACvC,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;IAElC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiC;IAC7D,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA6B;IAChE,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAA0B;IAClE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAExB;IACF,0FAA0F;IAC1F,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA2B;IAE1D,OAAO,CAAC,iBAAiB,CAGvB;gBAGiB,OAAO,EAAE,YAAY,EACrB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,MAAM;IA6BjC,6EAA6E;IACvE,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAuB/E;;;OAGG;YACW,MAAM;IAmBpB,qFAAqF;IACrF,OAAO,CAAC,OAAO;IAkBf,OAAO,KAAK,UAAU,GAErB;IAED,OAAO,CAAC,MAAM;IASd,wEAAwE;IACxE,OAAO,CAAC,2BAA2B;IAWnC,oEAAoE;IACpE,OAAO,CAAC,MAAM;IAcd,kEAAkE;IAClE,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,oBAAoB;IAM5B,uFAAuF;IACvF,OAAO,CAAC,qBAAqB;IAe7B,OAAO,CAAC,qBAAqB;CAgB9B"}
@@ -25,6 +25,14 @@ export class HandlerFacade {
25
25
  arguments = new ArgumentResolver((typeName) => this.collectorResolver(typeName));
26
26
  /** A computed field's parameters and the collectors in scope are both boot-time facts. */
27
27
  presenterPlans;
28
+ collectorResolver = (typeName) => {
29
+ try {
30
+ return this.scope.resolve(collectorKeyOf(typeName));
31
+ }
32
+ catch {
33
+ return undefined;
34
+ }
35
+ };
28
36
  constructor(handler, scope, facade) {
29
37
  this.handler = handler;
30
38
  this.scope = scope;
@@ -67,18 +75,21 @@ export class HandlerFacade {
67
75
  state: invocation.state,
68
76
  invocation,
69
77
  };
70
- return runMiddlewares(this.facade.middlewares(), context, async () => {
71
- const validated = validateInput(contract.input, invocation, entity, op);
72
- context.invocation = validated;
73
- const args = contract.binding
74
- ? await this.arguments.resolve(contract.binding, validated)
75
- : [];
76
- const { instance, method } = this.resolveImplementation(op);
77
- const view = this.viewOf(op);
78
- const output = view.project(await instance[method](...args));
79
- const { presenter } = this.facade;
80
- return view.closed || !presenter ? output : this.present(op, presenter, output, validated);
81
- });
78
+ return runMiddlewares(this.facade.middlewares(), context, () => this.answer(op, contract, context, invocation));
79
+ }
80
+ /**
81
+ * What the handler answers, once the middlewares let the call through: the input judged, the
82
+ * arguments bound, the row projected onto the view this audience sees.
83
+ */
84
+ async answer(op, contract, context, invocation) {
85
+ const validated = validateInput(contract.input, invocation, this.handler.address, op);
86
+ context.invocation = validated;
87
+ const args = contract.binding ? await this.arguments.resolve(contract.binding, validated) : [];
88
+ const { instance, method } = this.resolveImplementation(op);
89
+ const view = this.viewOf(op);
90
+ const output = view.project(await instance[method](...args));
91
+ const { presenter } = this.facade;
92
+ return view.closed || !presenter ? output : this.present(op, presenter, output, validated);
82
93
  }
83
94
  /** The computed fields a presenter adds, over the page the façade just projected. */
84
95
  present(op, presenter, output, invocation) {
@@ -119,14 +130,6 @@ export class HandlerFacade {
119
130
  this.cachedViews.set(op, resolved);
120
131
  return resolved;
121
132
  }
122
- collectorResolver = (typeName) => {
123
- try {
124
- return this.scope.resolve(collectorKeyOf(typeName));
125
- }
126
- catch {
127
- return undefined;
128
- }
129
- };
130
133
  /** The handler itself, resolved on first call — never at boot. */
131
134
  resolveHandler() {
132
135
  if (!this.instance)
@@ -1 +1 @@
1
- {"version":3,"file":"HandlerFacade.js","sourceRoot":"","sources":["../../src/dispatch/HandlerFacade.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"HandlerFacade.js","sourceRoot":"","sources":["../../src/dispatch/HandlerFacade.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { Call } from '../wire/Call.js';
2
+ /**
3
+ * What writes a release down while it happens, when a package provides one.
4
+ *
5
+ * Core does the same hops in the same order either way — children before their parent, so an
6
+ * interruption leaves fewer children and never an orphan. What a journal adds is that somebody
7
+ * can finish what a stopped process started: the row says a release began, and a sweep redoes
8
+ * it. Redoing is safe because every hop already is — a row taken out twice is taken out once.
9
+ *
10
+ * What writes a release down writes none of its own: the boot leaves out the entities of the
11
+ * fronds an extension BROUGHT, so keeping the row that says a release began does not begin one.
12
+ * Read from what was brought rather than written down, the way `CARRIES_LINE` is.
13
+ *
14
+ * Documented: [entities](https://fougere.dev/docs/schema/entities).
15
+ */
16
+ export interface Journal {
17
+ /** Hold this call until `runAt`, so a sweep dispatches it then and nobody waits for it now. */
18
+ keep(call: Call, runAt: number): Promise<void>;
19
+ /** Take this release on, or say another process is already driving it. */
20
+ open(entity: string, key: string): Promise<'taken' | 'busy'>;
21
+ close(entity: string, key: string): Promise<void>;
22
+ }
23
+ /** The container key a package registers its journal under. */
24
+ export declare const JOURNAL = "Journal";
25
+ //# sourceMappingURL=Journal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Journal.d.ts","sourceRoot":"","sources":["../../src/dispatch/Journal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAE5C;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,OAAO;IACtB,+FAA+F;IAC/F,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,0EAA0E;IAC1E,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC;IAC7D,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnD;AAED,+DAA+D;AAC/D,eAAO,MAAM,OAAO,YAAY,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** The container key a package registers its journal under. */
2
+ export const JOURNAL = 'Journal';
3
+ //# sourceMappingURL=Journal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Journal.js","sourceRoot":"","sources":["../../src/dispatch/Journal.ts"],"names":[],"mappings":"AAwBA,+DAA+D;AAC/D,MAAM,CAAC,MAAM,OAAO,GAAG,SAAS,CAAC"}
@@ -7,5 +7,11 @@ export declare class PresenterExecutor {
7
7
  private readonly operation;
8
8
  constructor(presenter: Record<string, unknown> | undefined, fieldNames: readonly string[] | undefined, entity?: string, operation?: string);
9
9
  present(result: unknown, args?: PresenterArgs): Promise<unknown>;
10
+ /**
11
+ * One computed field, handed the whole PAGE — so one query per page is possible where one per
12
+ * row was not. It answers for every row or for none: a shorter list would silently shift the
13
+ * values onto the wrong rows.
14
+ */
15
+ private computed;
10
16
  }
11
17
  //# sourceMappingURL=PresenterExecutor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PresenterExecutor.d.ts","sourceRoot":"","sources":["../../src/dispatch/PresenterExecutor.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,kEAAkE;AAClE,qBAAa,iBAAiB;IAE1B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAHT,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC9C,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,EACzC,MAAM,SAAY,EAClB,SAAS,SAAY;IAGlC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,GAAE,aAAkB,GAAG,OAAO,CAAC,OAAO,CAAC;CAwC3E"}
1
+ {"version":3,"file":"PresenterExecutor.d.ts","sourceRoot":"","sources":["../../src/dispatch/PresenterExecutor.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,kEAAkE;AAClE,qBAAa,iBAAiB;IAE1B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAHT,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC9C,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,EACzC,MAAM,SAAY,EAClB,SAAS,SAAY;IAGlC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,GAAE,aAAkB,GAAG,OAAO,CAAC,OAAO,CAAC;IAwB1E;;;;OAIG;YACW,QAAQ;CAsBvB"}
@@ -20,26 +20,9 @@ export class PresenterExecutor {
20
20
  const rows = Array.isArray(result) ? result : [result];
21
21
  const values = new Map();
22
22
  for (const name of this.fieldNames) {
23
- const field = this.presenter[name];
24
- if (typeof field !== 'function')
25
- continue;
26
- try {
27
- const answered = await field.call(this.presenter, rows, ...(args[name] ?? []));
28
- if (!Array.isArray(answered) || answered.length !== rows.length) {
29
- const actual = Array.isArray(answered) ? answered.length : typeof answered;
30
- throw new Error(`expected ${rows.length} value(s) for ${rows.length} row(s), got ${actual}`);
31
- }
23
+ const answered = await this.computed(name, rows, args[name] ?? []);
24
+ if (answered)
32
25
  values.set(name, answered);
33
- }
34
- catch (cause) {
35
- throw new FougereError({
36
- code: ErrorCode.INTERNAL_ERROR,
37
- message: `Computed field '${name}' failed: ${cause?.message ?? cause}`,
38
- entity: this.entity,
39
- operation: this.operation,
40
- cause,
41
- });
42
- }
43
26
  }
44
27
  const enriched = rows.map((item, index) => {
45
28
  if (item === null || typeof item !== 'object')
@@ -49,9 +32,34 @@ export class PresenterExecutor {
49
32
  output[name] = answered[index];
50
33
  return output;
51
34
  });
52
- return Array.isArray(result)
53
- ? preserveArrayProperties(result, enriched)
54
- : enriched[0];
35
+ return Array.isArray(result) ? preserveArrayProperties(result, enriched) : enriched[0];
36
+ }
37
+ /**
38
+ * One computed field, handed the whole PAGE — so one query per page is possible where one per
39
+ * row was not. It answers for every row or for none: a shorter list would silently shift the
40
+ * values onto the wrong rows.
41
+ */
42
+ async computed(name, rows, args) {
43
+ const field = this.presenter?.[name];
44
+ if (typeof field !== 'function')
45
+ return undefined;
46
+ try {
47
+ const answered = await field.call(this.presenter, rows, ...args);
48
+ if (!Array.isArray(answered) || answered.length !== rows.length) {
49
+ const actual = Array.isArray(answered) ? answered.length : typeof answered;
50
+ throw new Error(`expected ${rows.length} value(s) for ${rows.length} row(s), got ${actual}`);
51
+ }
52
+ return answered;
53
+ }
54
+ catch (cause) {
55
+ throw new FougereError({
56
+ code: ErrorCode.INTERNAL_ERROR,
57
+ message: `Computed field '${name}' failed: ${cause?.message ?? cause}`,
58
+ entity: this.entity,
59
+ operation: this.operation,
60
+ cause,
61
+ });
62
+ }
55
63
  }
56
64
  }
57
65
  //# sourceMappingURL=PresenterExecutor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PresenterExecutor.js","sourceRoot":"","sources":["../../src/dispatch/PresenterExecutor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PresenterExecutor.js","sourceRoot":"","sources":["../../src/dispatch/PresenterExecutor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAG3D,kEAAkE;AAClE,MAAM,OAAO,iBAAiB;IAET;IACA;IACA;IACA;IAJnB,YACmB,SAA8C,EAC9C,UAAyC,EACzC,SAAS,SAAS,EAClB,YAAY,SAAS;QAHrB,cAAS,GAAT,SAAS,CAAqC;QAC9C,eAAU,GAAV,UAAU,CAA+B;QACzC,WAAM,GAAN,MAAM,CAAY;QAClB,cAAS,GAAT,SAAS,CAAY;IACrC,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAC,MAAe,EAAE,OAAsB,EAAE;QACrD,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YACjG,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAqB,CAAC;QAC5C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACnC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACnE,IAAI,QAAQ;gBAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC3C,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YACxC,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAC;YAE3D,MAAM,MAAM,GAAG,EAAE,GAAI,IAAgC,EAAE,CAAC;YACxD,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM;gBAAE,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;YAEtE,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,uBAAuB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACzF,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,QAAQ,CAAC,IAAY,EAAE,IAAe,EAAE,IAAe;QACnE,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,OAAO,KAAK,KAAK,UAAU;YAAE,OAAO,SAAS,CAAC;QAElD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;YACjE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChE,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,QAAQ,CAAC;gBAC3E,MAAM,IAAI,KAAK,CAAC,YAAY,IAAI,CAAC,MAAM,iBAAiB,IAAI,CAAC,MAAM,gBAAgB,MAAM,EAAE,CAAC,CAAC;YAC/F,CAAC;YAED,OAAO,QAAQ,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,YAAY,CAAC;gBACrB,IAAI,EAAE,SAAS,CAAC,cAAc;gBAC9B,OAAO,EAAE,mBAAmB,IAAI,aAAc,KAAe,EAAE,OAAO,IAAI,KAAK,EAAE;gBACjF,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,KAAK;aACN,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * A `ref()` whose target the source does not hold, so the guard reads it before the write.
3
+ *
4
+ * The pair decides, never the engine: SQL keeps a foreign key over rows it can see, and a
5
+ * target in another source gets a column and nothing else. The boot builds one of these for
6
+ * each reference that falls outside its own source, and none for the rest — a co-located
7
+ * relation costs nothing here, because the key already refuses the same row.
8
+ *
9
+ * Documented: [entities](https://fougere.dev/docs/schema/entities).
10
+ */
11
+ export interface RelationCheck {
12
+ /** The field carrying the key — `authorId`. */
13
+ field: string;
14
+ /** What it points at, as the boot files it — `user`. */
15
+ target: string;
16
+ /**
17
+ * Which of these keys no row answers. Takes a set so a page costs one read, and so the
18
+ * single-row case is the same call with one member.
19
+ */
20
+ missing(keys: readonly unknown[]): Promise<readonly unknown[]>;
21
+ }
22
+ //# sourceMappingURL=RelationCheck.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RelationCheck.d.ts","sourceRoot":"","sources":["../../src/dispatch/RelationCheck.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,WAAW,aAAa;IAC5B,+CAA+C;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,wDAAwD;IACxD,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,OAAO,CAAC,IAAI,EAAE,SAAS,OAAO,EAAE,GAAG,OAAO,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC;CAChE"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=RelationCheck.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RelationCheck.js","sourceRoot":"","sources":["../../src/dispatch/RelationCheck.ts"],"names":[],"mappings":""}
@@ -0,0 +1,36 @@
1
+ /** What a delete does to the rows that name it, when no foreign key does it instead. */
2
+ import { type SchemaView } from '@fougere/schema';
3
+ import type { Dependent } from './Dependent.js';
4
+ import type { Journal } from './Journal.js';
5
+ /** The gestures a release reaches a dependent's rows through. */
6
+ export interface Rows {
7
+ findAllByKeys(field: string, keys: readonly string[]): Promise<Map<string, Record<string, unknown>[]>>;
8
+ update(id: string, patch: Record<string, unknown>): Promise<unknown>;
9
+ delete(id: string): Promise<boolean>;
10
+ }
11
+ /** What the guard hands a release: who depends on an entity, and how to reach their rows. */
12
+ export interface Releasing {
13
+ dependentsOf(entity: string): readonly Dependent[];
14
+ rowsOf(entity: string): Rows | undefined;
15
+ schemaOf(entity: string): SchemaView | undefined;
16
+ /** Written down while it happens, when a package provides one — absent is the plain walk. */
17
+ journal(entity: string): Journal | undefined;
18
+ /** Every declared remote — each one walks its own tree, and is alone able to. */
19
+ peers(): readonly {
20
+ release(entity: string, key: unknown, visited: readonly string[]): Promise<void>;
21
+ }[];
22
+ }
23
+ /**
24
+ * The rows that name a key, taken out or emptied, deepest FIRST.
25
+ *
26
+ * Order is the whole guarantee: a child never outlives its parent, so an interruption leaves
27
+ * fewer children and never an orphan. That is what lets a release cross a process without a
28
+ * two-phase commit — and why nothing here needs to be undone, only finished.
29
+ *
30
+ * A row already visited is not visited again, which is what ends a cycle: `Category.parentId`
31
+ * pointing at its own entity walks down and stops when a key repeats.
32
+ *
33
+ * Documented: [entities](https://fougere.dev/docs/schema/entities).
34
+ */
35
+ export declare function release(entity: string, key: unknown, world: Releasing, visited?: readonly string[], row?: () => Promise<unknown>): Promise<void>;
36
+ //# sourceMappingURL=Release.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Release.d.ts","sourceRoot":"","sources":["../../src/dispatch/Release.ts"],"names":[],"mappings":"AAAA,wFAAwF;AACxF,OAAO,EAAY,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAI5C,iEAAiE;AACjE,MAAM,WAAW,IAAI;IACnB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;IACvG,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACrE,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACtC;AAED,6FAA6F;AAC7F,MAAM,WAAW,SAAS;IACxB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,SAAS,EAAE,CAAC;IACnD,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;IACjD,6FAA6F;IAC7F,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;IAC7C,iFAAiF;IACjF,KAAK,IAAI,SAAS;QAAE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,EAAE,CAAC;CAC1G;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,OAAO,CAC3B,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,SAAS,EAChB,OAAO,GAAE,SAAS,MAAM,EAAO,EAC/B,GAAG,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,GAC3B,OAAO,CAAC,IAAI,CAAC,CAmCf"}