@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,31 +1,29 @@
1
1
  import App from "#App";
2
- import fail from "#fail";
2
+ import { s_config } from "#app/Facade";
3
+ import E from "#errors";
3
4
  import hash from "#hash";
4
- import I18NModule from "#i18n/Module";
5
+ import i18n_module from "#i18n/module";
5
6
  import location from "#location";
6
7
  import log from "#log";
7
- import reducer from "#reducer";
8
+ import create from "#module/create";
9
+ import handle from "#request/handle";
8
10
  import parse from "#request/parse";
9
11
  import RequestBag from "#request/RequestBag";
10
12
  import RequestBody from "#request/RequestBody";
13
+ import route from "#request/route";
14
+ import request_storage from "#request/storage";
11
15
  import router from "#route/router";
12
- import DevModule from "#serve/module/Dev";
13
- import HandleModule from "#serve/module/Handle";
14
- import SessionModule from "#session/SessionModule";
16
+ import dev_module from "#serve/dev-module";
17
+ import session_module from "#session/module";
15
18
  import tags from "#tags";
16
- import is from "@rcompat/assert/is";
17
- import FileRef from "@rcompat/fs/FileRef";
19
+ import assert from "@rcompat/assert";
20
+ import fs from "@rcompat/fs";
18
21
  import FileRouter from "@rcompat/fs/FileRouter";
19
- import resolve from "@rcompat/http/mime/extension/resolve";
20
- import TEXT_HTML from "@rcompat/http/mime/text/html";
22
+ import { MIME, Status } from "@rcompat/http";
21
23
  import serve from "@rcompat/http/serve";
22
- import Status from "@rcompat/http/Status";
23
- import entries from "@rcompat/record/entries";
24
- import utf8ByteLength from "@rcompat/string/utf8-bytelength";
25
- import pema from "pema";
26
- import record from "pema/record";
27
- import string from "pema/string";
28
- import uint from "pema/uint";
24
+ import is from "@rcompat/is";
25
+ import utf8 from "@rcompat/string/utf8";
26
+ import p from "pema";
29
27
  const deroot = (pathname) => pathname.endsWith("/") && pathname !== "/"
30
28
  ? pathname.slice(0, -1)
31
29
  : pathname;
@@ -62,13 +60,12 @@ export default class ServeApp extends App {
62
60
  #serve_assets;
63
61
  #pages;
64
62
  #stores;
65
- #frontends = {};
63
+ #frontends = new Map();
66
64
  #router;
67
- #builtins;
68
65
  #i18n_config;
69
66
  constructor(rootfile, init) {
70
- const dir = new FileRef(rootfile).directory;
71
- super(dir, init.config, {
67
+ const dir = fs.ref(rootfile).directory;
68
+ super(dir, init.facade[s_config], {
72
69
  mode: init.mode,
73
70
  target: init.target,
74
71
  dir: dir.path,
@@ -78,8 +75,8 @@ export default class ServeApp extends App {
78
75
  this.#stores = Object.fromEntries((init.stores?.map(([k, s]) => [k, s.default])) ?? []);
79
76
  this.#serve_assets = init.assets;
80
77
  this.#pages = init.pages;
81
- const http = this.#init.config.http;
82
- this.#i18n_config = init.i18n_config;
78
+ const http = this.#init.facade[s_config].http;
79
+ this.#i18n_config = init.i18n;
83
80
  this.set(s_http, {
84
81
  host: http.host,
85
82
  port: http.port,
@@ -92,16 +89,39 @@ export default class ServeApp extends App {
92
89
  extensions: [".js"],
93
90
  specials: {
94
91
  error: { recursive: false },
95
- guard: { recursive: true },
96
92
  layout: { recursive: true },
93
+ hook: { recursive: true },
97
94
  },
98
95
  }, init.routes.map(s => s[0]));
99
- this.#builtins = {
100
- dev: init.mode === "development" ? new DevModule(this) : undefined,
101
- handle: new HandleModule(this),
102
- session: init.session_config ? new SessionModule(this.secure, init.session_config) : undefined,
103
- i18n: init.i18n_config ? new I18NModule(init.i18n_config) : undefined,
104
- };
96
+ if (init.mode === "development")
97
+ this.register(dev_module());
98
+ const assets = this.serve_assets.bind(this);
99
+ const bound_route = (request) => route(this, request);
100
+ if (init.session !== undefined) {
101
+ this.register(session_module(init.session));
102
+ }
103
+ if (init.i18n !== undefined)
104
+ this.register(i18n_module(init.i18n));
105
+ this.register(create({
106
+ name: "builtin/handle",
107
+ setup({ onHandle }) {
108
+ onHandle(async (request) => {
109
+ const asset = await assets(request.url.pathname);
110
+ if (asset !== undefined)
111
+ return asset;
112
+ return new Promise((resolve, reject) => {
113
+ request_storage().run(request, async () => {
114
+ try {
115
+ resolve(await bound_route(request));
116
+ }
117
+ catch (e) {
118
+ reject(e);
119
+ }
120
+ });
121
+ });
122
+ });
123
+ },
124
+ }));
105
125
  }
106
126
  ;
107
127
  get secure() {
@@ -111,10 +131,6 @@ export default class ServeApp extends App {
111
131
  get assets() {
112
132
  return this.#assets;
113
133
  }
114
- get modules() {
115
- const { session, i18n } = this.#builtins;
116
- return [session, i18n, ...super.modules].filter(m => m !== undefined);
117
- }
118
134
  get url() {
119
135
  const { host, port } = this.config("http");
120
136
  return `http${this.secure ? "s" : ""}://${host}:${port}`;
@@ -124,7 +140,7 @@ export default class ServeApp extends App {
124
140
  return this.#router;
125
141
  }
126
142
  get frontends() {
127
- return { ...this.#frontends };
143
+ return Object.fromEntries(this.#frontends);
128
144
  }
129
145
  get stores() {
130
146
  return this.#stores;
@@ -133,32 +149,31 @@ export default class ServeApp extends App {
133
149
  return this.#i18n_config;
134
150
  }
135
151
  loadView(name) {
136
- const f = new FileRef(name).path;
152
+ const f = fs.ref(name).path;
137
153
  const frontends = Object.keys(this.frontends);
138
- const extension = frontends.find(frontend => f.endsWith(frontend));
154
+ const extension = frontends.find(client => f.endsWith(client));
139
155
  const base = extension === undefined ? name : f.slice(0, -extension.length);
140
156
  const view = this.#views[base];
141
157
  if (view === undefined)
142
- throw fail("no view {0}", name);
143
- if (view.default === undefined) {
144
- throw fail("view {0} must export a default component", name);
145
- }
158
+ throw E.view_missing(name);
159
+ if (view.default === undefined)
160
+ throw E.view_missing_default_export(name);
146
161
  return view.default;
147
162
  }
148
163
  ;
149
164
  headers(csp = {}) {
150
- const http_csp = Object.entries(this.config("http.csp") ?? {});
165
+ const base = Object.entries(this.config("http.csp") ?? {});
151
166
  return {
152
167
  ...this.config("http.headers") ?? {},
153
- ...http_csp.length === 0 ? {} : {
154
- "Content-Security-Policy": to_csp(http_csp, this.#csp, csp),
168
+ ...base.length === 0 ? {} : {
169
+ "Content-Security-Policy": to_csp(base, this.#csp, csp),
155
170
  },
156
171
  };
157
172
  }
158
173
  ;
159
174
  render(content) {
160
175
  const { body, head, page, partial, placeholders = {} } = content;
161
- ["body", "head"].forEach(key => is(placeholders[key]).undefined());
176
+ ["body", "head"].forEach(key => assert.undefined(placeholders[key]));
162
177
  return partial ? body : Object.entries(placeholders)
163
178
  // replace given placeholders, defaulting to ""
164
179
  .reduce((rendered, [key, value]) => rendered
@@ -170,20 +185,22 @@ export default class ServeApp extends App {
170
185
  .replace("%head%", render_head(this.#assets, head));
171
186
  }
172
187
  body_length(body) {
173
- return typeof body === "string" ? utf8ByteLength(body) : 0;
188
+ return is.string(body) ? utf8.size(body) : 0;
174
189
  }
175
190
  respond(body, init) {
176
- const { headers, status } = pema({
177
- headers: record(string, string),
178
- status: uint.values(Status).default(Status.OK),
191
+ const { headers, status } = p({
192
+ headers: p.dict(),
193
+ status: p.uint.values(Status).default(Status.OK),
179
194
  }).parse(init);
180
195
  const body_length = this.body_length(body);
181
196
  return new Response(body, {
182
197
  headers: {
183
- "Content-Type": TEXT_HTML,
198
+ "Content-Type": MIME.TEXT_HTML,
184
199
  ...this.headers(),
185
- ...body_length ? { ...headers, "Content-Length": String(body_length) } : headers,
186
- }, status: status,
200
+ ...body_length ? {
201
+ ...headers, "Content-Length": String(body_length),
202
+ } : headers,
203
+ }, status,
187
204
  });
188
205
  }
189
206
  ;
@@ -206,7 +223,7 @@ export default class ServeApp extends App {
206
223
  code: inline ? code : "",
207
224
  inline,
208
225
  integrity: await hash(code),
209
- src: FileRef.join(this.#init.config.http.static.root, src ?? "").path,
226
+ src: fs.join(this.config("http.static.root"), src ?? "").path,
210
227
  type,
211
228
  });
212
229
  }
@@ -216,32 +233,35 @@ export default class ServeApp extends App {
216
233
  ;
217
234
  create_csp() {
218
235
  this.#csp = this.#assets.map(({ integrity, type: directive }) => [`${directive === "style" ? "style" : "script"}-src`, integrity])
219
- .reduce((csp, [directive, hash]) => ({ ...csp, [directive]: csp[directive].concat(`'${hash}'`) }), { "script-src": [], "style-src": [] });
236
+ .reduce((csp, [directive, _hash]) => ({
237
+ ...csp,
238
+ [directive]: csp[directive].concat(`'${_hash}'`),
239
+ }), { "script-src": [], "style-src": [] });
220
240
  }
221
241
  ;
222
- register(extension, viewFunction) {
223
- if (this.#frontends[extension] !== undefined) {
224
- throw fail("double file extension {0}", extension);
242
+ frontend(extension, view_response) {
243
+ if (this.#frontends.has(extension)) {
244
+ throw E.view_duplicate_extension(extension);
225
245
  }
226
- this.#frontends[extension] = viewFunction;
246
+ this.#frontends.set(extension, view_response);
227
247
  }
228
248
  ;
229
249
  page(name) {
230
250
  const page_name = name ?? location.app_html;
231
251
  return this.#pages[page_name];
232
252
  }
233
- async #try_serve(file) {
234
- if (await file.exists() && await file.isFile()) {
235
- return new Response(file.stream(), {
253
+ async #try_serve(ref) {
254
+ if (await ref.exists() && await ref.kind() === "file") {
255
+ return new Response(ref.stream(), {
236
256
  headers: {
237
- "Content-Type": resolve(file.name),
238
- "Content-Length": String(await file.byteLength()),
257
+ "Content-Type": MIME.resolve(ref.name),
258
+ "Content-Length": String(await ref.size()),
239
259
  },
240
260
  status: Status.OK,
241
261
  });
242
262
  }
243
263
  }
244
- async serveAsset(pathname) {
264
+ async serve_assets(pathname) {
245
265
  const static_root = this.config("http.static.root");
246
266
  if (!pathname.startsWith(static_root))
247
267
  return undefined;
@@ -256,23 +276,22 @@ export default class ServeApp extends App {
256
276
  return static_response;
257
277
  return undefined;
258
278
  }
259
- const asset = this.#serve_assets.client[pathname] ??
260
- this.#serve_assets.static[pathname];
261
- if (asset) {
262
- const binary = atob(asset.data);
263
- const bytes = new Uint8Array(binary.length);
264
- for (let i = 0; i < binary.length; i++) {
265
- bytes[i] = binary.charCodeAt(i);
266
- }
267
- return new Response(bytes, {
268
- headers: {
269
- "Content-Type": asset.mime,
270
- "Content-Length": String(bytes.length),
271
- },
272
- status: Status.OK,
273
- });
279
+ const assets = this.#serve_assets;
280
+ const asset = assets.client[pathname] ?? assets.static[pathname];
281
+ if (asset === undefined)
282
+ return undefined;
283
+ const binary = atob(asset.data);
284
+ const bytes = new Uint8Array(binary.length);
285
+ for (let i = 0; i < binary.length; i++) {
286
+ bytes[i] = binary.charCodeAt(i);
274
287
  }
275
- return undefined;
288
+ return new Response(bytes, {
289
+ headers: {
290
+ "Content-Type": asset.mime,
291
+ "Content-Length": String(bytes.length),
292
+ },
293
+ status: Status.OK,
294
+ });
276
295
  }
277
296
  async start() {
278
297
  if (this.mode === "production") {
@@ -293,8 +312,10 @@ export default class ServeApp extends App {
293
312
  else {
294
313
  const client_dir = this.root.join(location.client);
295
314
  const files = await client_dir.exists()
296
- ? await client_dir.collect(f => f.extension === ".js"
297
- || f.extension === ".css")
315
+ ? await client_dir.files({
316
+ recursive: true,
317
+ filter: info => info.extension === ".js" || info.extension === ".css",
318
+ })
298
319
  : [];
299
320
  this.#assets = await Promise.all(files.map(async (file) => {
300
321
  const type = file.extension === ".css" ? "style" : "js";
@@ -308,15 +329,9 @@ export default class ServeApp extends App {
308
329
  };
309
330
  }));
310
331
  }
311
- const modules = [
312
- this.#builtins.dev,
313
- ...this.modules,
314
- this.#builtins.handle,
315
- ].filter(m => m !== undefined);
316
- const handle = (request) => reducer(modules, request, "handle");
317
332
  this.#server = await serve(async (request) => {
318
333
  try {
319
- return await handle(parse(request));
334
+ return await handle(this, parse(request));
320
335
  }
321
336
  catch (error) {
322
337
  log.error(error);
@@ -328,9 +343,14 @@ export default class ServeApp extends App {
328
343
  status: Status.INTERNAL_SERVER_ERROR,
329
344
  });
330
345
  }
331
- }, { ...this.get(s_http),
332
- timeout: this.mode === "development" ? 0 : undefined });
333
- log.system("started {0}", this.url);
346
+ }, {
347
+ ...this.get(s_http),
348
+ timeout: this.mode === "development" ? 0 : undefined,
349
+ });
350
+ function bright(x) {
351
+ return `\x1b[38;2;0;200;255m${x}\x1b[0m`;
352
+ }
353
+ log.print(`» app url ${bright(this.url)}\n`);
334
354
  }
335
355
  ;
336
356
  stop() {
@@ -350,37 +370,35 @@ export default class ServeApp extends App {
350
370
  return;
351
371
  }
352
372
  const verb = original.method.toLowerCase();
353
- const { errors = [], guards = [], layouts = [] } = entries(route.specials)
354
- .map(([key, value]) => [`${key}s`, value ?? []])
355
- .map(([key, value]) => [key, value.map(v => {
356
- const verbs = router.get(v);
357
- const routeHandler = verbs[verb];
358
- return routeHandler?.handler;
359
- }).filter(Boolean).toReversed()])
360
- .get();
373
+ const specials = route.specials;
374
+ const errors = (specials.error ?? [])
375
+ .map(v => router.get(v)[verb]?.handler)
376
+ .filter(Boolean)
377
+ .toReversed();
378
+ const layouts = (specials.layout ?? [])
379
+ .map(v => router.get(v)[verb]?.handler)
380
+ .filter(Boolean)
381
+ .toReversed();
382
+ const hooks = (specials.hook ?? [])
383
+ .toReversed()
384
+ .flatMap(v => router.getHooks(v));
361
385
  const verbs = router.get(route.path);
362
- const routePath = verbs[verb];
363
- if (routePath === undefined) {
364
- throw fail("route {0} has no {1} verb", route.path, verb);
365
- }
366
- const parseBody = routePath.options.parseBody;
367
- const body = parseBody ?? this.config("request.body.parse")
386
+ const route_path = verbs[verb];
387
+ if (route_path === undefined)
388
+ throw E.route_missing_verb(route.path, verb);
389
+ const handler = route_path.handler;
390
+ const parse_body = route_path.options.parseBody;
391
+ const body = parse_body ?? this.config("request.body.parse")
368
392
  ? await RequestBody.parse(original, url)
369
393
  : RequestBody.none();
370
- return {
371
- errors,
372
- guards,
373
- handler: routePath.handler,
374
- layouts,
375
- request: {
376
- ...request,
377
- body,
378
- path: new RequestBag(route.params, "path", {
379
- normalize: k => k.toLowerCase(),
380
- raw: url.pathname,
381
- }),
382
- },
383
- };
394
+ const refined = Object.assign(Object.create(request), {
395
+ body,
396
+ path: new RequestBag(route.params, "path", {
397
+ normalize: k => k.toLowerCase(),
398
+ raw: url.pathname,
399
+ }),
400
+ });
401
+ return { errors, hooks, layouts, handler, request: refined };
384
402
  }
385
403
  }
386
404
  //# sourceMappingURL=App.js.map
@@ -1,8 +1,8 @@
1
- import type Config from "#config/Config";
1
+ import type AppFacade from "#app/Facade";
2
2
  import type I18NConfig from "#i18n/Config";
3
3
  import type Mode from "#Mode";
4
4
  import type SessionConfig from "#session/Config";
5
- import type Dict from "@rcompat/type/Dict";
5
+ import type { Dict } from "@rcompat/type";
6
6
  type Import = {
7
7
  default: unknown;
8
8
  } & Dict;
@@ -19,15 +19,15 @@ type ServeInit = {
19
19
  };
20
20
  views?: [string, Import][];
21
21
  stores?: [string, Import][];
22
- config: Config;
22
+ facade: AppFacade;
23
23
  routes: [string, {
24
24
  default: any;
25
25
  }][];
26
26
  mode: Mode;
27
27
  target: string;
28
28
  pages: Dict<string>;
29
- session_config?: SessionConfig;
30
- i18n_config?: I18NConfig;
29
+ session?: SessionConfig;
30
+ i18n?: I18NConfig;
31
31
  };
32
32
  export type { ServeInit as default };
33
33
  //# sourceMappingURL=Init.d.ts.map
@@ -0,0 +1,2 @@
1
+ export default function dev(): import("#module/create").Created;
2
+ //# sourceMappingURL=dev-module.d.ts.map
@@ -0,0 +1,34 @@
1
+ import log from "#log";
2
+ import create from "#module/create";
3
+ import c from "@rcompat/cli/color";
4
+ function pass(address, request) {
5
+ return fetch(address, {
6
+ body: request.body,
7
+ duplex: "half",
8
+ headers: request.headers,
9
+ method: request.method,
10
+ });
11
+ }
12
+ export default function dev() {
13
+ let paths;
14
+ let reload;
15
+ return create({
16
+ name: "builtin/dev",
17
+ setup({ onServe, onHandle }) {
18
+ onServe(app => {
19
+ const { host, port } = app.livereload;
20
+ const assets = app.assets.map(asset => asset.src);
21
+ reload = `http://${host}:${port}`;
22
+ paths = ["/esbuild"].concat(assets);
23
+ log.print(`↻ live reload ${c.dim(reload)}\n`);
24
+ });
25
+ onHandle((request, next) => {
26
+ const { pathname } = new URL(request.url);
27
+ return paths.includes(pathname)
28
+ ? pass(`${reload}${pathname}`, request.original)
29
+ : next(request);
30
+ });
31
+ },
32
+ });
33
+ }
34
+ //# sourceMappingURL=dev-module.js.map
@@ -1,4 +1,3 @@
1
1
  import type ServeApp from "#serve/App";
2
- declare const _default: (app: ServeApp) => Promise<ServeApp>;
3
- export default _default;
2
+ export default function run_serve_hooks(app: ServeApp): Promise<ServeApp>;
4
3
  //# sourceMappingURL=hook.d.ts.map
@@ -1,13 +1,6 @@
1
- import log from "#log";
2
- import reducer from "#reducer";
3
- function pre(app) {
4
- log.system("in startup");
5
- return app;
6
- }
7
- ;
8
- async function post(app) {
1
+ export default async function run_serve_hooks(app) {
2
+ await app.serve_hooks(app);
9
3
  await app.start();
10
4
  return app;
11
5
  }
12
- export default async (app) => post(await reducer(app.modules, pre(app), "serve"));
13
6
  //# sourceMappingURL=hook.js.map
@@ -1,5 +1,5 @@
1
1
  import ServeApp from "#serve/App";
2
2
  import type ServeInit from "#serve/Init";
3
- declare const _default: (root: string, options: ServeInit) => Promise<ServeApp>;
3
+ declare const _default: (root: string, options: ServeInit) => Promise<ServeApp | undefined>;
4
4
  export default _default;
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1,6 +1,40 @@
1
+ import { s_attach, s_config } from "#app/Facade";
2
+ import E from "#db/errors";
3
+ import log from "#log";
4
+ import key from "#orm/key";
5
+ import store from "#orm/store";
1
6
  import ServeApp from "#serve/App";
2
- import serve from "#serve/hook";
7
+ import serve_hook from "#serve/hook";
8
+ import p from "pema";
3
9
  export default async (root, options) => {
4
- return serve(await new ServeApp(root, options).init());
10
+ const facade = options.facade;
11
+ const app = await new ServeApp(root, options).init();
12
+ facade[s_attach](app);
13
+ const config = facade[s_config];
14
+ const migrations = config.db.migrations;
15
+ try {
16
+ if (migrations !== undefined) {
17
+ const { table, db } = migrations;
18
+ const Migration = store({
19
+ name: table,
20
+ db,
21
+ schema: {
22
+ id: key.primary(p.u16, { generate: false }),
23
+ applied: p.date,
24
+ },
25
+ });
26
+ await Migration.table.create();
27
+ const last = await Migration.find({ limit: 1, sort: { id: "desc" } });
28
+ const last_id = last.length === 0 ? 0 : last[0].id;
29
+ const build_json = app.root.join("build.json");
30
+ const { migration_version } = await build_json.json();
31
+ if (last_id < migration_version)
32
+ throw E.unapplied_migrations();
33
+ }
34
+ return serve_hook(app);
35
+ }
36
+ catch (cause) {
37
+ log.error(cause);
38
+ }
5
39
  };
6
40
  //# sourceMappingURL=index.js.map
@@ -0,0 +1,3 @@
1
+ declare const _default: "0.5";
2
+ export default _default;
3
+ //# sourceMappingURL=TAG.d.ts.map
@@ -0,0 +1,2 @@
1
+ export default "0.5";
2
+ //# sourceMappingURL=TAG.js.map
@@ -0,0 +1,5 @@
1
+ declare const server: {
2
+ TAG: string;
3
+ };
4
+ export default server;
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,6 @@
1
+ import TAG from "#server/TAG";
2
+ const server = {
3
+ TAG,
4
+ };
5
+ export default server;
6
+ //# sourceMappingURL=index.js.map
@@ -1,5 +1,4 @@
1
- import type Dict from "@rcompat/type/Dict";
2
- import type JSONValue from "@rcompat/type/JSONValue";
1
+ import type { Dict, JSONValue } from "@rcompat/type";
3
2
  type Data = Dict<JSONValue>;
4
3
  export { Data as default };
5
4
  //# sourceMappingURL=Data.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import kSerialize from "#session/k-serialize";
2
- import type Schema from "@rcompat/type/Schema";
2
+ import type { Schema } from "@rcompat/type";
3
3
  export default class SessionHandle<Data> {
4
4
  #private;
5
5
  [kSerialize]: () => {
@@ -1,20 +1,23 @@
1
+ import E from "#errors";
1
2
  import kSerialize from "#session/k-serialize";
2
3
  import assert from "@rcompat/assert";
3
- import maybe from "@rcompat/assert/maybe";
4
+ import is from "@rcompat/is";
4
5
  export default class SessionHandle {
5
6
  #id;
6
7
  #data;
7
8
  #schema;
8
9
  #dirty = false;
9
10
  constructor(id, data, schema) {
10
- maybe(id).uuid();
11
- maybe(data).record();
12
- maybe(schema).object();
13
- maybe(schema?.parse).function();
14
- assert((id === undefined) === (data === undefined), "both `id` and `data` must be defined or undefined");
11
+ assert.maybe.uuid(id);
12
+ assert.maybe.dict(data);
13
+ assert.maybe.object(schema);
14
+ assert.maybe.function(schema?.parse);
15
+ assert.true((id === undefined) === (data === undefined), E.session_id_data());
15
16
  this.#id = id;
16
17
  this.#data = data;
17
- this.#schema = schema ?? { parse: (x) => x };
18
+ this.#schema = schema?.parse
19
+ ? schema
20
+ : { parse: (x) => x };
18
21
  }
19
22
  get exists() {
20
23
  return this.#id !== undefined;
@@ -43,8 +46,7 @@ export default class SessionHandle {
43
46
  if (!this.exists)
44
47
  throw new Error("cannot set() on non-existent session");
45
48
  const previous = this.#data;
46
- // @ts-expect-error TEST
47
- const candidate = typeof next === "function" ? next(previous) : next;
49
+ const candidate = is.function(next) ? next(previous) : next;
48
50
  this.#data = this.#schema.parse(candidate);
49
51
  this.#dirty = true;
50
52
  }