@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
@@ -0,0 +1,123 @@
1
+ import extract_issues from "#client/extract-issues";
2
+ import submit from "#client/submit";
3
+ function decode_pointer_segment(segment) {
4
+ // decode JSON Pointer: ~1 -> /, ~0 -> ~
5
+ return segment.replace(/~1/g, "/").replace(/~0/g, "~");
6
+ }
7
+ function pointer_to_fieldname(path) {
8
+ // if server didn't send a pointer, assume it's already a field name
9
+ if (!path.startsWith("/"))
10
+ return path;
11
+ // root pointer "" is handled before calling this
12
+ // "/" is not a valid root pointer, but treat as form-level
13
+ if (path === "/")
14
+ return "";
15
+ const segments = path.split("/").slice(1).map(decode_pointer_segment);
16
+ if (segments.length === 0 || segments[0] === "")
17
+ return "";
18
+ let name = segments[0];
19
+ for (let i = 1; i < segments.length; i++) {
20
+ name += `[${segments[i]}]`;
21
+ }
22
+ return name;
23
+ }
24
+ export default function createForm(init) {
25
+ const id = init.id ?? `form-${crypto.randomUUID()}`;
26
+ let snapshot = {
27
+ id,
28
+ submitting: false,
29
+ submitted: false,
30
+ errors: { form: [], fields: {} },
31
+ };
32
+ const subscribers = new Set();
33
+ function publish() {
34
+ for (const s of subscribers)
35
+ s(snapshot);
36
+ }
37
+ function setSubmitting(submitting) {
38
+ snapshot = { ...snapshot, submitting };
39
+ publish();
40
+ }
41
+ function setErrors(issues) {
42
+ const by_field = {};
43
+ const form_errors = [];
44
+ for (const issue of issues) {
45
+ const path = issue.path;
46
+ // no path or empty string -> form-level error
47
+ if (path === undefined) {
48
+ form_errors.push(issue.message);
49
+ continue;
50
+ }
51
+ const key = pointer_to_fieldname(path);
52
+ // if normalizes to empty (e.g. "/"), treat as form-level
53
+ if (key.length === 0) {
54
+ form_errors.push(issue.message);
55
+ continue;
56
+ }
57
+ (by_field[key] ??= []).push(issue.message);
58
+ }
59
+ snapshot = {
60
+ ...snapshot,
61
+ submitted: false,
62
+ errors: {
63
+ form: form_errors,
64
+ fields: by_field,
65
+ },
66
+ };
67
+ publish();
68
+ }
69
+ async function submit_form(event) {
70
+ if (event !== undefined) {
71
+ event.preventDefault();
72
+ event.stopPropagation();
73
+ }
74
+ const form_element = event?.currentTarget ??
75
+ document.getElementById(id);
76
+ // no form element
77
+ if (form_element === null)
78
+ return;
79
+ const method = init.method
80
+ ?? form_element.method.toUpperCase()
81
+ ?? "POST";
82
+ const url = init.url ?? form_element.action;
83
+ const form_data = new FormData(form_element);
84
+ setSubmitting(true);
85
+ try {
86
+ const response = await submit(url, form_data, method);
87
+ if (response.ok) {
88
+ // on success: clear errors, let the app decide what to do next
89
+ // (redirect/reload)
90
+ snapshot = { ...snapshot, submitted: true, errors: { form: [], fields: {} } };
91
+ publish();
92
+ return;
93
+ }
94
+ const payload = await response.json();
95
+ const issues = extract_issues(payload); // all issues, all paths
96
+ setErrors(issues);
97
+ }
98
+ catch (error) {
99
+ // network error
100
+ setErrors([{ type: "network_error", message: error.message, path: "" }]);
101
+ }
102
+ finally {
103
+ setSubmitting(false);
104
+ }
105
+ }
106
+ function subscribe(fn) {
107
+ subscribers.add(fn);
108
+ fn(snapshot); // emit current
109
+ return () => subscribers.delete(fn);
110
+ }
111
+ function read() {
112
+ return snapshot;
113
+ }
114
+ return {
115
+ subscribe,
116
+ read,
117
+ submit: submit_form,
118
+ get id() {
119
+ return snapshot.id;
120
+ },
121
+ };
122
+ }
123
+ //# sourceMappingURL=create-form.js.map
@@ -0,0 +1,4 @@
1
+ import type { JSONPointer } from "@rcompat/type";
2
+ import type { Issue, JSONPayload } from "pema";
3
+ export default function extractIssues(payload: JSONPayload, defaultPath?: JSONPointer | ""): Issue[];
4
+ //# sourceMappingURL=extract-issues.d.ts.map
@@ -0,0 +1,21 @@
1
+ export default function extractIssues(payload, defaultPath = "") {
2
+ // scalar: { message, messages }
3
+ if ("messages" in payload) {
4
+ return payload.messages.map(m => ({
5
+ type: payload.type,
6
+ message: m,
7
+ // for forms, defaultPath is "", but Issue.path expects a JSONPointer
8
+ // so we cast here; form-level errors are handled separately anyway
9
+ path: defaultPath,
10
+ }));
11
+ }
12
+ // keyed: { "/field": { message, messages }, ... }
13
+ const issues = [];
14
+ for (const [path, bundle] of Object.entries(payload)) {
15
+ for (const message of bundle.messages) {
16
+ issues.push({ type: bundle.type, message, path: path });
17
+ }
18
+ }
19
+ return issues;
20
+ }
21
+ //# sourceMappingURL=extract-issues.js.map
@@ -0,0 +1,13 @@
1
+ declare function refetch(input: string | URL, init?: RequestInit, max_hops?: number): Promise<{
2
+ requested: URL;
3
+ response: Response;
4
+ }>;
5
+ declare function is_json(response: Response): boolean;
6
+ declare function submit(pathname: string, body: any, method: string): Promise<Response>;
7
+ declare const http: {
8
+ refetch: typeof refetch;
9
+ is_json: typeof is_json;
10
+ submit: typeof submit;
11
+ };
12
+ export default http;
13
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1,57 @@
1
+ import { MIME } from "@rcompat/http";
2
+ const sameorigin = (url) => url.origin === globalThis.location.origin;
3
+ const get_location = (response, base) => {
4
+ if (response.type === "opaqueredirect")
5
+ return null;
6
+ const location = response.headers.get("Location");
7
+ return location !== null ? new URL(location, base) : null;
8
+ };
9
+ async function refetch(input, init = {}, max_hops = 5) {
10
+ let url = new URL(input.toString(), globalThis.location.href);
11
+ const method = (init.method ?? "GET").toUpperCase();
12
+ let hops = 0;
13
+ if (method !== "GET") {
14
+ const response = await fetch(url.pathname + url.search, {
15
+ ...init, redirect: "follow",
16
+ });
17
+ return { requested: new URL(response.url), response };
18
+ }
19
+ while (hops < max_hops) {
20
+ const response = await fetch(url.pathname + url.search, {
21
+ ...init, redirect: "manual",
22
+ });
23
+ if (response.type === "opaqueredirect")
24
+ return { requested: url, response };
25
+ const location = get_location(response, url.toString());
26
+ if (location !== null && response.status >= 300 && response.status < 400) {
27
+ if (!sameorigin(location))
28
+ return { requested: url, response };
29
+ url = location;
30
+ hops++;
31
+ continue;
32
+ }
33
+ return { requested: url, response };
34
+ }
35
+ throw new Error("Too many redirects");
36
+ }
37
+ function is_json(response) {
38
+ const raw = response.headers.get("content-type") ?? "";
39
+ return raw.split(";")[0].trim() === MIME.APPLICATION_JSON;
40
+ }
41
+ async function submit(pathname, body, method) {
42
+ const { requested, response } = await refetch(pathname, { body, method });
43
+ if (is_json(response)) {
44
+ history.replaceState({}, "", requested.pathname + requested.search);
45
+ }
46
+ else {
47
+ globalThis.location.assign(requested.toString());
48
+ }
49
+ return response;
50
+ }
51
+ const http = {
52
+ refetch,
53
+ is_json,
54
+ submit,
55
+ };
56
+ export default http;
57
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1,23 @@
1
+ import type { FormInit, FormView } from "#client/create-form";
2
+ import createForm from "#client/create-form";
3
+ import type Data from "#client/Data";
4
+ import type Publish from "#client/Publish";
5
+ import type Render from "#client/Render";
6
+ import submit from "#client/submit";
7
+ import toValidated from "#client/to-validated";
8
+ import validateField from "#client/validate-field";
9
+ import type ValidateInit from "#client/ValidateInit";
10
+ import type ValidateUpdater from "#client/ValidateUpdater";
11
+ import type ValidationError from "#client/ValidationError";
12
+ import type ViewResponse from "#client/ViewResponse";
13
+ declare const client: {
14
+ boot: <T extends import("@rcompat/type").Dict>(u: import("./root.js").Updater<T>) => void;
15
+ navigate: (href: string, event?: Event) => Promise<void>;
16
+ submit: typeof submit;
17
+ createForm: typeof createForm;
18
+ validateField: typeof validateField;
19
+ toValidated: typeof toValidated;
20
+ };
21
+ export default client;
22
+ export type { Data, FormInit, FormView, Publish, Render, ValidateInit, ValidateUpdater, ValidationError, ViewResponse, };
23
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,16 @@
1
+ import boot from "#client/boot";
2
+ import createForm from "#client/create-form";
3
+ import navigate from "#client/navigate";
4
+ import submit from "#client/submit";
5
+ import toValidated from "#client/to-validated";
6
+ import validateField from "#client/validate-field";
7
+ const client = {
8
+ boot,
9
+ navigate: navigate.go,
10
+ submit,
11
+ createForm,
12
+ validateField,
13
+ toValidated,
14
+ };
15
+ export default client;
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,13 @@
1
+ type Location = {
2
+ hash: string;
3
+ pathname: string;
4
+ };
5
+ declare function goto(target: Location, state?: boolean, after?: () => void): Promise<void>;
6
+ declare function go(href: string, event?: Event): Promise<void>;
7
+ declare const navigate: {
8
+ go: typeof go;
9
+ goto: typeof goto;
10
+ scroll_hash: (hash: string) => void;
11
+ };
12
+ export default navigate;
13
+ //# sourceMappingURL=navigate.d.ts.map
@@ -0,0 +1,67 @@
1
+ import http from "#client/http";
2
+ import root from "#client/root";
3
+ import storage from "#client/storage";
4
+ import { MIME } from "@rcompat/http";
5
+ const headers = {
6
+ Accept: MIME.APPLICATION_JSON,
7
+ };
8
+ const get_by_id_or_name = (name) => document.getElementById(name) ?? document.getElementsByName(name)[0];
9
+ const scroll_hash = (hash) => {
10
+ if (hash === "") {
11
+ globalThis.scrollTo(0, 0);
12
+ }
13
+ else {
14
+ get_by_id_or_name(hash.slice(1)).scrollIntoView();
15
+ }
16
+ };
17
+ async function goto(target, state = false, after) {
18
+ try {
19
+ const { scrollTop } = globalThis.document.scrollingElement;
20
+ const { location } = globalThis;
21
+ const { requested, response } = await http.refetch(target.pathname, { headers });
22
+ if (http.is_json(response)) {
23
+ if (response.ok)
24
+ root.update(await response.json());
25
+ if (state) {
26
+ storage.new({ hash: location.hash, pathname: location.pathname, scrollTop });
27
+ history.pushState({}, "", `${target.pathname}${target.hash}`);
28
+ }
29
+ after?.();
30
+ return;
31
+ }
32
+ const dest = response.type !== "opaqueredirect"
33
+ ? requested.toString() + target.hash
34
+ : new URL(target.pathname + target.hash, location.href).toString();
35
+ location.assign(dest);
36
+ }
37
+ catch (error) {
38
+ console.warn(error);
39
+ }
40
+ }
41
+ async function go(href, event) {
42
+ const url = new URL(href);
43
+ const { hash, pathname } = url;
44
+ const { location } = globalThis;
45
+ if (url.host === location.host) {
46
+ event?.preventDefault();
47
+ if (location.pathname !== pathname) {
48
+ await goto(url, true, () => {
49
+ scroll_hash(hash);
50
+ globalThis.dispatchEvent(new Event("updated"));
51
+ });
52
+ }
53
+ if (location.hash !== hash) {
54
+ const { scrollTop } = globalThis.document.scrollingElement;
55
+ storage.new({ hash: location.hash, pathname: location.pathname, scrollTop, stop: true });
56
+ history.pushState(null, "", `${location.pathname}${hash}`);
57
+ scroll_hash(hash);
58
+ }
59
+ }
60
+ }
61
+ const navigate = {
62
+ go,
63
+ goto,
64
+ scroll_hash,
65
+ };
66
+ export default navigate;
67
+ //# sourceMappingURL=navigate.js.map
@@ -0,0 +1,9 @@
1
+ import type ClientData from "#client/Data";
2
+ import type { Dict } from "@rcompat/type";
3
+ export type Updater<T extends Dict> = (json: ClientData<T>, after?: () => void) => void;
4
+ declare const root: {
5
+ set(updater: Updater<any>): void;
6
+ update(data: any, after?: () => void): void;
7
+ };
8
+ export default root;
9
+ //# sourceMappingURL=root.d.ts.map
@@ -0,0 +1,11 @@
1
+ let current;
2
+ const root = {
3
+ set(updater) {
4
+ current = updater;
5
+ },
6
+ update(data, after) {
7
+ current(data, after);
8
+ },
9
+ };
10
+ export default root;
11
+ //# sourceMappingURL=root.js.map
@@ -0,0 +1,2 @@
1
+ export default function submit(pathname: string, body: any, method: string): Promise<Response>;
2
+ //# sourceMappingURL=submit.d.ts.map
@@ -0,0 +1,41 @@
1
+ import http from "#client/http";
2
+ import root from "#client/root";
3
+ import storage from "#client/storage";
4
+ import { MIME } from "@rcompat/http";
5
+ const headers = {
6
+ Accept: MIME.APPLICATION_JSON,
7
+ };
8
+ export default async function submit(pathname, body, method) {
9
+ const { requested, response } = await http.refetch(pathname, {
10
+ body, headers, method,
11
+ });
12
+ if (response.redirected) {
13
+ const { location, document, history } = globalThis;
14
+ const scrollTop = document.scrollingElement?.scrollTop ?? 0;
15
+ if (http.is_json(response))
16
+ root.update(await response.json());
17
+ storage.new({
18
+ hash: location.hash,
19
+ pathname: location.pathname,
20
+ scrollTop,
21
+ });
22
+ const url = new URL(response.url);
23
+ history.pushState({}, "", url.pathname + url.search);
24
+ return response;
25
+ }
26
+ if (http.is_json(response)) {
27
+ if (response.ok) {
28
+ root.update(await response.json());
29
+ history.replaceState({}, "", requested.pathname + requested.search);
30
+ }
31
+ return response;
32
+ }
33
+ if (response.status === 204)
34
+ return response;
35
+ const target = response.type !== "opaqueredirect"
36
+ ? requested.toString()
37
+ : new URL(pathname, globalThis.location.href).toString();
38
+ globalThis.location.assign(target);
39
+ return response;
40
+ }
41
+ //# sourceMappingURL=submit.js.map
@@ -1,7 +1,5 @@
1
1
  import type ValidateInit from "#client/ValidateInit";
2
- import type Dict from "@rcompat/type/Dict";
3
- import type JSONPointer from "@rcompat/type/JSONPointer";
4
- import type JSONValue from "@rcompat/type/JSONValue";
2
+ import type { Dict, JSONPointer, JSONValue } from "@rcompat/type";
5
3
  type Options<T> = {
6
4
  headers?: Dict<string>;
7
5
  map?: (v: T) => JSONValue;
@@ -14,4 +12,4 @@ export default function toValidated<T, R>(validateSignal: (init: ValidateInit<T>
14
12
  put: (url: string, options?: Options<T>) => R;
15
13
  };
16
14
  export {};
17
- //# sourceMappingURL=toValidated.d.ts.map
15
+ //# sourceMappingURL=to-validated.d.ts.map
@@ -18,4 +18,4 @@ export default function toValidated(validateSignal) {
18
18
  };
19
19
  };
20
20
  }
21
- //# sourceMappingURL=toValidated.js.map
21
+ //# sourceMappingURL=to-validated.js.map
@@ -0,0 +1,3 @@
1
+ import type ValidateInit from "#client/ValidateInit";
2
+ export default function validateField<T>(init: ValidateInit<T>, value: T): Promise<void>;
3
+ //# sourceMappingURL=validate-field.d.ts.map
@@ -0,0 +1,41 @@
1
+ import extract_issues from "#client/extract-issues";
2
+ function focus(issues, path) {
3
+ if (path === undefined) {
4
+ return issues;
5
+ }
6
+ const focused = issues.filter(i => i.path === path);
7
+ return focused.length ? focused : issues;
8
+ }
9
+ export default async function validateField(init, value) {
10
+ const headers = {
11
+ "content-type": "application/json",
12
+ ...(init.headers ?? {}),
13
+ };
14
+ if (init.path !== undefined) {
15
+ headers["x-validate-path"] = init.path;
16
+ }
17
+ const body_value = init.map?.(value) ?? value;
18
+ let body;
19
+ try {
20
+ body = JSON.stringify(body_value);
21
+ }
22
+ catch {
23
+ const message = "Cannot serialize body. Provide a `map` that returns JSON.";
24
+ throw new Error(message);
25
+ }
26
+ const { method, url } = init;
27
+ const response = await fetch(url, { body, headers, method });
28
+ if (response.ok)
29
+ return;
30
+ const payload = await response.json();
31
+ const default_path = init.path ?? "";
32
+ const default_issues = [{ message: "Validation failed", path: default_path }];
33
+ const all_issues = extract_issues(payload, default_path);
34
+ const focused_issues = focus(all_issues, init.path);
35
+ const issues = focused_issues.length > 0 ? focused_issues : default_issues;
36
+ throw Object.assign(new Error(issues[0].message), {
37
+ issues,
38
+ name: "ValidationError",
39
+ });
40
+ }
41
+ //# sourceMappingURL=validate-field.js.map
@@ -1,24 +1,10 @@
1
+ import type EnvSchema from "#app/EnvSchema";
2
+ import AppFacade from "#app/Facade";
1
3
  import schema from "#config/schema";
2
- declare const _default: (config?: typeof schema.input) => {
3
- http: {
4
- csp: Record<string, string[]> | undefined;
5
- headers: Record<string, string> | undefined;
6
- host: string;
7
- port: number;
8
- ssl: {
9
- cert: string | import("@rcompat/fs/FileRef").default | undefined;
10
- key: string | import("@rcompat/fs/FileRef").default | undefined;
11
- };
12
- static: {
13
- root: string;
14
- };
4
+ import type { ObjectType } from "pema";
5
+ export default function config<P extends EnvSchema = EnvSchema>(input?: typeof schema.input & {
6
+ env?: {
7
+ schema?: ObjectType<P>;
15
8
  };
16
- modules: import("../Module.js").default[] | undefined;
17
- request: {
18
- body: {
19
- parse: boolean;
20
- };
21
- };
22
- };
23
- export default _default;
9
+ }): AppFacade<P>;
24
10
  //# sourceMappingURL=index.d.ts.map
@@ -1,3 +1,6 @@
1
+ import AppFacade from "#app/Facade";
1
2
  import schema from "#config/schema";
2
- export default (config = {}) => schema.parse(config);
3
+ export default function config(input = {}) {
4
+ return new AppFacade(schema.parse(input));
5
+ }
3
6
  //# sourceMappingURL=index.js.map
@@ -1,25 +1,85 @@
1
- import Module from "#Module";
2
- import FileRef from "@rcompat/fs/FileRef";
3
- declare const _default: import("pema").ObjectType<{
4
- http: import("pema").ObjectType<{
5
- csp: import("pema").OptionalType<import("pema/record").RecordType<import("pema/string").StringType, import("pema").ArrayType<import("pema/string").StringType>>>;
6
- headers: import("pema").OptionalType<import("pema/record").RecordType<import("pema/string").StringType, import("pema/string").StringType>>;
7
- host: import("pema").DefaultType<import("pema/string").StringType, "localhost">;
8
- port: import("pema").DefaultType<import("pema/uint").UintType<"u32">, 6161>;
9
- ssl: import("pema").ObjectType<{
10
- cert: import("pema").OptionalType<import("pema/union").UnionType<[import("pema").ConstructorType<typeof FileRef>, import("pema/string").StringType]>>;
11
- key: import("pema").OptionalType<import("pema/union").UnionType<[import("pema").ConstructorType<typeof FileRef>, import("pema/string").StringType]>>;
12
- }>;
13
- static: import("pema").ObjectType<{
14
- root: import("pema").DefaultType<import("pema/string").StringType, "/">;
15
- }>;
16
- }>;
17
- modules: import("pema").OptionalType<import("pema").ArrayType<import("pema").ConstructorType<typeof Module>>>;
18
- request: import("pema").ObjectType<{
19
- body: import("pema").ObjectType<{
20
- parse: import("pema").DefaultType<import("pema/boolean").BooleanType, true>;
21
- }>;
22
- }>;
1
+ import type DB from "#db/DB";
2
+ import type Module from "#Module";
3
+ import type { Dict } from "@rcompat/type";
4
+ import type { ObjectType, Parsed } from "pema";
5
+ declare const _default: ObjectType<import("pema").NormalizeSchemaObject<{
6
+ readonly http: {
7
+ readonly csp: import("pema").OptionalType<import("pema").RecordType<import("pema").StringType, import("pema").ArrayType<import("pema").StringType>>>;
8
+ readonly headers: import("pema").OptionalType<import("pema").RecordType<import("pema").StringType, import("pema").StringType>>;
9
+ readonly host: import("pema").DefaultType<import("pema").StringType, "localhost">;
10
+ readonly port: import("pema").DefaultType<import("pema").UintType<"u32">, 6161>;
11
+ readonly ssl: {
12
+ readonly cert: import("pema").OptionalType<import("pema").UnionType<[import("pema").IsType<import("@rcompat/fs").FileRef>, import("pema").StringType]>>;
13
+ readonly key: import("pema").OptionalType<import("pema").UnionType<[import("pema").IsType<import("@rcompat/fs").FileRef>, import("pema").StringType]>>;
14
+ };
15
+ readonly static: {
16
+ readonly root: import("pema").DefaultType<import("pema").StringType, "/">;
17
+ };
18
+ };
19
+ readonly livereload: {
20
+ readonly exclude: import("pema").OptionalType<import("pema").ArrayType<import("pema").StringType>>;
21
+ readonly host: import("pema").OptionalType<import("pema").StringType>;
22
+ readonly port: import("pema").OptionalType<import("pema").UintType<"u32">>;
23
+ };
24
+ readonly db: {
25
+ readonly migrations: import("pema").OptionalType<ObjectType<{
26
+ table: import("pema").StringType;
27
+ db: import("pema").PureType<DB, "PureType">;
28
+ }, {
29
+ table: string;
30
+ db: DB;
31
+ }>>;
32
+ };
33
+ readonly env: {
34
+ readonly schema: import("pema").OptionalType<import("pema").PureType<ObjectType<Dict<Parsed<unknown>>, {
35
+ [x: string]: unknown;
36
+ }>, "PureType">>;
37
+ };
38
+ readonly modules: import("pema").DefaultType<import("pema").ArrayType<ObjectType<{
39
+ name: import("pema").StringType;
40
+ setup: import("pema").FunctionType;
41
+ }, Module>>, Module[]>;
42
+ readonly request: {
43
+ readonly body: {
44
+ readonly parse: import("pema").DefaultType<import("pema").BooleanType, true>;
45
+ };
46
+ };
47
+ }>, {
48
+ http: {
49
+ csp: Record<string, string[]> | undefined;
50
+ headers: Record<string, string> | undefined;
51
+ host: string;
52
+ port: number;
53
+ ssl: {
54
+ cert: string | import("@rcompat/fs").FileRef | undefined;
55
+ key: string | import("@rcompat/fs").FileRef | undefined;
56
+ };
57
+ static: {
58
+ root: string;
59
+ };
60
+ };
61
+ livereload: {
62
+ exclude: string[] | undefined;
63
+ host: string | undefined;
64
+ port: number | undefined;
65
+ };
66
+ db: {
67
+ migrations: {
68
+ table: string;
69
+ db: DB;
70
+ } | undefined;
71
+ };
72
+ env: {
73
+ schema: ObjectType<Dict<Parsed<unknown>>, {
74
+ [x: string]: unknown;
75
+ }> | undefined;
76
+ };
77
+ modules: Module[];
78
+ request: {
79
+ body: {
80
+ parse: boolean;
81
+ };
82
+ };
23
83
  }>;
24
84
  export default _default;
25
85
  //# sourceMappingURL=schema.d.ts.map