@fougere/core 0.2.0-alpha.2 → 0.3.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 (414) hide show
  1. package/README.md +2 -1
  2. package/dist/boot/AppLifecycle.d.ts +18 -0
  3. package/dist/boot/AppLifecycle.d.ts.map +1 -0
  4. package/dist/boot/AppLifecycle.js +42 -0
  5. package/dist/boot/AppLifecycle.js.map +1 -0
  6. package/dist/boot/Emissions.d.ts +126 -0
  7. package/dist/boot/Emissions.d.ts.map +1 -0
  8. package/dist/boot/Emissions.js +233 -0
  9. package/dist/boot/Emissions.js.map +1 -0
  10. package/dist/boot/HandlerFacade.d.ts +72 -0
  11. package/dist/boot/HandlerFacade.d.ts.map +1 -0
  12. package/dist/boot/HandlerFacade.js +174 -0
  13. package/dist/boot/HandlerFacade.js.map +1 -0
  14. package/dist/boot/Lifecycle.d.ts +4 -0
  15. package/dist/boot/Lifecycle.d.ts.map +1 -0
  16. package/dist/boot/Lifecycle.js +3 -0
  17. package/dist/boot/Lifecycle.js.map +1 -0
  18. package/dist/boot/ambient-port.d.ts +38 -0
  19. package/dist/boot/ambient-port.d.ts.map +1 -0
  20. package/dist/boot/ambient-port.js +2 -0
  21. package/dist/boot/ambient-port.js.map +1 -0
  22. package/dist/boot/ambient.als.d.ts +3 -0
  23. package/dist/boot/ambient.als.d.ts.map +1 -0
  24. package/dist/boot/ambient.als.js +34 -0
  25. package/dist/boot/ambient.als.js.map +1 -0
  26. package/dist/boot/ambient.queue.d.ts +10 -0
  27. package/dist/boot/ambient.queue.d.ts.map +1 -0
  28. package/dist/boot/ambient.queue.js +60 -0
  29. package/dist/boot/ambient.queue.js.map +1 -0
  30. package/dist/boot/apply.d.ts +22 -0
  31. package/dist/boot/apply.d.ts.map +1 -0
  32. package/dist/boot/apply.js +48 -0
  33. package/dist/boot/apply.js.map +1 -0
  34. package/dist/boot/auth.d.ts +53 -0
  35. package/dist/boot/auth.d.ts.map +1 -0
  36. package/dist/boot/auth.js +2 -0
  37. package/dist/boot/auth.js.map +1 -0
  38. package/dist/{binding.d.ts → boot/binding.d.ts} +14 -17
  39. package/dist/boot/binding.d.ts.map +1 -0
  40. package/dist/{binding.js → boot/binding.js} +19 -10
  41. package/dist/boot/binding.js.map +1 -0
  42. package/dist/{boot.d.ts → boot/boot.d.ts} +25 -5
  43. package/dist/boot/boot.d.ts.map +1 -0
  44. package/dist/boot/boot.js +70 -0
  45. package/dist/boot/boot.js.map +1 -0
  46. package/dist/boot/bootstrap.d.ts.map +1 -0
  47. package/dist/boot/bootstrap.js +721 -0
  48. package/dist/boot/bootstrap.js.map +1 -0
  49. package/dist/boot/egress.d.ts +8 -0
  50. package/dist/boot/egress.d.ts.map +1 -0
  51. package/dist/boot/egress.js +11 -0
  52. package/dist/boot/egress.js.map +1 -0
  53. package/dist/boot/frame.d.ts +44 -0
  54. package/dist/boot/frame.d.ts.map +1 -0
  55. package/dist/boot/frame.js +181 -0
  56. package/dist/boot/frame.js.map +1 -0
  57. package/dist/boot/ownership.d.ts +42 -0
  58. package/dist/boot/ownership.d.ts.map +1 -0
  59. package/dist/boot/ownership.js +127 -0
  60. package/dist/boot/ownership.js.map +1 -0
  61. package/dist/boot/ports.d.ts +17 -0
  62. package/dist/boot/ports.d.ts.map +1 -0
  63. package/dist/boot/ports.js +57 -0
  64. package/dist/boot/ports.js.map +1 -0
  65. package/dist/{remote.d.ts → boot/remote.d.ts} +11 -3
  66. package/dist/boot/remote.d.ts.map +1 -0
  67. package/dist/{remote.js → boot/remote.js} +24 -26
  68. package/dist/boot/remote.js.map +1 -0
  69. package/dist/{seed.d.ts → boot/seed.d.ts} +13 -1
  70. package/dist/boot/seed.d.ts.map +1 -0
  71. package/dist/{seed.js → boot/seed.js} +24 -3
  72. package/dist/boot/seed.js.map +1 -0
  73. package/dist/boot/together.d.ts +26 -0
  74. package/dist/boot/together.d.ts.map +1 -0
  75. package/dist/boot/together.js +163 -0
  76. package/dist/boot/together.js.map +1 -0
  77. package/dist/boot/types.d.ts +260 -0
  78. package/dist/boot/types.d.ts.map +1 -0
  79. package/dist/boot/types.js.map +1 -0
  80. package/dist/builtins/config.d.ts +9 -0
  81. package/dist/builtins/config.d.ts.map +1 -1
  82. package/dist/builtins/config.js +16 -1
  83. package/dist/builtins/config.js.map +1 -1
  84. package/dist/builtins/logger.d.ts +37 -4
  85. package/dist/builtins/logger.d.ts.map +1 -1
  86. package/dist/builtins/logger.js +66 -7
  87. package/dist/builtins/logger.js.map +1 -1
  88. package/dist/config-loader.d.ts +39 -35
  89. package/dist/config-loader.d.ts.map +1 -1
  90. package/dist/config-loader.js +15 -54
  91. package/dist/config-loader.js.map +1 -1
  92. package/dist/contract/Call.d.ts +10 -0
  93. package/dist/contract/Call.d.ts.map +1 -0
  94. package/dist/contract/Call.js +15 -0
  95. package/dist/contract/Call.js.map +1 -0
  96. package/dist/contract/Invocation.d.ts +27 -0
  97. package/dist/contract/Invocation.d.ts.map +1 -0
  98. package/dist/contract/Invocation.js +59 -0
  99. package/dist/contract/Invocation.js.map +1 -0
  100. package/dist/contract/RouteAddress.d.ts +17 -0
  101. package/dist/contract/RouteAddress.d.ts.map +1 -0
  102. package/dist/contract/RouteAddress.js +38 -0
  103. package/dist/contract/RouteAddress.js.map +1 -0
  104. package/dist/contract.d.ts +25 -19
  105. package/dist/contract.d.ts.map +1 -1
  106. package/dist/contract.js +25 -10
  107. package/dist/contract.js.map +1 -1
  108. package/dist/crypto/encoding.d.ts +25 -0
  109. package/dist/crypto/encoding.d.ts.map +1 -0
  110. package/dist/crypto/encoding.js +58 -0
  111. package/dist/crypto/encoding.js.map +1 -0
  112. package/dist/crypto/node.d.ts +4 -0
  113. package/dist/crypto/node.d.ts.map +1 -0
  114. package/dist/crypto/node.js +25 -0
  115. package/dist/crypto/node.js.map +1 -0
  116. package/dist/crypto/port.d.ts +42 -0
  117. package/dist/crypto/port.d.ts.map +1 -0
  118. package/dist/crypto/port.js +19 -0
  119. package/dist/crypto/port.js.map +1 -0
  120. package/dist/crypto/webcrypto.d.ts +4 -0
  121. package/dist/crypto/webcrypto.d.ts.map +1 -0
  122. package/dist/crypto/webcrypto.js +34 -0
  123. package/dist/crypto/webcrypto.js.map +1 -0
  124. package/dist/dispatch/ArgumentResolver.d.ts +10 -0
  125. package/dist/dispatch/ArgumentResolver.d.ts.map +1 -0
  126. package/dist/dispatch/ArgumentResolver.js +12 -0
  127. package/dist/dispatch/ArgumentResolver.js.map +1 -0
  128. package/dist/dispatch/ArrayResult.d.ts +3 -0
  129. package/dist/dispatch/ArrayResult.d.ts.map +1 -0
  130. package/dist/dispatch/ArrayResult.js +11 -0
  131. package/dist/dispatch/ArrayResult.js.map +1 -0
  132. package/dist/dispatch/DispatchEvent.d.ts +18 -0
  133. package/dist/dispatch/DispatchEvent.d.ts.map +1 -0
  134. package/dist/dispatch/DispatchEvent.js +30 -0
  135. package/dist/dispatch/DispatchEvent.js.map +1 -0
  136. package/dist/dispatch/DispatchLifecycle.d.ts +9 -0
  137. package/dist/dispatch/DispatchLifecycle.d.ts.map +1 -0
  138. package/dist/dispatch/DispatchLifecycle.js +25 -0
  139. package/dist/dispatch/DispatchLifecycle.js.map +1 -0
  140. package/dist/dispatch/DispatchPort.d.ts +6 -0
  141. package/dist/dispatch/DispatchPort.d.ts.map +1 -0
  142. package/dist/dispatch/DispatchPort.js +2 -0
  143. package/dist/dispatch/DispatchPort.js.map +1 -0
  144. package/dist/dispatch/Dispatcher.d.ts +16 -0
  145. package/dist/dispatch/Dispatcher.d.ts.map +1 -0
  146. package/dist/dispatch/Dispatcher.js +44 -0
  147. package/dist/dispatch/Dispatcher.js.map +1 -0
  148. package/dist/dispatch/InFlight.d.ts +12 -0
  149. package/dist/dispatch/InFlight.d.ts.map +1 -0
  150. package/dist/dispatch/InFlight.js +46 -0
  151. package/dist/dispatch/InFlight.js.map +1 -0
  152. package/dist/dispatch/InputValidator.d.ts +7 -0
  153. package/dist/dispatch/InputValidator.d.ts.map +1 -0
  154. package/dist/dispatch/InputValidator.js +21 -0
  155. package/dist/dispatch/InputValidator.js.map +1 -0
  156. package/dist/dispatch/LocalRoutePolicy.d.ts +11 -0
  157. package/dist/dispatch/LocalRoutePolicy.d.ts.map +1 -0
  158. package/dist/dispatch/LocalRoutePolicy.js +32 -0
  159. package/dist/dispatch/LocalRoutePolicy.js.map +1 -0
  160. package/dist/dispatch/OperationExecutor.d.ts +25 -0
  161. package/dist/dispatch/OperationExecutor.d.ts.map +1 -0
  162. package/dist/dispatch/OperationExecutor.js +32 -0
  163. package/dist/dispatch/OperationExecutor.js.map +1 -0
  164. package/dist/dispatch/OperationRoute.d.ts +13 -0
  165. package/dist/dispatch/OperationRoute.d.ts.map +1 -0
  166. package/dist/dispatch/OperationRoute.js +15 -0
  167. package/dist/dispatch/OperationRoute.js.map +1 -0
  168. package/dist/dispatch/OutputProjector.d.ts +12 -0
  169. package/dist/dispatch/OutputProjector.d.ts.map +1 -0
  170. package/dist/dispatch/OutputProjector.js +30 -0
  171. package/dist/dispatch/OutputProjector.js.map +1 -0
  172. package/dist/dispatch/OutputView.d.ts +8 -0
  173. package/dist/dispatch/OutputView.d.ts.map +1 -0
  174. package/dist/dispatch/OutputView.js +10 -0
  175. package/dist/dispatch/OutputView.js.map +1 -0
  176. package/dist/dispatch/PresenterArgumentResolver.d.ts +12 -0
  177. package/dist/dispatch/PresenterArgumentResolver.d.ts.map +1 -0
  178. package/dist/dispatch/PresenterArgumentResolver.js +20 -0
  179. package/dist/dispatch/PresenterArgumentResolver.js.map +1 -0
  180. package/dist/dispatch/PresenterExecutor.d.ts +11 -0
  181. package/dist/dispatch/PresenterExecutor.d.ts.map +1 -0
  182. package/dist/dispatch/PresenterExecutor.js +56 -0
  183. package/dist/dispatch/PresenterExecutor.js.map +1 -0
  184. package/dist/dispatch/RemoteRouteResolver.d.ts +13 -0
  185. package/dist/dispatch/RemoteRouteResolver.d.ts.map +1 -0
  186. package/dist/dispatch/RemoteRouteResolver.js +18 -0
  187. package/dist/dispatch/RemoteRouteResolver.js.map +1 -0
  188. package/dist/dispatch/Route.d.ts +10 -0
  189. package/dist/dispatch/Route.d.ts.map +1 -0
  190. package/dist/dispatch/Route.js +2 -0
  191. package/dist/dispatch/Route.js.map +1 -0
  192. package/dist/dispatch/RouteNotFoundError.d.ts +10 -0
  193. package/dist/dispatch/RouteNotFoundError.d.ts.map +1 -0
  194. package/dist/dispatch/RouteNotFoundError.js +24 -0
  195. package/dist/dispatch/RouteNotFoundError.js.map +1 -0
  196. package/dist/dispatch/RoutePolicy.d.ts +8 -0
  197. package/dist/dispatch/RoutePolicy.d.ts.map +1 -0
  198. package/dist/dispatch/RoutePolicy.js +2 -0
  199. package/dist/dispatch/RoutePolicy.js.map +1 -0
  200. package/dist/dispatch/RouteRegistry.d.ts +18 -0
  201. package/dist/dispatch/RouteRegistry.d.ts.map +1 -0
  202. package/dist/dispatch/RouteRegistry.js +62 -0
  203. package/dist/dispatch/RouteRegistry.js.map +1 -0
  204. package/dist/dispatch/RouteResolver.d.ts +7 -0
  205. package/dist/dispatch/RouteResolver.d.ts.map +1 -0
  206. package/dist/dispatch/RouteResolver.js +2 -0
  207. package/dist/dispatch/RouteResolver.js.map +1 -0
  208. package/dist/dispatch/StorageGuard.d.ts +15 -0
  209. package/dist/dispatch/StorageGuard.d.ts.map +1 -0
  210. package/dist/dispatch/StorageGuard.js +63 -0
  211. package/dist/dispatch/StorageGuard.js.map +1 -0
  212. package/dist/effective-operation.d.ts +90 -0
  213. package/dist/effective-operation.d.ts.map +1 -0
  214. package/dist/effective-operation.js +450 -0
  215. package/dist/effective-operation.js.map +1 -0
  216. package/dist/emit.js +2 -2
  217. package/dist/emit.js.map +1 -1
  218. package/dist/entry/DynamicFacade.d.ts +10 -0
  219. package/dist/entry/DynamicFacade.d.ts.map +1 -0
  220. package/dist/entry/DynamicFacade.js +27 -0
  221. package/dist/entry/DynamicFacade.js.map +1 -0
  222. package/dist/entry/FacadeEntry.d.ts +11 -0
  223. package/dist/entry/FacadeEntry.d.ts.map +1 -0
  224. package/dist/entry/FacadeEntry.js +26 -0
  225. package/dist/entry/FacadeEntry.js.map +1 -0
  226. package/dist/entry/TransportEntry.d.ts +13 -0
  227. package/dist/entry/TransportEntry.d.ts.map +1 -0
  228. package/dist/entry/TransportEntry.js +24 -0
  229. package/dist/entry/TransportEntry.js.map +1 -0
  230. package/dist/frond-config.d.ts +24 -7
  231. package/dist/frond-config.d.ts.map +1 -1
  232. package/dist/frond-config.js.map +1 -1
  233. package/dist/graph.d.ts +1 -1
  234. package/dist/graph.d.ts.map +1 -1
  235. package/dist/graph.js +3 -2
  236. package/dist/graph.js.map +1 -1
  237. package/dist/identity-keys.d.ts +14 -0
  238. package/dist/identity-keys.d.ts.map +1 -0
  239. package/dist/identity-keys.js +37 -0
  240. package/dist/identity-keys.js.map +1 -0
  241. package/dist/identity.d.ts +58 -0
  242. package/dist/identity.d.ts.map +1 -0
  243. package/dist/identity.js +182 -0
  244. package/dist/identity.js.map +1 -0
  245. package/dist/imports.d.ts +1 -1
  246. package/dist/imports.d.ts.map +1 -1
  247. package/dist/imports.js +7 -3
  248. package/dist/imports.js.map +1 -1
  249. package/dist/index.d.ts +57 -38
  250. package/dist/index.d.ts.map +1 -1
  251. package/dist/index.js +38 -32
  252. package/dist/index.js.map +1 -1
  253. package/dist/loader.d.ts +16 -0
  254. package/dist/loader.d.ts.map +1 -0
  255. package/dist/loader.js +25 -0
  256. package/dist/loader.js.map +1 -0
  257. package/dist/node.d.ts +21 -0
  258. package/dist/node.d.ts.map +1 -0
  259. package/dist/node.js +24 -0
  260. package/dist/node.js.map +1 -0
  261. package/dist/orm.d.ts +69 -8
  262. package/dist/orm.d.ts.map +1 -1
  263. package/dist/orm.js +35 -2
  264. package/dist/orm.js.map +1 -1
  265. package/dist/prefab/collector.d.ts +29 -0
  266. package/dist/prefab/collector.d.ts.map +1 -0
  267. package/dist/prefab/collector.js +34 -0
  268. package/dist/prefab/collector.js.map +1 -0
  269. package/dist/{crud.d.ts → prefab/crud.d.ts} +7 -8
  270. package/dist/prefab/crud.d.ts.map +1 -0
  271. package/dist/{crud.js → prefab/crud.js} +39 -5
  272. package/dist/prefab/crud.js.map +1 -0
  273. package/dist/prefab/mirror.d.ts +52 -0
  274. package/dist/prefab/mirror.d.ts.map +1 -0
  275. package/dist/prefab/mirror.js +66 -0
  276. package/dist/prefab/mirror.js.map +1 -0
  277. package/dist/prefab/prefab.d.ts +15 -0
  278. package/dist/prefab/prefab.d.ts.map +1 -0
  279. package/dist/prefab/prefab.js +19 -0
  280. package/dist/prefab/prefab.js.map +1 -0
  281. package/dist/{presenter.d.ts → prefab/presenter.d.ts} +6 -17
  282. package/dist/prefab/presenter.d.ts.map +1 -0
  283. package/dist/{presenter.js → prefab/presenter.js} +5 -23
  284. package/dist/prefab/presenter.js.map +1 -0
  285. package/dist/prefab/repository.d.ts +104 -0
  286. package/dist/prefab/repository.d.ts.map +1 -0
  287. package/dist/prefab/repository.js +62 -0
  288. package/dist/prefab/repository.js.map +1 -0
  289. package/dist/scan/Fronds.d.ts +45 -0
  290. package/dist/scan/Fronds.d.ts.map +1 -0
  291. package/dist/scan/Fronds.js +66 -0
  292. package/dist/scan/Fronds.js.map +1 -0
  293. package/dist/scan/conventions.d.ts +74 -0
  294. package/dist/scan/conventions.d.ts.map +1 -0
  295. package/dist/scan/conventions.js +82 -0
  296. package/dist/scan/conventions.js.map +1 -0
  297. package/dist/scan/emit.d.ts +14 -0
  298. package/dist/scan/emit.d.ts.map +1 -0
  299. package/dist/scan/emit.js +211 -0
  300. package/dist/scan/emit.js.map +1 -0
  301. package/dist/scan/frond.d.ts +224 -0
  302. package/dist/scan/frond.d.ts.map +1 -0
  303. package/dist/scan/frond.js +2 -0
  304. package/dist/scan/frond.js.map +1 -0
  305. package/dist/{handler-parser.d.ts → scan/handler-parser.d.ts} +18 -9
  306. package/dist/scan/handler-parser.d.ts.map +1 -0
  307. package/dist/scan/handler-parser.js +625 -0
  308. package/dist/scan/handler-parser.js.map +1 -0
  309. package/dist/scan/scan-cache.d.ts +16 -0
  310. package/dist/scan/scan-cache.d.ts.map +1 -0
  311. package/dist/{scan-cache.js → scan/scan-cache.js} +27 -20
  312. package/dist/scan/scan-cache.js.map +1 -0
  313. package/dist/scan/scanner.d.ts +20 -0
  314. package/dist/scan/scanner.d.ts.map +1 -0
  315. package/dist/{scanner.js → scan/scanner.js} +185 -167
  316. package/dist/scan/scanner.js.map +1 -0
  317. package/dist/verify.d.ts +16 -3
  318. package/dist/verify.d.ts.map +1 -1
  319. package/dist/verify.js +21 -18
  320. package/dist/verify.js.map +1 -1
  321. package/dist/{call.d.ts → wire/call.d.ts} +70 -1
  322. package/dist/wire/call.d.ts.map +1 -0
  323. package/dist/{call.js → wire/call.js} +48 -75
  324. package/dist/wire/call.js.map +1 -0
  325. package/dist/{middleware.d.ts → wire/errors.d.ts} +18 -19
  326. package/dist/wire/errors.d.ts.map +1 -0
  327. package/dist/{middleware.js → wire/errors.js} +26 -14
  328. package/dist/wire/errors.js.map +1 -0
  329. package/dist/{errors.d.ts → wire/http-error.d.ts} +5 -6
  330. package/dist/wire/http-error.d.ts.map +1 -0
  331. package/dist/{errors.js → wire/http-error.js} +7 -6
  332. package/dist/wire/http-error.js.map +1 -0
  333. package/dist/wire/invocation.d.ts +4 -0
  334. package/dist/wire/invocation.d.ts.map +1 -0
  335. package/dist/wire/invocation.js +3 -0
  336. package/dist/wire/invocation.js.map +1 -0
  337. package/dist/{middleware/logger.d.ts → wire/loggerMiddleware.d.ts} +3 -3
  338. package/dist/wire/loggerMiddleware.d.ts.map +1 -0
  339. package/dist/{middleware/logger.js → wire/loggerMiddleware.js} +2 -2
  340. package/dist/wire/loggerMiddleware.js.map +1 -0
  341. package/dist/wire/middleware.d.ts +29 -0
  342. package/dist/wire/middleware.d.ts.map +1 -0
  343. package/dist/wire/middleware.js +20 -0
  344. package/dist/wire/middleware.js.map +1 -0
  345. package/dist/{operation.d.ts → wire/operation.d.ts} +39 -10
  346. package/dist/wire/operation.d.ts.map +1 -0
  347. package/dist/wire/operation.js +167 -0
  348. package/dist/wire/operation.js.map +1 -0
  349. package/package.json +24 -7
  350. package/dist/binding.d.ts.map +0 -1
  351. package/dist/binding.js.map +0 -1
  352. package/dist/boot.d.ts.map +0 -1
  353. package/dist/boot.js +0 -53
  354. package/dist/boot.js.map +0 -1
  355. package/dist/bootstrap.d.ts.map +0 -1
  356. package/dist/bootstrap.js +0 -879
  357. package/dist/bootstrap.js.map +0 -1
  358. package/dist/call.d.ts.map +0 -1
  359. package/dist/call.js.map +0 -1
  360. package/dist/collector.d.ts +0 -28
  361. package/dist/collector.d.ts.map +0 -1
  362. package/dist/collector.js +0 -32
  363. package/dist/collector.js.map +0 -1
  364. package/dist/crud.d.ts.map +0 -1
  365. package/dist/crud.js.map +0 -1
  366. package/dist/egress.d.ts +0 -52
  367. package/dist/egress.d.ts.map +0 -1
  368. package/dist/egress.js +0 -186
  369. package/dist/egress.js.map +0 -1
  370. package/dist/errors.d.ts.map +0 -1
  371. package/dist/errors.js.map +0 -1
  372. package/dist/handler-parser.d.ts.map +0 -1
  373. package/dist/handler-parser.js +0 -505
  374. package/dist/handler-parser.js.map +0 -1
  375. package/dist/invocation.d.ts +0 -20
  376. package/dist/invocation.d.ts.map +0 -1
  377. package/dist/invocation.js +0 -15
  378. package/dist/invocation.js.map +0 -1
  379. package/dist/middleware/error-handler.d.ts +0 -15
  380. package/dist/middleware/error-handler.d.ts.map +0 -1
  381. package/dist/middleware/error-handler.js +0 -29
  382. package/dist/middleware/error-handler.js.map +0 -1
  383. package/dist/middleware/logger.d.ts.map +0 -1
  384. package/dist/middleware/logger.js.map +0 -1
  385. package/dist/middleware.d.ts.map +0 -1
  386. package/dist/middleware.js.map +0 -1
  387. package/dist/mirror.d.ts +0 -93
  388. package/dist/mirror.d.ts.map +0 -1
  389. package/dist/mirror.js +0 -96
  390. package/dist/mirror.js.map +0 -1
  391. package/dist/operation.d.ts.map +0 -1
  392. package/dist/operation.js +0 -95
  393. package/dist/operation.js.map +0 -1
  394. package/dist/presenter.d.ts.map +0 -1
  395. package/dist/presenter.js.map +0 -1
  396. package/dist/remote.d.ts.map +0 -1
  397. package/dist/remote.js.map +0 -1
  398. package/dist/repository.d.ts +0 -55
  399. package/dist/repository.d.ts.map +0 -1
  400. package/dist/repository.js +0 -26
  401. package/dist/repository.js.map +0 -1
  402. package/dist/scan-cache.d.ts +0 -10
  403. package/dist/scan-cache.d.ts.map +0 -1
  404. package/dist/scan-cache.js.map +0 -1
  405. package/dist/scanner.d.ts +0 -34
  406. package/dist/scanner.d.ts.map +0 -1
  407. package/dist/scanner.js.map +0 -1
  408. package/dist/seed.d.ts.map +0 -1
  409. package/dist/seed.js.map +0 -1
  410. package/dist/types.d.ts +0 -421
  411. package/dist/types.d.ts.map +0 -1
  412. package/dist/types.js.map +0 -1
  413. /package/dist/{bootstrap.d.ts → boot/bootstrap.d.ts} +0 -0
  414. /package/dist/{types.js → boot/types.js} +0 -0
@@ -8,8 +8,9 @@
8
8
  * and the answer is cached. A remote that can't be reached stays pending
9
9
  * and is retried on the next miss instead of being cached as absent.
10
10
  */
11
- import type { Transport } from './call.js';
12
- import { type InvocationContext } from './invocation.js';
11
+ import type { Transport } from '../wire/call.js';
12
+ import { type AppMiddleware } from '../wire/middleware.js';
13
+ import { type InvocationContext } from '../wire/invocation.js';
13
14
  import { type SchemaView } from '@fougere/schema';
14
15
  interface Route {
15
16
  frond: string;
@@ -42,7 +43,14 @@ type Facade = Record<string, (invocation?: InvocationContext) => Promise<unknown
42
43
  * lazy on purpose (the card is fetched at the first miss), and the remote is the
43
44
  * authority on its own surface anyway. An op it does not serve comes back as its
44
45
  * NOT_FOUND — judged where it is owned, which is the same answer a local façade gives.
46
+ *
47
+ * It runs the app's middlewares, like `HandlerFacade` does, because "the consumer can't
48
+ * tell it from a local facade" was false of the one thing a consumer installs: measured,
49
+ * `runMiddlewares` had a single caller, so a frond that moved lost every middleware on
50
+ * the calling side — no log, no retry, no cache — from a `remotes:` line alone.
51
+ * The invocation the transport sends is the one the chain leaves behind, so a middleware
52
+ * can still put something on the wire.
45
53
  */
46
- export declare function createRemoteFacade(entity: string, router: RemoteRouter): Facade;
54
+ export declare function createRemoteFacade(entity: string, router: RemoteRouter, middlewaresFor: (address: string) => AppMiddleware[]): Facade;
47
55
  export {};
48
56
  //# sourceMappingURL=remote.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote.d.ts","sourceRoot":"","sources":["../../src/boot/remote.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAa,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5D,OAAO,EAAkB,KAAK,aAAa,EAAyB,MAAM,uBAAuB,CAAC;AAClG,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAEjF,OAAO,EAAe,KAAK,UAAU,EAAyB,MAAM,iBAAiB,CAAC;AAGtF,UAAU,KAAK;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,SAAS,CAAC;IACrB;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;CACvC;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,SAAS,GACxC,YAAY,CAkGd;AAED,KAAK,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,EAAE,iBAAiB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;AAEnF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,YAAY,EACpB,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,aAAa,EAAE,GACnD,MAAM,CAYR"}
@@ -1,7 +1,9 @@
1
- import { RPC_ENTITY } from './call.js';
2
- import { EMPTY_INVOCATION } from './invocation.js';
3
- import { FougereError, ErrorCode } from './middleware.js';
1
+ import { assertIdentityCard, RPC_ENTITY } from '../wire/call.js';
2
+ import { runMiddlewares } from '../wire/middleware.js';
3
+ import { EMPTY_INVOCATION } from '../wire/invocation.js';
4
+ import { FougereError, ErrorCode } from '../wire/errors.js';
4
5
  import { reconstruct } from '@fougere/schema';
6
+ import { DynamicFacade } from '../entry/DynamicFacade.js';
5
7
  export function createRemoteRouter(remotes, makeTransport) {
6
8
  const byEntity = new Map();
7
9
  // The remotes config key is a label for the address — the identity card is
@@ -18,8 +20,10 @@ export function createRemoteRouter(remotes, makeTransport) {
18
20
  const transport = transports.get(url) ?? makeTransport(url);
19
21
  transports.set(url, transport);
20
22
  try {
21
- const card = (await transport({ entity: RPC_ENTITY, op: 'discover' }, EMPTY_INVOCATION));
22
- return { label, transport, card };
23
+ const answer = await transport({ entity: RPC_ENTITY, op: 'discover' }, EMPTY_INVOCATION);
24
+ // Judged below and not here: this catch means "unreachable, retry", and a
25
+ // refusal thrown inside it would be swallowed into another silent retry.
26
+ return { label, url, transport, answer };
23
27
  }
24
28
  catch {
25
29
  // Unreachable — stays pending, retried on the next miss.
@@ -29,8 +33,9 @@ export function createRemoteRouter(remotes, makeTransport) {
29
33
  for (const answered of cards) {
30
34
  if (!answered)
31
35
  continue;
32
- const { label, transport, card } = answered;
36
+ const { label, url, transport, answer } = answered;
33
37
  pending.delete(label);
38
+ const card = assertIdentityCard(answer, `Remote '${label}' (${url})`);
34
39
  for (const frond of card.fronds) {
35
40
  // Doors only. A fact is not routable — nobody calls it, it arrives — so
36
41
  // adding one here would answer a call with a transport to a door that
@@ -94,14 +99,6 @@ export function createRemoteRouter(remotes, makeTransport) {
94
99
  },
95
100
  };
96
101
  }
97
- /**
98
- * Does this name designate an operation at all? `then` is excluded so the façade is
99
- * never mistaken for a thenable, and `Object.prototype`'s own names so `constructor`
100
- * or `toString` cannot be called across the wire.
101
- */
102
- function isOpName(prop) {
103
- return typeof prop === 'string' && prop !== 'then' && !Object.hasOwn(Object.prototype, prop);
104
- }
105
102
  /**
106
103
  * Façade-shaped stand-in — the consumer can't tell it from a local facade.
107
104
  *
@@ -114,22 +111,23 @@ function isOpName(prop) {
114
111
  * lazy on purpose (the card is fetched at the first miss), and the remote is the
115
112
  * authority on its own surface anyway. An op it does not serve comes back as its
116
113
  * NOT_FOUND — judged where it is owned, which is the same answer a local façade gives.
114
+ *
115
+ * It runs the app's middlewares, like `HandlerFacade` does, because "the consumer can't
116
+ * tell it from a local facade" was false of the one thing a consumer installs: measured,
117
+ * `runMiddlewares` had a single caller, so a frond that moved lost every middleware on
118
+ * the calling side — no log, no retry, no cache — from a `remotes:` line alone.
119
+ * The invocation the transport sends is the one the chain leaves behind, so a middleware
120
+ * can still put something on the wire.
117
121
  */
118
- export function createRemoteFacade(entity, router) {
122
+ export function createRemoteFacade(entity, router, middlewaresFor) {
119
123
  const opFn = (op) => async (invocation = EMPTY_INVOCATION) => {
120
124
  const { frond, transport } = await router.route(entity);
121
125
  const call = { frond, entity, op };
122
- return transport(call, invocation);
126
+ const ctx = {
127
+ entity, frond, operation: op, args: [], state: invocation.state, invocation,
128
+ };
129
+ return runMiddlewares(middlewaresFor(entity), ctx, () => transport(call, ctx.invocation ?? invocation));
123
130
  };
124
- return new Proxy({}, {
125
- get: (_target, prop) => (isOpName(prop) ? opFn(prop) : undefined),
126
- has: (_target, prop) => isOpName(prop),
127
- getOwnPropertyDescriptor: (_target, prop) =>
128
- // `configurable: true` is required: a proxy may not report a non-configurable
129
- // property that the target does not actually have.
130
- isOpName(prop)
131
- ? { value: opFn(prop), writable: false, enumerable: true, configurable: true }
132
- : undefined,
133
- });
131
+ return new DynamicFacade(opFn).operations;
134
132
  }
135
133
  //# sourceMappingURL=remote.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote.js","sourceRoot":"","sources":["../../src/boot/remote.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,6 @@
1
- import type { App, FrondDescriptor, SeedEntry } from './types.js';
1
+ import type { FrondDescriptor, SeedEntry } from '../scan/frond.js';
2
+ import type { App } from './types.js';
3
+ import type { Extension } from './AppLifecycle.js';
2
4
  /**
3
5
  * Seeds in dependency order — a `ref()` target is planted before its referrer.
4
6
  *
@@ -25,4 +27,14 @@ export declare function orderSeeds(fronds: FrondDescriptor[]): SeedEntry[];
25
27
  * too many, and the second was the one running in the browser.
26
28
  */
27
29
  export declare function runSeeds(app: App, seeds: SeedEntry[], report?: (message: string) => void): Promise<void>;
30
+ /**
31
+ * The framework's own ascent for rows, named — so a host can REPLACE it rather than take
32
+ * over the whole post-boot to get its own.
33
+ *
34
+ * That is what Nuxt's Nitro plugin had to do: a bundler needs its seed modules spelled out
35
+ * as static imports, so the plugin claimed everything after the boot and its copy of the
36
+ * loop drifted. It now declares an extension under this same name instead, and the delta
37
+ * is one member of a list.
38
+ */
39
+ export declare function seeding(report?: (message: string) => void): Extension;
28
40
  //# sourceMappingURL=seed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seed.d.ts","sourceRoot":"","sources":["../../src/boot/seed.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAe,MAAM,kBAAkB,CAAC;AAChF,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,SAAS,EAAE,CAyCjE;AAQD;;;;;;;GAOG;AACH,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,SAAS,EAAE,EAClB,MAAM,GAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAe,GAC3C,OAAO,CAAC,IAAI,CAAC,CA+Bf;AA0BD;;;;;;;;GAQG;AACH,wBAAgB,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,SAAS,CAQrE"}
@@ -1,3 +1,5 @@
1
+ import { Role } from '@fougere/schema';
2
+ import { facadeKeyOf } from '../wire/call.js';
1
3
  /**
2
4
  * Seeds in dependency order — a `ref()` target is planted before its referrer.
3
5
  *
@@ -20,9 +22,9 @@ export function orderSeeds(fronds) {
20
22
  for (const entity of frond.entities) {
21
23
  const targets = new Set();
22
24
  for (const field of Object.values(entity.entityClass.getFields())) {
23
- if (field.role?.relation?.kind !== 'one')
25
+ if (!Role.of(field).isReference)
24
26
  continue;
25
- const target = field.role.relation.to().name?.toLowerCase();
27
+ const target = Role.of(field).target.name?.toLowerCase();
26
28
  if (target && target !== entity.name.toLowerCase())
27
29
  targets.add(target);
28
30
  }
@@ -93,7 +95,7 @@ export async function runSeeds(app, seeds, report = () => { }) {
93
95
  function doorFor(app, entityName) {
94
96
  let handler;
95
97
  try {
96
- handler = app.resolve(`${entityName}Handler`);
98
+ handler = app.resolve(facadeKeyOf(entityName));
97
99
  }
98
100
  catch { }
99
101
  if (typeof handler?.list === 'function' && typeof handler.create === 'function') {
@@ -107,4 +109,23 @@ function doorFor(app, entityName) {
107
109
  return undefined;
108
110
  return { list: () => orm.list(), write: (item) => orm.create(item) };
109
111
  }
112
+ /**
113
+ * The framework's own ascent for rows, named — so a host can REPLACE it rather than take
114
+ * over the whole post-boot to get its own.
115
+ *
116
+ * That is what Nuxt's Nitro plugin had to do: a bundler needs its seed modules spelled out
117
+ * as static imports, so the plugin claimed everything after the boot and its copy of the
118
+ * loop drifted. It now declares an extension under this same name instead, and the delta
119
+ * is one member of a list.
120
+ */
121
+ export function seeding(report) {
122
+ return {
123
+ name: 'seeds',
124
+ up: async (app) => {
125
+ const seeds = orderSeeds(app.fronds);
126
+ if (seeds.length > 0)
127
+ await runSeeds(app, seeds, report);
128
+ },
129
+ };
130
+ }
110
131
  //# sourceMappingURL=seed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seed.js","sourceRoot":"","sources":["../../src/boot/seed.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { type SchemaView } from '@fougere/schema';
2
+ import type { Container } from '@fougere/container';
3
+ import { type OrmFactory } from '../orm.js';
4
+ import type { Logger } from '../builtins/logger.js';
5
+ import type { ProviderEntry } from '../scan/frond.js';
6
+ /** Everything the boot knows that a frame needs, gathered once for every frond. */
7
+ export interface FrameWorld {
8
+ /** Every entity of every frond, by registration key. A frame crosses fronds by design. */
9
+ entityByName: Map<string, SchemaView>;
10
+ /** Which frond holds an entity — the question `remotes:` turns into a refusal. */
11
+ frondOf: Map<string, string>;
12
+ hostedHere: (frond: string) => boolean;
13
+ ormFactory?: OrmFactory;
14
+ sourceOf?: (entityName: string) => string;
15
+ transacted?: <R>(source: string, fn: (ormFactory: OrmFactory) => Promise<R>) => Promise<R>;
16
+ log: Logger;
17
+ }
18
+ /**
19
+ * Register one frame per key a handler or provider of this frond asked for.
20
+ *
21
+ * Called with the frond's scope, because that is where the asking constructor resolves —
22
+ * while the MEMBERS are looked up app-wide, a frame crossing fronds being the ordinary case
23
+ * rather than the exception (the frond is not the storage boundary; `sources:` is).
24
+ */
25
+ export declare function registerFrames(scope: Container, keys: Iterable<string>, providers: readonly ProviderEntry[], world: FrameWorld): void;
26
+ //# sourceMappingURL=together.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"together.d.ts","sourceRoot":"","sources":["../../src/boot/together.ts"],"names":[],"mappings":"AAUA,OAAO,EAAkC,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAkD,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5F,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAItD,mFAAmF;AACnF,MAAM,WAAW,UAAU;IACzB,0FAA0F;IAC1F,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACtC,kFAAkF;IAClF,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IACvC,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC;IAC1C,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3F,GAAG,EAAE,MAAM,CAAC;CACb;AAqHD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,EACtB,SAAS,EAAE,SAAS,aAAa,EAAE,EACnC,KAAK,EAAE,UAAU,GAChB,IAAI,CAwDN"}
@@ -0,0 +1,163 @@
1
+ /**
2
+ * Building a frame — what a handler asking for `Together<[…]>` receives.
3
+ *
4
+ * The declaration names its members and nothing else; where they live, and therefore
5
+ * which of the two realizations they get, is read HERE and stated at boot. A frame whose
6
+ * members share an engine is a transaction; one whose members are split replays its own
7
+ * inverses (`frame.ts`). Same user code, two guarantees, and the boot says which — the
8
+ * one thing a gradient must never leave to assumption.
9
+ */
10
+ import { ambient } from '#ambient';
11
+ import { classNameOf, registrationKeyOf } from '@fougere/schema';
12
+ import { membersOfTogetherKey, ormKeyOf } from '../orm.js';
13
+ import { guardStorage } from './egress.js';
14
+ import { recording, unwind } from './frame.js';
15
+ /**
16
+ * Each declared name, resolved to what it designates.
17
+ *
18
+ * A name that resolves to nothing is refused rather than skipped: `Together<[Account,
19
+ * Ledgre]>` is a typo whose only other symptom is a frame quietly one member short. The
20
+ * two lists are checked against different registries, which is exactly why the declaration
21
+ * separates them — nothing here has to guess what kind a name is.
22
+ */
23
+ function resolve(names, declared, world) {
24
+ const entities = names.entities.map((member) => {
25
+ const name = registrationKeyOf(member);
26
+ const schema = world.entityByName.get(name);
27
+ if (!schema) {
28
+ throw new Error(`Together<[…${member}…]>: no entity named '${member}' is scanned in this app. ` +
29
+ `The first list names entities; a class of this frond goes in the second.`);
30
+ }
31
+ return { name, schema };
32
+ });
33
+ const providers = names.providers.map((member) => {
34
+ const entry = declared.find((provider) => provider.ctor.name === member);
35
+ if (!entry) {
36
+ throw new Error(`Together<[…], [… ${member} …]>: this frond declares no class named '${member}'. ` +
37
+ `The second list names providers to rebuild inside the frame — a service, a mirror, ` +
38
+ `a repository — so that what they write is covered by the unwind.`);
39
+ }
40
+ return entry;
41
+ });
42
+ return { entities, providers };
43
+ }
44
+ /**
45
+ * A member that cannot write here at all — its frond is hosted elsewhere.
46
+ *
47
+ * Refused rather than compensated: a compensated frame still writes through a local ORM,
48
+ * and a remote frond registers none. There is nothing to record and nothing to undo.
49
+ */
50
+ function refuseRemote(members, world, key) {
51
+ for (const member of members.entities) {
52
+ const frond = world.frondOf.get(member.name);
53
+ if (frond && !world.hostedHere(frond)) {
54
+ throw new Error(`Together<[…]> (${key}): '${member.name}' belongs to frond '${frond}', which this ` +
55
+ `process declares in remotes: — it registers no storage here, so its writes cannot be ` +
56
+ `part of a frame. Host the frond here, or split the work and join the halves with a fact.`);
57
+ }
58
+ }
59
+ }
60
+ /**
61
+ * A provider member writing an entity the frame does not name.
62
+ *
63
+ * The frame does not widen itself to cover it: doing so would pull an entity from another
64
+ * source into the group without anyone writing it down. Named instead, with the one-word fix.
65
+ */
66
+ function refuseUncoveredWrites(members, key) {
67
+ const covered = new Set(members.entities.map((member) => member.name));
68
+ for (const provider of members.providers) {
69
+ for (const dep of provider.deps) {
70
+ if (!dep.endsWith('Orm'))
71
+ continue;
72
+ const entity = registrationKeyOf(dep.slice(0, -'Orm'.length));
73
+ if (covered.has(entity))
74
+ continue;
75
+ throw new Error(`Together<[…]> (${key}): ${provider.ctor.name} writes ${entity}, which is not in the ` +
76
+ `frame's entity list — its writes would escape the unwind. Add it: ` +
77
+ `Together<[…, ${classNameOf(entity)}], [… ${provider.ctor.name} …]>.`);
78
+ }
79
+ }
80
+ }
81
+ /**
82
+ * Open the block: build every member over `factory`, in a scope of their own.
83
+ *
84
+ * The scope is what makes a provider member work without a locator — its ORM keys are
85
+ * registered here, so the container hands it the framed ones through the ordinary
86
+ * constructor. It is disposed when the block ends, whichever way it ended.
87
+ */
88
+ async function inScope(parent, members, factory, wrap, fn) {
89
+ const scope = parent.createScope();
90
+ try {
91
+ const orms = members.entities.map((member) => {
92
+ const orm = wrap(factory(member.schema, member.name), member.name, member.schema);
93
+ scope.registerValue(ormKeyOf(member.name), orm);
94
+ return orm;
95
+ });
96
+ // Providers after every ORM is in place: one may depend on another member's.
97
+ const built = members.providers.map((provider) => {
98
+ scope.register(provider.ctor.name, provider.ctor, { deps: provider.deps });
99
+ return scope.resolve(provider.ctor.name);
100
+ });
101
+ return await fn(orms, built);
102
+ }
103
+ finally {
104
+ await scope.dispose();
105
+ }
106
+ }
107
+ /**
108
+ * Register one frame per key a handler or provider of this frond asked for.
109
+ *
110
+ * Called with the frond's scope, because that is where the asking constructor resolves —
111
+ * while the MEMBERS are looked up app-wide, a frame crossing fronds being the ordinary case
112
+ * rather than the exception (the frond is not the storage boundary; `sources:` is).
113
+ */
114
+ export function registerFrames(scope, keys, providers, world) {
115
+ let registered = 0;
116
+ for (const key of new Set(keys)) {
117
+ const names = membersOfTogetherKey(key);
118
+ if (!names)
119
+ continue;
120
+ registered += 1;
121
+ if (!world.ormFactory) {
122
+ throw new Error(`Together<[${names.entities.join(', ')}]> needs storage, and this boot declares none.`);
123
+ }
124
+ const members = resolve(names, providers, world);
125
+ refuseRemote(members, world, key);
126
+ refuseUncoveredWrites(members, key);
127
+ const sources = new Set(members.entities.map((member) => world.sourceOf?.(member.name) ?? 'db'));
128
+ const judge = (orm, name, schema) => guardStorage(orm, schema.getFields(), name);
129
+ // One engine and a way into it: the engine gives the unwind AND the isolation.
130
+ if (world.transacted && sources.size === 1) {
131
+ const source = [...sources][0];
132
+ world.log.info(`${key} — transaction, source '${source}'`);
133
+ scope.registerValue(key, {
134
+ run: (fn) => ambient.enterFrame(key, () => world.transacted(source, (factory) => inScope(scope, members, factory, judge, fn))),
135
+ });
136
+ continue;
137
+ }
138
+ // Split, or an engine that hands out no transaction: the frame keeps the before-image
139
+ // of every write and replays the inverses itself. `judge` stays OUTSIDE `recording`, so
140
+ // a write the entity refuses never enters the journal.
141
+ const why = sources.size > 1
142
+ ? members.entities.map((m) => `${m.name} in '${world.sourceOf?.(m.name) ?? 'db'}'`).join(', ')
143
+ : 'this storage hands out no transaction';
144
+ world.log.info(`${key} — compensated: ${why} — no isolation`);
145
+ scope.registerValue(key, {
146
+ run: (fn) => ambient.enterFrame(key, async () => {
147
+ const journal = [];
148
+ const record = (orm, name, schema) => judge(recording(orm, name, schema.getFields(), journal), name, schema);
149
+ try {
150
+ return await inScope(scope, members, world.ormFactory, record, fn);
151
+ }
152
+ catch (cause) {
153
+ return unwind(journal, cause, world.log);
154
+ }
155
+ }),
156
+ });
157
+ }
158
+ if (registered > 0 && ambient.degraded) {
159
+ world.log.warn('no async context on this runtime — frames run one at a time, and a frame opened '
160
+ + 'inside another times out instead of being refused');
161
+ }
162
+ }
163
+ //# sourceMappingURL=together.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"together.js","sourceRoot":"","sources":["../../src/boot/together.ts"],"names":[],"mappings":"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"}