@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,5 +0,0 @@
1
- import AppError from "#AppError";
2
- export default function fail(message, ...params) {
3
- return new AppError(message, ...params);
4
- }
5
- //# sourceMappingURL=fail.js.map
@@ -1,62 +0,0 @@
1
- import type App from "#App";
2
- import type BuildApp from "#build/App";
3
- import type Render from "#frontend/Render";
4
- import type ServerView from "#frontend/ServerView";
5
- import type ViewResponse from "#frontend/ViewResponse";
6
- import Module from "#Module";
7
- import type Next from "#module/Next";
8
- import type NextBuild from "#module/NextBuild";
9
- import type NextServe from "#module/NextServe";
10
- import type ServeApp from "#serve/App";
11
- import FileRef from "@rcompat/fs/FileRef";
12
- import type MaybePromise from "@rcompat/type/MaybePromise";
13
- export default abstract class FrontendModule<S = ServerView> extends Module {
14
- #private;
15
- abstract client: boolean;
16
- abstract layouts: boolean;
17
- abstract defaultExtensions: string[];
18
- render: Render<S>;
19
- root?: {
20
- create: (depth: number, i18n_active: boolean) => string;
21
- };
22
- compile: {
23
- client?: (text: string, file: FileRef, root: boolean) => MaybePromise<{
24
- css?: null | string;
25
- js: string;
26
- }>;
27
- server?: (text: string, file?: FileRef) => MaybePromise<string>;
28
- };
29
- css?: {
30
- filter: RegExp;
31
- };
32
- conditions: string[];
33
- static schema: import("pema").ObjectType<{
34
- fileExtensions: import("pema").OptionalType<import("pema").ArrayType<import("pema/string").StringType>>;
35
- spa: import("pema").DefaultType<import("pema/boolean").BooleanType, true>;
36
- ssr: import("pema").DefaultType<import("pema/boolean").BooleanType, true>;
37
- }>;
38
- static options: {
39
- fileExtensions: string[] | undefined;
40
- spa: boolean;
41
- ssr: boolean;
42
- };
43
- static input: {
44
- fileExtensions?: string[] | undefined;
45
- spa?: boolean | undefined;
46
- ssr?: boolean | undefined;
47
- } | undefined;
48
- constructor(options?: typeof FrontendModule.schema.input);
49
- get fileExtensions(): string[];
50
- get package(): string;
51
- get rootname(): string;
52
- get ssr(): boolean;
53
- get spa(): boolean;
54
- normalize(name: string): Promise<string>;
55
- respond: ViewResponse;
56
- serve(app: ServeApp, next: NextServe): MaybePromise<ServeApp>;
57
- publish(app: BuildApp): void;
58
- init<T extends App>(app: T, next: Next<T>): MaybePromise<T>;
59
- prebuild(app: BuildApp): void;
60
- build(app: BuildApp, next: NextBuild): Promise<BuildApp>;
61
- }
62
- //# sourceMappingURL=Module.d.ts.map
@@ -1,250 +0,0 @@
1
- import fail from "#fail";
2
- import inline from "#inline";
3
- import location from "#location";
4
- import Module from "#Module";
5
- import map from "@rcompat/async/map";
6
- import hash from "@rcompat/crypto/hash";
7
- import FileRef from "@rcompat/fs/FileRef";
8
- import APPLICATION_JSON from "@rcompat/http/mime/application/json";
9
- import Status from "@rcompat/http/Status";
10
- import p from "pema";
11
- async function normalize(path, frontend) {
12
- const file = new FileRef(path);
13
- const basename = path.slice(0, -file.fullExtension.length);
14
- return `p_${await hash(`${basename}.${frontend}`)}`;
15
- }
16
- export default class FrontendModule extends Module {
17
- #options;
18
- render = async (view, props) => ({ body: await view(props) });
19
- root;
20
- compile = {};
21
- css;
22
- conditions = [];
23
- #mode = "development";
24
- static schema = p({
25
- fileExtensions: p.array(p.string).optional(),
26
- spa: p.boolean.default(true),
27
- ssr: p.boolean.default(true),
28
- });
29
- static options = FrontendModule.schema.infer;
30
- static input = FrontendModule.schema.input;
31
- constructor(options) {
32
- super();
33
- this.#options = FrontendModule.schema.parse(options);
34
- }
35
- get fileExtensions() {
36
- return this.#options.fileExtensions ?? this.defaultExtensions;
37
- }
38
- get package() {
39
- return `@primate/${this.name}`;
40
- }
41
- get rootname() {
42
- return `root_${this.name}`;
43
- }
44
- get ssr() {
45
- return this.#options.ssr && (this.#mode !== "development" || !this.client);
46
- }
47
- get spa() {
48
- return this.#options.spa;
49
- }
50
- #load(name, props, app) {
51
- if (!this.ssr)
52
- return { view: null, name, props };
53
- const view = app.loadView(name);
54
- return { view, name, props };
55
- }
56
- ;
57
- async #render(server, client, app) {
58
- const { body, head = "", headers = {} } = this.ssr
59
- ? await this.render(server.view, server.props)
60
- : { body: "", head: "" };
61
- if (!this.client) {
62
- return { body, head, headers };
63
- }
64
- const app_asset = app.assets.find(asset => asset.src?.includes("app") && asset.src.endsWith(".js"));
65
- if (!app_asset)
66
- throw fail("Could not find app.js in assets");
67
- const app_script = `<script type="module" src="${app_asset.src}"></script>`;
68
- const json_props = JSON.stringify({ frontend: this.name, ...client });
69
- const hydrated = await inline(json_props, APPLICATION_JSON, "hydration");
70
- const script_src = [hydrated.integrity];
71
- return {
72
- body,
73
- head: head.concat(app_script, hydrated.head),
74
- headers: app.headers({ "script-src": script_src }),
75
- };
76
- }
77
- normalize(name) {
78
- return normalize(name, this.name);
79
- }
80
- respond = (view, props = {}, options = {}) => async (app, { as_layout, layouts = [] } = {}, request) => {
81
- if (as_layout) {
82
- return this.#load(view, props, app);
83
- }
84
- const views = (await Promise.all(layouts
85
- .map(layout => layout(app, { as_layout: true }, request))))
86
- /* set the actual page as the last view */
87
- .concat(this.#load(view, props, app));
88
- const $request = {
89
- context: request.context,
90
- cookies: request.cookies.toJSON(),
91
- headers: request.headers.toJSON(),
92
- path: request.path.toJSON(),
93
- query: request.query.toJSON(),
94
- url: request.url,
95
- };
96
- const $props = this.layouts
97
- ? {
98
- views: await map(views, ({ name }) => this.normalize(name)),
99
- props: views.map(c => c.props),
100
- request: $request,
101
- }
102
- : { props, request: $request };
103
- const client = {
104
- view: this.layouts ? "root" : await this.normalize(view),
105
- spa: this.spa,
106
- ssr: this.ssr,
107
- mode: app.mode,
108
- ...$props,
109
- };
110
- if (this.spa && request.headers.get("Accept") === APPLICATION_JSON) {
111
- const json_body = JSON.stringify(client);
112
- return new Response(json_body, {
113
- headers: {
114
- ...app.headers(),
115
- "Content-Type": APPLICATION_JSON,
116
- "Content-Length": String(app.body_length(json_body)),
117
- "Cache-Control": "no-store",
118
- },
119
- status: options.status ?? Status.OK,
120
- });
121
- }
122
- if (!this.ssr) {
123
- const { head } = await this.#render({ view: null, props: {} }, client, app);
124
- return app.view({ body: "<div id=\"app\"></div>", head, ...options });
125
- }
126
- try {
127
- const server = this.layouts
128
- ? {
129
- view: app.loadView(this.rootname),
130
- props: {
131
- views: views.map(c => c.view),
132
- props: views.map(c => c.props),
133
- request: $request,
134
- },
135
- }
136
- : {
137
- view: app.loadView(view),
138
- props,
139
- request: $request,
140
- };
141
- const { body, head, headers } = await this.#render(server, client, app);
142
- return app.view({ body, head, headers, ...options });
143
- }
144
- catch (error) {
145
- const path = `${location.views}/${view}`;
146
- throw fail("error in view {0}\n{1}", path, error);
147
- }
148
- };
149
- serve(app, next) {
150
- this.fileExtensions.forEach(fe => app.register(fe, this.respond));
151
- return next(app);
152
- }
153
- publish(app) {
154
- if (this.compile.client) {
155
- const { compile, css, fileExtensions, name, root, conditions } = this;
156
- const _normalize = this.normalize.bind(this);
157
- if (this.client) {
158
- app.frontends.set(name, [...fileExtensions]);
159
- conditions.forEach(condition => app.conditions.add(condition));
160
- }
161
- app.plugin("client", {
162
- name,
163
- setup(build) {
164
- const resolveDir = app.root.path;
165
- const css_cache = new Map();
166
- if (root !== undefined) {
167
- const filter = new RegExp(`^${name}:root`);
168
- build.onResolve({ filter }, ({ path }) => {
169
- return { namespace: `${name}`, path };
170
- });
171
- build.onLoad({ filter }, async () => {
172
- const contents = (await compile.client(root.create(app.depth(), app.i18n_active), new FileRef("/tmp"), true)).js;
173
- return contents ? { contents, loader: "js", resolveDir } : null;
174
- });
175
- }
176
- if (css !== undefined) {
177
- build.onResolve({ filter: new RegExp(`^${name}:css:`) }, args => {
178
- return { path: args.path, namespace: `${name}-css` };
179
- });
180
- build.onLoad({ filter: /.*/, namespace: `${name}-css` }, args => {
181
- const contents = css_cache.get(args.path);
182
- return contents ? { contents, loader: "css" } : null;
183
- });
184
- }
185
- const views_filter = new RegExp(`^${name}:views`);
186
- const views_base = app.root.join(location.views);
187
- build.onResolve({ filter: views_filter }, ({ path }) => {
188
- return { namespace: `${name}`, path };
189
- });
190
- build.onLoad({ filter: views_filter }, async () => {
191
- const views = await views_base
192
- .collect(c => fileExtensions.includes(c.fullExtension));
193
- let contents = "";
194
- for (const view of views) {
195
- const { path } = view.debase(views_base, "/");
196
- contents += `export { default as ${await _normalize(path)} }
197
- from "#view/${path}";\n`;
198
- }
199
- return { contents, resolveDir: app.root.path };
200
- });
201
- const filter = new RegExp(`(${fileExtensions.map(e => e.replace(".", "\\.")).join("|")})$`);
202
- build.onLoad({ filter }, async (args) => {
203
- const file = new FileRef(args.path);
204
- // compile file to JavaScript and potentially CSS
205
- const compiled = await compile.client(await file.text(), file, false);
206
- let contents = compiled.js;
207
- if (css
208
- && compiled.css !== null
209
- && compiled.css !== undefined
210
- && compiled.css !== "") {
211
- const css_path = `${name}:css:${args.path}`;
212
- css_cache.set(css_path, compiled.css);
213
- contents += `\nimport "${css_path}";`;
214
- }
215
- return { contents };
216
- });
217
- },
218
- });
219
- }
220
- }
221
- init(app, next) {
222
- this.#mode = app.mode;
223
- return next(app);
224
- }
225
- prebuild(app) {
226
- this.fileExtensions.forEach(e => {
227
- app.bind(e, async (file, { context }) => {
228
- if (context === "views" && !this.ssr)
229
- return "";
230
- // production: just compile to JS, don't bundle yet
231
- if (this.compile.server) {
232
- return await this.compile.server(await file.text(), file);
233
- }
234
- return await file.text();
235
- });
236
- });
237
- }
238
- async build(app, next) {
239
- this.prebuild(app);
240
- // compile root server
241
- if (this.root !== undefined && this.compile.server !== undefined) {
242
- const source = await this.compile.server(this.root.create(app.depth(), app.i18n_active));
243
- app.addRoot(this.rootname, source);
244
- }
245
- this.publish(app);
246
- return next(app);
247
- }
248
- ;
249
- }
250
- //# sourceMappingURL=Module.js.map
@@ -1,9 +0,0 @@
1
- import type Dict from "@rcompat/type/Dict";
2
- import type MaybePromise from "@rcompat/type/MaybePromise";
3
- type Render<V = unknown> = (view: V, props: Dict) => MaybePromise<{
4
- body: string;
5
- head?: string;
6
- headers?: Record<string, string>;
7
- }>;
8
- export type { Render as default };
9
- //# sourceMappingURL=Render.d.ts.map
@@ -1,5 +0,0 @@
1
- import type Dict from "@rcompat/type/Dict";
2
- import type MaybePromise from "@rcompat/type/MaybePromise";
3
- type ServerView = (props: Dict) => MaybePromise<string>;
4
- export { ServerView as default };
5
- //# sourceMappingURL=ServerView.d.ts.map
@@ -1,16 +0,0 @@
1
- import type Config from "#i18n/Config";
2
- import Module from "#Module";
3
- import type NextHandle from "#module/NextHandle";
4
- import type NextRoute from "#module/NextRoute";
5
- import type NextServe from "#module/NextServe";
6
- import type RequestFacade from "#request/RequestFacade";
7
- import type ServeApp from "#serve/App";
8
- export default class I18NModule extends Module {
9
- #private;
10
- name: string;
11
- constructor(config: Config);
12
- serve(app: ServeApp, next: NextServe): import("@rcompat/type/MaybePromise").default<ServeApp>;
13
- handle(request: RequestFacade, next: NextHandle): import("@rcompat/type/MaybePromise").default<Response>;
14
- route(request: RequestFacade, next: NextRoute): import("@rcompat/type/MaybePromise").default<import("../response/ResponseLike.js").default>;
15
- }
16
- //# sourceMappingURL=Module.d.ts.map
@@ -1,122 +0,0 @@
1
- import AppError from "#AppError";
2
- import bye from "#bye";
3
- import cookie from "#cookie";
4
- import COOKIE_NAME from "#i18n/constant/COOKIE_NAME";
5
- import PERSIST_HEADER from "#i18n/constant/PERSIST_HEADER";
6
- import log from "#log";
7
- import Module from "#Module";
8
- import Status from "@rcompat/http/Status";
9
- function toLowerCase(string) {
10
- return string.toLowerCase();
11
- }
12
- function pick(client, server) {
13
- const lower = server.map(toLowerCase);
14
- for (const raw of client.map(toLowerCase)) {
15
- const locale = raw.trim();
16
- if (!locale)
17
- continue;
18
- const exact = lower.indexOf(locale);
19
- if (exact !== -1)
20
- return server[exact];
21
- const base = locale.split("-")[0];
22
- const index = lower.findIndex(s => s === base || s.startsWith(`${base}-`));
23
- if (index !== -1)
24
- return server[index];
25
- }
26
- return undefined;
27
- }
28
- function fail(message, ...params) {
29
- const error = new AppError(`{0} ${message}`, "[i18n]", ...params);
30
- log.error(error);
31
- bye();
32
- process.exit(1);
33
- }
34
- export default class I18NModule extends Module {
35
- name = "builtin/i18n";
36
- #secure = false;
37
- #defaultLocale;
38
- #locales;
39
- #persist = "cookie";
40
- #currency;
41
- constructor(config) {
42
- super();
43
- const defaultLocale = config.defaultLocale;
44
- const locales = Object.keys(config.locales);
45
- if (locales.length < 1)
46
- fail("must have at least 1 locale");
47
- if (defaultLocale === undefined)
48
- fail("must have a default locale");
49
- if (!locales.includes(defaultLocale))
50
- fail("default locale not in locales");
51
- this.#defaultLocale = defaultLocale;
52
- this.#locales = locales;
53
- this.#persist = config.persist ?? "cookie";
54
- this.#currency = config.currency ?? "USD";
55
- }
56
- #configured(locale) {
57
- return this.#locales.includes(locale);
58
- }
59
- serve(app, next) {
60
- this.#secure = app.secure;
61
- return next(app);
62
- }
63
- handle(request, next) {
64
- const requested = request.headers.try(PERSIST_HEADER);
65
- if (requested === undefined)
66
- return next(request);
67
- // only cookie-persistance is server-supported
68
- if (this.#persist !== "cookie")
69
- return new Response(null, {
70
- headers: {
71
- "Content-Length": String(0),
72
- },
73
- status: Status.NO_CONTENT,
74
- });
75
- // only accept configured locales
76
- if (!this.#configured(requested))
77
- return new Response(null, {
78
- headers: {
79
- "Content-Length": String(0),
80
- },
81
- status: Status.NO_CONTENT,
82
- });
83
- const header = cookie(COOKIE_NAME, requested, {
84
- secure: this.#secure,
85
- path: "/",
86
- sameSite: "Strict",
87
- });
88
- return new Response(null, {
89
- headers: {
90
- "Set-Cookie": header,
91
- "Content-Length": String(0),
92
- },
93
- status: Status.NO_CONTENT,
94
- });
95
- }
96
- route(request, next) {
97
- const server_locales = this.#locales;
98
- const accept_language = request.headers.try("Accept-Language") ?? "";
99
- const client_locales = accept_language
100
- .split(",")
101
- .map(s => s.split(";")[0].trim())
102
- .filter(Boolean);
103
- const mode = this.#persist;
104
- const cookieLocale = mode === "cookie" ? request.cookies.try(COOKIE_NAME) : undefined;
105
- const locale = cookieLocale ??
106
- pick(client_locales, server_locales) ??
107
- this.#defaultLocale;
108
- return next({
109
- ...request,
110
- context: {
111
- ...request.context,
112
- i18n: {
113
- currency: this.#currency,
114
- mode,
115
- locale,
116
- locales: server_locales,
117
- },
118
- },
119
- });
120
- }
121
- }
122
- //# sourceMappingURL=Module.js.map
@@ -1,28 +0,0 @@
1
- import type API from "#i18n/API";
2
- import type Catalog from "#i18n/Catalog";
3
- import type Catalogs from "#i18n/Catalogs";
4
- import type Config from "#i18n/Config";
5
- import type TypeOf from "#i18n/TypeOf";
6
- import type Dict from "@rcompat/type/Dict";
7
- type EntryOf<Body extends string> = Body extends `${infer Name}:${infer Spec}` ? {
8
- __name: Name & string;
9
- __type: TypeOf<Spec>;
10
- } : {
11
- __name: Body & string;
12
- __type: string;
13
- };
14
- type EntriesOf<S extends string> = S extends `${infer _}{${infer Body}}${infer Rest}` ? EntryOf<Body> | EntriesOf<Rest> : never;
15
- type ParamsFromEntries<E> = [
16
- E
17
- ] extends [never] ? Dict : {
18
- [K in E as K extends {
19
- __name: infer N extends string;
20
- } ? N : never]: K extends {
21
- __type: infer T;
22
- } ? T : never;
23
- };
24
- export default function i18n<const C extends Catalogs>(config: Config<C>): (<K extends string>(...args: K extends keyof (C[keyof C & string] extends Catalog ? C[keyof C & string] : never) & string ? [EntriesOf<(C[keyof C & string] extends Catalog ? C[keyof C & string] : never)[K]>] extends [never] ? [key: K] : [key: K, params: ParamsFromEntries<EntriesOf<(C[keyof C & string] extends Catalog ? C[keyof C & string] : never)[K]>>] : [`[i18n] Missing locale key "${K}".`]) => string) & API<C> & {
25
- subscribe(run: (value: (<K extends string>(...args: K extends keyof (C[keyof C & string] extends Catalog ? C[keyof C & string] : never) & string ? [EntriesOf<(C[keyof C & string] extends Catalog ? C[keyof C & string] : never)[K]>] extends [never] ? [key: K] : [key: K, params: ParamsFromEntries<EntriesOf<(C[keyof C & string] extends Catalog ? C[keyof C & string] : never)[K]>>] : [`[i18n] Missing locale key "${K}".`]) => string) & API<C>) => void): () => void;
26
- };
27
- export {};
28
- //# sourceMappingURL=index.d.ts.map