@fougere/core 0.2.0-alpha.2 → 0.4.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 (500) hide show
  1. package/README.md +3 -2
  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 +38 -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 +722 -0
  48. package/dist/boot/bootstrap.js.map +1 -0
  49. package/dist/boot/frame.d.ts +44 -0
  50. package/dist/boot/frame.d.ts.map +1 -0
  51. package/dist/boot/frame.js +172 -0
  52. package/dist/boot/frame.js.map +1 -0
  53. package/dist/boot/ownership.d.ts +42 -0
  54. package/dist/boot/ownership.d.ts.map +1 -0
  55. package/dist/boot/ownership.js +127 -0
  56. package/dist/boot/ownership.js.map +1 -0
  57. package/dist/boot/ports.d.ts +17 -0
  58. package/dist/boot/ports.d.ts.map +1 -0
  59. package/dist/boot/ports.js +57 -0
  60. package/dist/boot/ports.js.map +1 -0
  61. package/dist/{remote.d.ts → boot/remote.d.ts} +11 -3
  62. package/dist/boot/remote.d.ts.map +1 -0
  63. package/dist/{remote.js → boot/remote.js} +26 -28
  64. package/dist/boot/remote.js.map +1 -0
  65. package/dist/{seed.d.ts → boot/seed.d.ts} +13 -1
  66. package/dist/boot/seed.d.ts.map +1 -0
  67. package/dist/{seed.js → boot/seed.js} +24 -3
  68. package/dist/boot/seed.js.map +1 -0
  69. package/dist/boot/together.d.ts +26 -0
  70. package/dist/boot/together.d.ts.map +1 -0
  71. package/dist/boot/together.js +163 -0
  72. package/dist/boot/together.js.map +1 -0
  73. package/dist/boot/types.d.ts +260 -0
  74. package/dist/boot/types.d.ts.map +1 -0
  75. package/dist/boot/types.js.map +1 -0
  76. package/dist/builtins/config.d.ts +9 -0
  77. package/dist/builtins/config.d.ts.map +1 -1
  78. package/dist/builtins/config.js +16 -1
  79. package/dist/builtins/config.js.map +1 -1
  80. package/dist/builtins/logger.d.ts +37 -4
  81. package/dist/builtins/logger.d.ts.map +1 -1
  82. package/dist/builtins/logger.js +66 -7
  83. package/dist/builtins/logger.js.map +1 -1
  84. package/dist/config-loader.d.ts +39 -35
  85. package/dist/config-loader.d.ts.map +1 -1
  86. package/dist/config-loader.js +15 -54
  87. package/dist/config-loader.js.map +1 -1
  88. package/dist/contract/Call.d.ts +10 -0
  89. package/dist/contract/Call.d.ts.map +1 -0
  90. package/dist/contract/Call.js +15 -0
  91. package/dist/contract/Call.js.map +1 -0
  92. package/dist/contract/Invocation.d.ts +27 -0
  93. package/dist/contract/Invocation.d.ts.map +1 -0
  94. package/dist/contract/Invocation.js +59 -0
  95. package/dist/contract/Invocation.js.map +1 -0
  96. package/dist/contract/RouteAddress.d.ts +17 -0
  97. package/dist/contract/RouteAddress.d.ts.map +1 -0
  98. package/dist/contract/RouteAddress.js +38 -0
  99. package/dist/contract/RouteAddress.js.map +1 -0
  100. package/dist/contract.d.ts +25 -19
  101. package/dist/contract.d.ts.map +1 -1
  102. package/dist/contract.js +25 -10
  103. package/dist/contract.js.map +1 -1
  104. package/dist/crypto/encoding.d.ts +25 -0
  105. package/dist/crypto/encoding.d.ts.map +1 -0
  106. package/dist/crypto/encoding.js +58 -0
  107. package/dist/crypto/encoding.js.map +1 -0
  108. package/dist/crypto/node.d.ts +4 -0
  109. package/dist/crypto/node.d.ts.map +1 -0
  110. package/dist/crypto/node.js +25 -0
  111. package/dist/crypto/node.js.map +1 -0
  112. package/dist/crypto/port.d.ts +42 -0
  113. package/dist/crypto/port.d.ts.map +1 -0
  114. package/dist/crypto/port.js +19 -0
  115. package/dist/crypto/port.js.map +1 -0
  116. package/dist/crypto/webcrypto.d.ts +4 -0
  117. package/dist/crypto/webcrypto.d.ts.map +1 -0
  118. package/dist/crypto/webcrypto.js +34 -0
  119. package/dist/crypto/webcrypto.js.map +1 -0
  120. package/dist/dispatch/ArgumentResolver.d.ts +10 -0
  121. package/dist/dispatch/ArgumentResolver.d.ts.map +1 -0
  122. package/dist/dispatch/ArgumentResolver.js +12 -0
  123. package/dist/dispatch/ArgumentResolver.js.map +1 -0
  124. package/dist/dispatch/ArrayResult.d.ts +3 -0
  125. package/dist/dispatch/ArrayResult.d.ts.map +1 -0
  126. package/dist/dispatch/ArrayResult.js +11 -0
  127. package/dist/dispatch/ArrayResult.js.map +1 -0
  128. package/dist/dispatch/DispatchEvent.d.ts +18 -0
  129. package/dist/dispatch/DispatchEvent.d.ts.map +1 -0
  130. package/dist/dispatch/DispatchEvent.js +30 -0
  131. package/dist/dispatch/DispatchEvent.js.map +1 -0
  132. package/dist/dispatch/DispatchLifecycle.d.ts +9 -0
  133. package/dist/dispatch/DispatchLifecycle.d.ts.map +1 -0
  134. package/dist/dispatch/DispatchLifecycle.js +25 -0
  135. package/dist/dispatch/DispatchLifecycle.js.map +1 -0
  136. package/dist/dispatch/DispatchPort.d.ts +6 -0
  137. package/dist/dispatch/DispatchPort.d.ts.map +1 -0
  138. package/dist/dispatch/DispatchPort.js +2 -0
  139. package/dist/dispatch/DispatchPort.js.map +1 -0
  140. package/dist/dispatch/Dispatcher.d.ts +16 -0
  141. package/dist/dispatch/Dispatcher.d.ts.map +1 -0
  142. package/dist/dispatch/Dispatcher.js +44 -0
  143. package/dist/dispatch/Dispatcher.js.map +1 -0
  144. package/dist/dispatch/InFlight.d.ts +12 -0
  145. package/dist/dispatch/InFlight.d.ts.map +1 -0
  146. package/dist/dispatch/InFlight.js +46 -0
  147. package/dist/dispatch/InFlight.js.map +1 -0
  148. package/dist/dispatch/InputValidator.d.ts +7 -0
  149. package/dist/dispatch/InputValidator.d.ts.map +1 -0
  150. package/dist/dispatch/InputValidator.js +22 -0
  151. package/dist/dispatch/InputValidator.js.map +1 -0
  152. package/dist/dispatch/LocalRoutePolicy.d.ts +11 -0
  153. package/dist/dispatch/LocalRoutePolicy.d.ts.map +1 -0
  154. package/dist/dispatch/LocalRoutePolicy.js +32 -0
  155. package/dist/dispatch/LocalRoutePolicy.js.map +1 -0
  156. package/dist/dispatch/OperationExecutor.d.ts +25 -0
  157. package/dist/dispatch/OperationExecutor.d.ts.map +1 -0
  158. package/dist/dispatch/OperationExecutor.js +32 -0
  159. package/dist/dispatch/OperationExecutor.js.map +1 -0
  160. package/dist/dispatch/OperationRoute.d.ts +13 -0
  161. package/dist/dispatch/OperationRoute.d.ts.map +1 -0
  162. package/dist/dispatch/OperationRoute.js +15 -0
  163. package/dist/dispatch/OperationRoute.js.map +1 -0
  164. package/dist/dispatch/OutputProjector.d.ts +12 -0
  165. package/dist/dispatch/OutputProjector.d.ts.map +1 -0
  166. package/dist/dispatch/OutputProjector.js +30 -0
  167. package/dist/dispatch/OutputProjector.js.map +1 -0
  168. package/dist/dispatch/OutputView.d.ts +8 -0
  169. package/dist/dispatch/OutputView.d.ts.map +1 -0
  170. package/dist/dispatch/OutputView.js +10 -0
  171. package/dist/dispatch/OutputView.js.map +1 -0
  172. package/dist/dispatch/PresenterArgumentResolver.d.ts +12 -0
  173. package/dist/dispatch/PresenterArgumentResolver.d.ts.map +1 -0
  174. package/dist/dispatch/PresenterArgumentResolver.js +20 -0
  175. package/dist/dispatch/PresenterArgumentResolver.js.map +1 -0
  176. package/dist/dispatch/PresenterExecutor.d.ts +11 -0
  177. package/dist/dispatch/PresenterExecutor.d.ts.map +1 -0
  178. package/dist/dispatch/PresenterExecutor.js +56 -0
  179. package/dist/dispatch/PresenterExecutor.js.map +1 -0
  180. package/dist/dispatch/RemoteRouteResolver.d.ts +13 -0
  181. package/dist/dispatch/RemoteRouteResolver.d.ts.map +1 -0
  182. package/dist/dispatch/RemoteRouteResolver.js +18 -0
  183. package/dist/dispatch/RemoteRouteResolver.js.map +1 -0
  184. package/dist/dispatch/Route.d.ts +10 -0
  185. package/dist/dispatch/Route.d.ts.map +1 -0
  186. package/dist/dispatch/Route.js +2 -0
  187. package/dist/dispatch/Route.js.map +1 -0
  188. package/dist/dispatch/RouteNotFoundError.d.ts +10 -0
  189. package/dist/dispatch/RouteNotFoundError.d.ts.map +1 -0
  190. package/dist/dispatch/RouteNotFoundError.js +24 -0
  191. package/dist/dispatch/RouteNotFoundError.js.map +1 -0
  192. package/dist/dispatch/RoutePolicy.d.ts +8 -0
  193. package/dist/dispatch/RoutePolicy.d.ts.map +1 -0
  194. package/dist/dispatch/RoutePolicy.js +2 -0
  195. package/dist/dispatch/RoutePolicy.js.map +1 -0
  196. package/dist/dispatch/RouteRegistry.d.ts +18 -0
  197. package/dist/dispatch/RouteRegistry.d.ts.map +1 -0
  198. package/dist/dispatch/RouteRegistry.js +62 -0
  199. package/dist/dispatch/RouteRegistry.js.map +1 -0
  200. package/dist/dispatch/RouteResolver.d.ts +7 -0
  201. package/dist/dispatch/RouteResolver.d.ts.map +1 -0
  202. package/dist/dispatch/RouteResolver.js +2 -0
  203. package/dist/dispatch/RouteResolver.js.map +1 -0
  204. package/dist/dispatch/StorageGuard.d.ts +15 -0
  205. package/dist/dispatch/StorageGuard.d.ts.map +1 -0
  206. package/dist/dispatch/StorageGuard.js +63 -0
  207. package/dist/dispatch/StorageGuard.js.map +1 -0
  208. package/dist/effective-operation.d.ts +90 -0
  209. package/dist/effective-operation.d.ts.map +1 -0
  210. package/dist/effective-operation.js +449 -0
  211. package/dist/effective-operation.js.map +1 -0
  212. package/dist/emit.d.ts +2 -2
  213. package/dist/emit.d.ts.map +1 -1
  214. package/dist/emit.js +2 -2
  215. package/dist/emit.js.map +1 -1
  216. package/dist/entry/DynamicFacade.d.ts +10 -0
  217. package/dist/entry/DynamicFacade.d.ts.map +1 -0
  218. package/dist/entry/DynamicFacade.js +27 -0
  219. package/dist/entry/DynamicFacade.js.map +1 -0
  220. package/dist/entry/FacadeEntry.d.ts +11 -0
  221. package/dist/entry/FacadeEntry.d.ts.map +1 -0
  222. package/dist/entry/FacadeEntry.js +26 -0
  223. package/dist/entry/FacadeEntry.js.map +1 -0
  224. package/dist/entry/TransportEntry.d.ts +13 -0
  225. package/dist/entry/TransportEntry.d.ts.map +1 -0
  226. package/dist/entry/TransportEntry.js +24 -0
  227. package/dist/entry/TransportEntry.js.map +1 -0
  228. package/dist/frond-config.d.ts +24 -7
  229. package/dist/frond-config.d.ts.map +1 -1
  230. package/dist/frond-config.js.map +1 -1
  231. package/dist/graph.d.ts +1 -1
  232. package/dist/graph.d.ts.map +1 -1
  233. package/dist/graph.js +3 -2
  234. package/dist/graph.js.map +1 -1
  235. package/dist/identity-keys.d.ts +14 -0
  236. package/dist/identity-keys.d.ts.map +1 -0
  237. package/dist/identity-keys.js +37 -0
  238. package/dist/identity-keys.js.map +1 -0
  239. package/dist/identity.d.ts +58 -0
  240. package/dist/identity.d.ts.map +1 -0
  241. package/dist/identity.js +182 -0
  242. package/dist/identity.js.map +1 -0
  243. package/dist/imports.d.ts +2 -2
  244. package/dist/imports.d.ts.map +1 -1
  245. package/dist/imports.js +7 -3
  246. package/dist/imports.js.map +1 -1
  247. package/dist/index.d.ts +57 -38
  248. package/dist/index.d.ts.map +1 -1
  249. package/dist/index.js +38 -32
  250. package/dist/index.js.map +1 -1
  251. package/dist/loader.d.ts +16 -0
  252. package/dist/loader.d.ts.map +1 -0
  253. package/dist/loader.js +25 -0
  254. package/dist/loader.js.map +1 -0
  255. package/dist/node.d.ts +21 -0
  256. package/dist/node.d.ts.map +1 -0
  257. package/dist/node.js +24 -0
  258. package/dist/node.js.map +1 -0
  259. package/dist/orm.d.ts +69 -8
  260. package/dist/orm.d.ts.map +1 -1
  261. package/dist/orm.js +35 -2
  262. package/dist/orm.js.map +1 -1
  263. package/dist/prefab/collector.d.ts +29 -0
  264. package/dist/prefab/collector.d.ts.map +1 -0
  265. package/dist/prefab/collector.js +34 -0
  266. package/dist/prefab/collector.js.map +1 -0
  267. package/dist/{crud.d.ts → prefab/crud.d.ts} +7 -8
  268. package/dist/prefab/crud.d.ts.map +1 -0
  269. package/dist/{crud.js → prefab/crud.js} +39 -5
  270. package/dist/prefab/crud.js.map +1 -0
  271. package/dist/prefab/mirror.d.ts +52 -0
  272. package/dist/prefab/mirror.d.ts.map +1 -0
  273. package/dist/prefab/mirror.js +66 -0
  274. package/dist/prefab/mirror.js.map +1 -0
  275. package/dist/prefab/prefab.d.ts +15 -0
  276. package/dist/prefab/prefab.d.ts.map +1 -0
  277. package/dist/prefab/prefab.js +19 -0
  278. package/dist/prefab/prefab.js.map +1 -0
  279. package/dist/{presenter.d.ts → prefab/presenter.d.ts} +6 -17
  280. package/dist/prefab/presenter.d.ts.map +1 -0
  281. package/dist/{presenter.js → prefab/presenter.js} +5 -23
  282. package/dist/prefab/presenter.js.map +1 -0
  283. package/dist/prefab/repository.d.ts +104 -0
  284. package/dist/prefab/repository.d.ts.map +1 -0
  285. package/dist/prefab/repository.js +62 -0
  286. package/dist/prefab/repository.js.map +1 -0
  287. package/dist/scan/Fronds.d.ts +45 -0
  288. package/dist/scan/Fronds.d.ts.map +1 -0
  289. package/dist/scan/Fronds.js +66 -0
  290. package/dist/scan/Fronds.js.map +1 -0
  291. package/dist/scan/conventions.d.ts +74 -0
  292. package/dist/scan/conventions.d.ts.map +1 -0
  293. package/dist/scan/conventions.js +82 -0
  294. package/dist/scan/conventions.js.map +1 -0
  295. package/dist/scan/emit.d.ts +14 -0
  296. package/dist/scan/emit.d.ts.map +1 -0
  297. package/dist/scan/emit.js +212 -0
  298. package/dist/scan/emit.js.map +1 -0
  299. package/dist/scan/frond.d.ts +224 -0
  300. package/dist/scan/frond.d.ts.map +1 -0
  301. package/dist/scan/frond.js +2 -0
  302. package/dist/scan/frond.js.map +1 -0
  303. package/dist/{handler-parser.d.ts → scan/handler-parser.d.ts} +20 -9
  304. package/dist/scan/handler-parser.d.ts.map +1 -0
  305. package/dist/scan/handler-parser.js +665 -0
  306. package/dist/scan/handler-parser.js.map +1 -0
  307. package/dist/scan/scan-cache.d.ts +16 -0
  308. package/dist/scan/scan-cache.d.ts.map +1 -0
  309. package/dist/{scan-cache.js → scan/scan-cache.js} +27 -20
  310. package/dist/scan/scan-cache.js.map +1 -0
  311. package/dist/scan/scanner.d.ts +20 -0
  312. package/dist/scan/scanner.d.ts.map +1 -0
  313. package/dist/{scanner.js → scan/scanner.js} +212 -167
  314. package/dist/scan/scanner.js.map +1 -0
  315. package/dist/verify.d.ts +16 -3
  316. package/dist/verify.d.ts.map +1 -1
  317. package/dist/verify.js +21 -18
  318. package/dist/verify.js.map +1 -1
  319. package/dist/{call.d.ts → wire/call.d.ts} +76 -7
  320. package/dist/wire/call.d.ts.map +1 -0
  321. package/dist/{call.js → wire/call.js} +53 -80
  322. package/dist/wire/call.js.map +1 -0
  323. package/dist/{middleware.d.ts → wire/errors.d.ts} +18 -19
  324. package/dist/wire/errors.d.ts.map +1 -0
  325. package/dist/{middleware.js → wire/errors.js} +26 -14
  326. package/dist/wire/errors.js.map +1 -0
  327. package/dist/{errors.d.ts → wire/http-error.d.ts} +5 -6
  328. package/dist/wire/http-error.d.ts.map +1 -0
  329. package/dist/{errors.js → wire/http-error.js} +7 -6
  330. package/dist/wire/http-error.js.map +1 -0
  331. package/dist/wire/invocation.d.ts +4 -0
  332. package/dist/wire/invocation.d.ts.map +1 -0
  333. package/dist/wire/invocation.js +3 -0
  334. package/dist/wire/invocation.js.map +1 -0
  335. package/dist/{middleware/logger.d.ts → wire/loggerMiddleware.d.ts} +3 -3
  336. package/dist/wire/loggerMiddleware.d.ts.map +1 -0
  337. package/dist/{middleware/logger.js → wire/loggerMiddleware.js} +2 -2
  338. package/dist/wire/loggerMiddleware.js.map +1 -0
  339. package/dist/wire/middleware.d.ts +29 -0
  340. package/dist/wire/middleware.d.ts.map +1 -0
  341. package/dist/wire/middleware.js +20 -0
  342. package/dist/wire/middleware.js.map +1 -0
  343. package/dist/{operation.d.ts → wire/operation.d.ts} +39 -10
  344. package/dist/wire/operation.d.ts.map +1 -0
  345. package/dist/wire/operation.js +167 -0
  346. package/dist/wire/operation.js.map +1 -0
  347. package/package.json +27 -8
  348. package/src/boot/AppLifecycle.ts +50 -0
  349. package/src/boot/Emissions.ts +263 -0
  350. package/src/boot/HandlerFacade.ts +242 -0
  351. package/src/boot/Lifecycle.ts +3 -0
  352. package/src/boot/ambient-port.ts +41 -0
  353. package/src/boot/ambient.als.ts +43 -0
  354. package/src/boot/ambient.queue.ts +75 -0
  355. package/src/boot/apply.ts +47 -0
  356. package/src/boot/auth.ts +55 -0
  357. package/src/boot/binding.ts +182 -0
  358. package/src/boot/boot.ts +125 -0
  359. package/src/boot/bootstrap.ts +839 -0
  360. package/src/boot/frame.ts +210 -0
  361. package/src/boot/ownership.ts +140 -0
  362. package/src/boot/ports.ts +66 -0
  363. package/src/boot/remote.ts +179 -0
  364. package/src/boot/seed.ts +158 -0
  365. package/src/boot/together.ts +215 -0
  366. package/src/boot/types.ts +261 -0
  367. package/src/builtins/config.ts +19 -0
  368. package/src/builtins/logger.ts +175 -0
  369. package/src/config-loader.ts +146 -0
  370. package/src/contract/Call.ts +18 -0
  371. package/src/contract/Invocation.ts +72 -0
  372. package/src/contract/RouteAddress.ts +49 -0
  373. package/src/contract.ts +74 -0
  374. package/src/crypto/encoding.ts +59 -0
  375. package/src/crypto/node.ts +30 -0
  376. package/src/crypto/port.ts +45 -0
  377. package/src/crypto/webcrypto.ts +55 -0
  378. package/src/define.ts +10 -0
  379. package/src/dispatch/ArgumentResolver.ts +17 -0
  380. package/src/dispatch/ArrayResult.ts +10 -0
  381. package/src/dispatch/DispatchEvent.ts +38 -0
  382. package/src/dispatch/DispatchLifecycle.ts +23 -0
  383. package/src/dispatch/DispatchPort.ts +6 -0
  384. package/src/dispatch/Dispatcher.ts +48 -0
  385. package/src/dispatch/InFlight.ts +49 -0
  386. package/src/dispatch/InputValidator.ts +28 -0
  387. package/src/dispatch/LocalRoutePolicy.ts +34 -0
  388. package/src/dispatch/OperationExecutor.ts +60 -0
  389. package/src/dispatch/OperationRoute.ts +18 -0
  390. package/src/dispatch/OutputProjector.ts +32 -0
  391. package/src/dispatch/OutputView.ts +9 -0
  392. package/src/dispatch/PresenterArgumentResolver.ts +25 -0
  393. package/src/dispatch/PresenterExecutor.ts +55 -0
  394. package/src/dispatch/RemoteRouteResolver.ts +21 -0
  395. package/src/dispatch/Route.ts +11 -0
  396. package/src/dispatch/RouteNotFoundError.ts +29 -0
  397. package/src/dispatch/RoutePolicy.ts +8 -0
  398. package/src/dispatch/RouteRegistry.ts +73 -0
  399. package/src/dispatch/RouteResolver.ts +7 -0
  400. package/src/dispatch/StorageGuard.ts +71 -0
  401. package/src/effective-operation.ts +597 -0
  402. package/src/emit.ts +90 -0
  403. package/src/entry/DynamicFacade.ts +28 -0
  404. package/src/entry/FacadeEntry.ts +32 -0
  405. package/src/entry/TransportEntry.ts +30 -0
  406. package/src/frond-config.ts +138 -0
  407. package/src/graph.ts +180 -0
  408. package/src/identity-keys.ts +43 -0
  409. package/src/identity.ts +235 -0
  410. package/src/imports.ts +123 -0
  411. package/src/index.ts +106 -0
  412. package/src/loader.ts +41 -0
  413. package/src/node.ts +28 -0
  414. package/src/orm.ts +252 -0
  415. package/src/prefab/collector.ts +36 -0
  416. package/src/prefab/crud.ts +188 -0
  417. package/src/prefab/mirror.ts +122 -0
  418. package/src/prefab/prefab.ts +46 -0
  419. package/src/prefab/presenter.ts +63 -0
  420. package/src/prefab/repository.ts +170 -0
  421. package/src/scan/Fronds.ts +73 -0
  422. package/src/scan/conventions.ts +122 -0
  423. package/src/scan/emit.ts +231 -0
  424. package/src/scan/frond.ts +235 -0
  425. package/src/scan/handler-parser.ts +818 -0
  426. package/src/scan/scan-cache.ts +115 -0
  427. package/src/scan/scanner.ts +758 -0
  428. package/src/verify.ts +193 -0
  429. package/src/wire/call.ts +369 -0
  430. package/src/wire/errors.ts +124 -0
  431. package/src/wire/http-error.ts +77 -0
  432. package/src/wire/invocation.ts +10 -0
  433. package/src/wire/loggerMiddleware.ts +29 -0
  434. package/src/wire/middleware.ts +47 -0
  435. package/src/wire/operation.ts +258 -0
  436. package/dist/binding.d.ts.map +0 -1
  437. package/dist/binding.js.map +0 -1
  438. package/dist/boot.d.ts.map +0 -1
  439. package/dist/boot.js +0 -53
  440. package/dist/boot.js.map +0 -1
  441. package/dist/bootstrap.d.ts.map +0 -1
  442. package/dist/bootstrap.js +0 -879
  443. package/dist/bootstrap.js.map +0 -1
  444. package/dist/call.d.ts.map +0 -1
  445. package/dist/call.js.map +0 -1
  446. package/dist/collector.d.ts +0 -28
  447. package/dist/collector.d.ts.map +0 -1
  448. package/dist/collector.js +0 -32
  449. package/dist/collector.js.map +0 -1
  450. package/dist/crud.d.ts.map +0 -1
  451. package/dist/crud.js.map +0 -1
  452. package/dist/egress.d.ts +0 -52
  453. package/dist/egress.d.ts.map +0 -1
  454. package/dist/egress.js +0 -186
  455. package/dist/egress.js.map +0 -1
  456. package/dist/errors.d.ts.map +0 -1
  457. package/dist/errors.js.map +0 -1
  458. package/dist/handler-parser.d.ts.map +0 -1
  459. package/dist/handler-parser.js +0 -505
  460. package/dist/handler-parser.js.map +0 -1
  461. package/dist/invocation.d.ts +0 -20
  462. package/dist/invocation.d.ts.map +0 -1
  463. package/dist/invocation.js +0 -15
  464. package/dist/invocation.js.map +0 -1
  465. package/dist/middleware/error-handler.d.ts +0 -15
  466. package/dist/middleware/error-handler.d.ts.map +0 -1
  467. package/dist/middleware/error-handler.js +0 -29
  468. package/dist/middleware/error-handler.js.map +0 -1
  469. package/dist/middleware/logger.d.ts.map +0 -1
  470. package/dist/middleware/logger.js.map +0 -1
  471. package/dist/middleware.d.ts.map +0 -1
  472. package/dist/middleware.js.map +0 -1
  473. package/dist/mirror.d.ts +0 -93
  474. package/dist/mirror.d.ts.map +0 -1
  475. package/dist/mirror.js +0 -96
  476. package/dist/mirror.js.map +0 -1
  477. package/dist/operation.d.ts.map +0 -1
  478. package/dist/operation.js +0 -95
  479. package/dist/operation.js.map +0 -1
  480. package/dist/presenter.d.ts.map +0 -1
  481. package/dist/presenter.js.map +0 -1
  482. package/dist/remote.d.ts.map +0 -1
  483. package/dist/remote.js.map +0 -1
  484. package/dist/repository.d.ts +0 -55
  485. package/dist/repository.d.ts.map +0 -1
  486. package/dist/repository.js +0 -26
  487. package/dist/repository.js.map +0 -1
  488. package/dist/scan-cache.d.ts +0 -10
  489. package/dist/scan-cache.d.ts.map +0 -1
  490. package/dist/scan-cache.js.map +0 -1
  491. package/dist/scanner.d.ts +0 -34
  492. package/dist/scanner.d.ts.map +0 -1
  493. package/dist/scanner.js.map +0 -1
  494. package/dist/seed.d.ts.map +0 -1
  495. package/dist/seed.js.map +0 -1
  496. package/dist/types.d.ts +0 -421
  497. package/dist/types.d.ts.map +0 -1
  498. package/dist/types.js.map +0 -1
  499. /package/dist/{bootstrap.d.ts → boot/bootstrap.d.ts} +0 -0
  500. /package/dist/{types.js → boot/types.js} +0 -0
@@ -0,0 +1,90 @@
1
+ import type { BindingPlan } from './boot/binding.js';
2
+ import type { FrondDescriptor, HandlerEntry, ScanDiagnostic } from './scan/frond.js';
3
+ import { type OperationContract, type OperationKind } from './wire/operation.js';
4
+ type Binding = BindingPlan[number];
5
+ export interface EffectiveParameter {
6
+ /** Position in the TypeScript signature. Never used to infer provenance. */
7
+ position: number;
8
+ name: string;
9
+ type: string | null;
10
+ optional: boolean;
11
+ nullable: boolean;
12
+ /** `?` and `| undefined` both mean canonical absence. */
13
+ undefinable: boolean;
14
+ /** The resolved provenance of this parameter. */
15
+ binding: Binding;
16
+ }
17
+ export interface EffectiveCollector {
18
+ parameter: string;
19
+ typeName: string;
20
+ className: string;
21
+ frond: string;
22
+ filePath: string;
23
+ }
24
+ export interface EffectiveOperation extends OperationContract {
25
+ /** Stable qualified identity: `blog/public/Post.publish`. */
26
+ id: string;
27
+ /** Human-facing identity independent of placement: `Post.publish`. */
28
+ operation: string;
29
+ name: string;
30
+ kind: OperationKind;
31
+ kindSource: 'explicit' | 'convention';
32
+ handler: {
33
+ className: string;
34
+ address: string;
35
+ filePath: string;
36
+ };
37
+ /** The class and method that execute after an optional operation override. */
38
+ implementation: {
39
+ className: string;
40
+ address: string;
41
+ method: string;
42
+ filePath: string;
43
+ };
44
+ /** Every valid operation has a plan, including the empty plan. */
45
+ binding: BindingPlan;
46
+ parameters: EffectiveParameter[];
47
+ collectors: EffectiveCollector[];
48
+ contexts: string[];
49
+ placement: {
50
+ frond: string;
51
+ runtime: 'local' | 'remote';
52
+ remote?: string;
53
+ };
54
+ exposure: {
55
+ surfaces: string[];
56
+ adapters: string[];
57
+ };
58
+ /** Whether output is an explicitly closed per-operation view. */
59
+ outputClosed: boolean;
60
+ semantics: typeof EFFECTIVE_OPERATION_SEMANTICS;
61
+ }
62
+ export type EffectiveOperationsMap = Map<string, EffectiveOperation>;
63
+ /** The absence rules every door normalises to before the handler is invoked. */
64
+ export declare const EFFECTIVE_OPERATION_SEMANTICS: Readonly<{
65
+ optional: "undefined";
66
+ undefined: "absence";
67
+ null: "explicit-value";
68
+ jsonObjectUndefined: "omitted";
69
+ }>;
70
+ export interface EffectiveOperationOptions {
71
+ diagnostics?: readonly ScanDiagnostic[];
72
+ remotes?: Record<string, string>;
73
+ adapters?: Record<string, boolean | undefined>;
74
+ }
75
+ /**
76
+ * One resolved program. The handler map preserves object identity from the scan, so the
77
+ * boot never has to find a handler again by an order-dependent name lookup.
78
+ */
79
+ export declare class EffectiveOperationModel {
80
+ private readonly byHandler;
81
+ readonly operations: EffectiveOperation[];
82
+ readonly diagnostics: ScanDiagnostic[];
83
+ readonly resolutionDiagnostics: ScanDiagnostic[];
84
+ constructor(operations: EffectiveOperation[], diagnostics: ScanDiagnostic[], resolutionDiagnostics: ScanDiagnostic[], byHandler: Map<HandlerEntry, EffectiveOperationsMap>);
85
+ forHandler(handler: HandlerEntry): EffectiveOperationsMap;
86
+ }
87
+ /** Resolve the complete operation model without starting the application. */
88
+ export declare function resolveEffectiveOperations(fronds: readonly FrondDescriptor[], options?: EffectiveOperationOptions): EffectiveOperationModel;
89
+ export {};
90
+ //# sourceMappingURL=effective-operation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effective-operation.d.ts","sourceRoot":"","sources":["../src/effective-operation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,449 @@
1
+ /**
2
+ * The operation model after every declaration and convention has been resolved.
3
+ *
4
+ * The scanner produces evidence. This module turns that evidence into the one table
5
+ * boot, check, explain and protocol projections consume. It is deliberately pure: no
6
+ * container, filesystem, migration or handler construction is involved.
7
+ */
8
+ import { lowerFirst } from '@fougere/schema';
9
+ import { targetOf } from './prefab/prefab.js';
10
+ import { verify } from './verify.js';
11
+ import { inferOperationKind, resolveContracts, knownVerbs, } from './wire/operation.js';
12
+ /** The absence rules every door normalises to before the handler is invoked. */
13
+ export const EFFECTIVE_OPERATION_SEMANTICS = Object.freeze({
14
+ optional: 'undefined',
15
+ undefined: 'absence',
16
+ null: 'explicit-value',
17
+ jsonObjectUndefined: 'omitted',
18
+ });
19
+ /**
20
+ * One resolved program. The handler map preserves object identity from the scan, so the
21
+ * boot never has to find a handler again by an order-dependent name lookup.
22
+ */
23
+ export class EffectiveOperationModel {
24
+ byHandler;
25
+ operations;
26
+ diagnostics;
27
+ resolutionDiagnostics;
28
+ constructor(operations, diagnostics, resolutionDiagnostics, byHandler) {
29
+ this.byHandler = byHandler;
30
+ this.operations = operations;
31
+ this.diagnostics = diagnostics;
32
+ this.resolutionDiagnostics = resolutionDiagnostics;
33
+ }
34
+ forHandler(handler) {
35
+ return this.byHandler.get(handler) ?? new Map();
36
+ }
37
+ }
38
+ /** Resolve the complete operation model without starting the application. */
39
+ export function resolveEffectiveOperations(fronds, options = {}) {
40
+ const operations = [];
41
+ const byHandler = new Map();
42
+ const resolutionDiagnostics = [];
43
+ const scanDiagnostics = [...(options.diagnostics ?? [])];
44
+ const schemas = new Map(fronds.flatMap((frond) => frond.entities.map((entity) => [entity.name, entity.entityClass])));
45
+ // Input ambiguity is produced where schemas are available (the scanner), but it is a
46
+ // resolution failure. Lift it into the same refusal table as kind/binding/topology.
47
+ resolutionDiagnostics.push(...scanDiagnostics.filter((diagnostic) => diagnostic.code === 'input-contract-ambiguous'));
48
+ for (const frond of fronds) {
49
+ const collectorsByType = groupedCollectors(frond.collectors);
50
+ for (const [typeName, collectors] of collectorsByType) {
51
+ if (collectors.length < 2)
52
+ continue;
53
+ resolutionDiagnostics.push({
54
+ severity: 'blocking',
55
+ code: 'collector-ambiguous',
56
+ filePath: collectors[0].filePath,
57
+ frond: frond.name,
58
+ subject: typeName,
59
+ message: `Frond '${frond.name}' declares ${collectors.length} collectors for '${typeName}' — `
60
+ + `${collectors.map((collector) => collector.ctor.name).sort().join(', ')}. `
61
+ + 'Exactly one collector must own a parameter type.',
62
+ });
63
+ }
64
+ const collectorNames = new Set(frond.collectors.map((collector) => collector.typeName));
65
+ for (const handler of frond.handlers) {
66
+ const effective = new Map();
67
+ byHandler.set(handler, effective);
68
+ const contracts = resolveContracts(handler, frond.operationsOverrides, collectorNames);
69
+ for (const [name, rawContract] of contracts) {
70
+ const subject = `${handler.ctor.name}.${name}`;
71
+ const contract = normalizeBinding(rawContract, handler, frond, name, resolutionDiagnostics);
72
+ if (!contract)
73
+ continue;
74
+ const override = frond.operationsOverrides?.[name];
75
+ const inference = inferOperationKind(name);
76
+ const inferredKinds = new Set();
77
+ if (inference.kind)
78
+ inferredKinds.add(inference.kind);
79
+ if (inference.queryMatches.length > 0)
80
+ inferredKinds.add('query');
81
+ if (inference.commandMatches.length > 0)
82
+ inferredKinds.add('command');
83
+ const kind = override?.kind
84
+ ?? (inferredKinds.size === 1 ? [...inferredKinds][0] : undefined);
85
+ if (!kind) {
86
+ const ambiguous = inferredKinds.size > 1;
87
+ resolutionDiagnostics.push({
88
+ severity: 'blocking',
89
+ code: ambiguous ? 'operation-kind-ambiguous' : 'operation-kind-unknown',
90
+ filePath: handler.filePath,
91
+ frond: frond.name,
92
+ subject,
93
+ message: ambiguous
94
+ ? `Cannot resolve the kind of ${subject}: its name carries query evidence `
95
+ + `(${inference.queryMatches.join(', ')}) and command evidence `
96
+ + `(${inference.commandMatches.join(', ')}). `
97
+ + `Declare operations.${name}.kind.`
98
+ : `Cannot resolve the kind of ${subject}: '${name}' leads with no known verb. `
99
+ + `Rename it to lead with one, or declare operations.${name}.kind in `
100
+ + `frond.config.ts.\n query: ${knownVerbs().query.join(', ')}`
101
+ + `\n command: ${knownVerbs().command.join(', ')}`,
102
+ });
103
+ continue;
104
+ }
105
+ const implementation = implementationOf(frond, handler, name, resolutionDiagnostics);
106
+ if (!implementation)
107
+ continue;
108
+ const params = contract.signature?.params ?? [];
109
+ const parameters = contract.binding.map((binding, position) => {
110
+ const param = params[position];
111
+ const undefinable = binding.optional
112
+ || param?.optional === true
113
+ || param?.type.undefined === true;
114
+ return {
115
+ position,
116
+ name: param?.name ?? binding.name,
117
+ type: param?.type.raw ?? null,
118
+ optional: undefinable,
119
+ nullable: param?.type.nullable === true,
120
+ undefinable,
121
+ binding,
122
+ };
123
+ });
124
+ if (!validateProvenance(fronds, frond, handler, name, contract, parameters, collectorsByType, resolutionDiagnostics))
125
+ continue;
126
+ // A fact is judged by the entity it names. This used to be patched into the
127
+ // facade after resolution, leaving check/explain with a different input.
128
+ let input = contract.input;
129
+ if (!input) {
130
+ const fact = contract.binding.find((binding) => binding.source.kind === 'fact');
131
+ if (fact?.source.kind === 'fact')
132
+ input = schemas.get(fact.source.factName);
133
+ }
134
+ const output = effectiveOutput(frond, handler, name, contract);
135
+ const className = handler.ctor.name.endsWith('Handler')
136
+ ? handler.ctor.name.slice(0, -'Handler'.length)
137
+ : handler.ctor.name;
138
+ const surface = handler.surface ? `/${handler.surface}` : '/default';
139
+ const remote = options.remotes?.[frond.name];
140
+ const op = {
141
+ ...contract,
142
+ ...(input ? { input } : {}),
143
+ ...(output.schema ? { output: output.schema } : {}),
144
+ id: `${frond.name}${surface}/${className}.${name}`,
145
+ operation: `${className}.${name}`,
146
+ name,
147
+ kind,
148
+ kindSource: override?.kind
149
+ ? 'explicit'
150
+ : 'convention',
151
+ handler: {
152
+ className: handler.ctor.name,
153
+ address: handler.address,
154
+ filePath: handler.filePath,
155
+ },
156
+ implementation,
157
+ binding: contract.binding,
158
+ parameters,
159
+ collectors: parameters.flatMap((parameter) => {
160
+ if (parameter.binding.source.kind !== 'collector')
161
+ return [];
162
+ const collector = collectorsByType.get(parameter.binding.source.typeName)?.[0];
163
+ return collector ? [{
164
+ parameter: parameter.name,
165
+ typeName: collector.typeName,
166
+ className: collector.ctor.name,
167
+ frond: frond.name,
168
+ filePath: collector.filePath,
169
+ }] : [];
170
+ }),
171
+ contexts: parameters
172
+ .filter((parameter) => parameter.binding.source.kind === 'context')
173
+ .map((parameter) => parameter.name),
174
+ placement: {
175
+ frond: frond.name,
176
+ runtime: remote ? 'remote' : 'local',
177
+ ...(remote ? { remote } : {}),
178
+ },
179
+ exposure: {
180
+ surfaces: surfacesOf(frond, handler),
181
+ adapters: exposedAdapters(handler, options.adapters),
182
+ },
183
+ outputClosed: output.closed,
184
+ semantics: EFFECTIVE_OPERATION_SEMANTICS,
185
+ };
186
+ effective.set(name, op);
187
+ operations.push(op);
188
+ }
189
+ }
190
+ }
191
+ // Topology and DI are part of the same effective program. A dependency targeting an
192
+ // actually remote frond is a refusal, not the warning appropriate to a future split.
193
+ for (const violation of verify({ fronds })) {
194
+ const remoteBoundary = options.remotes?.[violation.frond] !== undefined
195
+ || options.remotes?.[violation.dependsOn.frond] !== undefined;
196
+ resolutionDiagnostics.push({
197
+ severity: remoteBoundary && violation.rule === 'cross-frond-dependency'
198
+ ? 'blocking'
199
+ : violation.severity,
200
+ code: violation.rule,
201
+ filePath: violation.filePath,
202
+ frond: violation.frond,
203
+ subject: violation.subject,
204
+ message: violation.message,
205
+ });
206
+ }
207
+ const resolution = uniqueDiagnostics(resolutionDiagnostics);
208
+ return new EffectiveOperationModel(operations, uniqueDiagnostics([...scanDiagnostics, ...resolution]), resolution, byHandler);
209
+ }
210
+ function groupedCollectors(collectors) {
211
+ const grouped = new Map();
212
+ for (const collector of collectors) {
213
+ const held = grouped.get(collector.typeName) ?? [];
214
+ held.push(collector);
215
+ grouped.set(collector.typeName, held);
216
+ }
217
+ return grouped;
218
+ }
219
+ function normalizeBinding(contract, handler, frond, name, diagnostics) {
220
+ const params = contract.signature?.params ?? [];
221
+ if (!contract.binding) {
222
+ if (params.length === 0)
223
+ return { ...contract, binding: [] };
224
+ diagnostics.push({
225
+ severity: 'blocking',
226
+ code: 'operation-unbound',
227
+ filePath: handler.filePath,
228
+ frond: frond.name,
229
+ subject: `${handler.ctor.name}.${name}`,
230
+ message: `${handler.ctor.name}.${name} declares ${params.length} parameter(s) and has no binding plan.`,
231
+ });
232
+ return undefined;
233
+ }
234
+ if (params.length === 0)
235
+ return { ...contract, binding: contract.binding };
236
+ // Explicit plans are matched by parameter name and then placed in signature order.
237
+ // Array order is never allowed to become semantic authority.
238
+ const byName = new Map();
239
+ for (const binding of contract.binding) {
240
+ const held = byName.get(binding.name) ?? [];
241
+ held.push(binding);
242
+ byName.set(binding.name, held);
243
+ }
244
+ const expected = new Set(params.map((param) => param.name));
245
+ const invalid = params.filter((param) => (byName.get(param.name)?.length ?? 0) !== 1);
246
+ const extras = [...byName.keys()].filter((binding) => !expected.has(binding));
247
+ if (invalid.length > 0 || extras.length > 0) {
248
+ diagnostics.push({
249
+ severity: 'blocking',
250
+ code: 'operation-binding-invalid',
251
+ filePath: handler.filePath,
252
+ frond: frond.name,
253
+ subject: `${handler.ctor.name}.${name}`,
254
+ message: `Binding plan for ${handler.ctor.name}.${name} must bind every parameter exactly once by name. `
255
+ + `${invalid.length ? `Invalid: ${invalid.map((param) => param.name).join(', ')}. ` : ''}`
256
+ + `${extras.length ? `Unknown: ${extras.join(', ')}.` : ''}`,
257
+ });
258
+ return undefined;
259
+ }
260
+ return {
261
+ ...contract,
262
+ binding: params.map((param) => byName.get(param.name)[0]),
263
+ };
264
+ }
265
+ function validateProvenance(fronds, frond, handler, name, contract, parameters, localCollectors, diagnostics) {
266
+ let valid = true;
267
+ const declared = handler.ctor.__ops?.[name];
268
+ const explicitBinding = declared?.binding !== undefined
269
+ || handler.operations.get(name)?.binding !== undefined
270
+ || frond.operationsOverrides?.[name]?.binding !== undefined;
271
+ const ambiguousInput = diagnostics.some((diagnostic) => diagnostic.code === 'input-contract-ambiguous'
272
+ && diagnostic.subject === `${handler.ctor.name}.${name}`);
273
+ const body = parameters.filter((parameter) => parameter.binding.source.kind === 'body');
274
+ const inferredBody = new Set();
275
+ if (!explicitBinding && !ambiguousInput && contract.input) {
276
+ if (body.length === 1) {
277
+ inferredBody.add(body[0]);
278
+ }
279
+ else if (body.length > 1) {
280
+ const matches = body.filter((parameter) => schemaMatches(contract.input, contract.signature?.params[parameter.position]?.type));
281
+ if (matches.length > 1) {
282
+ diagnostics.push({
283
+ severity: 'blocking',
284
+ code: 'parameter-binding-ambiguous',
285
+ filePath: handler.filePath,
286
+ frond: frond.name,
287
+ subject: `${handler.ctor.name}.${name}`,
288
+ message: `Cannot resolve which parameter of ${handler.ctor.name}.${name} receives the body: `
289
+ + `${matches.map((parameter) => `${parameter.name}: ${parameter.type ?? 'unknown'}`).join('; ')} `
290
+ + 'all match the resolved input contract. Declare an explicit binding plan.',
291
+ });
292
+ return false;
293
+ }
294
+ if (matches.length === 1)
295
+ inferredBody.add(matches[0]);
296
+ }
297
+ }
298
+ // A type written with an inline object literal names nothing a collector can register
299
+ // under, so the parameter IS the body. Only a NAMED type can be the wrong-frond
300
+ // substitution the refusal below exists for.
301
+ for (const parameter of body) {
302
+ if (structural(contract.signature?.params[parameter.position]?.type))
303
+ inferredBody.add(parameter);
304
+ }
305
+ for (const parameter of parameters) {
306
+ const source = parameter.binding.source;
307
+ if (source.kind === 'collector') {
308
+ const matches = localCollectors.get(source.typeName) ?? [];
309
+ if (matches.length !== 1) {
310
+ valid = false;
311
+ diagnostics.push({
312
+ severity: 'blocking',
313
+ code: matches.length === 0 ? 'collector-unavailable' : 'collector-ambiguous',
314
+ filePath: handler.filePath,
315
+ frond: frond.name,
316
+ subject: `${handler.ctor.name}.${name}(${parameter.name})`,
317
+ message: matches.length === 0
318
+ ? `No collector in frond '${frond.name}' resolves ${parameter.name}: ${parameter.type ?? source.typeName}.`
319
+ : `${matches.length} collectors in frond '${frond.name}' resolve '${source.typeName}'.`,
320
+ });
321
+ }
322
+ continue;
323
+ }
324
+ if (source.kind !== 'body' || explicitBinding || ambiguousInput)
325
+ continue;
326
+ const typeName = lowerFirst(contract.signature?.params[parameter.position]?.type.name ?? '');
327
+ const elsewhere = fronds.flatMap((candidate) => candidate === frond
328
+ ? []
329
+ : candidate.collectors.filter((collector) => collector.typeName === typeName));
330
+ if (elsewhere.length > 0) {
331
+ // verify() supplies the more complete topology diagnostic; do not also call this
332
+ // an unknown body.
333
+ continue;
334
+ }
335
+ // An inferred body must be backed by exactly one resolved interpretation. With one
336
+ // body, the input itself is sufficient evidence; with several, exactly one type may
337
+ // match. Explicit plans are authoritative because they state every provenance.
338
+ const recognized = explicitBinding || inferredBody.has(parameter);
339
+ if (recognized)
340
+ continue;
341
+ valid = false;
342
+ diagnostics.push({
343
+ severity: 'blocking',
344
+ code: 'parameter-binding-unknown',
345
+ filePath: handler.filePath,
346
+ frond: frond.name,
347
+ subject: `${handler.ctor.name}.${name}(${parameter.name})`,
348
+ message: `Cannot resolve a provenance for ${handler.ctor.name}.${name}(`
349
+ + `${parameter.name}: ${parameter.type ?? 'unknown'}). It is not a primitive, context, fact, `
350
+ + 'local collector or resolved input schema. Declare an explicit binding.',
351
+ });
352
+ }
353
+ return valid;
354
+ }
355
+ function structural(type) {
356
+ return type !== undefined && type.raw.includes('{');
357
+ }
358
+ function schemaMatches(schema, type) {
359
+ const names = new Set([schema.name, schema.derivation?.sourceName].filter(Boolean));
360
+ if (type?.name && names.has(type.name))
361
+ return true;
362
+ return type?.generics?.some((generic) => generic.name && names.has(generic.name)) ?? false;
363
+ }
364
+ function implementationOf(frond, handler, name, diagnostics) {
365
+ const override = frond.operationsOverrides?.[name];
366
+ const candidates = override?.handlerName
367
+ ? frond.handlers.filter((candidate) => candidate.ctor.name === override.handlerName)
368
+ : [handler];
369
+ if (candidates.length !== 1) {
370
+ diagnostics.push({
371
+ severity: 'blocking',
372
+ code: candidates.length === 0 ? 'operation-handler-unresolved' : 'operation-handler-ambiguous',
373
+ filePath: handler.filePath,
374
+ frond: frond.name,
375
+ subject: `${handler.ctor.name}.${name}`,
376
+ message: `Operation ${handler.ctor.name}.${name} names handler '${override?.handlerName}', `
377
+ + `but ${candidates.length} matching handlers were found.`,
378
+ });
379
+ return undefined;
380
+ }
381
+ const implementation = candidates[0];
382
+ const method = override?.method ?? name;
383
+ const declared = implementation.operations.has(method)
384
+ || typeof implementation.ctor.prototype?.[method] === 'function'
385
+ || method in (implementation.ctor.__ops ?? {});
386
+ if (!declared) {
387
+ diagnostics.push({
388
+ severity: 'blocking',
389
+ code: 'operation-method-unresolved',
390
+ filePath: handler.filePath,
391
+ frond: frond.name,
392
+ subject: `${handler.ctor.name}.${name}`,
393
+ message: `Operation ${handler.ctor.name}.${name} resolves to `
394
+ + `${implementation.ctor.name}.${method}, but that method does not exist.`,
395
+ });
396
+ return undefined;
397
+ }
398
+ return {
399
+ className: implementation.ctor.name,
400
+ address: implementation.address,
401
+ method,
402
+ filePath: implementation.filePath,
403
+ };
404
+ }
405
+ function effectiveOutput(frond, handler, name, contract) {
406
+ const perOperation = handler.ctor.__opOutputs?.[name];
407
+ if (perOperation)
408
+ return { schema: perOperation, closed: true };
409
+ if (contract.output)
410
+ return { schema: contract.output, closed: false };
411
+ const handlerWide = handler.outputOverride
412
+ ?? handler.ctor.__output;
413
+ if (handlerWide)
414
+ return { schema: handlerWide, closed: false };
415
+ const target = targetOf(handler.ctor);
416
+ const address = target?.name ? lowerFirst(target.name) : handler.address;
417
+ const entity = frond.entities.find((candidate) => candidate.name === address);
418
+ return { ...(entity ? { schema: entity.entityClass } : {}), closed: false };
419
+ }
420
+ function surfacesOf(frond, handler) {
421
+ if (handler.surface)
422
+ return [handler.surface];
423
+ const surfaces = ['default'];
424
+ for (const [surface, addresses] of Object.entries(frond.surfaces ?? {})) {
425
+ const dedicated = frond.handlers.some((candidate) => candidate.address === handler.address && candidate.surface === surface);
426
+ if (!dedicated && addresses.some((address) => address.toLowerCase() === handler.address.toLowerCase()))
427
+ surfaces.push(surface);
428
+ }
429
+ return [surfaces[0], ...surfaces.slice(1).sort()];
430
+ }
431
+ function exposedAdapters(handler, adapters) {
432
+ if (handler.exposed === false && !handler.surface)
433
+ return [];
434
+ return Object.entries(adapters ?? {})
435
+ .filter(([, enabled]) => enabled === true)
436
+ .map(([adapter]) => adapter)
437
+ .sort();
438
+ }
439
+ function uniqueDiagnostics(diagnostics) {
440
+ const seen = new Set();
441
+ return diagnostics.filter((diagnostic) => {
442
+ const key = [diagnostic.code, diagnostic.filePath, diagnostic.subject, diagnostic.message].join('\0');
443
+ if (seen.has(key))
444
+ return false;
445
+ seen.add(key);
446
+ return true;
447
+ });
448
+ }
449
+ //# sourceMappingURL=effective-operation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effective-operation.js","sourceRoot":"","sources":["../src/effective-operation.ts"],"names":[],"mappings":"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"}
package/dist/emit.d.ts CHANGED
@@ -45,7 +45,7 @@ export declare function factOfEmitKey(key: string): string | undefined;
45
45
  * `Fact<T>` parameter is a fact about one operation, and `computeBindingPlan` has already
46
46
  * written it into the plan (`app.listensTo()`).
47
47
  */
48
- export declare function factsAnnouncedBy(handlers: ReadonlyArray<{
48
+ export declare function factsAnnouncedBy(handlers: readonly {
49
49
  deps: readonly string[];
50
- }>): string[];
50
+ }[]): string[];
51
51
  //# sourceMappingURL=emit.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"emit.d.ts","sourceRoot":"","sources":["../src/emit.ts"],"names":[],"mappings":"AAuBA;;;;;;;GAOG;AACH,MAAM,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAEjD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AAExB;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9C;AAID,+EAA+E;AAC/E,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAI7D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC;IAAE,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAAC,GAAG,MAAM,EAAE,CAO/F"}
1
+ {"version":3,"file":"emit.d.ts","sourceRoot":"","sources":["../src/emit.ts"],"names":[],"mappings":"AAuBA;;;;;;;GAOG;AACH,MAAM,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAEjD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AAExB;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9C;AAID,+EAA+E;AAC/E,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAI7D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,SAAS;IAAE,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,EAAE,GAAG,MAAM,EAAE,CAO3F"}
package/dist/emit.js CHANGED
@@ -19,7 +19,7 @@
19
19
  * day at-least-once is wanted, a real channel goes UNDER this, in the transport — the
20
20
  * dispatch line becomes a publish and a consumer calls the same door on the far side.
21
21
  */
22
- import { toRegistrationName } from './contract.js';
22
+ import { lowerFirst } from '@fougere/schema';
23
23
  /**
24
24
  * The container key of an emission — THE one place that spells the format.
25
25
  *
@@ -28,7 +28,7 @@ import { toRegistrationName } from './contract.js';
28
28
  * pair that is split is the pair that drifts.
29
29
  */
30
30
  export function emitKeyOf(fact) {
31
- return `${toRegistrationName(fact)}Emit`;
31
+ return `${lowerFirst(fact)}Emit`;
32
32
  }
33
33
  const SUFFIX = 'Emit';
34
34
  /** The fact behind an emission key, or `undefined` when the key is not one. */
package/dist/emit.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"emit.js","sourceRoot":"","sources":["../src/emit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AA8BnD;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;AAC3C,CAAC;AAED,MAAM,MAAM,GAAG,MAAM,CAAC;AAEtB,+EAA+E;AAC/E,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,OAAO,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;QACvD,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;QAC9B,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAoD;IACnF,OAAO,CAAC,GAAG,IAAI,GAAG,CAChB,QAAQ;aACL,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;aAClC,GAAG,CAAC,aAAa,CAAC;aAClB,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,CACxD,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"emit.js","sourceRoot":"","sources":["../src/emit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AA8B7C;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;AACnC,CAAC;AAED,MAAM,MAAM,GAAG,MAAM,CAAC;AAEtB,+EAA+E;AAC/E,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,OAAO,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;QACvD,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;QAC9B,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAgD;IAC/E,OAAO,CAAC,GAAG,IAAI,GAAG,CAChB,QAAQ;aACL,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;aAClC,GAAG,CAAC,aAAa,CAAC;aAClB,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,CACxD,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,10 @@
1
+ type Operation = (...args: any[]) => unknown;
2
+ /** Facade for a remote contract whose operation names are not known before discovery. */
3
+ export declare class DynamicFacade {
4
+ private readonly operation;
5
+ readonly operations: Record<string, Operation>;
6
+ constructor(operation: (name: string) => Operation);
7
+ private isOperationName;
8
+ }
9
+ export {};
10
+ //# sourceMappingURL=DynamicFacade.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DynamicFacade.d.ts","sourceRoot":"","sources":["../../src/entry/DynamicFacade.ts"],"names":[],"mappings":"AAAA,KAAK,SAAS,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC;AAE7C,yFAAyF;AACzF,qBAAa,aAAa;IAGZ,OAAO,CAAC,QAAQ,CAAC,SAAS;IAFtC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;gBAElB,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS;IAenE,OAAO,CAAC,eAAe;CAMxB"}