@fougere/core 0.6.0-alpha.0 → 0.7.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 (493) hide show
  1. package/README.md +1 -1
  2. package/dist/boot/Emissions.d.ts +13 -90
  3. package/dist/boot/Emissions.d.ts.map +1 -1
  4. package/dist/boot/Emissions.js +21 -118
  5. package/dist/boot/Emissions.js.map +1 -1
  6. package/dist/boot/ambient-port.d.ts +3 -24
  7. package/dist/boot/ambient-port.d.ts.map +1 -1
  8. package/dist/boot/ambient.als.d.ts.map +1 -1
  9. package/dist/boot/ambient.als.js +7 -12
  10. package/dist/boot/ambient.als.js.map +1 -1
  11. package/dist/boot/ambient.queue.d.ts +2 -5
  12. package/dist/boot/ambient.queue.d.ts.map +1 -1
  13. package/dist/boot/ambient.queue.js.map +1 -1
  14. package/dist/boot/apply.d.ts +1 -13
  15. package/dist/boot/apply.d.ts.map +1 -1
  16. package/dist/boot/apply.js +3 -15
  17. package/dist/boot/apply.js.map +1 -1
  18. package/dist/boot/auth.d.ts +2 -12
  19. package/dist/boot/auth.d.ts.map +1 -1
  20. package/dist/boot/boot.d.ts +3 -16
  21. package/dist/boot/boot.d.ts.map +1 -1
  22. package/dist/boot/boot.js +3 -10
  23. package/dist/boot/boot.js.map +1 -1
  24. package/dist/boot/bootstrap.d.ts.map +1 -1
  25. package/dist/boot/bootstrap.js +61 -127
  26. package/dist/boot/bootstrap.js.map +1 -1
  27. package/dist/boot/card.d.ts +1 -17
  28. package/dist/boot/card.d.ts.map +1 -1
  29. package/dist/boot/card.js +3 -32
  30. package/dist/boot/card.js.map +1 -1
  31. package/dist/boot/frame.d.ts +8 -32
  32. package/dist/boot/frame.d.ts.map +1 -1
  33. package/dist/boot/frame.js +20 -54
  34. package/dist/boot/frame.js.map +1 -1
  35. package/dist/boot/hosted.d.ts +2 -24
  36. package/dist/boot/hosted.d.ts.map +1 -1
  37. package/dist/boot/hosted.js +10 -15
  38. package/dist/boot/hosted.js.map +1 -1
  39. package/dist/boot/ownership.d.ts +3 -36
  40. package/dist/boot/ownership.d.ts.map +1 -1
  41. package/dist/boot/ownership.js +5 -40
  42. package/dist/boot/ownership.js.map +1 -1
  43. package/dist/boot/ports.d.ts +1 -14
  44. package/dist/boot/ports.d.ts.map +1 -1
  45. package/dist/boot/ports.js +1 -14
  46. package/dist/boot/ports.js.map +1 -1
  47. package/dist/boot/remote.d.ts +5 -38
  48. package/dist/boot/remote.d.ts.map +1 -1
  49. package/dist/boot/remote.js +8 -41
  50. package/dist/boot/remote.js.map +1 -1
  51. package/dist/boot/runner.d.ts +4 -21
  52. package/dist/boot/runner.d.ts.map +1 -1
  53. package/dist/boot/runner.js +4 -17
  54. package/dist/boot/runner.js.map +1 -1
  55. package/dist/boot/seed.d.ts +4 -31
  56. package/dist/boot/seed.d.ts.map +1 -1
  57. package/dist/boot/seed.js +6 -37
  58. package/dist/boot/seed.js.map +1 -1
  59. package/dist/boot/statement-drift.d.ts +2 -21
  60. package/dist/boot/statement-drift.d.ts.map +1 -1
  61. package/dist/boot/statement-drift.js +4 -9
  62. package/dist/boot/statement-drift.js.map +1 -1
  63. package/dist/boot/together.d.ts +4 -8
  64. package/dist/boot/together.d.ts.map +1 -1
  65. package/dist/boot/together.js +15 -50
  66. package/dist/boot/together.js.map +1 -1
  67. package/dist/boot/types.d.ts +28 -173
  68. package/dist/boot/types.d.ts.map +1 -1
  69. package/dist/builtin/config.d.ts +7 -0
  70. package/dist/builtin/config.d.ts.map +1 -0
  71. package/dist/builtin/config.js +15 -0
  72. package/dist/builtin/config.js.map +1 -0
  73. package/dist/{builtins → builtin}/logger.d.ts +4 -25
  74. package/dist/builtin/logger.d.ts.map +1 -0
  75. package/dist/{builtins → builtin}/logger.js +5 -32
  76. package/dist/builtin/logger.js.map +1 -0
  77. package/dist/config-loader.d.ts +9 -67
  78. package/dist/config-loader.d.ts.map +1 -1
  79. package/dist/config-loader.js +5 -18
  80. package/dist/config-loader.js.map +1 -1
  81. package/dist/contract.d.ts +13 -31
  82. package/dist/contract.d.ts.map +1 -1
  83. package/dist/contract.js +10 -26
  84. package/dist/contract.js.map +1 -1
  85. package/dist/crypto/encoding.d.ts +2 -15
  86. package/dist/crypto/encoding.d.ts.map +1 -1
  87. package/dist/crypto/encoding.js +2 -15
  88. package/dist/crypto/encoding.js.map +1 -1
  89. package/dist/crypto/node.d.ts.map +1 -1
  90. package/dist/crypto/node.js +1 -7
  91. package/dist/crypto/node.js.map +1 -1
  92. package/dist/crypto/port.d.ts +2 -18
  93. package/dist/crypto/port.d.ts.map +1 -1
  94. package/dist/crypto/port.js +1 -17
  95. package/dist/crypto/port.js.map +1 -1
  96. package/dist/crypto/webcrypto.d.ts.map +1 -1
  97. package/dist/crypto/webcrypto.js +1 -12
  98. package/dist/crypto/webcrypto.js.map +1 -1
  99. package/dist/declare.d.ts +6 -36
  100. package/dist/declare.d.ts.map +1 -1
  101. package/dist/declare.js +4 -29
  102. package/dist/declare.js.map +1 -1
  103. package/dist/define.d.ts +2 -3
  104. package/dist/define.d.ts.map +1 -1
  105. package/dist/define.js +2 -3
  106. package/dist/define.js.map +1 -1
  107. package/dist/descriptor/Fronds.d.ts +3 -28
  108. package/dist/descriptor/Fronds.d.ts.map +1 -1
  109. package/dist/descriptor/Fronds.js +6 -31
  110. package/dist/descriptor/Fronds.js.map +1 -1
  111. package/dist/descriptor/frond.d.ts +14 -63
  112. package/dist/descriptor/frond.d.ts.map +1 -1
  113. package/dist/dispatch/ArgumentResolver.d.ts +1 -1
  114. package/dist/dispatch/ArgumentResolver.d.ts.map +1 -1
  115. package/dist/dispatch/ArgumentResolver.js +5 -5
  116. package/dist/dispatch/ArgumentResolver.js.map +1 -1
  117. package/dist/dispatch/DispatchEvent.d.ts +2 -2
  118. package/dist/dispatch/DispatchEvent.d.ts.map +1 -1
  119. package/dist/dispatch/DispatchLifecycle.d.ts +1 -7
  120. package/dist/dispatch/DispatchLifecycle.d.ts.map +1 -1
  121. package/dist/dispatch/DispatchLifecycle.js +1 -7
  122. package/dist/dispatch/DispatchLifecycle.js.map +1 -1
  123. package/dist/dispatch/DispatchPort.d.ts +1 -1
  124. package/dist/dispatch/DispatchPort.d.ts.map +1 -1
  125. package/dist/dispatch/Dispatcher.d.ts +1 -1
  126. package/dist/dispatch/Dispatcher.d.ts.map +1 -1
  127. package/dist/dispatch/Dispatcher.js +2 -2
  128. package/dist/dispatch/Dispatcher.js.map +1 -1
  129. package/dist/{boot → dispatch}/HandlerFacade.d.ts +25 -38
  130. package/dist/dispatch/HandlerFacade.d.ts.map +1 -0
  131. package/dist/{boot → dispatch}/HandlerFacade.js +65 -74
  132. package/dist/dispatch/HandlerFacade.js.map +1 -0
  133. package/dist/dispatch/LocalRoutePolicy.d.ts +1 -1
  134. package/dist/dispatch/LocalRoutePolicy.d.ts.map +1 -1
  135. package/dist/dispatch/LocalRoutePolicy.js +4 -4
  136. package/dist/dispatch/LocalRoutePolicy.js.map +1 -1
  137. package/dist/dispatch/OperationRoute.d.ts +2 -2
  138. package/dist/dispatch/OperationRoute.d.ts.map +1 -1
  139. package/dist/dispatch/OutputView.d.ts +3 -2
  140. package/dist/dispatch/OutputView.d.ts.map +1 -1
  141. package/dist/dispatch/OutputView.js +19 -1
  142. package/dist/dispatch/OutputView.js.map +1 -1
  143. package/dist/dispatch/Route.d.ts +2 -2
  144. package/dist/dispatch/Route.d.ts.map +1 -1
  145. package/dist/dispatch/RoutePolicy.d.ts +1 -1
  146. package/dist/dispatch/RoutePolicy.d.ts.map +1 -1
  147. package/dist/dispatch/RouteRegistry.d.ts +1 -1
  148. package/dist/dispatch/RouteRegistry.d.ts.map +1 -1
  149. package/dist/dispatch/RouteRegistry.js +2 -2
  150. package/dist/dispatch/RouteRegistry.js.map +1 -1
  151. package/dist/dispatch/RouteResolver.d.ts +2 -4
  152. package/dist/dispatch/RouteResolver.d.ts.map +1 -1
  153. package/dist/dispatch/StorageGuard.d.ts +8 -7
  154. package/dist/dispatch/StorageGuard.d.ts.map +1 -1
  155. package/dist/dispatch/StorageGuard.js +61 -18
  156. package/dist/dispatch/StorageGuard.js.map +1 -1
  157. package/dist/dispatch/presenterArguments.d.ts +7 -0
  158. package/dist/dispatch/presenterArguments.d.ts.map +1 -0
  159. package/dist/dispatch/presenterArguments.js +12 -0
  160. package/dist/dispatch/presenterArguments.js.map +1 -0
  161. package/dist/dispatch/remoteRoutes.d.ts +7 -0
  162. package/dist/dispatch/remoteRoutes.d.ts.map +1 -0
  163. package/dist/dispatch/{RemoteRouteResolver.js → remoteRoutes.js} +6 -10
  164. package/dist/dispatch/remoteRoutes.js.map +1 -0
  165. package/dist/dispatch/routeNotFound.d.ts +9 -0
  166. package/dist/dispatch/routeNotFound.d.ts.map +1 -0
  167. package/dist/dispatch/routeNotFound.js +21 -0
  168. package/dist/dispatch/routeNotFound.js.map +1 -0
  169. package/dist/dispatch/validateInput.d.ts +5 -0
  170. package/dist/dispatch/validateInput.d.ts.map +1 -0
  171. package/dist/dispatch/validateInput.js +20 -0
  172. package/dist/dispatch/validateInput.js.map +1 -0
  173. package/dist/effective-operation.d.ts +1 -24
  174. package/dist/effective-operation.d.ts.map +1 -1
  175. package/dist/effective-operation.js +21 -50
  176. package/dist/effective-operation.js.map +1 -1
  177. package/dist/emit.d.ts +4 -42
  178. package/dist/emit.d.ts.map +1 -1
  179. package/dist/emit.js +3 -39
  180. package/dist/emit.js.map +1 -1
  181. package/dist/entry/facade.d.ts +8 -0
  182. package/dist/entry/facade.d.ts.map +1 -0
  183. package/dist/entry/facade.js +28 -0
  184. package/dist/entry/facade.js.map +1 -0
  185. package/dist/entry/transport.d.ts +5 -0
  186. package/dist/entry/transport.d.ts.map +1 -0
  187. package/dist/entry/transport.js +11 -0
  188. package/dist/entry/transport.js.map +1 -0
  189. package/dist/frond-config.d.ts +7 -70
  190. package/dist/frond-config.d.ts.map +1 -1
  191. package/dist/frond-config.js +1 -9
  192. package/dist/frond-config.js.map +1 -1
  193. package/dist/identity-keys.d.ts +2 -5
  194. package/dist/identity-keys.d.ts.map +1 -1
  195. package/dist/identity-keys.js +3 -16
  196. package/dist/identity-keys.js.map +1 -1
  197. package/dist/identity.d.ts +4 -30
  198. package/dist/identity.d.ts.map +1 -1
  199. package/dist/identity.js +11 -73
  200. package/dist/identity.js.map +1 -1
  201. package/dist/imports.d.ts +1 -7
  202. package/dist/imports.d.ts.map +1 -1
  203. package/dist/imports.js +1 -7
  204. package/dist/imports.js.map +1 -1
  205. package/dist/index.d.ts +17 -24
  206. package/dist/index.d.ts.map +1 -1
  207. package/dist/index.js +10 -18
  208. package/dist/index.js.map +1 -1
  209. package/dist/loader.d.ts +1 -8
  210. package/dist/loader.d.ts.map +1 -1
  211. package/dist/loader.js +1 -8
  212. package/dist/loader.js.map +1 -1
  213. package/dist/node.d.ts +2 -11
  214. package/dist/node.d.ts.map +1 -1
  215. package/dist/node.js +2 -11
  216. package/dist/node.js.map +1 -1
  217. package/dist/prefab/collector.d.ts +1 -22
  218. package/dist/prefab/collector.d.ts.map +1 -1
  219. package/dist/prefab/collector.js +1 -22
  220. package/dist/prefab/collector.js.map +1 -1
  221. package/dist/prefab/crud.d.ts +16 -32
  222. package/dist/prefab/crud.d.ts.map +1 -1
  223. package/dist/prefab/crud.js +31 -58
  224. package/dist/prefab/crud.js.map +1 -1
  225. package/dist/prefab/mirror.d.ts +2 -24
  226. package/dist/prefab/mirror.d.ts.map +1 -1
  227. package/dist/prefab/mirror.js +2 -20
  228. package/dist/prefab/mirror.js.map +1 -1
  229. package/dist/prefab/prefab.d.ts +1 -7
  230. package/dist/prefab/prefab.d.ts.map +1 -1
  231. package/dist/prefab/prefab.js +1 -7
  232. package/dist/prefab/prefab.js.map +1 -1
  233. package/dist/prefab/presenter.d.ts +2 -36
  234. package/dist/prefab/presenter.d.ts.map +1 -1
  235. package/dist/prefab/presenter.js +2 -36
  236. package/dist/prefab/presenter.js.map +1 -1
  237. package/dist/prefab/repository.d.ts +5 -73
  238. package/dist/prefab/repository.d.ts.map +1 -1
  239. package/dist/prefab/repository.js +3 -16
  240. package/dist/prefab/repository.js.map +1 -1
  241. package/dist/scan/adapters.d.ts +3 -0
  242. package/dist/scan/adapters.d.ts.map +1 -0
  243. package/dist/scan/adapters.js +25 -0
  244. package/dist/scan/adapters.js.map +1 -0
  245. package/dist/scan/bundling.d.ts +1 -12
  246. package/dist/scan/bundling.d.ts.map +1 -1
  247. package/dist/scan/bundling.js +1 -12
  248. package/dist/scan/bundling.js.map +1 -1
  249. package/dist/scan/conventions.d.ts +6 -40
  250. package/dist/scan/conventions.d.ts.map +1 -1
  251. package/dist/scan/conventions.js +5 -34
  252. package/dist/scan/conventions.js.map +1 -1
  253. package/dist/scan/emit.d.ts +1 -5
  254. package/dist/scan/emit.d.ts.map +1 -1
  255. package/dist/scan/emit.js +4 -38
  256. package/dist/scan/emit.js.map +1 -1
  257. package/dist/scan/handler-parser.d.ts +4 -26
  258. package/dist/scan/handler-parser.d.ts.map +1 -1
  259. package/dist/scan/handler-parser.js +26 -83
  260. package/dist/scan/handler-parser.js.map +1 -1
  261. package/dist/scan/result.d.ts +3 -16
  262. package/dist/scan/result.d.ts.map +1 -1
  263. package/dist/scan/scanner.d.ts +2 -27
  264. package/dist/scan/scanner.d.ts.map +1 -1
  265. package/dist/scan/scanner.js +28 -127
  266. package/dist/scan/scanner.js.map +1 -1
  267. package/dist/scan/statement.d.ts.map +1 -1
  268. package/dist/scan/statement.js +4 -30
  269. package/dist/scan/statement.js.map +1 -1
  270. package/dist/source.d.ts +41 -0
  271. package/dist/source.d.ts.map +1 -0
  272. package/dist/source.js +10 -0
  273. package/dist/source.js.map +1 -0
  274. package/dist/storage.d.ts +13 -210
  275. package/dist/storage.d.ts.map +1 -1
  276. package/dist/storage.js +4 -68
  277. package/dist/storage.js.map +1 -1
  278. package/dist/store.d.ts +18 -0
  279. package/dist/store.d.ts.map +1 -0
  280. package/dist/store.js +146 -0
  281. package/dist/store.js.map +1 -0
  282. package/dist/verify.d.ts +5 -38
  283. package/dist/verify.d.ts.map +1 -1
  284. package/dist/verify.js +17 -37
  285. package/dist/verify.js.map +1 -1
  286. package/dist/wire/CallLog.d.ts +32 -0
  287. package/dist/wire/CallLog.d.ts.map +1 -0
  288. package/dist/{contract → wire}/CallLog.js.map +1 -1
  289. package/dist/wire/Invocation.d.ts +32 -0
  290. package/dist/wire/Invocation.d.ts.map +1 -0
  291. package/dist/wire/Invocation.js +66 -0
  292. package/dist/wire/Invocation.js.map +1 -0
  293. package/dist/{contract → wire}/RouteAddress.d.ts +5 -0
  294. package/dist/wire/RouteAddress.d.ts.map +1 -0
  295. package/dist/{contract → wire}/RouteAddress.js +7 -0
  296. package/dist/wire/RouteAddress.js.map +1 -0
  297. package/dist/wire/binding.d.ts +5 -21
  298. package/dist/wire/binding.d.ts.map +1 -1
  299. package/dist/wire/binding.js +5 -10
  300. package/dist/wire/binding.js.map +1 -1
  301. package/dist/wire/call.d.ts +24 -133
  302. package/dist/wire/call.d.ts.map +1 -1
  303. package/dist/wire/call.js +15 -41
  304. package/dist/wire/call.js.map +1 -1
  305. package/dist/wire/drift.d.ts +3 -28
  306. package/dist/wire/drift.d.ts.map +1 -1
  307. package/dist/wire/drift.js +4 -23
  308. package/dist/wire/drift.js.map +1 -1
  309. package/dist/wire/errors.d.ts +4 -24
  310. package/dist/wire/errors.d.ts.map +1 -1
  311. package/dist/wire/errors.js +4 -24
  312. package/dist/wire/errors.js.map +1 -1
  313. package/dist/wire/http-error.d.ts +2 -13
  314. package/dist/wire/http-error.d.ts.map +1 -1
  315. package/dist/wire/http-error.js +5 -19
  316. package/dist/wire/http-error.js.map +1 -1
  317. package/dist/wire/loggerMiddleware.d.ts +2 -8
  318. package/dist/wire/loggerMiddleware.d.ts.map +1 -1
  319. package/dist/wire/loggerMiddleware.js +1 -7
  320. package/dist/wire/loggerMiddleware.js.map +1 -1
  321. package/dist/wire/middleware.d.ts +3 -7
  322. package/dist/wire/middleware.d.ts.map +1 -1
  323. package/dist/wire/middleware.js +1 -5
  324. package/dist/wire/middleware.js.map +1 -1
  325. package/dist/wire/operation.d.ts +7 -43
  326. package/dist/wire/operation.d.ts.map +1 -1
  327. package/dist/wire/operation.js +4 -15
  328. package/dist/wire/operation.js.map +1 -1
  329. package/dist/wire/signature.d.ts +4 -25
  330. package/dist/wire/signature.d.ts.map +1 -1
  331. package/package.json +3 -3
  332. package/src/boot/Emissions.ts +21 -118
  333. package/src/boot/ambient-port.ts +3 -24
  334. package/src/boot/ambient.als.ts +7 -12
  335. package/src/boot/ambient.queue.ts +2 -5
  336. package/src/boot/apply.ts +3 -15
  337. package/src/boot/auth.ts +2 -12
  338. package/src/boot/boot.ts +5 -20
  339. package/src/boot/bootstrap.ts +69 -136
  340. package/src/boot/card.ts +4 -33
  341. package/src/boot/frame.ts +28 -62
  342. package/src/boot/hosted.ts +12 -34
  343. package/src/boot/ownership.ts +5 -39
  344. package/src/boot/ports.ts +1 -14
  345. package/src/boot/remote.ts +11 -58
  346. package/src/boot/runner.ts +5 -22
  347. package/src/boot/seed.ts +6 -37
  348. package/src/boot/statement-drift.ts +5 -24
  349. package/src/boot/together.ts +18 -51
  350. package/src/boot/types.ts +28 -173
  351. package/src/{builtins → builtin}/config.ts +1 -7
  352. package/src/{builtins → builtin}/logger.ts +6 -39
  353. package/src/config-loader.ts +12 -71
  354. package/src/contract.ts +15 -39
  355. package/src/crypto/encoding.ts +2 -15
  356. package/src/crypto/node.ts +1 -7
  357. package/src/crypto/port.ts +2 -18
  358. package/src/crypto/webcrypto.ts +1 -12
  359. package/src/declare.ts +8 -39
  360. package/src/define.ts +2 -3
  361. package/src/descriptor/Fronds.ts +6 -31
  362. package/src/descriptor/frond.ts +14 -63
  363. package/src/dispatch/ArgumentResolver.ts +6 -6
  364. package/src/dispatch/DispatchEvent.ts +2 -2
  365. package/src/dispatch/DispatchLifecycle.ts +1 -7
  366. package/src/dispatch/DispatchPort.ts +1 -1
  367. package/src/dispatch/Dispatcher.ts +3 -3
  368. package/src/dispatch/HandlerFacade.ts +231 -0
  369. package/src/dispatch/LocalRoutePolicy.ts +4 -4
  370. package/src/dispatch/OperationRoute.ts +2 -2
  371. package/src/dispatch/OutputView.ts +24 -2
  372. package/src/dispatch/Route.ts +2 -2
  373. package/src/dispatch/RoutePolicy.ts +1 -1
  374. package/src/dispatch/RouteRegistry.ts +2 -2
  375. package/src/dispatch/RouteResolver.ts +2 -4
  376. package/src/dispatch/StorageGuard.ts +70 -18
  377. package/src/dispatch/presenterArguments.ts +25 -0
  378. package/src/dispatch/{RemoteRouteResolver.ts → remoteRoutes.ts} +7 -9
  379. package/src/dispatch/routeNotFound.ts +33 -0
  380. package/src/dispatch/validateInput.ts +28 -0
  381. package/src/effective-operation.ts +21 -50
  382. package/src/emit.ts +5 -63
  383. package/src/entry/facade.ts +44 -0
  384. package/src/entry/transport.ts +16 -0
  385. package/src/frond-config.ts +7 -70
  386. package/src/identity-keys.ts +3 -16
  387. package/src/identity.ts +12 -80
  388. package/src/imports.ts +2 -31
  389. package/src/index.ts +17 -24
  390. package/src/loader.ts +2 -16
  391. package/src/node.ts +2 -11
  392. package/src/prefab/collector.ts +1 -22
  393. package/src/prefab/crud.ts +37 -76
  394. package/src/prefab/mirror.ts +4 -44
  395. package/src/prefab/prefab.ts +2 -21
  396. package/src/prefab/presenter.ts +2 -36
  397. package/src/prefab/repository.ts +7 -83
  398. package/src/scan/adapters.ts +32 -0
  399. package/src/scan/bundling.ts +1 -12
  400. package/src/scan/conventions.ts +6 -40
  401. package/src/scan/emit.ts +4 -38
  402. package/src/scan/handler-parser.ts +27 -96
  403. package/src/scan/result.ts +3 -16
  404. package/src/scan/scanner.ts +27 -126
  405. package/src/scan/statement.ts +4 -30
  406. package/src/source.ts +44 -0
  407. package/src/storage.ts +14 -234
  408. package/src/store.ts +152 -0
  409. package/src/verify.ts +16 -57
  410. package/src/wire/CallLog.ts +30 -0
  411. package/src/{contract → wire}/Invocation.ts +24 -17
  412. package/src/{contract → wire}/RouteAddress.ts +7 -0
  413. package/src/wire/binding.ts +9 -25
  414. package/src/wire/call.ts +30 -133
  415. package/src/wire/drift.ts +5 -30
  416. package/src/wire/errors.ts +4 -24
  417. package/src/wire/http-error.ts +5 -19
  418. package/src/wire/loggerMiddleware.ts +2 -8
  419. package/src/wire/middleware.ts +3 -7
  420. package/src/wire/operation.ts +8 -48
  421. package/src/wire/signature.ts +4 -25
  422. package/dist/boot/HandlerFacade.d.ts.map +0 -1
  423. package/dist/boot/HandlerFacade.js.map +0 -1
  424. package/dist/builtins/config.d.ts +0 -13
  425. package/dist/builtins/config.d.ts.map +0 -1
  426. package/dist/builtins/config.js +0 -21
  427. package/dist/builtins/config.js.map +0 -1
  428. package/dist/builtins/logger.d.ts.map +0 -1
  429. package/dist/builtins/logger.js.map +0 -1
  430. package/dist/contract/Call.d.ts +0 -10
  431. package/dist/contract/Call.d.ts.map +0 -1
  432. package/dist/contract/Call.js +0 -15
  433. package/dist/contract/Call.js.map +0 -1
  434. package/dist/contract/CallLog.d.ts +0 -57
  435. package/dist/contract/CallLog.d.ts.map +0 -1
  436. package/dist/contract/Invocation.d.ts +0 -27
  437. package/dist/contract/Invocation.d.ts.map +0 -1
  438. package/dist/contract/Invocation.js +0 -59
  439. package/dist/contract/Invocation.js.map +0 -1
  440. package/dist/contract/RouteAddress.d.ts.map +0 -1
  441. package/dist/contract/RouteAddress.js.map +0 -1
  442. package/dist/dispatch/InputValidator.d.ts +0 -7
  443. package/dist/dispatch/InputValidator.d.ts.map +0 -1
  444. package/dist/dispatch/InputValidator.js +0 -22
  445. package/dist/dispatch/InputValidator.js.map +0 -1
  446. package/dist/dispatch/OperationExecutor.d.ts +0 -25
  447. package/dist/dispatch/OperationExecutor.d.ts.map +0 -1
  448. package/dist/dispatch/OperationExecutor.js +0 -32
  449. package/dist/dispatch/OperationExecutor.js.map +0 -1
  450. package/dist/dispatch/OutputProjector.d.ts +0 -12
  451. package/dist/dispatch/OutputProjector.d.ts.map +0 -1
  452. package/dist/dispatch/OutputProjector.js +0 -30
  453. package/dist/dispatch/OutputProjector.js.map +0 -1
  454. package/dist/dispatch/PresenterArgumentResolver.d.ts +0 -12
  455. package/dist/dispatch/PresenterArgumentResolver.d.ts.map +0 -1
  456. package/dist/dispatch/PresenterArgumentResolver.js +0 -20
  457. package/dist/dispatch/PresenterArgumentResolver.js.map +0 -1
  458. package/dist/dispatch/RemoteRouteResolver.d.ts +0 -13
  459. package/dist/dispatch/RemoteRouteResolver.d.ts.map +0 -1
  460. package/dist/dispatch/RemoteRouteResolver.js.map +0 -1
  461. package/dist/dispatch/RouteNotFoundError.d.ts +0 -10
  462. package/dist/dispatch/RouteNotFoundError.d.ts.map +0 -1
  463. package/dist/dispatch/RouteNotFoundError.js +0 -24
  464. package/dist/dispatch/RouteNotFoundError.js.map +0 -1
  465. package/dist/entry/DynamicFacade.d.ts +0 -10
  466. package/dist/entry/DynamicFacade.d.ts.map +0 -1
  467. package/dist/entry/DynamicFacade.js +0 -27
  468. package/dist/entry/DynamicFacade.js.map +0 -1
  469. package/dist/entry/FacadeEntry.d.ts +0 -11
  470. package/dist/entry/FacadeEntry.d.ts.map +0 -1
  471. package/dist/entry/FacadeEntry.js +0 -26
  472. package/dist/entry/FacadeEntry.js.map +0 -1
  473. package/dist/entry/TransportEntry.d.ts +0 -13
  474. package/dist/entry/TransportEntry.d.ts.map +0 -1
  475. package/dist/entry/TransportEntry.js +0 -24
  476. package/dist/entry/TransportEntry.js.map +0 -1
  477. package/dist/rows.d.ts +0 -40
  478. package/dist/rows.d.ts.map +0 -1
  479. package/dist/rows.js +0 -146
  480. package/dist/rows.js.map +0 -1
  481. package/src/boot/HandlerFacade.ts +0 -242
  482. package/src/contract/Call.ts +0 -18
  483. package/src/contract/CallLog.ts +0 -55
  484. package/src/dispatch/InputValidator.ts +0 -28
  485. package/src/dispatch/OperationExecutor.ts +0 -60
  486. package/src/dispatch/OutputProjector.ts +0 -32
  487. package/src/dispatch/PresenterArgumentResolver.ts +0 -25
  488. package/src/dispatch/RouteNotFoundError.ts +0 -29
  489. package/src/entry/DynamicFacade.ts +0 -28
  490. package/src/entry/FacadeEntry.ts +0 -32
  491. package/src/entry/TransportEntry.ts +0 -30
  492. package/src/rows.ts +0 -155
  493. /package/dist/{contract → wire}/CallLog.js +0 -0
@@ -1,39 +1,34 @@
1
- import { lowerFirst } from '@fougere/schema';
1
+ import { runMiddlewares, } from '../wire/middleware.js';
2
2
  import { collectorKeyOf } from '../prefab/collector.js';
3
+ import { inheritsCrud, subjectOf } from '../prefab/crud.js';
3
4
  import { presenterKeyOf } from '../prefab/presenter.js';
4
5
  import { repositoryKeyOf } from '../prefab/repository.js';
5
- import { targetOf } from '../prefab/prefab.js';
6
- import { InputValidator } from '../dispatch/InputValidator.js';
7
- import { ArgumentResolver } from '../dispatch/ArgumentResolver.js';
8
- import { OperationExecutor } from '../dispatch/OperationExecutor.js';
9
- import { OutputProjector } from '../dispatch/OutputProjector.js';
10
- import { OutputView } from '../dispatch/OutputView.js';
11
- import { PresenterExecutor } from '../dispatch/PresenterExecutor.js';
12
- import { PresenterArgumentResolver } from '../dispatch/PresenterArgumentResolver.js';
6
+ import { canonicalInvocation } from '../wire/Invocation.js';
7
+ import { ArgumentResolver } from './ArgumentResolver.js';
8
+ import { OutputView } from './OutputView.js';
9
+ import { PresenterExecutor } from './PresenterExecutor.js';
10
+ import { presenterArguments } from './presenterArguments.js';
11
+ import { validateInput } from './validateInput.js';
13
12
  /** Adapts one handler door to executable operations. */
14
13
  export class HandlerFacade {
14
+ handler;
15
+ scope;
15
16
  door;
16
- wiring;
17
17
  /** Rich operation facts shared with check, explain and adapters. */
18
18
  effectiveOperations;
19
19
  /** Contracts served by this door. */
20
20
  contracts;
21
- /** The callable surface: op name → the function a caller reaches. */
22
- ops = {};
23
21
  cachedViews = new Map();
24
22
  instance;
25
23
  implementationKeys = new Map();
26
24
  implementationInstances = new Map();
27
- inputValidator = new InputValidator();
28
- argumentResolver = new ArgumentResolver((typeName) => this.collectorResolver(typeName));
29
- presenterArguments;
30
- constructor(door, wiring) {
25
+ arguments = new ArgumentResolver((typeName) => this.collectorResolver(typeName));
26
+ constructor(handler, scope, door) {
27
+ this.handler = handler;
28
+ this.scope = scope;
31
29
  this.door = door;
32
- this.wiring = wiring;
33
- const { handler, entity } = door;
34
- this.presenterArguments = new PresenterArgumentResolver(this.argumentResolver, wiring.collectors);
35
30
  this.refuseCrudWithoutRepository(handler);
36
- door.scope.register(this.handlerKey, handler.ctor, { deps: this.depsOf(handler) });
31
+ scope.register(this.handlerKey, handler.ctor, { deps: this.depsOf(handler) });
37
32
  this.effectiveOperations = door.operations;
38
33
  this.contracts = new Map([...door.operations].map(([name, operation]) => [name, operation]));
39
34
  handler.operations = this.contracts;
@@ -45,29 +40,47 @@ export class HandlerFacade {
45
40
  this.refuseCrudWithoutRepository(implementation);
46
41
  const key = `${this.handlerKey}:implementation:${operation.implementation.className}`;
47
42
  if (!this.implementationKeys.has(operation.implementation.className)) {
48
- door.scope.register(key, implementation.ctor, { deps: this.depsOf(implementation) });
43
+ scope.register(key, implementation.ctor, { deps: this.depsOf(implementation) });
49
44
  this.implementationKeys.set(operation.implementation.className, key);
50
45
  }
51
46
  }
52
- // Emissions use the same contracts and execution path as direct calls.
53
- wiring.emissions.note(this.contracts, door.key);
54
- // Only declared operations become callable façade members.
55
- for (const op of this.contracts.keys())
56
- this.ops[op] = this.wrap(op);
57
- if (this.inheritsCrud(handler) && !entity) {
58
- // An installed Crud subject may be absent from the local scan.
59
- wiring.log.debug(`${handler.ctor.name} extends Crud() and no scanned entity is named `
60
- + `'${this.subjectOf(handler)}' — installed entity, or a missing one: no storage will be injected`);
61
- }
62
47
  }
63
- /** Storage follows the Crud subject, which may differ from the door address. */
64
- subjectOf(handler) {
65
- const target = targetOf(handler.ctor);
66
- return target?.name ? lowerFirst(target.name) : handler.address;
48
+ /** One operation, through the same ordered boundary steps on every route. */
49
+ async execute(op, input) {
50
+ const entity = this.handler.address;
51
+ const contract = this.contracts.get(op);
52
+ if (!contract) {
53
+ throw new Error(`${entity} serves no operation '${op}'. `
54
+ + `It serves ${[...this.contracts.keys()].join(', ')}.`);
55
+ }
56
+ const invocation = canonicalInvocation(input);
57
+ const context = {
58
+ entity,
59
+ frond: this.door.frond,
60
+ operation: op,
61
+ args: [],
62
+ state: invocation.state,
63
+ invocation,
64
+ };
65
+ return runMiddlewares(this.door.middlewares(), context, async () => {
66
+ const validated = validateInput(contract.input, invocation, entity, op);
67
+ context.invocation = validated;
68
+ const args = contract.binding
69
+ ? await this.arguments.resolve(contract.binding, validated)
70
+ : [];
71
+ const { instance, method } = this.resolveImplementation(op);
72
+ const view = this.viewOf(op);
73
+ const output = view.project(await instance[method](...args));
74
+ const { presenter } = this.door;
75
+ return view.closed || !presenter ? output : this.present(op, presenter, output, validated);
76
+ });
67
77
  }
68
- inheritsCrud(handler) {
69
- const proto = handler.ctor.prototype;
70
- return typeof proto?.list === 'function' && typeof proto?.findById === 'function';
78
+ /** The computed fields a presenter adds, over the page the façade just projected. */
79
+ present(op, presenter, output, invocation) {
80
+ const entity = this.handler.address;
81
+ const executor = new PresenterExecutor(this.door.presenterScope.resolve(presenterKeyOf(entity)), presenter.fields, entity, op);
82
+ return presenterArguments(presenter, invocation, this.arguments, this.door.collectors)
83
+ .then((args) => executor.present(output, args));
71
84
  }
72
85
  get handlerKey() {
73
86
  return `_handler:${this.door.key}`;
@@ -76,12 +89,14 @@ export class HandlerFacade {
76
89
  const { deps } = handler;
77
90
  if (deps.length > 0)
78
91
  return deps;
79
- return this.inheritsCrud(handler) ? [repositoryKeyOf(this.subjectOf(handler))] : [];
92
+ return inheritsCrud(handler.ctor)
93
+ ? [repositoryKeyOf(subjectOf(handler.ctor, handler.address))]
94
+ : [];
80
95
  }
81
96
  /** A custom Crud constructor must explicitly receive its repository. */
82
97
  refuseCrudWithoutRepository(handler) {
83
- const repoTypeName = repositoryKeyOf(this.subjectOf(handler));
84
- if (!this.inheritsCrud(handler) || handler.deps.length === 0 || handler.deps.includes(repoTypeName))
98
+ const repoTypeName = repositoryKeyOf(subjectOf(handler.ctor, handler.address));
99
+ if (!inheritsCrud(handler.ctor) || handler.deps.length === 0 || handler.deps.includes(repoTypeName))
85
100
  return;
86
101
  throw new Error(`${handler.ctor.name} extends Crud() and declares a constructor, so its storage is no ` +
87
102
  `longer injected for it — but it does not take any.\n` +
@@ -101,22 +116,22 @@ export class HandlerFacade {
101
116
  }
102
117
  collectorResolver = (typeName) => {
103
118
  try {
104
- return this.door.scope.resolve(collectorKeyOf(typeName));
119
+ return this.scope.resolve(collectorKeyOf(typeName));
105
120
  }
106
121
  catch {
107
122
  return undefined;
108
123
  }
109
124
  };
110
125
  /** The handler itself, resolved on first call — never at boot. */
111
- resolvedHandler() {
126
+ resolveHandler() {
112
127
  if (!this.instance)
113
- this.instance = this.door.scope.resolve(this.handlerKey);
128
+ this.instance = this.scope.resolve(this.handlerKey);
114
129
  return this.instance;
115
130
  }
116
131
  isBaseImplementation(operation) {
117
- return operation.implementation.className === this.door.handler.ctor.name
118
- && operation.implementation.address === this.door.handler.address
119
- && operation.implementation.filePath === this.door.handler.filePath;
132
+ return operation.implementation.className === this.handler.ctor.name
133
+ && operation.implementation.address === this.handler.address
134
+ && operation.implementation.filePath === this.handler.filePath;
120
135
  }
121
136
  /** The exact handler entry the pure model selected; no name-only retry or fallback. */
122
137
  implementationHandler(operationName) {
@@ -130,10 +145,10 @@ export class HandlerFacade {
130
145
  }
131
146
  return matches[0];
132
147
  }
133
- resolvedImplementation(operationName) {
148
+ resolveImplementation(operationName) {
134
149
  const operation = this.effectiveOperations.get(operationName);
135
150
  if (this.isBaseImplementation(operation)) {
136
- return { instance: this.resolvedHandler(), method: operation.implementation.method };
151
+ return { instance: this.resolveHandler(), method: operation.implementation.method };
137
152
  }
138
153
  const className = operation.implementation.className;
139
154
  const key = this.implementationKeys.get(className);
@@ -141,34 +156,10 @@ export class HandlerFacade {
141
156
  throw new Error(`No registered implementation for EffectiveOperation '${operation.id}'.`);
142
157
  let instance = this.implementationInstances.get(key);
143
158
  if (!instance) {
144
- instance = this.door.scope.resolve(key);
159
+ instance = this.scope.resolve(key);
145
160
  this.implementationInstances.set(key, instance);
146
161
  }
147
162
  return { instance, method: operation.implementation.method };
148
163
  }
149
- wrap(op) {
150
- const address = this.door.handler.address;
151
- const contract = this.contracts.get(op);
152
- const view = this.viewOf(op);
153
- const presenter = this.wiring.presenters.get(address);
154
- const executor = new OperationExecutor({
155
- entity: address,
156
- frond: this.wiring.frond,
157
- operation: op,
158
- contract,
159
- middlewares: () => this.wiring.middlewaresFor(address),
160
- validator: this.inputValidator,
161
- arguments: this.argumentResolver,
162
- invoke: async (args) => {
163
- const implementation = this.resolvedImplementation(op);
164
- return implementation.instance[implementation.method](...args);
165
- },
166
- projector: new OutputProjector(view),
167
- ...(view.closed || !presenter ? {} : {
168
- present: async (result, effective) => new PresenterExecutor(this.wiring.frondScope.resolve(presenterKeyOf(address)), presenter.fields, address, op).present(result, await this.presenterArguments.resolve(presenter, effective)),
169
- }),
170
- });
171
- return (invocation) => executor.execute(invocation);
172
- }
173
164
  }
174
165
  //# sourceMappingURL=HandlerFacade.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HandlerFacade.js","sourceRoot":"","sources":["../../src/dispatch/HandlerFacade.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,cAAc,GAGf,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG1D,OAAO,EAAE,mBAAmB,EAA0B,MAAM,uBAAuB,CAAC;AAEpF,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAsBnD,wDAAwD;AACxD,MAAM,OAAO,aAAa;IAeL;IACA;IACA;IAhBnB,oEAAoE;IAC3D,mBAAmB,CAAyB;IACrD,qCAAqC;IAC5B,SAAS,CAAgB;IAEjB,WAAW,GAAG,IAAI,GAAG,EAAsB,CAAC;IACrD,QAAQ,CAAM;IACL,kBAAkB,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC/C,uBAAuB,GAAG,IAAI,GAAG,EAAe,CAAC;IACjD,SAAS,GAAG,IAAI,gBAAgB,CAC/C,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAC/C,CAAC;IAEF,YACmB,OAAqB,EACrB,KAAgB,EAChB,IAAU;QAFV,YAAO,GAAP,OAAO,CAAc;QACrB,UAAK,GAAL,KAAK,CAAW;QAChB,SAAI,GAAJ,IAAI,CAAM;QAE3B,IAAI,CAAC,2BAA2B,CAAC,OAAO,CAAC,CAAC;QAE1C,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAE9E,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,UAAU,CAAC;QAC3C,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,CACtB,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,SAA8B,CAAU,CAAC,CACjG,CAAC;QACF,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC;QAEpC,uEAAuE;QACvE,KAAK,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAChD,IAAI,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC;gBAAE,SAAS;YACnD,MAAM,cAAc,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;YACxD,IAAI,CAAC,2BAA2B,CAAC,cAAc,CAAC,CAAC;YACjD,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,UAAU,mBAAmB,SAAS,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;YACtF,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC;gBACrE,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;gBAChF,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,cAAc,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YACvE,CAAC;QACH,CAAC;IACH,CAAC;IAED,6EAA6E;IAC7E,KAAK,CAAC,OAAO,CAAC,EAAU,EAAE,KAAkC;QAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACxC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CACb,GAAG,MAAM,yBAAyB,EAAE,KAAK;kBACvC,aAAa,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACxD,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAqB;YAChC,MAAM;YACN,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK;YACtB,SAAS,EAAE,EAAE;YACb,IAAI,EAAE,EAAE;YACR,KAAK,EAAE,UAAU,CAAC,KAAK;YACvB,UAAU;SACX,CAAC;QAEF,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE;YACjE,MAAM,SAAS,GAAG,aAAa,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;YACxE,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;YAE/B,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO;gBAC3B,CAAC,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;gBAC3D,CAAC,CAAC,EAAE,CAAC;YACP,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC;YAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;YAE7D,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;YAChC,OAAO,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QAC7F,CAAC,CAAC,CAAC;IACL,CAAC;IAED,qFAAqF;IAC7E,OAAO,CACb,EAAU,EACV,SAAyB,EACzB,MAAe,EACf,UAA6B;QAE7B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;QACpC,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CACpC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EACxD,SAAS,CAAC,MAAM,EAChB,MAAM,EACN,EAAE,CACH,CAAC;QAEF,OAAO,kBAAkB,CAAC,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;aACnF,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,IAAY,UAAU;QACpB,OAAO,YAAY,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;IACrC,CAAC;IAEO,MAAM,CAAC,OAAqB;QAClC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;QACzB,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAEjC,OAAO,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC;YAC/B,CAAC,CAAC,CAAC,eAAe,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;YAC7D,CAAC,CAAC,EAAE,CAAC;IACT,CAAC;IAED,wEAAwE;IAChE,2BAA2B,CAAC,OAAqB;QACvD,MAAM,YAAY,GAAG,eAAe,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QAC/E,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;YAAE,OAAO;QAC5G,MAAM,IAAI,KAAK,CACb,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,mEAAmE;YACvF,sDAAsD;YACtD,oCAAoC;YACpC,yBAAyB,YAAY,uBAAuB,CAC7D,CAAC;IACJ,CAAC;IAED,oEAAoE;IAC5D,MAAM,CAAC,EAAU;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACvC,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC;QAExB,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,SAAS,EAAE,MAAkD,CAAC;QAC7E,MAAM,QAAQ,GAAG,IAAI,UAAU,CAC7B,OAAO,MAAM,EAAE,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,EACjE,SAAS,EAAE,YAAY,IAAI,KAAK,CACjC,CAAC;QACF,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QACnC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,iBAAiB,GAAG,CAAC,QAAgB,EAAiC,EAAE;QAC9E,IAAI,CAAC;YAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAsB,CAAC;QAAC,CAAC;QACjF,MAAM,CAAC;YAAC,OAAO,SAAS,CAAC;QAAC,CAAC;IAC7B,CAAC,CAAC;IAEF,kEAAkE;IAC1D,cAAc;QACpB,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACxE,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAEO,oBAAoB,CAAC,SAA6B;QACxD,OAAO,SAAS,CAAC,cAAc,CAAC,SAAS,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI;eAC/D,SAAS,CAAC,cAAc,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC,OAAO;eACzD,SAAS,CAAC,cAAc,CAAC,QAAQ,KAAK,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;IACnE,CAAC;IAED,uFAAuF;IAC/E,qBAAqB,CAAC,aAAqB;QACjD,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,aAAa,CAAE,CAAC;QAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CACpD,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,cAAc,CAAC,SAAS;eACrD,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,cAAc,CAAC,OAAO;eACpD,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC7D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CACb,uBAAuB,SAAS,CAAC,EAAE,WAAW,SAAS,CAAC,cAAc,CAAC,SAAS,GAAG;kBACjF,GAAG,SAAS,CAAC,cAAc,CAAC,MAAM,oBAAoB,OAAO,CAAC,MAAM,qBAAqB,CAC5F,CAAC;QACJ,CAAC;QACD,OAAO,OAAO,CAAC,CAAC,CAAE,CAAC;IACrB,CAAC;IAEO,qBAAqB,CAAC,aAAqB;QACjD,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,aAAa,CAAE,CAAC;QAC/D,IAAI,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,EAAE,CAAC;YACzC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;QACtF,CAAC;QAED,MAAM,SAAS,GAAG,SAAS,CAAC,cAAc,CAAC,SAAS,CAAC;QACrD,MAAM,GAAG,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACnD,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,wDAAwD,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC;QACpG,IAAI,QAAQ,GAAG,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACnC,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAClD,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;IAC/D,CAAC;CACF"}
@@ -1,4 +1,4 @@
1
- import type { Call } from '../contract/Call.js';
1
+ import type { Call } from '../wire/call.js';
2
2
  import type { Route } from './Route.js';
3
3
  import type { RoutePolicy } from './RoutePolicy.js';
4
4
  /** Incoming calls may execute here but never forward to another host. */
@@ -1 +1 @@
1
- {"version":3,"file":"LocalRoutePolicy.d.ts","sourceRoot":"","sources":["../../src/dispatch/LocalRoutePolicy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAEhD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpD,yEAAyE;AACzE,qBAAa,gBAAiB,YAAW,WAAW;IACtC,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAAX,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,MAAM,EAAE;IAExE,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;IAI9B,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,KAAK,EAAE,GAAG,KAAK,GAAG,SAAS;CAmBlE"}
1
+ {"version":3,"file":"LocalRoutePolicy.d.ts","sourceRoot":"","sources":["../../src/dispatch/LocalRoutePolicy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpD,yEAAyE;AACzE,qBAAa,gBAAiB,YAAW,WAAW;IACtC,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAAX,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,MAAM,EAAE;IAExE,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;IAI9B,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,KAAK,EAAE,GAAG,KAAK,GAAG,SAAS;CAmBlE"}
@@ -1,5 +1,5 @@
1
1
  import { ErrorCode, FougereError } from '../wire/errors.js';
2
- import { RouteNotFoundError } from './RouteNotFoundError.js';
2
+ import { routeNotFound, servedOperations } from './routeNotFound.js';
3
3
  /** Incoming calls may execute here but never forward to another host. */
4
4
  export class LocalRoutePolicy {
5
5
  hostedNames;
@@ -12,9 +12,9 @@ export class LocalRoutePolicy {
12
12
  notFound(call, routes) {
13
13
  if (call.address.entity === 'rpc')
14
14
  return undefined;
15
- const unknownRoute = new RouteNotFoundError(call, routes, this);
16
- if (unknownRoute.servedOperations.length > 0)
17
- return unknownRoute;
15
+ const served = servedOperations(call, routes, this);
16
+ if (served.length > 0)
17
+ return routeNotFound(call, served);
18
18
  const hosted = this.hostedNames(call.address.surface);
19
19
  const entity = call.address.entity;
20
20
  const surface = call.address.surface;
@@ -1 +1 @@
1
- {"version":3,"file":"LocalRoutePolicy.js","sourceRoot":"","sources":["../../src/dispatch/LocalRoutePolicy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAG5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,yEAAyE;AACzE,MAAM,OAAO,gBAAgB;IACE;IAA7B,YAA6B,WAA2C;QAA3C,gBAAW,GAAX,WAAW,CAAgC;IAAG,CAAC;IAE5E,OAAO,CAAC,KAAY;QAClB,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;IACjC,CAAC;IAED,QAAQ,CAAC,IAAU,EAAE,MAAwB;QAC3C,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,KAAK;YAAE,OAAO,SAAS,CAAC;QAEpD,MAAM,YAAY,GAAG,IAAI,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAChE,IAAI,YAAY,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,YAAY,CAAC;QAElE,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;QACrC,OAAO,IAAI,YAAY,CAAC;YACtB,IAAI,EAAE,SAAS,CAAC,SAAS;YACzB,OAAO,EAAE,CAAC,OAAO;gBACf,CAAC,CAAC,WAAW,MAAM,+BAA+B,OAAO,GAAG;gBAC5D,CAAC,CAAC,WAAW,MAAM,sBAAsB,CAAC;kBACxC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,kBAAkB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,6BAA6B,CAAC;YAC5F,MAAM;YACN,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS;SAClC,CAAC,CAAC;IACL,CAAC;CACF"}
1
+ {"version":3,"file":"LocalRoutePolicy.js","sourceRoot":"","sources":["../../src/dispatch/LocalRoutePolicy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAG5D,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAErE,yEAAyE;AACzE,MAAM,OAAO,gBAAgB;IACE;IAA7B,YAA6B,WAA2C;QAA3C,gBAAW,GAAX,WAAW,CAAgC;IAAG,CAAC;IAE5E,OAAO,CAAC,KAAY;QAClB,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;IACjC,CAAC;IAED,QAAQ,CAAC,IAAU,EAAE,MAAwB;QAC3C,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,KAAK;YAAE,OAAO,SAAS,CAAC;QAEpD,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QACpD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAE1D,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;QACrC,OAAO,IAAI,YAAY,CAAC;YACtB,IAAI,EAAE,SAAS,CAAC,SAAS;YACzB,OAAO,EAAE,CAAC,OAAO;gBACf,CAAC,CAAC,WAAW,MAAM,+BAA+B,OAAO,GAAG;gBAC5D,CAAC,CAAC,WAAW,MAAM,sBAAsB,CAAC;kBACxC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,kBAAkB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,6BAA6B,CAAC;YAC5F,MAAM;YACN,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS;SAClC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -1,5 +1,5 @@
1
- import type { Call } from '../contract/Call.js';
2
- import type { RouteAddress } from '../contract/RouteAddress.js';
1
+ import type { Call } from '../wire/call.js';
2
+ import type { RouteAddress } from '../wire/RouteAddress.js';
3
3
  import type { Route } from './Route.js';
4
4
  export type RouteExecution = (call: Call) => unknown | Promise<unknown>;
5
5
  /** One executable route, distinguished by its routing kind. */
@@ -1 +1 @@
1
- {"version":3,"file":"OperationRoute.d.ts","sourceRoot":"","sources":["../../src/dispatch/OperationRoute.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAExE,+DAA+D;AAC/D,qBAAa,cAAe,YAAW,KAAK;IAExC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,YAAY;IAC9B,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAFjB,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,EACnB,OAAO,EAAE,YAAY,EACb,SAAS,EAAE,cAAc;IAGtC,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;CAG5C"}
1
+ {"version":3,"file":"OperationRoute.d.ts","sourceRoot":"","sources":["../../src/dispatch/OperationRoute.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAExE,+DAA+D;AAC/D,qBAAa,cAAe,YAAW,KAAK;IAExC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,YAAY;IAC9B,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAFjB,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,EACnB,OAAO,EAAE,YAAY,EACb,SAAS,EAAE,cAAc;IAGtC,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;CAG5C"}
@@ -1,8 +1,9 @@
1
- import type { Fields } from '@fougere/schema';
2
- /** Immutable projection boundary of one operation result. */
1
+ import { type Fields } from '@fougere/schema';
2
+ /** What one operation result may show. One of the two exits a validator watches. */
3
3
  export declare class OutputView {
4
4
  readonly fields: Fields;
5
5
  readonly closed: boolean;
6
6
  constructor(fields: Fields, closed?: boolean);
7
+ project(result: unknown): unknown;
7
8
  }
8
9
  //# sourceMappingURL=OutputView.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"OutputView.d.ts","sourceRoot":"","sources":["../../src/dispatch/OutputView.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAE9C,6DAA6D;AAC7D,qBAAa,UAAU;IAEnB,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,MAAM;gBADN,MAAM,EAAE,MAAM,EACd,MAAM,UAAQ;CAE1B"}
1
+ {"version":3,"file":"OutputView.d.ts","sourceRoot":"","sources":["../../src/dispatch/OutputView.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAG1D,oFAAoF;AACpF,qBAAa,UAAU;IAEnB,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,MAAM;gBADN,MAAM,EAAE,MAAM,EACd,MAAM,UAAQ;IAGzB,OAAO,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO;CAoBlC"}
@@ -1,4 +1,6 @@
1
- /** Immutable projection boundary of one operation result. */
1
+ import { Visibility } from '@fougere/schema';
2
+ import { preserveArrayProperties } from './ArrayResult.js';
3
+ /** What one operation result may show. One of the two exits a validator watches. */
2
4
  export class OutputView {
3
5
  fields;
4
6
  closed;
@@ -6,5 +8,21 @@ export class OutputView {
6
8
  this.fields = fields;
7
9
  this.closed = closed;
8
10
  }
11
+ project(result) {
12
+ if (result === null || result === undefined)
13
+ return result;
14
+ if (Array.isArray(result)) {
15
+ return preserveArrayProperties(result, result.map((item) => this.project(item)));
16
+ }
17
+ if (typeof result !== 'object')
18
+ return result;
19
+ const record = result;
20
+ const scoped = this.closed
21
+ ? Object.fromEntries(Object.keys(this.fields)
22
+ .filter((key) => key in record)
23
+ .map((key) => [key, record[key]]))
24
+ : record;
25
+ return Visibility.of(this.fields).encode(scoped);
26
+ }
9
27
  }
10
28
  //# sourceMappingURL=OutputView.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"OutputView.js","sourceRoot":"","sources":["../../src/dispatch/OutputView.ts"],"names":[],"mappings":"AAEA,6DAA6D;AAC7D,MAAM,OAAO,UAAU;IAEV;IACA;IAFX,YACW,MAAc,EACd,SAAS,KAAK;QADd,WAAM,GAAN,MAAM,CAAQ;QACd,WAAM,GAAN,MAAM,CAAQ;IACtB,CAAC;CACL"}
1
+ {"version":3,"file":"OutputView.js","sourceRoot":"","sources":["../../src/dispatch/OutputView.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAe,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAE3D,oFAAoF;AACpF,MAAM,OAAO,UAAU;IAEV;IACA;IAFX,YACW,MAAc,EACd,SAAS,KAAK;QADd,WAAM,GAAN,MAAM,CAAQ;QACd,WAAM,GAAN,MAAM,CAAQ;IACtB,CAAC;IAEJ,OAAO,CAAC,MAAe;QACrB,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC;QAE3D,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,OAAO,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnF,CAAC;QAED,IAAI,OAAO,MAAM,KAAK,QAAQ;YAAE,OAAO,MAAM,CAAC;QAE9C,MAAM,MAAM,GAAG,MAAiC,CAAC;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM;YACxB,CAAC,CAAC,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;iBACrB,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,MAAM,CAAC;iBAC9B,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CACpC;YACH,CAAC,CAAC,MAAM,CAAC;QAEX,OAAO,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACnD,CAAC;CACF"}
@@ -1,5 +1,5 @@
1
- import type { Call } from '../contract/Call.js';
2
- import type { RouteAddress, RouteKind } from '../contract/RouteAddress.js';
1
+ import type { Call } from '../wire/call.js';
2
+ import type { RouteAddress, RouteKind } from '../wire/RouteAddress.js';
3
3
  /** Executable destination known by the dispatcher. */
4
4
  export interface Route {
5
5
  readonly kind: RouteKind;
@@ -1 +1 @@
1
- {"version":3,"file":"Route.d.ts","sourceRoot":"","sources":["../../src/dispatch/Route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAE3E,sDAAsD;AACtD,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACvC"}
1
+ {"version":3,"file":"Route.d.ts","sourceRoot":"","sources":["../../src/dispatch/Route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEvE,sDAAsD;AACtD,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACvC"}
@@ -1,4 +1,4 @@
1
- import type { Call } from '../contract/Call.js';
1
+ import type { Call } from '../wire/call.js';
2
2
  import type { Route } from './Route.js';
3
3
  /** Restricts which registered routes one dispatch capability may enter. */
4
4
  export interface RoutePolicy {
@@ -1 +1 @@
1
- {"version":3,"file":"RoutePolicy.d.ts","sourceRoot":"","sources":["../../src/dispatch/RoutePolicy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,2EAA2E;AAC3E,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC;IAC/B,QAAQ,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,KAAK,EAAE,GAAG,KAAK,GAAG,SAAS,CAAC;CACpE"}
1
+ {"version":3,"file":"RoutePolicy.d.ts","sourceRoot":"","sources":["../../src/dispatch/RoutePolicy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,2EAA2E;AAC3E,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC;IAC/B,QAAQ,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,KAAK,EAAE,GAAG,KAAK,GAAG,SAAS,CAAC;CACpE"}
@@ -1,4 +1,4 @@
1
- import { RouteAddress } from '../contract/RouteAddress.js';
1
+ import { RouteAddress } from '../wire/RouteAddress.js';
2
2
  import type { Route } from './Route.js';
3
3
  import type { RouteResolver } from './RouteResolver.js';
4
4
  /** Exact registry of every operation the application can dispatch. */
@@ -1 +1 @@
1
- {"version":3,"file":"RouteRegistry.d.ts","sourceRoot":"","sources":["../../src/dispatch/RouteRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,sEAAsE;AACtE,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA4B;IACtD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAuB;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiD;IAEzE,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAW5B,WAAW,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IAI1C,IAAI,CAAC,OAAO,EAAE,YAAY,GAAG,KAAK,GAAG,SAAS;IAWxC,OAAO,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC;YAalD,cAAc;IAU5B,MAAM,IAAI,KAAK,EAAE;IAIjB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE;CAK3D"}
1
+ {"version":3,"file":"RouteRegistry.d.ts","sourceRoot":"","sources":["../../src/dispatch/RouteRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,sEAAsE;AACtE,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA4B;IACtD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAuB;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiD;IAEzE,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAW5B,WAAW,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IAI1C,IAAI,CAAC,OAAO,EAAE,YAAY,GAAG,KAAK,GAAG,SAAS;IAWxC,OAAO,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC;YAalD,cAAc;IAU5B,MAAM,IAAI,KAAK,EAAE;IAIjB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE;CAK3D"}
@@ -1,4 +1,4 @@
1
- import { RouteAddress } from '../contract/RouteAddress.js';
1
+ import { RouteAddress } from '../wire/RouteAddress.js';
2
2
  /** Exact registry of every operation the application can dispatch. */
3
3
  export class RouteRegistry {
4
4
  byAddress = new Map();
@@ -42,7 +42,7 @@ export class RouteRegistry {
42
42
  }
43
43
  async resolveUnknown(address) {
44
44
  for (const resolver of this.resolvers) {
45
- const route = await resolver.resolve(address);
45
+ const route = await resolver(address);
46
46
  if (!route)
47
47
  continue;
48
48
  this.register(route);
@@ -1 +1 @@
1
- {"version":3,"file":"RouteRegistry.js","sourceRoot":"","sources":["../../src/dispatch/RouteRegistry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RouteRegistry.js","sourceRoot":"","sources":["../../src/dispatch/RouteRegistry.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,5 @@
1
- import type { RouteAddress } from '../contract/RouteAddress.js';
1
+ import type { RouteAddress } from '../wire/RouteAddress.js';
2
2
  import type { Route } from './Route.js';
3
3
  /** Resolves routes that cannot be known when the registry is built. */
4
- export interface RouteResolver {
5
- resolve(address: RouteAddress): Route | undefined | Promise<Route | undefined>;
6
- }
4
+ export type RouteResolver = (address: RouteAddress) => Route | undefined | Promise<Route | undefined>;
7
5
  //# sourceMappingURL=RouteResolver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RouteResolver.d.ts","sourceRoot":"","sources":["../../src/dispatch/RouteResolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,uEAAuE;AACvE,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,OAAO,EAAE,YAAY,GAAG,KAAK,GAAG,SAAS,GAAG,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC;CAChF"}
1
+ {"version":3,"file":"RouteResolver.d.ts","sourceRoot":"","sources":["../../src/dispatch/RouteResolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,uEAAuE;AACvE,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,YAAY,KAAK,KAAK,GAAG,SAAS,GAAG,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC"}
@@ -1,15 +1,16 @@
1
1
  import { type Fields } from '@fougere/schema';
2
- /**
3
- * Judges storage writes and list options without narrowing the storage interface.
4
- *
5
- * Storage is a way out like the client surface, so what goes to it is judged too — the
6
- * same rule `OutputProjector` applies on the other exit.
7
- */
2
+ /** Judges storage writes and list options without narrowing the storage interface. */
8
3
  export declare class StorageGuard {
9
4
  private readonly fields;
10
5
  private readonly entity;
11
6
  constructor(fields: Fields, entity: string);
12
7
  guard<T extends object>(storage: T): T;
13
- private judge;
8
+ /**
9
+ * The values this write carries, validated and handed on PARSED — the rule the client door
10
+ * already holds (`InputValidator`), applied to a write that never passed through it. What a
11
+ * handler is allowed to write is not asked here: only the value is.
12
+ */
13
+ private rowAt;
14
+ private validated;
14
15
  }
15
16
  //# sourceMappingURL=StorageGuard.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"StorageGuard.d.ts","sourceRoot":"","sources":["../../src/dispatch/StorageGuard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAS1D;;;;;GAKG;AACH,qBAAa,YAAY;IAErB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM;IAGjC,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC;IA4BtC,OAAO,CAAC,KAAK;CAqBd"}
1
+ {"version":3,"file":"StorageGuard.d.ts","sourceRoot":"","sources":["../../src/dispatch/StorageGuard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyD,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAarG,sFAAsF;AACtF,qBAAa,YAAY;IAErB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM;IAGjC,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC;IA8CtC;;;;OAIG;IACH,OAAO,CAAC,KAAK;IAMb,OAAO,CAAC,SAAS;CA6ClB"}
@@ -1,12 +1,7 @@
1
- import { ValueJudge } from '@fougere/schema';
1
+ import { Boundary, FieldSet, FieldValueValidator, InputRefusal } from '@fougere/schema';
2
2
  import { assertListOptions } from '../storage.js';
3
3
  import { ErrorCode, FougereError } from '../wire/errors.js';
4
- /**
5
- * Judges storage writes and list options without narrowing the storage interface.
6
- *
7
- * Storage is a way out like the client surface, so what goes to it is judged too — the
8
- * same rule `OutputProjector` applies on the other exit.
9
- */
4
+ /** Judges storage writes and list options without narrowing the storage interface. */
10
5
  export class StorageGuard {
11
6
  fields;
12
7
  entity;
@@ -21,33 +16,80 @@ export class StorageGuard {
21
16
  const validation = this;
22
17
  const guarded = Object.create(storage);
23
18
  guarded.create = async function (...args) {
24
- validation.judge(args[0], 'create');
19
+ args[0] = validation.validated(args[0], 'create');
25
20
  return writer.create.apply(this, args);
26
21
  };
27
22
  guarded.update = async function (...args) {
28
- validation.judge(args[1], 'update');
23
+ args[1] = validation.validated(args[1], 'update');
29
24
  return writer.update.apply(this, args);
30
25
  };
31
- const reader = storage;
32
- if (typeof reader.list === 'function') {
26
+ const upsert = writer.upsert;
27
+ if (typeof upsert === 'function') {
28
+ guarded.upsert = async function (...args) {
29
+ args[0] = validation.validated(args[0], 'upsert');
30
+ return upsert.apply(this, args);
31
+ };
32
+ }
33
+ const upsertAll = writer.upsertAll;
34
+ if (typeof upsertAll === 'function') {
35
+ // Every row before the first write: a page refused halfway leaves rows behind that
36
+ // the caller asked for as one, and the refusal is readable from the input alone.
37
+ guarded.upsertAll = async function (...args) {
38
+ args[0] = args[0].map((row, index) => validation.validated(row, 'upsertAll', index));
39
+ return upsertAll.apply(this, args);
40
+ };
41
+ }
42
+ const list = writer.list;
43
+ if (typeof list === 'function') {
33
44
  guarded.list = async function (...args) {
34
45
  assertListOptions(args[0], validation.entity);
35
- return reader.list.apply(this, args);
46
+ return list.apply(this, args);
36
47
  };
37
48
  }
38
49
  return guarded;
39
50
  }
40
- judge(value, operation) {
51
+ /**
52
+ * The values this write carries, validated and handed on PARSED — the rule the client door
53
+ * already holds (`InputValidator`), applied to a write that never passed through it. What a
54
+ * handler is allowed to write is not asked here: only the value is.
55
+ */
56
+ rowAt(row, index) {
57
+ const primary = FieldSet.of(this.fields).primary;
58
+ const key = primary === undefined ? undefined : row[primary];
59
+ return key === undefined ? `row ${index} of this page` : `row ${primary} ${JSON.stringify(key)}`;
60
+ }
61
+ validated(value, operation, index) {
41
62
  if (typeof value !== 'object' || value === null)
42
- return;
63
+ return value;
43
64
  const errors = [];
65
+ const where = index === undefined ? '' : `${this.rowAt(value, index)} — `;
66
+ const parsed = {};
44
67
  for (const [key, item] of Object.entries(value)) {
45
68
  const field = this.fields[key];
46
- if (!field || item === undefined)
69
+ // A key the entity does not declare has no column to land in and no judge to pass:
70
+ // on the client door it is a typo, and on this one it is a mapping that went stale.
71
+ if (!field) {
72
+ errors.push(`${where}${key}: ${InputRefusal.unknownField}`);
73
+ continue;
74
+ }
75
+ if (item === undefined) {
76
+ parsed[key] = item;
77
+ continue;
78
+ }
79
+ const checked = FieldValueValidator.of(field).validate(item);
80
+ if ('error' in checked) {
81
+ errors.push(`${where}${key}: ${checked.error}`);
82
+ continue;
83
+ }
84
+ if (checked.value === null) {
85
+ parsed[key] = null;
47
86
  continue;
48
- const checked = ValueJudge.of(field).check(item);
49
- if ('error' in checked)
50
- errors.push(`${key}: ${checked.error}`);
87
+ }
88
+ const decoded = Boundary.of(field).decode(checked.value);
89
+ if ('error' in decoded)
90
+ errors.push(`${where}${key}: ${decoded.error}`);
91
+ else
92
+ parsed[key] = decoded.value;
51
93
  }
52
94
  if (errors.length > 0) {
53
95
  throw new FougereError({
@@ -58,6 +100,7 @@ export class StorageGuard {
58
100
  details: errors,
59
101
  });
60
102
  }
103
+ return parsed;
61
104
  }
62
105
  }
63
106
  //# sourceMappingURL=StorageGuard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"StorageGuard.js","sourceRoot":"","sources":["../../src/dispatch/StorageGuard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAe,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAO5D;;;;;GAKG;AACH,MAAM,OAAO,YAAY;IAEJ;IACA;IAFnB,YACmB,MAAc,EACd,MAAc;QADd,WAAM,GAAN,MAAM,CAAQ;QACd,WAAM,GAAN,MAAM,CAAQ;IAC9B,CAAC;IAEJ,KAAK,CAAmB,OAAU;QAChC,MAAM,MAAM,GAAG,OAA4B,CAAC;QAC5C,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,UAAU,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,UAAU;YAAE,OAAO,OAAO,CAAC;QAE/F,MAAM,UAAU,GAAG,IAAI,CAAC;QACxB,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAe,CAAC;QAErD,OAAO,CAAC,MAAM,GAAG,KAAK,WAAW,GAAG,IAAI;YACtC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;YACpC,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACzC,CAAC,CAAC;QAEF,OAAO,CAAC,MAAM,GAAG,KAAK,WAAW,GAAG,IAAI;YACtC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;YACpC,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACzC,CAAC,CAAC;QAEF,MAAM,MAAM,GAAG,OAAgE,CAAC;QAChF,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACrC,OAAoC,CAAC,IAAI,GAAG,KAAK,WAAW,GAAG,IAAe;gBAC7E,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAuB,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;gBACpE,OAAQ,MAAM,CAAC,IAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACrD,CAAC,CAAC;QACJ,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,KAAK,CAAC,KAAc,EAAE,SAAiB;QAC7C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO;QAExD,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,EAAE,CAAC;YAC3E,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC/B,IAAI,CAAC,KAAK,IAAI,IAAI,KAAK,SAAS;gBAAE,SAAS;YAC3C,MAAM,OAAO,GAAG,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACjD,IAAI,OAAO,IAAI,OAAO;gBAAE,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,YAAY,CAAC;gBACrB,IAAI,EAAE,SAAS,CAAC,cAAc;gBAC9B,OAAO,EAAE,4BAA4B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACxD,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,SAAS;gBACT,OAAO,EAAE,MAAM;aAChB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"StorageGuard.js","sourceRoot":"","sources":["../../src/dispatch/StorageGuard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { InvocationContext } from '../wire/Invocation.js';
2
+ import type { PresenterEntry } from '../descriptor/frond.js';
3
+ import type { ArgumentResolver } from './ArgumentResolver.js';
4
+ import type { PresenterArgs } from './PresenterExecutor.js';
5
+ /** The invocation-dependent arguments of every computed presenter field. */
6
+ export declare function presenterArguments(meta: PresenterEntry, invocation: InvocationContext, resolver: ArgumentResolver, collectorTypes: Set<string>): Promise<PresenterArgs>;
7
+ //# sourceMappingURL=presenterArguments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presenterArguments.d.ts","sourceRoot":"","sources":["../../src/dispatch/presenterArguments.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE5D,4EAA4E;AAC5E,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,cAAc,EACpB,UAAU,EAAE,iBAAiB,EAC7B,QAAQ,EAAE,gBAAgB,EAC1B,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,GAC1B,OAAO,CAAC,aAAa,CAAC,CAYxB"}