@primate/core 0.4.6 → 0.6.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 (556) hide show
  1. package/lib/private/App.d.ts +771 -6
  2. package/lib/private/App.js +49 -16
  3. package/lib/private/Binder.d.ts +2 -2
  4. package/lib/private/Flags.d.ts +8 -4
  5. package/lib/private/Module.d.ts +4 -16
  6. package/lib/private/Module.js +1 -17
  7. package/lib/private/app/EnvSchema.d.ts +5 -0
  8. package/lib/private/app/EnvSchema.js +2 -0
  9. package/lib/private/app/Facade.browser.d.ts +11 -0
  10. package/lib/private/app/Facade.browser.js +19 -0
  11. package/lib/private/app/Facade.d.ts +811 -0
  12. package/lib/private/app/Facade.js +56 -0
  13. package/lib/private/asset/Asset.d.ts +1 -1
  14. package/lib/private/build/App.d.ts +2 -2
  15. package/lib/private/build/App.js +0 -2
  16. package/lib/private/build/client/index.js +19 -10
  17. package/lib/private/build/client/plugin/app-request.d.ts +4 -0
  18. package/lib/private/build/client/plugin/app-request.js +19 -0
  19. package/lib/private/build/client/plugin/view.d.ts +4 -0
  20. package/lib/private/build/client/plugin/view.js +13 -0
  21. package/lib/private/build/hook.d.ts +1 -2
  22. package/lib/private/build/hook.js +25 -19
  23. package/lib/private/build/index.d.ts +2 -1
  24. package/lib/private/build/index.js +27 -27
  25. package/lib/private/build/presets.d.ts +10 -0
  26. package/lib/private/build/presets.js +39 -0
  27. package/lib/private/build/server/index.js +10 -14
  28. package/lib/private/build/server/plugin/app-request.d.ts +4 -0
  29. package/lib/private/build/server/plugin/app-request.js +19 -0
  30. package/lib/private/build/server/plugin/assets.js +9 -7
  31. package/lib/private/build/server/plugin/config.js +11 -4
  32. package/lib/private/build/server/plugin/frontend.js +4 -2
  33. package/lib/private/build/server/plugin/live-reload.d.ts +4 -0
  34. package/lib/private/build/server/plugin/{hot-reload.js → live-reload.js} +12 -12
  35. package/lib/private/build/server/plugin/native-addons.js +10 -11
  36. package/lib/private/build/server/plugin/node-imports.js +2 -2
  37. package/lib/private/build/server/plugin/route.js +4 -4
  38. package/lib/private/build/server/plugin/store.js +11 -33
  39. package/lib/private/build/server/plugin/stores.js +12 -9
  40. package/lib/private/build/server/plugin/view.js +5 -5
  41. package/lib/private/build/server/plugin/views.js +4 -4
  42. package/lib/private/build/server/plugin/virtual-pages.js +8 -8
  43. package/lib/private/build/server/plugin/virtual-routes.js +8 -13
  44. package/lib/private/build/server/plugin/wasm.js +2 -3
  45. package/lib/private/build/shared/plugin/app-request.d.ts +4 -0
  46. package/lib/private/build/shared/plugin/app-request.js +19 -0
  47. package/lib/private/bye.js +2 -3
  48. package/lib/private/client/Data.d.ts +3 -2
  49. package/lib/private/client/Render.d.ts +8 -0
  50. package/lib/private/{frontend → client}/ServerData.d.ts +1 -1
  51. package/lib/private/client/ServerView.d.ts +4 -0
  52. package/lib/private/client/ValidateInit.d.ts +1 -3
  53. package/lib/private/client/ValidationError.d.ts +1 -1
  54. package/lib/private/{frontend → client}/View.d.ts +1 -1
  55. package/lib/private/{frontend → client}/ViewOptions.d.ts +1 -1
  56. package/lib/private/{frontend → client}/ViewResponse.d.ts +2 -2
  57. package/lib/private/client/app.js +3 -3
  58. package/lib/private/client/boot.d.ts +5 -0
  59. package/lib/private/client/boot.js +64 -0
  60. package/lib/private/client/create-form.d.ts +32 -0
  61. package/lib/private/client/create-form.js +123 -0
  62. package/lib/private/client/extract-issues.d.ts +4 -0
  63. package/lib/private/client/extract-issues.js +21 -0
  64. package/lib/private/client/http.d.ts +13 -0
  65. package/lib/private/client/http.js +57 -0
  66. package/lib/private/client/index.d.ts +23 -0
  67. package/lib/private/client/index.js +16 -0
  68. package/lib/private/client/navigate.d.ts +13 -0
  69. package/lib/private/client/navigate.js +67 -0
  70. package/lib/private/client/root.d.ts +9 -0
  71. package/lib/private/client/root.js +11 -0
  72. package/lib/private/client/submit.d.ts +2 -0
  73. package/lib/private/client/submit.js +41 -0
  74. package/lib/private/client/{toValidated.d.ts → to-validated.d.ts} +2 -4
  75. package/lib/private/client/{toValidated.js → to-validated.js} +1 -1
  76. package/lib/private/client/validate-field.d.ts +3 -0
  77. package/lib/private/client/validate-field.js +41 -0
  78. package/lib/private/config/index.d.ts +7 -21
  79. package/lib/private/config/index.js +4 -1
  80. package/lib/private/config/schema.d.ts +82 -22
  81. package/lib/private/config/schema.js +25 -7
  82. package/lib/private/cookie.d.ts +12 -6
  83. package/lib/private/cookie.js +10 -14
  84. package/lib/private/db/As.d.ts +10 -0
  85. package/lib/private/db/DB.d.ts +49 -0
  86. package/lib/private/db/DB.js +3 -0
  87. package/lib/private/db/DataDict.d.ts +5 -0
  88. package/lib/private/db/DataKey.d.ts +4 -0
  89. package/lib/private/db/DataValue.d.ts +17 -0
  90. package/lib/private/db/MemoryDB.d.ts +33 -0
  91. package/lib/private/db/MemoryDB.js +335 -0
  92. package/lib/private/db/PK.d.ts +3 -0
  93. package/lib/private/db/PK.js +2 -0
  94. package/lib/private/{database → db}/Query.d.ts +2 -2
  95. package/lib/private/{database → db}/QueryBuilder.d.ts +2 -3
  96. package/lib/private/db/ReadArgs.d.ts +9 -0
  97. package/lib/private/db/ReadArgs.js +2 -0
  98. package/lib/private/db/ReadRelationsArgs.d.ts +6 -0
  99. package/lib/private/db/ReadRelationsArgs.js +2 -0
  100. package/lib/private/{database → db}/Schema.d.ts +1 -2
  101. package/lib/private/db/Sort.d.ts +4 -0
  102. package/lib/private/{database → db}/TypeMap.d.ts +2 -3
  103. package/lib/private/{database → db}/Types.d.ts +1 -1
  104. package/lib/private/db/With.d.ts +16 -0
  105. package/lib/private/db/With.js +2 -0
  106. package/lib/private/db/common.d.ts +25 -0
  107. package/lib/private/db/common.js +67 -0
  108. package/lib/private/db/errors.d.ts +104 -0
  109. package/lib/private/db/errors.js +237 -0
  110. package/lib/private/db/migrate/apply.d.ts +2 -0
  111. package/lib/private/db/migrate/apply.js +32 -0
  112. package/lib/private/db/migrate/bundle.d.ts +3 -0
  113. package/lib/private/db/migrate/bundle.js +22 -0
  114. package/lib/private/db/migrate/create.d.ts +2 -0
  115. package/lib/private/db/migrate/create.js +154 -0
  116. package/lib/private/db/migrate/index.d.ts +10 -0
  117. package/lib/private/db/migrate/index.js +6 -0
  118. package/lib/private/db/migrate/status.d.ts +2 -0
  119. package/lib/private/db/migrate/status.js +38 -0
  120. package/lib/private/db/migrate/store.d.ts +5 -0
  121. package/lib/private/db/migrate/store.js +33 -0
  122. package/lib/private/db/sql.d.ts +28 -0
  123. package/lib/private/db/sql.js +177 -0
  124. package/lib/private/db/storage.d.ts +3 -0
  125. package/lib/private/db/storage.js +3 -0
  126. package/lib/private/db/symbol.js +2 -0
  127. package/lib/private/db/test.d.ts +4 -0
  128. package/lib/private/db/test.js +1750 -0
  129. package/lib/private/errors.d.ts +88 -0
  130. package/lib/private/errors.js +211 -0
  131. package/lib/private/frontend.d.ts +72 -0
  132. package/lib/private/frontend.js +245 -0
  133. package/lib/private/hash.js +0 -1
  134. package/lib/private/i18n/Catalog.d.ts +5 -2
  135. package/lib/private/i18n/Formatter.js +21 -9
  136. package/lib/private/i18n/errors.d.ts +16 -0
  137. package/lib/private/i18n/errors.js +27 -0
  138. package/lib/private/i18n/format.d.ts +4 -0
  139. package/lib/private/i18n/format.js +95 -0
  140. package/lib/private/i18n/index/client.d.ts +9 -0
  141. package/lib/private/i18n/index/client.js +152 -0
  142. package/lib/private/i18n/index/server.d.ts +9 -0
  143. package/lib/private/i18n/index/server.js +57 -0
  144. package/lib/private/i18n/index/types.d.ts +33 -0
  145. package/lib/private/i18n/index/types.js +2 -0
  146. package/lib/private/i18n/locale.d.ts +9 -3
  147. package/lib/private/i18n/module.d.ts +3 -0
  148. package/lib/private/i18n/module.js +115 -0
  149. package/lib/private/i18n/ordinals.d.ts +1 -1
  150. package/lib/private/i18n/resolve.d.ts +7 -0
  151. package/lib/private/i18n/resolve.js +30 -0
  152. package/lib/private/i18n/schema.d.ts +10 -5
  153. package/lib/private/i18n/schema.js +6 -10
  154. package/lib/private/i18n/storage.d.ts +3 -0
  155. package/lib/private/i18n/storage.js +5 -0
  156. package/lib/private/i18n/validate.d.ts +2 -0
  157. package/lib/private/i18n/validate.js +19 -0
  158. package/lib/private/index.d.ts +14 -0
  159. package/lib/private/index.js +2 -0
  160. package/lib/private/log.d.ts +1 -0
  161. package/lib/private/log.js +15 -14
  162. package/lib/private/module/Hook.d.ts +1 -1
  163. package/lib/private/module/Next.d.ts +1 -1
  164. package/lib/private/module/Setup.d.ts +21 -0
  165. package/lib/private/module/Setup.js +2 -0
  166. package/lib/private/module/create.d.ts +16 -0
  167. package/lib/private/module/create.js +28 -0
  168. package/lib/private/orm/ExtractSchema.d.ts +9 -0
  169. package/lib/private/orm/ExtractSchema.js +2 -0
  170. package/lib/private/orm/ForeignKey.d.ts +14 -0
  171. package/lib/private/orm/ForeignKey.js +25 -0
  172. package/lib/private/orm/PrimaryKey.d.ts +17 -0
  173. package/lib/private/orm/PrimaryKey.js +38 -0
  174. package/lib/private/orm/StoreInput.d.ts +10 -0
  175. package/lib/private/orm/StoreInput.js +2 -0
  176. package/lib/private/orm/key.d.ts +8 -0
  177. package/lib/private/orm/key.js +8 -0
  178. package/lib/private/orm/parse.d.ts +13 -0
  179. package/lib/private/orm/parse.js +29 -0
  180. package/lib/private/orm/relation.d.ts +43 -0
  181. package/lib/private/orm/relation.js +26 -0
  182. package/lib/private/orm/store.d.ts +187 -0
  183. package/lib/private/orm/store.js +542 -0
  184. package/lib/private/paths.d.ts +2 -2
  185. package/lib/private/paths.js +3 -3
  186. package/lib/private/request/RequestBag.d.ts +5 -1
  187. package/lib/private/request/RequestBag.js +16 -9
  188. package/lib/private/request/RequestBody.d.ts +6 -11
  189. package/lib/private/request/RequestBody.js +51 -59
  190. package/lib/private/request/RequestContext.d.ts +12 -0
  191. package/lib/private/request/RequestContext.js +31 -0
  192. package/lib/private/request/RequestFacade.d.ts +11 -6
  193. package/lib/private/request/RequestPublic.d.ts +9 -0
  194. package/lib/private/request/RequestPublic.js +2 -0
  195. package/lib/private/request/RequestView.d.ts +11 -0
  196. package/lib/private/request/RequestView.js +3 -0
  197. package/lib/private/request/handle.d.ts +4 -0
  198. package/lib/private/request/handle.js +18 -0
  199. package/lib/private/request/parse.d.ts +2 -2
  200. package/lib/private/request/parse.js +55 -16
  201. package/lib/private/request/route.js +37 -22
  202. package/lib/private/request/router.d.ts +1 -1
  203. package/lib/private/request/router.js +22 -50
  204. package/lib/private/{database/symbol/wrap.d.ts → request/sContext.d.ts} +1 -1
  205. package/lib/private/request/sContext.js +2 -0
  206. package/lib/private/request/storage.d.ts +4 -0
  207. package/lib/private/request/storage.js +5 -0
  208. package/lib/private/response/ResponseFunction.d.ts +2 -3
  209. package/lib/private/response/ResponseLike.d.ts +1 -1
  210. package/lib/private/response/binary.d.ts +1 -1
  211. package/lib/private/response/binary.js +4 -3
  212. package/lib/private/response/error.d.ts +1 -1
  213. package/lib/private/response/error.js +1 -1
  214. package/lib/private/response/json.d.ts +1 -1
  215. package/lib/private/response/json.js +2 -2
  216. package/lib/private/response/redirect.d.ts +5 -5
  217. package/lib/private/response/redirect.js +9 -10
  218. package/lib/private/response/respond.js +16 -17
  219. package/lib/private/response/sse.d.ts +1 -1
  220. package/lib/private/response/sse.js +2 -2
  221. package/lib/private/response/text.d.ts +1 -1
  222. package/lib/private/response/text.js +3 -3
  223. package/lib/private/response/view.d.ts +3 -3
  224. package/lib/private/response/view.js +7 -14
  225. package/lib/private/response/ws.d.ts +1 -1
  226. package/lib/private/response.d.ts +1 -1
  227. package/lib/private/route/Handler.d.ts +1 -1
  228. package/lib/private/route/hook.d.ts +6 -0
  229. package/lib/private/route/hook.js +5 -0
  230. package/lib/private/route/router.d.ts +6 -2
  231. package/lib/private/route/router.js +32 -18
  232. package/lib/private/route/wrap.js +2 -2
  233. package/lib/private/serve/App.d.ts +11 -25
  234. package/lib/private/serve/App.js +138 -120
  235. package/lib/private/serve/Init.d.ts +5 -5
  236. package/lib/private/serve/dev-module.d.ts +2 -0
  237. package/lib/private/serve/dev-module.js +34 -0
  238. package/lib/private/serve/hook.d.ts +1 -2
  239. package/lib/private/serve/hook.js +2 -9
  240. package/lib/private/serve/index.d.ts +1 -1
  241. package/lib/private/serve/index.js +36 -2
  242. package/lib/private/server/TAG.d.ts +3 -0
  243. package/lib/private/server/TAG.js +2 -0
  244. package/lib/private/server/index.d.ts +5 -0
  245. package/lib/private/server/index.js +6 -0
  246. package/lib/private/session/Data.d.ts +1 -2
  247. package/lib/private/session/SessionHandle.d.ts +1 -1
  248. package/lib/private/session/SessionHandle.js +11 -9
  249. package/lib/private/session/index.d.ts +3 -4
  250. package/lib/private/session/module.d.ts +3 -0
  251. package/lib/private/session/module.js +114 -0
  252. package/lib/private/session/schema.d.ts +17 -9
  253. package/lib/private/session/schema.js +11 -6
  254. package/lib/private/session/storage.d.ts +1 -2
  255. package/lib/private/session/storage.js +2 -2
  256. package/lib/private/tags.js +2 -2
  257. package/lib/private/target/Manager.js +6 -12
  258. package/lib/private/target/Target.d.ts +1 -1
  259. package/lib/public/AppFacade.d.ts +2 -0
  260. package/lib/public/AppFacade.js +2 -0
  261. package/lib/public/build/presets.d.ts +2 -0
  262. package/lib/public/build/presets.js +2 -0
  263. package/lib/public/build/transform.d.ts +2 -0
  264. package/lib/public/build/transform.js +2 -0
  265. package/lib/public/client.d.ts +3 -0
  266. package/lib/public/client.js +2 -0
  267. package/lib/public/db/MemoryDB.d.ts +2 -0
  268. package/lib/public/db/MemoryDB.js +2 -0
  269. package/lib/public/db/errors.d.ts +2 -0
  270. package/lib/public/db/errors.js +2 -0
  271. package/lib/public/db/migrate.d.ts +2 -0
  272. package/lib/public/db/migrate.js +2 -0
  273. package/lib/public/db/sql.d.ts +2 -0
  274. package/lib/public/db/sql.js +2 -0
  275. package/lib/public/db/test.d.ts +2 -0
  276. package/lib/public/db/test.js +2 -0
  277. package/lib/public/db.d.ts +12 -0
  278. package/lib/public/db.js +2 -0
  279. package/lib/public/frontend.d.ts +3 -0
  280. package/lib/public/frontend.js +2 -0
  281. package/lib/public/index.d.ts +2 -0
  282. package/lib/public/index.js +2 -0
  283. package/lib/public/orm/key.d.ts +2 -0
  284. package/lib/public/orm/key.js +2 -0
  285. package/lib/public/orm/relation.d.ts +2 -0
  286. package/lib/public/orm/relation.js +2 -0
  287. package/lib/public/orm/store.d.ts +2 -0
  288. package/lib/public/orm/store.js +2 -0
  289. package/lib/public/request/server.d.ts +5 -0
  290. package/lib/public/request/server.js +7 -0
  291. package/lib/public/response.d.ts +22 -0
  292. package/lib/public/response.js +19 -0
  293. package/lib/public/route/hook.d.ts +2 -0
  294. package/lib/public/route/hook.js +2 -0
  295. package/lib/public/server.d.ts +3 -0
  296. package/lib/public/server.js +2 -0
  297. package/package.json +40 -30
  298. package/lib/private/AppError.d.ts +0 -4
  299. package/lib/private/AppError.js +0 -8
  300. package/lib/private/backend/Module.d.ts +0 -18
  301. package/lib/private/backend/Module.js +0 -22
  302. package/lib/private/backend/TAG.d.ts +0 -3
  303. package/lib/private/backend/TAG.js +0 -2
  304. package/lib/private/build/client/reload.d.ts +0 -7
  305. package/lib/private/build/client/reload.js +0 -6
  306. package/lib/private/build/server/plugin/database-default.d.ts +0 -4
  307. package/lib/private/build/server/plugin/database-default.js +0 -48
  308. package/lib/private/build/server/plugin/hot-reload.d.ts +0 -4
  309. package/lib/private/build/server/plugin/store-wrap.d.ts +0 -4
  310. package/lib/private/build/server/plugin/store-wrap.js +0 -33
  311. package/lib/private/client/spa/index.d.ts +0 -6
  312. package/lib/private/client/spa/index.js +0 -201
  313. package/lib/private/client/validate.d.ts +0 -3
  314. package/lib/private/client/validate.js +0 -54
  315. package/lib/private/database/As.d.ts +0 -7
  316. package/lib/private/database/Binds.d.ts +0 -4
  317. package/lib/private/database/Binds.js +0 -2
  318. package/lib/private/database/Changes.d.ts +0 -11
  319. package/lib/private/database/Changes.js +0 -2
  320. package/lib/private/database/ColumnTypes.d.ts +0 -11
  321. package/lib/private/database/ColumnTypes.js +0 -2
  322. package/lib/private/database/DataDict.d.ts +0 -5
  323. package/lib/private/database/DataKey.d.ts +0 -4
  324. package/lib/private/database/DataValue.d.ts +0 -5
  325. package/lib/private/database/Database.d.ts +0 -56
  326. package/lib/private/database/Database.js +0 -153
  327. package/lib/private/database/InMemoryDatabase.d.ts +0 -37
  328. package/lib/private/database/InMemoryDatabase.js +0 -181
  329. package/lib/private/database/Sort.d.ts +0 -4
  330. package/lib/private/database/Store.d.ts +0 -172
  331. package/lib/private/database/Store.js +0 -261
  332. package/lib/private/database/storage.d.ts +0 -4
  333. package/lib/private/database/storage.js +0 -3
  334. package/lib/private/database/symbol/wrap.js +0 -2
  335. package/lib/private/database/symbol.js +0 -2
  336. package/lib/private/database/test.d.ts +0 -4
  337. package/lib/private/database/test.js +0 -678
  338. package/lib/private/database/wrap.d.ts +0 -5
  339. package/lib/private/database/wrap.js +0 -5
  340. package/lib/private/fail.d.ts +0 -3
  341. package/lib/private/fail.js +0 -5
  342. package/lib/private/frontend/Module.d.ts +0 -62
  343. package/lib/private/frontend/Module.js +0 -250
  344. package/lib/private/frontend/Render.d.ts +0 -9
  345. package/lib/private/frontend/ServerView.d.ts +0 -5
  346. package/lib/private/i18n/Module.d.ts +0 -16
  347. package/lib/private/i18n/Module.js +0 -122
  348. package/lib/private/i18n/index.d.ts +0 -28
  349. package/lib/private/i18n/index.js +0 -236
  350. package/lib/private/module/BuildHook.d.ts +0 -5
  351. package/lib/private/module/BuildHook.js +0 -2
  352. package/lib/private/module/NextBuild.d.ts +0 -5
  353. package/lib/private/module/NextBuild.js +0 -2
  354. package/lib/private/module/NextServe.d.ts +0 -5
  355. package/lib/private/module/NextServe.js +0 -2
  356. package/lib/private/reducer.d.ts +0 -24
  357. package/lib/private/reducer.js +0 -10
  358. package/lib/private/route/guard.d.ts +0 -4
  359. package/lib/private/route/guard.js +0 -22
  360. package/lib/private/serve/module/Dev.d.ts +0 -11
  361. package/lib/private/serve/module/Dev.js +0 -28
  362. package/lib/private/serve/module/Handle.d.ts +0 -10
  363. package/lib/private/serve/module/Handle.js +0 -15
  364. package/lib/private/session/SessionModule.d.ts +0 -14
  365. package/lib/private/session/SessionModule.js +0 -122
  366. package/lib/private/wasm/API.d.ts +0 -7
  367. package/lib/private/wasm/API.js +0 -2
  368. package/lib/private/wasm/BufferViewSource.d.ts +0 -4
  369. package/lib/private/wasm/BufferViewSource.js +0 -2
  370. package/lib/private/wasm/Exports.d.ts +0 -23
  371. package/lib/private/wasm/Exports.js +0 -2
  372. package/lib/private/wasm/I32.d.ts +0 -5
  373. package/lib/private/wasm/I32.js +0 -2
  374. package/lib/private/wasm/I32_SIZE.d.ts +0 -3
  375. package/lib/private/wasm/I32_SIZE.js +0 -2
  376. package/lib/private/wasm/Instantiation.d.ts +0 -12
  377. package/lib/private/wasm/Instantiation.js +0 -2
  378. package/lib/private/wasm/Tagged.d.ts +0 -7
  379. package/lib/private/wasm/Tagged.js +0 -2
  380. package/lib/private/wasm/buffersize.d.ts +0 -2
  381. package/lib/private/wasm/buffersize.js +0 -5
  382. package/lib/private/wasm/decode-bytes.d.ts +0 -3
  383. package/lib/private/wasm/decode-bytes.js +0 -5
  384. package/lib/private/wasm/decode-json.d.ts +0 -7
  385. package/lib/private/wasm/decode-json.js +0 -11
  386. package/lib/private/wasm/decode-option.d.ts +0 -5
  387. package/lib/private/wasm/decode-option.js +0 -10
  388. package/lib/private/wasm/decode-response.d.ts +0 -19
  389. package/lib/private/wasm/decode-response.js +0 -90
  390. package/lib/private/wasm/decode-string.d.ts +0 -3
  391. package/lib/private/wasm/decode-string.js +0 -5
  392. package/lib/private/wasm/decode-websocket-close.d.ts +0 -5
  393. package/lib/private/wasm/decode-websocket-close.js +0 -6
  394. package/lib/private/wasm/decode-websocket-send.d.ts +0 -6
  395. package/lib/private/wasm/decode-websocket-send.js +0 -19
  396. package/lib/private/wasm/encode-buffer.d.ts +0 -3
  397. package/lib/private/wasm/encode-buffer.js +0 -6
  398. package/lib/private/wasm/encode-request.d.ts +0 -9
  399. package/lib/private/wasm/encode-request.js +0 -195
  400. package/lib/private/wasm/encode-session.d.ts +0 -3
  401. package/lib/private/wasm/encode-session.js +0 -25
  402. package/lib/private/wasm/encode-string-map.d.ts +0 -5
  403. package/lib/private/wasm/encode-string-map.js +0 -14
  404. package/lib/private/wasm/encode-string.d.ts +0 -13
  405. package/lib/private/wasm/encode-string.js +0 -17
  406. package/lib/private/wasm/encode-url.d.ts +0 -11
  407. package/lib/private/wasm/encode-url.js +0 -14
  408. package/lib/private/wasm/encode-websocket-close.d.ts +0 -2
  409. package/lib/private/wasm/encode-websocket-close.js +0 -7
  410. package/lib/private/wasm/encode-websocket-message.d.ts +0 -4
  411. package/lib/private/wasm/encode-websocket-message.js +0 -30
  412. package/lib/private/wasm/encode-websocket-open.d.ts +0 -2
  413. package/lib/private/wasm/encode-websocket-open.js +0 -7
  414. package/lib/private/wasm/filesize.d.ts +0 -2
  415. package/lib/private/wasm/filesize.js +0 -8
  416. package/lib/private/wasm/instantiate.d.ts +0 -37
  417. package/lib/private/wasm/instantiate.js +0 -408
  418. package/lib/private/wasm/open-websocket.d.ts +0 -4
  419. package/lib/private/wasm/open-websocket.js +0 -26
  420. package/lib/private/wasm/stringsize.d.ts +0 -3
  421. package/lib/private/wasm/stringsize.js +0 -5
  422. package/lib/private/wasm/urlsize.d.ts +0 -2
  423. package/lib/private/wasm/urlsize.js +0 -5
  424. package/lib/public/App.d.ts +0 -2
  425. package/lib/public/App.js +0 -2
  426. package/lib/public/AppError.d.ts +0 -2
  427. package/lib/public/AppError.js +0 -2
  428. package/lib/public/BuildApp.d.ts +0 -2
  429. package/lib/public/BuildApp.js +0 -2
  430. package/lib/public/BuildHook.d.ts +0 -2
  431. package/lib/public/BuildHook.js +0 -2
  432. package/lib/public/Database.d.ts +0 -2
  433. package/lib/public/Database.js +0 -2
  434. package/lib/public/Mode.d.ts +0 -2
  435. package/lib/public/Mode.js +0 -2
  436. package/lib/public/Module.d.ts +0 -2
  437. package/lib/public/Module.js +0 -2
  438. package/lib/public/Next.d.ts +0 -2
  439. package/lib/public/Next.js +0 -2
  440. package/lib/public/NextBuild.d.ts +0 -2
  441. package/lib/public/NextBuild.js +0 -2
  442. package/lib/public/NextHandle.d.ts +0 -2
  443. package/lib/public/NextHandle.js +0 -2
  444. package/lib/public/NextRoute.d.ts +0 -3
  445. package/lib/public/NextRoute.js +0 -2
  446. package/lib/public/NextServe.d.ts +0 -2
  447. package/lib/public/NextServe.js +0 -2
  448. package/lib/public/ServeApp.d.ts +0 -2
  449. package/lib/public/ServeApp.js +0 -2
  450. package/lib/public/Target.d.ts +0 -2
  451. package/lib/public/Target.js +0 -2
  452. package/lib/public/backend/Module.d.ts +0 -2
  453. package/lib/public/backend/Module.js +0 -2
  454. package/lib/public/backend/TAG.d.ts +0 -2
  455. package/lib/public/backend/TAG.js +0 -2
  456. package/lib/public/client/Data.d.ts +0 -2
  457. package/lib/public/client/Data.js +0 -2
  458. package/lib/public/client/ValidateInit.d.ts +0 -2
  459. package/lib/public/client/ValidateInit.js +0 -2
  460. package/lib/public/client/ValidateUpdater.d.ts +0 -2
  461. package/lib/public/client/ValidateUpdater.js +0 -2
  462. package/lib/public/client/ValidationError.d.ts +0 -2
  463. package/lib/public/client/ValidationError.js +0 -2
  464. package/lib/public/client/spa.d.ts +0 -2
  465. package/lib/public/client/spa.js +0 -2
  466. package/lib/public/client/toValidated.d.ts +0 -2
  467. package/lib/public/client/toValidated.js +0 -2
  468. package/lib/public/client/validate.d.ts +0 -2
  469. package/lib/public/client/validate.js +0 -2
  470. package/lib/public/database/As.d.ts +0 -2
  471. package/lib/public/database/As.js +0 -2
  472. package/lib/public/database/DataDict.d.ts +0 -2
  473. package/lib/public/database/DataDict.js +0 -2
  474. package/lib/public/database/InMemoryDatabase.d.ts +0 -2
  475. package/lib/public/database/InMemoryDatabase.js +0 -2
  476. package/lib/public/database/Sort.d.ts +0 -2
  477. package/lib/public/database/Sort.js +0 -2
  478. package/lib/public/database/Store.d.ts +0 -2
  479. package/lib/public/database/Store.js +0 -2
  480. package/lib/public/database/TypeMap.d.ts +0 -2
  481. package/lib/public/database/TypeMap.js +0 -2
  482. package/lib/public/database/Types.d.ts +0 -2
  483. package/lib/public/database/Types.js +0 -2
  484. package/lib/public/database/test.d.ts +0 -2
  485. package/lib/public/database/test.js +0 -2
  486. package/lib/public/database/wrap.d.ts +0 -2
  487. package/lib/public/database/wrap.js +0 -2
  488. package/lib/public/fail.d.ts +0 -2
  489. package/lib/public/fail.js +0 -2
  490. package/lib/public/frontend/Module.d.ts +0 -2
  491. package/lib/public/frontend/Module.js +0 -2
  492. package/lib/public/frontend/Publish.d.ts +0 -2
  493. package/lib/public/frontend/Publish.js +0 -2
  494. package/lib/public/frontend/Render.d.ts +0 -2
  495. package/lib/public/frontend/Render.js +0 -2
  496. package/lib/public/frontend/ViewResponse.d.ts +0 -2
  497. package/lib/public/frontend/ViewResponse.js +0 -2
  498. package/lib/public/request/RequestBody.d.ts +0 -2
  499. package/lib/public/request/RequestBody.js +0 -2
  500. package/lib/public/request/RequestFacade.d.ts +0 -2
  501. package/lib/public/request/RequestFacade.js +0 -2
  502. package/lib/public/request/Verb.d.ts +0 -2
  503. package/lib/public/request/Verb.js +0 -2
  504. package/lib/public/response/ResponseFunction.d.ts +0 -2
  505. package/lib/public/response/ResponseFunction.js +0 -2
  506. package/lib/public/response/ResponseLike.d.ts +0 -2
  507. package/lib/public/response/ResponseLike.js +0 -2
  508. package/lib/public/response/binary.d.ts +0 -2
  509. package/lib/public/response/binary.js +0 -2
  510. package/lib/public/response/error.d.ts +0 -2
  511. package/lib/public/response/error.js +0 -2
  512. package/lib/public/response/json.d.ts +0 -2
  513. package/lib/public/response/json.js +0 -2
  514. package/lib/public/response/redirect.d.ts +0 -2
  515. package/lib/public/response/redirect.js +0 -2
  516. package/lib/public/response/sse.d.ts +0 -2
  517. package/lib/public/response/sse.js +0 -2
  518. package/lib/public/response/text.d.ts +0 -2
  519. package/lib/public/response/text.js +0 -2
  520. package/lib/public/response/view.d.ts +0 -2
  521. package/lib/public/response/view.js +0 -2
  522. package/lib/public/response/ws.d.ts +0 -2
  523. package/lib/public/response/ws.js +0 -2
  524. package/lib/public/wasm/decode-json.d.ts +0 -5
  525. package/lib/public/wasm/decode-json.js +0 -3
  526. package/lib/public/wasm/decode-response.d.ts +0 -3
  527. package/lib/public/wasm/decode-response.js +0 -3
  528. package/lib/public/wasm/encode-request.d.ts +0 -3
  529. package/lib/public/wasm/encode-request.js +0 -3
  530. package/lib/public/wasm/encode-session.d.ts +0 -3
  531. package/lib/public/wasm/encode-session.js +0 -3
  532. package/lib/public/wasm/instantiate.d.ts +0 -4
  533. package/lib/public/wasm/instantiate.js +0 -3
  534. /package/lib/private/{frontend → client}/Publish.d.ts +0 -0
  535. /package/lib/private/{frontend → client}/Publish.js +0 -0
  536. /package/lib/private/{frontend → client}/Render.js +0 -0
  537. /package/lib/private/{frontend → client}/ServerData.js +0 -0
  538. /package/lib/private/{frontend → client}/ServerView.js +0 -0
  539. /package/lib/private/{frontend → client}/View.js +0 -0
  540. /package/lib/private/{frontend → client}/ViewOptions.js +0 -0
  541. /package/lib/private/{frontend → client}/ViewResponse.js +0 -0
  542. /package/lib/private/client/{spa/storage.d.ts → storage.d.ts} +0 -0
  543. /package/lib/private/client/{spa/storage.js → storage.js} +0 -0
  544. /package/lib/private/{database → db}/As.js +0 -0
  545. /package/lib/private/{database → db}/DataDict.js +0 -0
  546. /package/lib/private/{database → db}/DataKey.js +0 -0
  547. /package/lib/private/{database → db}/DataValue.js +0 -0
  548. /package/lib/private/{database → db}/Query.js +0 -0
  549. /package/lib/private/{database → db}/QueryBuilder.js +0 -0
  550. /package/lib/private/{database → db}/Schema.js +0 -0
  551. /package/lib/private/{database → db}/Sort.js +0 -0
  552. /package/lib/private/{database → db}/TypeMap.js +0 -0
  553. /package/lib/private/{database → db}/Types.js +0 -0
  554. /package/lib/private/{database → db}/primary.d.ts +0 -0
  555. /package/lib/private/{database → db}/primary.js +0 -0
  556. /package/lib/private/{database → db}/symbol.d.ts +0 -0
@@ -1,14 +1,11 @@
1
- import fail from "#fail";
2
- import json from "@rcompat/http/mime/application/json";
3
- import binary from "@rcompat/http/mime/application/octet-stream";
4
- import www_form from "@rcompat/http/mime/application/x-www-form-urlencoded";
5
- import form_data from "@rcompat/http/mime/multipart/form-data";
6
- import text from "@rcompat/http/mime/text/plain";
1
+ import E from "#errors";
2
+ import { MIME } from "@rcompat/http";
3
+ import is from "@rcompat/is";
7
4
  async function anyform(request) {
8
5
  const form = Object.create(null);
9
6
  const files = Object.create(null);
10
7
  for (const [key, value] of (await request.formData()).entries()) {
11
- if (typeof value === "string") {
8
+ if (is.string(value)) {
12
9
  form[key] = value;
13
10
  }
14
11
  else {
@@ -18,40 +15,41 @@ async function anyform(request) {
18
15
  return { form, files };
19
16
  }
20
17
  ;
21
- export default class RequestBody {
22
- #parsed;
23
- #files;
24
- static async parse(request, url) {
25
- const raw = request.headers.get("content-type") ?? "none";
26
- const type = raw.split(";")[0].trim().toLowerCase();
27
- const path = url.pathname;
28
- try {
29
- switch (type) {
30
- case binary:
31
- return new RequestBody({ type: "binary", value: await request.blob() });
32
- case www_form:
33
- case form_data: {
34
- const { form, files } = await anyform(request);
35
- return new RequestBody({ type: "form", value: form }, files);
36
- }
37
- case json:
38
- return new RequestBody({ type: "json", value: await request.json() });
39
- case text:
40
- return new RequestBody({ type: "text", value: await request.text() });
41
- case "none":
42
- return RequestBody.none();
43
- default:
44
- throw fail("{0}: unsupported content type {1}", path, type);
18
+ async function parse(request, url) {
19
+ const raw = request.headers.get("content-type") ?? "none";
20
+ const type = raw.split(";")[0].trim().toLowerCase();
21
+ const path = url.pathname;
22
+ try {
23
+ switch (type) {
24
+ case MIME.APPLICATION_OCTET_STREAM:
25
+ return new RequestBody({ type: "binary", value: await request.blob() });
26
+ case MIME.APPLICATION_X_WWW_FORM_URLENCODED:
27
+ case MIME.MULTIPART_FORM_DATA: {
28
+ const { form, files } = await anyform(request);
29
+ return new RequestBody({ type: "form", value: form }, files);
45
30
  }
46
- }
47
- catch (cause) {
48
- const message = "{0}: unparseable content type {1} - cause:\n[2]";
49
- throw fail(message, path, type, cause);
31
+ case MIME.APPLICATION_JSON:
32
+ return new RequestBody({ type: "json", value: await request.json() });
33
+ case MIME.TEXT_PLAIN:
34
+ return new RequestBody({ type: "text", value: await request.text() });
35
+ case "none":
36
+ return RequestBody.none();
37
+ default:
38
+ throw E.request_unsupported_mime(path, type);
50
39
  }
51
40
  }
52
- static none() {
53
- return new RequestBody({ type: "none", value: null });
41
+ catch (cause) {
42
+ throw E.request_unparsable_mime(path, type, cause);
54
43
  }
44
+ }
45
+ function none() {
46
+ return new RequestBody({ type: "none", value: null });
47
+ }
48
+ export default class RequestBody {
49
+ #parsed;
50
+ #files;
51
+ static parse = parse;
52
+ static none = none;
55
53
  constructor(parsed, files = {}) {
56
54
  this.#parsed = parsed;
57
55
  this.#files = files;
@@ -62,44 +60,38 @@ export default class RequestBody {
62
60
  #value() {
63
61
  return this.#parsed.value;
64
62
  }
65
- #throw(expected) {
66
- throw fail("request body: expected {0}, got {1}", expected, this.type);
63
+ #unexpected_body(expected) {
64
+ throw E.request_unexpected_body(expected, this.type);
67
65
  }
68
- json(schema) {
69
- if (this.type !== "json") {
70
- this.#throw("JSON");
71
- }
72
- const value = this.#value();
73
- return schema ? schema.parse(value) : value;
66
+ json() {
67
+ if (this.type !== "json")
68
+ this.#unexpected_body("JSON");
69
+ return this.#value();
74
70
  }
75
- form(schema) {
76
- if (this.type !== "form") {
77
- this.#throw("form");
78
- }
79
- const value = this.#value();
80
- return schema ? schema.parse(value) : value;
71
+ form() {
72
+ if (this.type !== "form")
73
+ this.#unexpected_body("form");
74
+ return this.#value();
81
75
  }
82
76
  files() {
83
- if (this.type !== "form") {
84
- this.#throw("form");
85
- }
77
+ if (this.type !== "form")
78
+ this.#unexpected_body("form");
86
79
  return this.#files;
87
80
  }
88
81
  text() {
89
- if (this.type !== "text") {
90
- this.#throw("plaintext");
91
- }
82
+ if (this.type !== "text")
83
+ this.#unexpected_body("plaintext");
92
84
  return this.#value();
93
85
  }
94
86
  binary() {
95
87
  if (this.type !== "binary") {
96
- this.#throw("binary");
88
+ this.#unexpected_body("binary");
97
89
  }
98
90
  return this.#value();
99
91
  }
100
92
  none() {
101
93
  if (this.type !== "none") {
102
- this.#throw("none");
94
+ this.#unexpected_body("none");
103
95
  }
104
96
  return null;
105
97
  }
@@ -0,0 +1,12 @@
1
+ import type { Dict } from "@rcompat/type";
2
+ export default class RequestContext {
3
+ #private;
4
+ set<T>(key: string, value: T): void;
5
+ update<T>(key: string, fn: (prev: T | undefined) => T): void;
6
+ has(key: string): boolean;
7
+ try<T>(key: string): T | undefined;
8
+ get<T>(key: string): T;
9
+ delete(key: string): void;
10
+ toJSON(): Dict;
11
+ }
12
+ //# sourceMappingURL=RequestContext.d.ts.map
@@ -0,0 +1,31 @@
1
+ export default class RequestContext {
2
+ #data = new Map();
3
+ set(key, value) {
4
+ this.#data.set(key, value);
5
+ }
6
+ update(key, fn) {
7
+ const prev = this.try(key);
8
+ this.set(key, fn(prev));
9
+ }
10
+ has(key) {
11
+ return this.#data.has(key);
12
+ }
13
+ try(key) {
14
+ return this.#data.get(key);
15
+ }
16
+ get(key) {
17
+ if (!this.#data.has(key))
18
+ throw new Error(`Missing context key: ${key}`);
19
+ return this.#data.get(key);
20
+ }
21
+ delete(key) {
22
+ this.#data.delete(key);
23
+ }
24
+ toJSON() {
25
+ const out = Object.create(null);
26
+ for (const [k, v] of this.#data)
27
+ out[k] = v;
28
+ return out;
29
+ }
30
+ }
31
+ //# sourceMappingURL=RequestContext.js.map
@@ -1,20 +1,25 @@
1
1
  import type RequestBag from "#request/RequestBag";
2
2
  import type RequestBody from "#request/RequestBody";
3
- import type Dict from "@rcompat/type/Dict";
3
+ import type RequestView from "#request/RequestView";
4
+ import type Verb from "#request/Verb";
5
+ import type { Dict } from "@rcompat/type";
4
6
  type RequestFacade = {
7
+ method: Verb;
5
8
  body: RequestBody;
6
- context: Dict;
7
9
  cookies: RequestBag;
8
10
  forward(to: string, headers?: Dict<string>): Promise<Response>;
9
11
  headers: RequestBag;
10
12
  original: Request;
11
13
  path: RequestBag;
12
14
  query: RequestBag;
13
- /**
14
- * The request's pathname + querystring.
15
- */
16
15
  target: string;
17
16
  url: URL;
18
- } & Dict<Dict | unknown>;
17
+ has(key: string): boolean;
18
+ try<T>(key: string): T | undefined;
19
+ get<T>(key: string): T;
20
+ set<T>(key: string, value: T | ((prev: T | undefined) => T)): RequestFacade;
21
+ delete(key: string): RequestFacade;
22
+ toJSON(): RequestView;
23
+ };
19
24
  export { RequestFacade as default };
20
25
  //# sourceMappingURL=RequestFacade.d.ts.map
@@ -0,0 +1,9 @@
1
+ import type { Dict } from "@rcompat/type";
2
+ type RequestPublic = {
3
+ cookies: Dict<string>;
4
+ headers: Dict<string>;
5
+ query: Dict<string>;
6
+ url: URL;
7
+ };
8
+ export type { RequestPublic as default };
9
+ //# sourceMappingURL=RequestPublic.d.ts.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=RequestPublic.js.map
@@ -0,0 +1,11 @@
1
+ import type { Dict } from "@rcompat/type";
2
+ type RequestView = {
3
+ context: Dict;
4
+ cookies: Dict<string>;
5
+ headers: Dict<string>;
6
+ path: Dict<string>;
7
+ query: Dict<string>;
8
+ url: URL;
9
+ };
10
+ export type { RequestView as default };
11
+ //# sourceMappingURL=RequestView.d.ts.map
@@ -0,0 +1,3 @@
1
+ ;
2
+ export {};
3
+ //# sourceMappingURL=RequestView.js.map
@@ -0,0 +1,4 @@
1
+ import type RequestFacade from "#request/RequestFacade";
2
+ import type ServeApp from "#serve/App";
3
+ export default function handle(app: ServeApp, request: RequestFacade): Promise<Response>;
4
+ //# sourceMappingURL=handle.d.ts.map
@@ -0,0 +1,18 @@
1
+ import { Status } from "@rcompat/http";
2
+ async function run(hooks, request) {
3
+ const [first, ...rest] = hooks;
4
+ if (first === undefined) {
5
+ return new Response(null, {
6
+ headers: {
7
+ "Content-Length": String(0),
8
+ "Cache-Control": "no-cache",
9
+ },
10
+ status: Status.INTERNAL_SERVER_ERROR,
11
+ });
12
+ }
13
+ return await first(request, next => run(rest, next));
14
+ }
15
+ export default function handle(app, request) {
16
+ return run(app.handle_hooks, request);
17
+ }
18
+ //# sourceMappingURL=handle.js.map
@@ -1,4 +1,4 @@
1
1
  import type RequestFacade from "#request/RequestFacade";
2
- declare const _default: (request: Request) => RequestFacade;
3
- export default _default;
2
+ declare function parse(request: Request): RequestFacade;
3
+ export default parse;
4
4
  //# sourceMappingURL=parse.d.ts.map
@@ -1,5 +1,8 @@
1
1
  import RequestBag from "#request/RequestBag";
2
2
  import RequestBody from "#request/RequestBody";
3
+ import RequestContext from "#request/RequestContext";
4
+ import sContext from "#request/sContext";
5
+ import is from "@rcompat/is";
3
6
  function decode(s) {
4
7
  try {
5
8
  return decodeURIComponent(s);
@@ -9,14 +12,16 @@ function decode(s) {
9
12
  }
10
13
  }
11
14
  ;
12
- const normalize = (k) => k.toLowerCase();
13
- function bagHeaders(request) {
15
+ function normalize(k) {
16
+ return k.toLowerCase();
17
+ }
18
+ function header_bag(request) {
14
19
  const headers = Object.fromEntries([...request.headers].map(([k, v]) => [k.toLowerCase(), v]));
15
20
  return new RequestBag(headers, "headers", {
16
21
  normalize,
17
22
  });
18
23
  }
19
- function bagCookies(request) {
24
+ function cookie_bag(request) {
20
25
  const header = request.headers.get("cookie");
21
26
  const entries = Object.fromEntries(header
22
27
  ? header.split(";").map(s => s.trim()).filter(Boolean).map(s => {
@@ -30,23 +35,21 @@ function bagCookies(request) {
30
35
  raw: header ?? "",
31
36
  });
32
37
  }
33
- function bagQuery(url) {
38
+ function query_bag(url) {
34
39
  return new RequestBag(Object.fromEntries(url.searchParams), "query", {
35
40
  normalize,
36
41
  raw: url.search,
37
42
  });
38
43
  }
39
- function bagPath(url) {
40
- return new RequestBag(Object.create(null), "path", {
41
- raw: url.pathname,
42
- });
44
+ function path_bag(url) {
45
+ return new RequestBag(Object.create(null), "path", { raw: url.pathname });
43
46
  }
44
- export default (request) => {
47
+ function parse(request) {
45
48
  const url = new URL(request.url);
46
- return {
49
+ const facade = {
47
50
  body: RequestBody.none(),
48
- context: {},
49
- cookies: bagCookies(request),
51
+ method: request.method.toLowerCase(),
52
+ cookies: cookie_bag(request),
50
53
  forward(to, headers) {
51
54
  return fetch(to, {
52
55
  body: request.body,
@@ -58,12 +61,48 @@ export default (request) => {
58
61
  method: request.method,
59
62
  });
60
63
  },
61
- headers: bagHeaders(request),
64
+ headers: header_bag(request),
62
65
  original: request,
63
- path: bagPath(url),
64
- query: bagQuery(url),
66
+ path: path_bag(url),
67
+ query: query_bag(url),
65
68
  target: url.pathname + url.search,
66
69
  url,
70
+ has(key) {
71
+ return this[sContext].has(key);
72
+ },
73
+ try(key) {
74
+ return this[sContext].try(key);
75
+ },
76
+ get(key) {
77
+ return this[sContext].get(key);
78
+ },
79
+ set(key, value) {
80
+ if (is.function(value)) {
81
+ this[sContext].update(key, value);
82
+ }
83
+ else {
84
+ this[sContext].set(key, value);
85
+ }
86
+ return this;
87
+ },
88
+ delete(key) {
89
+ this[sContext].delete(key);
90
+ return this;
91
+ },
92
+ toJSON() {
93
+ return {
94
+ context: this[sContext].toJSON(),
95
+ cookies: this.cookies.toJSON(),
96
+ headers: this.headers.toJSON(),
97
+ path: this.path.toJSON(),
98
+ query: this.query.toJSON(),
99
+ url: this.url,
100
+ };
101
+ },
102
+ [sContext]: new RequestContext(),
67
103
  };
68
- };
104
+ return facade;
105
+ }
106
+ ;
107
+ export default parse;
69
108
  //# sourceMappingURL=parse.js.map
@@ -1,28 +1,43 @@
1
+ import E from "#errors";
1
2
  import log from "#log";
2
3
  import response_error from "#response/error";
3
4
  import response_json from "#response/json";
4
5
  import respond from "#response/respond";
5
- import guard from "#route/guard";
6
- import Status from "@rcompat/http/Status";
6
+ import { Status } from "@rcompat/http";
7
7
  import ParseError from "pema/ParseError";
8
- async function reducer(hooks, request) {
8
+ const result = (request, response) => ({ request, response });
9
+ function wrap_hook(h) {
10
+ return async (request, next) => {
11
+ let downstream;
12
+ let called_next = false;
13
+ const response = await h(request, async (r) => {
14
+ if (called_next)
15
+ throw E.hook_reused_next();
16
+ called_next = true;
17
+ downstream = await next(r);
18
+ return downstream.response;
19
+ });
20
+ // hook returned nothing
21
+ if (response === undefined) {
22
+ if (called_next)
23
+ throw E.hook_no_return();
24
+ throw E.hook_bad_return();
25
+ }
26
+ // if the hook called next(), we preserve the downstream request (mutations) but
27
+ // allow the hook to override the response by returning something else.
28
+ return downstream !== undefined
29
+ ? result(downstream.request, response)
30
+ : result(request, response);
31
+ };
32
+ }
33
+ async function run(hooks, request) {
9
34
  const [first, ...rest] = hooks;
35
+ if (first === undefined)
36
+ return result(request, new Response());
10
37
  if (rest.length === 0)
11
- return await first(request, _ => new Response());
12
- return await first(request, _ => reducer(rest, _));
38
+ return first(request, async (r) => result(r, new Response()));
39
+ return first(request, r => run(rest, r));
13
40
  }
14
- ;
15
- // last, preserve final request form
16
- function last(handler) {
17
- return async (request) => {
18
- const response = await handler(request);
19
- return {
20
- request,
21
- response: response,
22
- };
23
- };
24
- }
25
- ;
26
41
  export default async function (app, partial_request) {
27
42
  let errorRoute;
28
43
  try {
@@ -30,12 +45,12 @@ export default async function (app, partial_request) {
30
45
  if (route === undefined) {
31
46
  return response_error()(app, {}, partial_request);
32
47
  }
33
- const { errors, guards, handler, layouts } = route;
48
+ const { errors, hooks, layouts, handler } = route;
34
49
  errorRoute = errors[0];
35
- const route_hooks = app.modules.map(module => module.route.bind(module));
36
- const hooks = [...route_hooks, guard(guards), last(handler)];
37
- // handle request
38
- const { request, response } = await reducer(hooks, route.request);
50
+ const internal_hooks = app.route_hooks.map(wrap_hook);
51
+ const route_hooks = hooks.map(wrap_hook);
52
+ const last = async (req, _next) => result(req, await handler(req));
53
+ const { request, response } = await run([...internal_hooks, ...route_hooks, last], route.request);
39
54
  return await respond(response)(app, {
40
55
  layouts: await Promise.all(layouts.map(layout => layout(request))),
41
56
  }, request);
@@ -1,4 +1,4 @@
1
- import type FileRef from "@rcompat/fs/FileRef";
1
+ import type { FileRef } from "@rcompat/fs";
2
2
  import FileRouter from "@rcompat/fs/FileRouter";
3
3
  declare const _default: (directory: FileRef, extensions: string[]) => Promise<FileRouter>;
4
4
  export default _default;
@@ -1,56 +1,28 @@
1
- import AppError from "#AppError";
2
- import fail from "#fail";
1
+ import E from "#errors";
3
2
  import FileRouter from "@rcompat/fs/FileRouter";
4
- const error_entries = Object.entries({
5
- DoubleRoute: "double route {0}, disambiguate routes",
6
- OptionalRoute: "optional route {0} may not be a directory",
7
- RestRoute: "rest route {0} may not be a directory",
8
- });
9
- const allowed = {
10
- re: /^[a-zA-Z0-9\-_+[\].]+$/,
11
- replacements: ["a-Z", "0-9", "-", "_", "+", "[", "]", "."],
12
- text: "letters ({1}), digits ({2}), {3}, {4}, {5}, {6}, {7}",
13
- };
14
- const specials = ["guard", "error", "layout"];
15
- const _ = allowed.re.source.slice(1, -1);
3
+ const re = /^[a-zA-Z0-9\-_+[\].]+$/;
4
+ const specials = ["error", "hook", "layout"];
16
5
  const p = /^(?:[^[\]]+|\[(?:\.{3})?[a-zA-Z0-9_]+\]|\[\[(?:\.{3})?[a-zA-Z0-9_]+\]\])$/;
17
6
  export default async (directory, extensions) => {
18
- try {
19
- const router = await FileRouter.load({
20
- directory: directory.toString(),
21
- extensions,
22
- specials: {
23
- error: { recursive: false },
24
- guard: { recursive: true },
25
- layout: { recursive: true },
26
- },
27
- });
28
- router.all().map(route => {
29
- const { path, segment } = route;
30
- if (!allowed.re.test(segment)) {
31
- const message = `route {0} may only contain ${allowed.text}`;
32
- throw fail(message, path, ...allowed.replacements);
33
- }
34
- if (segment.startsWith("+") && !specials.includes(segment.slice(1))) {
35
- throw fail("route {0} is not a valid special file", path);
36
- }
37
- if (!p.test(segment)) {
38
- throw fail("route {0} has an invalid parameter", path);
39
- }
40
- });
41
- return router;
42
- }
43
- catch (error) {
44
- if (error instanceof AppError) {
45
- throw error;
7
+ const router = await FileRouter.load({
8
+ directory: directory.toString(),
9
+ extensions,
10
+ specials: {
11
+ error: { recursive: false },
12
+ hook: { recursive: true },
13
+ layout: { recursive: true },
14
+ },
15
+ });
16
+ router.all().map(route => {
17
+ const { path, segment } = route;
18
+ if (!re.test(segment))
19
+ throw E.route_invalid_characters(path, re);
20
+ if (segment.startsWith("+") && !specials.includes(segment.slice(1))) {
21
+ throw E.route_invalid_special_file(path);
46
22
  }
47
- error_entries.forEach(([key, value]) => {
48
- if (key in FileRouter.Error) {
49
- throw new AppError(value, error.route);
50
- }
51
- });
52
- // rethrow original error
53
- throw error;
54
- }
23
+ if (!p.test(segment))
24
+ throw E.route_invalid_parameter(path, segment);
25
+ });
26
+ return router;
55
27
  };
56
28
  //# sourceMappingURL=router.js.map
@@ -1,3 +1,3 @@
1
1
  declare const _default: symbol;
2
2
  export default _default;
3
- //# sourceMappingURL=wrap.d.ts.map
3
+ //# sourceMappingURL=sContext.d.ts.map
@@ -0,0 +1,2 @@
1
+ export default Symbol("primate.request.context");
2
+ //# sourceMappingURL=sContext.js.map
@@ -0,0 +1,4 @@
1
+ import type RequestFacade from "#request/RequestFacade";
2
+ declare const _default: () => import("node:async_hooks").AsyncLocalStorage<RequestFacade>;
3
+ export default _default;
4
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1,5 @@
1
+ import io from "@rcompat/io";
2
+ import cache from "@rcompat/kv/cache";
3
+ const s = Symbol("primate.request");
4
+ export default () => cache.get(s, () => new io.async.Context());
5
+ //# sourceMappingURL=storage.js.map
@@ -1,8 +1,7 @@
1
- import type View from "#frontend/View";
1
+ import type View from "#client/View";
2
2
  import type RequestFacade from "#request/RequestFacade";
3
3
  import type ServeApp from "#serve/App";
4
- import type Dict from "@rcompat/type/Dict";
5
- import type MaybePromise from "@rcompat/type/MaybePromise";
4
+ import type { Dict, MaybePromise } from "@rcompat/type";
6
5
  type ResponseFunction = (app: ServeApp, transfer: Dict, request: RequestFacade) => MaybePromise<View | null | Response | undefined>;
7
6
  export { ResponseFunction as default };
8
7
  //# sourceMappingURL=ResponseFunction.d.ts.map
@@ -1,6 +1,6 @@
1
1
  import type ResponseFunction from "#response/ResponseFunction";
2
2
  import type Streamable from "@rcompat/fs/Streamable";
3
- import type Dict from "@rcompat/type/Dict";
3
+ import type { Dict } from "@rcompat/type";
4
4
  type ResponseLike = string | Dict | Dict[] | URL | Blob | ReadableStream | Streamable | Response | ResponseFunction | null;
5
5
  export { ResponseLike as default };
6
6
  //# sourceMappingURL=ResponseLike.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import type ServeApp from "#serve/App";
2
- import type StreamSource from "@rcompat/fs/StreamSource";
2
+ import type { StreamSource } from "@rcompat/fs";
3
3
  /**
4
4
  * Stream a binary response.
5
5
  * @param source streamable source
@@ -1,5 +1,6 @@
1
1
  import Streamable from "@rcompat/fs/Streamable";
2
- import mime from "@rcompat/http/mime/application/octet-stream";
2
+ import { MIME } from "@rcompat/http";
3
+ import is from "@rcompat/is";
3
4
  const encodeRFC5987 = (s) => encodeURIComponent(s).replace(/['()*]/g, c => `%${c.charCodeAt(0).toString(16).toUpperCase()}`);
4
5
  /**
5
6
  * @security
@@ -30,11 +31,11 @@ function toContentDisposition(filename) {
30
31
  */
31
32
  export default function binary(source, init) {
32
33
  return (app) => {
33
- const { headers, ...rest } = app.media(mime, init);
34
+ const { headers, ...rest } = app.media(MIME.APPLICATION_OCTET_STREAM, init);
34
35
  const name = Streamable.named(source) ? source.name : "default.bin";
35
36
  const out = new Headers(headers);
36
37
  out.set("Content-Disposition", toContentDisposition(name));
37
- if (source instanceof Blob) {
38
+ if (is.blob(source)) {
38
39
  source.type && out.set("Content-Type", source.type);
39
40
  out.set("Content-Length", String(source.size));
40
41
  }
@@ -1,5 +1,5 @@
1
1
  import type ResponseFunction from "#response/ResponseFunction";
2
- import type ValidStatus from "@rcompat/http/ValidStatus";
2
+ import type { ValidStatus } from "@rcompat/http";
3
3
  type Options = {
4
4
  body?: string;
5
5
  page?: string;