@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,77 @@
1
+ /**
2
+ * HTTP reading of an error — used by HTTP bridges (REST, Next, Inertia).
3
+ *
4
+ * Not imported by GraphQL, CLI, or event bus bridges. The vocabulary it projects
5
+ * is in `errors.ts` and knows nothing of this file.
6
+ */
7
+ import { FougereError, ErrorCode } from './errors.js';
8
+ import { Logger } from '../builtins/logger.js';
9
+ /**
10
+ * An INTERNAL_ERROR is the one class of error whose message never leaves: it was not
11
+ * written for a caller and may quote a path, a query or a row. Masking it is right, and
12
+ * masking it *silently* is how a bug becomes unobservable — the operator loses the same
13
+ * sentence the attacker does. So the mask and the record live in one function: whoever
14
+ * calls `toPublicError` cannot forget the half that keeps the error findable.
15
+ */
16
+ const log = new Logger('error');
17
+
18
+ const HTTP_STATUS: Record<ErrorCode, number> = {
19
+ [ErrorCode.VALIDATION_FAILED]: 400,
20
+ [ErrorCode.BAD_REQUEST]: 400,
21
+ [ErrorCode.UNAUTHORIZED]: 401,
22
+ [ErrorCode.FORBIDDEN]: 403,
23
+ [ErrorCode.NOT_FOUND]: 404,
24
+ [ErrorCode.GONE]: 410,
25
+ [ErrorCode.CONFLICT]: 409,
26
+ [ErrorCode.LOCKED]: 423,
27
+ [ErrorCode.METHOD_NOT_ALLOWED]: 405,
28
+ [ErrorCode.PRECONDITION_FAILED]: 412,
29
+ [ErrorCode.PAYLOAD_TOO_LARGE]: 413,
30
+ [ErrorCode.UNPROCESSABLE_ENTITY]: 422,
31
+ [ErrorCode.TOO_MANY_REQUESTS]: 429,
32
+ [ErrorCode.REQUEST_TIMEOUT]: 408,
33
+ [ErrorCode.INTERNAL_ERROR]: 500,
34
+ [ErrorCode.NOT_IMPLEMENTED]: 501,
35
+ [ErrorCode.BAD_GATEWAY]: 502,
36
+ [ErrorCode.SERVICE_UNAVAILABLE]: 503,
37
+ [ErrorCode.GATEWAY_TIMEOUT]: 504,
38
+ };
39
+
40
+ /** Map a FougereError code to its HTTP status. */
41
+ function httpStatusFor(code: ErrorCode): number {
42
+ return HTTP_STATUS[code] ?? 500;
43
+ }
44
+
45
+ /**
46
+ * Serialize an application error for an untrusted caller.
47
+ *
48
+ * Every code but INTERNAL_ERROR was written for the caller and travels whole. An
49
+ * INTERNAL_ERROR is replaced by a constant — and logged here, with its cause, so the
50
+ * sentence exists exactly once: on the server.
51
+ */
52
+ export function toPublicError(err: FougereError): ReturnType<FougereError['toJSON']> {
53
+ if (err.code !== ErrorCode.INTERNAL_ERROR) return err.toJSON();
54
+ const where = [err.entity, err.operation].filter(Boolean).join('.');
55
+ log.error(`${where || 'internal'}: ${err.message}`, err.cause ?? err);
56
+ return {
57
+ code: ErrorCode.INTERNAL_ERROR,
58
+ message: 'Internal error',
59
+ ...(err.entity && { entity: err.entity }),
60
+ ...(err.operation && { operation: err.operation }),
61
+ };
62
+ }
63
+
64
+ /** Map any thrown error to `{ status, body }` for HTTP bridges. */
65
+ export function toHttpError(err: unknown): { status: number; body: ReturnType<FougereError['toJSON']> } {
66
+ if (err instanceof FougereError) {
67
+ return { status: httpStatusFor(err.code), body: toPublicError(err) };
68
+ }
69
+ // A throw that never became a FougereError is masked by the same rule, so it goes
70
+ // through the same door rather than growing a second, quieter one here.
71
+ const framed = new FougereError({
72
+ code: ErrorCode.INTERNAL_ERROR,
73
+ message: (err as { message?: string })?.message ?? 'Internal error',
74
+ cause: err,
75
+ });
76
+ return { status: 500, body: toPublicError(framed) };
77
+ }
@@ -0,0 +1,10 @@
1
+ /** Compatibility entry point. New code imports the invocation value from contract. */
2
+ export {
3
+ Invocation,
4
+ EMPTY_INVOCATION,
5
+ canonicalInvocation,
6
+ } from '../contract/Invocation.js';
7
+ export type {
8
+ InvocationContext,
9
+ InvocationInput,
10
+ } from '../contract/Invocation.js';
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Logger middleware — logs every operation with timing.
3
+ */
4
+ import type { AppMiddleware } from './middleware.js';
5
+ import type { Logger } from '../builtins/logger.js';
6
+
7
+ /**
8
+ * Create a logger middleware that logs operation entry, exit, and errors.
9
+ *
10
+ * ```ts
11
+ * app.use(loggerMiddleware(app.resolve('Logger')))
12
+ * ```
13
+ */
14
+ export function loggerMiddleware(logger: Logger): AppMiddleware {
15
+ return async (ctx, next) => {
16
+ const start = performance.now();
17
+ logger.info(`${ctx.entity}.${ctx.operation}`);
18
+ try {
19
+ const result = await next();
20
+ const ms = (performance.now() - start).toFixed(1);
21
+ logger.info(`${ctx.entity}.${ctx.operation} (${ms}ms)`);
22
+ return result;
23
+ } catch (err) {
24
+ const ms = (performance.now() - start).toFixed(1);
25
+ logger.error(`${ctx.entity}.${ctx.operation} (${ms}ms)`, err);
26
+ throw err;
27
+ }
28
+ };
29
+ }
@@ -0,0 +1,47 @@
1
+ /**
2
+ * App-level middleware — intercepts handler facade operations.
3
+ *
4
+ * Works regardless of entry point (HTTP, Nitro, event bus, CLI, tests).
5
+ */
6
+
7
+ // ── Types ───────────────────────────────────────
8
+ export interface OperationContext {
9
+ /** Entity name (e.g. 'product'). */
10
+ entity: string;
11
+ /**
12
+ * Which frond owns this operation — the unit that gets deployed, and therefore the
13
+ * one a reader groups by first. Absent only where no frond claims the call.
14
+ */
15
+ frond?: string;
16
+ /** Operation name (e.g. 'create', 'findById', 'searchByTitle'). */
17
+ operation: string;
18
+ /** Arguments passed to the operation. */
19
+ args: unknown[];
20
+ /** Extensible bag — middlewares deposit data here (user, permissions, etc.). */
21
+ state: Record<string, unknown>;
22
+ /** Transport-agnostic invocation context (params, query, body, state). */
23
+ invocation?: import('./invocation.js').InvocationContext;
24
+ }
25
+
26
+ export type AppNext = () => Promise<unknown>;
27
+ export type AppMiddleware = (ctx: OperationContext, next: AppNext) => Promise<unknown>;
28
+
29
+ // ── Runner ──────────────────────────────────────
30
+
31
+ /**
32
+ * Execute a middleware chain (onion model) then the handler.
33
+ */
34
+ export function runMiddlewares(
35
+ middlewares: AppMiddleware[],
36
+ ctx: OperationContext,
37
+ handler: AppNext,
38
+ ): Promise<unknown> {
39
+ let index = 0;
40
+ const next = (): Promise<unknown> => {
41
+ if (index < middlewares.length) {
42
+ return middlewares[index++](ctx, next);
43
+ }
44
+ return handler();
45
+ };
46
+ return next();
47
+ }
@@ -0,0 +1,258 @@
1
+ import type { SchemaView } from '@fougere/schema';
2
+ import type { BindingPlan } from '../boot/binding.js';
3
+ import { computeBindingPlan } from '../boot/binding.js';
4
+ import type { HandlerEntry, FrondDescriptor } from '../scan/frond.js';
5
+ import type { ParsedMethod, ParsedType, ParsedParam } from '../scan/handler-parser.js';
6
+
7
+ /**
8
+ * The contract of one operation — everything the façade needs to serve a call.
9
+ *
10
+ * Produced two ways, indistinguishable once here: the scan DERIVES it from a
11
+ * method's parsed signature, a prefab handler DECLARES it outright. The façade
12
+ * consumes contracts and nothing else — it knows no operation by name, and a
13
+ * declared contract survives a scan that resolved nothing.
14
+ */
15
+ export interface OperationContract {
16
+ /** Judged on the way in. The view carries its own mode (`partial()` → patch). */
17
+ input?: SchemaView;
18
+ /** Projected on the way out. */
19
+ output?: SchemaView;
20
+ /** Where each argument is read from in the invocation. */
21
+ binding?: BindingPlan;
22
+ /**
23
+ * The operation in words, for a caller that meets it over the wire and has to
24
+ * choose. Same three producers as the rest: the scan derives it from the method's
25
+ * doc comment, a prefab declares it, config states it and wins.
26
+ */
27
+ description?: string;
28
+ /**
29
+ * How MUCH comes back — the half of the return type that `output` cannot say.
30
+ *
31
+ * `output` is the shape of ONE row; it is silent on whether the op hands back one,
32
+ * several, or a page. The prefab knows (`list` returns a `ListResult`, `findById`
33
+ * returns `T | undefined`) and the card did not, so anything generating a signature
34
+ * from the card would have written `list(): Promise<Post[]>` — false, and a false
35
+ * signature is worse than none.
36
+ *
37
+ * `none` says there is no shaped output at all (a boolean, a void), not that the op
38
+ * returns nothing.
39
+ */
40
+ cardinality?: 'one' | 'maybe' | 'many' | 'page' | 'none';
41
+ /**
42
+ * The argument names and TYPES — the one thing `binding` cannot say.
43
+ *
44
+ * `binding` says where an argument is read from, `cardinality` how much comes back;
45
+ * neither gives a type, and a GraphQL argument needs one. So this is not the scan's
46
+ * private material: a prefab fills it too, from signatures it wrote itself. `binding`
47
+ * still wins on where an argument comes from.
48
+ */
49
+ signature?: ParsedMethod;
50
+ }
51
+
52
+ /**
53
+ * Read an op's cardinality off its parsed return type.
54
+ *
55
+ * `Promise` is unwrapped first — it says when, not how much. `ListResult<T>` extends
56
+ * `Array<T>`, so it must be recognised BEFORE the array test or a page would read as
57
+ * a plain list and lose its `total`/`hasMore`.
58
+ */
59
+ export function cardinalityOf(type: ParsedType | undefined): OperationContract['cardinality'] {
60
+ if (!type) return undefined;
61
+ const inner = type.name === 'Promise' ? type.generics?.[0] : type;
62
+ if (!inner) return 'none';
63
+ if (inner.name === 'ListResult') return 'page';
64
+ if (inner.array) return 'many';
65
+ if (PRIMITIVE_RETURNS.has(inner.name)) return 'none';
66
+ return inner.nullable || inner.undefined ? 'maybe' : 'one';
67
+ }
68
+
69
+ /** A return that carries no schema — the card has nothing to project onto it. */
70
+ const PRIMITIVE_RETURNS = new Set(['boolean', 'string', 'number', 'void', 'undefined', 'unknown', 'any']);
71
+
72
+ /** Map of operation name → its contract. */
73
+ export type OperationsMap = Map<string, OperationContract>;
74
+
75
+ export type { ParsedType, ParsedParam };
76
+
77
+ // ─── Operation intent (read vs write) ──────────
78
+ // Naming convention for inferred handlers — scheduled to die with the
79
+ // handler-kind plan (docs/notes/handler-kind.md). Lives here, NOT in
80
+ // @fougere/schema: it is a runtime convention about operations, not a
81
+ // schema concept.
82
+
83
+ export type OperationKind = 'query' | 'command';
84
+
85
+ /** The convention's evidence, including both sides when a composed name contradicts itself. */
86
+ export interface OperationKindInference {
87
+ kind?: OperationKind;
88
+ queryMatches: string[];
89
+ commandMatches: string[];
90
+ }
91
+
92
+ /**
93
+ * Deliberately finite: these are verbs whose leading use carries a stable read meaning.
94
+ * `stats` and `check` preserve conventions already used by the project; the rest are the
95
+ * ordinary query vocabulary shared by the built-in adapters.
96
+ */
97
+ const QUERY_VERBS = new Set([
98
+ 'all', 'check', 'count', 'exists', 'fetch', 'find', 'get', 'has', 'health', 'list',
99
+ 'load', 'mine', 'ping', 'quote', 'read', 'search', 'stats', 'status', 'who',
100
+ ]);
101
+
102
+ /**
103
+ * Leading verbs whose write intent is strong enough to infer. Domain words (`mine`,
104
+ * `drafts`, `bySlug`) stay out: a convention may omit syntax, but may not invent intent.
105
+ */
106
+ const COMMAND_VERBS = new Set([
107
+ 'add', 'apply', 'archive', 'assign', 'charge', 'checkout', 'complete', 'create',
108
+ 'deactivate', 'delete', 'disable', 'edit', 'enable', 'execute', 'link', 'move', 'notify',
109
+ 'open', 'pay', 'post', 'publish', 'queue', 'rebuild', 'record', 'refresh', 'refund',
110
+ 'reindex', 'remove', 'rename', 'republish', 'reserve', 'restore', 'retitle', 'run',
111
+ 'schedule', 'send', 'set', 'settle', 'stop', 'sync', 'toggle', 'track', 'transfer',
112
+ 'unassign', 'update', 'upsert', 'withdraw', 'write',
113
+ ]);
114
+
115
+ const COMPOUND_CONNECTORS = new Set(['and', 'or', 'then']);
116
+
117
+ /** The two lists, for a refusal that has to say what a name could have led with. */
118
+ export function knownVerbs(): { query: string[]; command: string[] } {
119
+ return { query: [...QUERY_VERBS].sort(), command: [...COMMAND_VERBS].sort() };
120
+ }
121
+
122
+ /** `getOrCreatePost` → `['get', 'or', 'create', 'post']`; `hash` never becomes `has`. */
123
+ function wordsOf(name: string): string[] {
124
+ return name
125
+ .replace(/([a-z\d])([A-Z])/g, '$1 $2')
126
+ .replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2')
127
+ .split(/[^A-Za-z\d]+/)
128
+ .filter(Boolean)
129
+ .map((word) => word.toLowerCase());
130
+ }
131
+
132
+ /**
133
+ * Infer only when the leading word names one convention and a composed clause does not
134
+ * name the opposite one. This is intentionally partial: `ofBook`, `computeReport` and
135
+ * `getOrCreateUser` have no inferred kind instead of falling through to command/query.
136
+ */
137
+ export function inferOperationKind(name: string): OperationKindInference {
138
+ const words = wordsOf(name);
139
+ const first = words[0];
140
+ const primary = first && QUERY_VERBS.has(first)
141
+ ? 'query'
142
+ : first && COMMAND_VERBS.has(first)
143
+ ? 'command'
144
+ : undefined;
145
+
146
+ if (!primary) return { kind: undefined, queryMatches: [], commandMatches: [] };
147
+
148
+ const queryMatches = primary === 'query' ? [first] : [];
149
+ const commandMatches = primary === 'command' ? [first] : [];
150
+ for (let i = 1; i < words.length; i++) {
151
+ if (!COMPOUND_CONNECTORS.has(words[i - 1])) continue;
152
+ if (QUERY_VERBS.has(words[i])) queryMatches.push(words[i]);
153
+ if (COMMAND_VERBS.has(words[i])) commandMatches.push(words[i]);
154
+ }
155
+
156
+ return {
157
+ kind: queryMatches.length > 0 && commandMatches.length === 0
158
+ ? 'query'
159
+ : commandMatches.length > 0 && queryMatches.length === 0
160
+ ? 'command'
161
+ : undefined,
162
+ queryMatches,
163
+ commandMatches,
164
+ };
165
+ }
166
+
167
+ /** Explicit config is authoritative; otherwise the finite convention may decline. */
168
+ export function resolveOperationKind(
169
+ name: string,
170
+ overrides?: Record<string, { kind?: OperationKind }>,
171
+ ): OperationKind | undefined {
172
+ return overrides?.[name]?.kind ?? inferOperationKind(name).kind;
173
+ }
174
+
175
+ /**
176
+ * Compatibility for boolean readers. An indeterminate name throws: returning `false`
177
+ * here would recreate the silent command fallback this module exists to prevent.
178
+ */
179
+ export function isReadOp(name: string): boolean {
180
+ return requireOperationKind(name) === 'query';
181
+ }
182
+
183
+ /** Resolve an explicit/conventional kind for existing adapters, never by fallback. */
184
+ export function resolveIsReadOp(
185
+ name: string,
186
+ overrides?: Record<string, { kind?: OperationKind }>,
187
+ ): boolean {
188
+ return requireOperationKind(name, overrides) === 'query';
189
+ }
190
+
191
+ function requireOperationKind(
192
+ name: string,
193
+ overrides?: Record<string, { kind?: OperationKind }>,
194
+ ): OperationKind {
195
+ const kind = resolveOperationKind(name, overrides);
196
+ if (kind) return kind;
197
+ throw new Error(
198
+ `Cannot infer operation kind from '${name}'. `
199
+ + `Declare operations.${name}.kind as 'query' or 'command' in frond.config.ts.`,
200
+ );
201
+ }
202
+
203
+
204
+ /**
205
+ * The contract of every operation a handler serves — the three producers, merged once.
206
+ *
207
+ * This lived inline in `buildFacade`, which made the façade the only thing that could
208
+ * answer "what is this op's contract, really?". Anything else asking — a checker, a
209
+ * client generator, a descriptor — had to redo the merge, and a second opinion that
210
+ * drifts reports nothing wrong while looking at the wrong thing.
211
+ *
212
+ * The order is a claim about authority, not a convenience:
213
+ *
214
+ * 1. a prefab DECLARES what it built (`Crud(E).__ops`) — runtime, so it survives a
215
+ * scan that resolved nothing;
216
+ * 2. the scan DERIVES from source — a method written in this very file is the
217
+ * author's own word and beats everything; a method it merely READ on a base
218
+ * class is a guess about someone else's code, and yields to that code's own
219
+ * declaration;
220
+ * 3. `frond.config.ts` STATES — the most explicit statement, made by whoever
221
+ * assembles the app, and the only answer for an op inherited from an installed
222
+ * base class the workspace-only scan cannot see. Merged per key, so stating a
223
+ * `binding` alone does not erase an `input` the scan found.
224
+ *
225
+ * Pure: no container, no instance, no disk. The binding plan is resolved here, so
226
+ * nothing downstream ever meets an AST.
227
+ */
228
+ export function resolveContracts(
229
+ handler: Pick<HandlerEntry, 'ctor' | 'operations'>,
230
+ overrides: FrondDescriptor['operationsOverrides'],
231
+ collectorTypeNames: Set<string>,
232
+ ): OperationsMap {
233
+ const declared = (handler.ctor as { __ops?: Record<string, OperationContract> }).__ops ?? {};
234
+ const contracts: OperationsMap = new Map(Object.entries(declared));
235
+
236
+ for (const [opName, scanned] of handler.operations) {
237
+ if (scanned.signature?.inherited && opName in declared) continue;
238
+ contracts.set(opName, {
239
+ ...scanned,
240
+ binding: scanned.binding
241
+ ?? (scanned.signature ? computeBindingPlan(scanned.signature.params, collectorTypeNames) : undefined),
242
+ });
243
+ }
244
+
245
+ for (const [opName, override] of Object.entries(overrides ?? {})) {
246
+ const { input, output, binding, description } = override;
247
+ if (input === undefined && output === undefined && binding === undefined && description === undefined) continue;
248
+ contracts.set(opName, {
249
+ ...contracts.get(opName),
250
+ ...(input !== undefined && { input }),
251
+ ...(output !== undefined && { output }),
252
+ ...(binding !== undefined && { binding }),
253
+ ...(description !== undefined && { description }),
254
+ });
255
+ }
256
+
257
+ return contracts;
258
+ }
@@ -1 +0,0 @@
1
- {"version":3,"file":"binding.d.ts","sourceRoot":"","sources":["../src/binding.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAKzD,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE;AAC3C;;;;;;;GAOG;GACD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAA;CAAE,GAC9D;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE;AACrB,2EAA2E;GACzE;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;AAEtB,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,MAAM,WAAW,GAAG,YAAY,EAAE,CAAC;AAczC;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,WAAW,EAAE,EACrB,oBAAoB,EAAE,GAAG,CAAC,MAAM,CAAC,GAChC,WAAW,CAuDb;AAID,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACnD;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,WAAW,EACjB,GAAG,EAAE,iBAAiB,EACtB,gBAAgB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,iBAAiB,GAAG,SAAS,GACvE,OAAO,CAAC,OAAO,EAAE,CAAC,CA0CpB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"binding.js","sourceRoot":"","sources":["../src/binding.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AA6BnD,iDAAiD;AAEjD,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;AAE5D,SAAS,WAAW,CAAC,QAAgB;IACnC,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC3C,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC7C,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,iDAAiD;AAEjD;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAChC,MAAqB,EACrB,oBAAiC;IAEjC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC1B,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QACjC,MAAM,aAAa,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;QAE7C,oFAAoF;QACpF,qFAAqF;QACrF,iCAAiC;QACjC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QACvF,IAAI,MAAM,EAAE,CAAC;YACX,OAAO;gBACL,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,MAAM,EAAE,EAAE,IAAI,EAAE,MAAe,EAAE,QAAQ,EAAE,kBAAkB,CAAC,MAAM,CAAC,EAAE;gBACvE,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,KAAK;aAClC,CAAC;QACJ,CAAC;QAED,6DAA6D;QAC7D,IAAI,oBAAoB,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;YAC5C,OAAO;gBACL,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,MAAM,EAAE,EAAE,IAAI,EAAE,WAAoB,EAAE,UAAU,EAAE,aAAa,EAAE;gBACjE,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,KAAK;aAClC,CAAC;QACJ,CAAC;QAED,iDAAiD;QACjD,IAAI,QAAQ,KAAK,mBAAmB,EAAE,CAAC;YACrC,OAAO;gBACL,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,MAAM,EAAE,EAAE,IAAI,EAAE,SAAkB,EAAE;gBACpC,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,KAAK;aAClC,CAAC;QACJ,CAAC;QAED,sDAAsD;QACtD,IAAI,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,OAAO;gBACL,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,MAAM,EAAE;oBACN,IAAI,EAAE,OAAgB;oBACtB,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC;iBAC9B;gBACD,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,KAAK;aAClC,CAAC;QACJ,CAAC;QAED,4BAA4B;QAC5B,OAAO;YACL,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,MAAM,EAAE,EAAE,IAAI,EAAE,MAAe,EAAE;YACjC,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,KAAK;SAClC,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAQD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,IAAiB,EACjB,GAAsB,EACtB,gBAAwE;IAExE,MAAM,IAAI,GAAc,EAAE,CAAC;IAE3B,KAAK,MAAM,OAAO,IAAI,IAAI,EAAE,CAAC;QAC3B,QAAQ,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAC5B,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,MAAM,SAAS,GAAG,gBAAgB,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBAChE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;gBAChE,MAAM;YACR,CAAC;YACD,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACf,MAAM;YACR,CAAC;YACD,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,IAAI,GAAG,GAAY,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACrF,IAAI,GAAG,IAAI,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,QAAQ;oBAAE,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;gBACzE,IAAI,GAAG,IAAI,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS;oBAAE,GAAG,GAAG,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,IAAI,CAAC;gBAC5G,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACf,MAAM;YACR,CAAC;YACD,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,2EAA2E;gBAC3E,8EAA8E;gBAC9E,4EAA4E;gBAC5E,8EAA8E;gBAC9E,mEAAmE;gBACnE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACpB,MAAM;YACR,CAAC;YACD,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACpB,MAAM;YACR,CAAC;YACD,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACrB,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"boot.d.ts","sourceRoot":"","sources":["../src/boot.ts"],"names":[],"mappings":"AAEA,OAAO,EAAc,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEpE,OAAO,KAAK,EAAE,GAAG,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,MAAM,WAAW,WAAW;IAC1B,+CAA+C;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAChC,mCAAmC;IACnC,eAAe,EAAE,MAAM,SAAS,CAAC;IACjC,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,8EAA8E;IAC9E,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,SAAS,CAAC;IAC7C;;;OAGG;IACH,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK;QAC9B,EAAE,CAAC,EAAE,OAAO,CAAC;QACb,UAAU,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAC;QAC3C,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;KAChD,CAAC;CACH;AAED;;;;;GAKG;AACH,wBAAsB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,CAiD7D"}
package/dist/boot.js DELETED
@@ -1,53 +0,0 @@
1
- import { createApp } from './bootstrap.js';
2
- import { orderSeeds, runSeeds } from './seed.js';
3
- import { loadConfig } from './config-loader.js';
4
- import { Logger } from './builtins/logger.js';
5
- /**
6
- * Boot a Fougere app from fougere.config.ts.
7
- *
8
- * Handles: config loading, container creation, DB setup, seeding.
9
- * Works for any surface (Nuxt, GraphQL standalone, CLI, tests).
10
- */
11
- export async function boot(options) {
12
- const bootStart = performance.now();
13
- const log = new Logger('boot', { level: process.env.FOUGERE_LOG_LEVEL ?? 'debug' });
14
- const root = options.root ?? process.cwd();
15
- log.info(`root: ${root}`);
16
- log.debug('loading config');
17
- const fileConfig = await loadConfig(root);
18
- const config = { ...fileConfig, ...options.config };
19
- log.info('config loaded');
20
- let dbSetup;
21
- if (options.db) {
22
- log.debug('initializing database');
23
- dbSetup = options.db(config);
24
- log.info('database initialized');
25
- }
26
- log.debug('creating app (scan + container)');
27
- const app = await createApp({
28
- root,
29
- createContainer: options.createContainer,
30
- ormFactory: dbSetup?.ormFactory,
31
- db: dbSetup?.db,
32
- auth: config.auth,
33
- fronds: options.fronds,
34
- remotes: options.remotes,
35
- remoteTransport: options.remoteTransport,
36
- });
37
- if (dbSetup?.afterBoot) {
38
- log.debug('running migrations');
39
- await dbSetup.afterBoot(app);
40
- log.info('migrations done');
41
- }
42
- // Run seeds — in dependency order, so a referrer never lands before its target.
43
- const seeds = orderSeeds(app.fronds);
44
- if (seeds.length > 0) {
45
- log.debug(`seeding ${seeds.length} entities: ${seeds.map((s) => s.entityName).join(' → ')}`);
46
- await runSeeds(app, seeds, (message) => log.debug(message));
47
- log.info('seeding done');
48
- }
49
- const ms = (performance.now() - bootStart).toFixed(0);
50
- log.info(`ready in ${ms}ms — ${app.fronds.length} frond(s)`);
51
- return app;
52
- }
53
- //# sourceMappingURL=boot.js.map
package/dist/boot.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"boot.js","sourceRoot":"","sources":["../src/boot.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAA6C,MAAM,YAAY,CAAC;AA+EnG,uCAAuC;AACvC,wBAAsB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,CAo3BvE"}