@primate/core 0.1.9 → 0.2.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 (572) hide show
  1. package/lib/private/App.d.ts +54 -0
  2. package/lib/private/App.js +128 -0
  3. package/lib/private/AppError.d.ts +4 -0
  4. package/lib/private/AppError.js +8 -0
  5. package/lib/private/Binder.d.ts +13 -0
  6. package/lib/private/Binder.js +2 -0
  7. package/lib/private/BindingContext.d.ts +3 -0
  8. package/lib/private/BindingContext.js +2 -0
  9. package/lib/private/BuildApp.d.ts +23 -0
  10. package/lib/private/BuildApp.js +121 -0
  11. package/lib/private/CSP.d.ts +6 -0
  12. package/lib/private/CSP.js +2 -0
  13. package/lib/private/Loader.d.ts +17 -0
  14. package/lib/private/Loader.js +46 -0
  15. package/lib/private/Mode.d.ts +3 -0
  16. package/lib/private/Mode.js +2 -0
  17. package/lib/private/Module.d.ts +18 -0
  18. package/lib/private/Module.js +18 -0
  19. package/lib/private/ServeApp.d.ts +89 -0
  20. package/lib/private/ServeApp.js +305 -0
  21. package/lib/private/ServeInit.d.ts +29 -0
  22. package/lib/private/ServeInit.js +2 -0
  23. package/lib/private/asset/Asset.d.ts +11 -0
  24. package/lib/private/asset/Asset.js +2 -0
  25. package/lib/private/asset/Font.d.ts +8 -0
  26. package/lib/private/asset/Font.js +2 -0
  27. package/lib/private/asset/Script.d.ts +9 -0
  28. package/lib/private/asset/Script.js +2 -0
  29. package/lib/private/asset/Style.d.ts +6 -0
  30. package/lib/private/asset/Style.js +2 -0
  31. package/lib/private/backend/Module.d.ts +18 -0
  32. package/lib/private/backend/Module.js +22 -0
  33. package/lib/private/build.d.ts +4 -0
  34. package/lib/private/build.js +45 -0
  35. package/lib/private/builtin/DevModule.d.ts +11 -0
  36. package/lib/private/builtin/DevModule.js +32 -0
  37. package/lib/private/builtin/HandleModule.d.ts +10 -0
  38. package/lib/private/builtin/HandleModule.js +15 -0
  39. package/lib/private/bye.d.ts +3 -0
  40. package/{src → lib}/private/bye.js +2 -2
  41. package/lib/private/client/App.d.ts +4 -0
  42. package/lib/private/client/App.js +12 -0
  43. package/lib/private/client/Data.d.ts +9 -0
  44. package/lib/private/client/Data.js +2 -0
  45. package/lib/private/client/ValidateInit.d.ts +13 -0
  46. package/lib/private/client/ValidateInit.js +2 -0
  47. package/lib/private/client/ValidateUpdater.d.ts +3 -0
  48. package/lib/private/client/ValidateUpdater.js +2 -0
  49. package/lib/private/client/ValidationError.d.ts +6 -0
  50. package/lib/private/client/ValidationError.js +2 -0
  51. package/lib/private/client/spa/index.d.ts +6 -0
  52. package/lib/private/client/spa/index.js +192 -0
  53. package/lib/private/client/spa/storage.d.ts +12 -0
  54. package/lib/private/client/spa/storage.js +54 -0
  55. package/lib/private/client/toValidated.d.ts +17 -0
  56. package/lib/private/client/toValidated.js +21 -0
  57. package/lib/private/client/validate.d.ts +3 -0
  58. package/lib/private/client/validate.js +54 -0
  59. package/lib/private/config/Config.d.ts +4 -0
  60. package/lib/private/config/Config.js +2 -0
  61. package/lib/private/config/config/app.d.ts +3 -0
  62. package/lib/private/config/config/app.js +3 -0
  63. package/lib/private/config/config/database/index.d.ts +3 -0
  64. package/lib/private/config/config/database/index.js +3 -0
  65. package/lib/private/config/config/session.d.ts +3 -0
  66. package/lib/private/config/config/session.js +3 -0
  67. package/lib/private/config/index.d.ts +25 -0
  68. package/lib/private/config/index.js +3 -0
  69. package/lib/private/config/schema.d.ts +26 -0
  70. package/lib/private/config/schema.js +34 -0
  71. package/lib/private/cookie.d.ts +11 -0
  72. package/lib/private/cookie.js +30 -0
  73. package/lib/private/database/As.d.ts +7 -0
  74. package/lib/private/database/As.js +2 -0
  75. package/lib/private/database/Binds.d.ts +4 -0
  76. package/lib/private/database/Binds.js +2 -0
  77. package/lib/private/database/Changes.d.ts +11 -0
  78. package/lib/private/database/Changes.js +2 -0
  79. package/lib/private/database/ColumnTypes.d.ts +11 -0
  80. package/lib/private/database/ColumnTypes.js +2 -0
  81. package/lib/private/database/DataDict.d.ts +5 -0
  82. package/lib/private/database/DataDict.js +2 -0
  83. package/lib/private/database/DataKey.d.ts +4 -0
  84. package/lib/private/database/DataKey.js +2 -0
  85. package/lib/private/database/DataRecord.d.ts +8 -0
  86. package/lib/private/database/DataRecord.js +3 -0
  87. package/lib/private/database/DataValue.d.ts +5 -0
  88. package/lib/private/database/DataValue.js +2 -0
  89. package/lib/private/database/Database.d.ts +56 -0
  90. package/lib/private/database/Database.js +153 -0
  91. package/lib/private/database/InMemoryDatabase.d.ts +37 -0
  92. package/lib/private/database/InMemoryDatabase.js +181 -0
  93. package/lib/private/database/Query.d.ts +14 -0
  94. package/lib/private/database/Query.js +15 -0
  95. package/lib/private/database/QueryBuilder.d.ts +14 -0
  96. package/lib/private/database/QueryBuilder.js +3 -0
  97. package/lib/private/database/Sort.d.ts +4 -0
  98. package/lib/private/database/Sort.js +2 -0
  99. package/lib/private/database/Store.d.ts +169 -0
  100. package/lib/private/database/Store.js +255 -0
  101. package/lib/private/database/TypeMap.d.ts +14 -0
  102. package/lib/private/database/TypeMap.js +2 -0
  103. package/lib/private/database/Types.d.ts +6 -0
  104. package/lib/private/database/Types.js +2 -0
  105. package/lib/private/database/primary.d.ts +3 -0
  106. package/lib/private/database/primary.js +2 -0
  107. package/lib/private/database/storage.d.ts +4 -0
  108. package/lib/private/database/storage.js +3 -0
  109. package/lib/private/database/symbol/wrap.d.ts +3 -0
  110. package/lib/private/database/symbol/wrap.js +2 -0
  111. package/lib/private/database/symbol.d.ts +3 -0
  112. package/lib/private/database/symbol.js +2 -0
  113. package/lib/private/database/test.d.ts +4 -0
  114. package/lib/private/database/test.js +678 -0
  115. package/lib/private/database/wrap.d.ts +5 -0
  116. package/lib/private/database/wrap.js +5 -0
  117. package/lib/private/fail.d.ts +3 -0
  118. package/lib/private/fail.js +5 -0
  119. package/lib/private/frontend/Component.d.ts +8 -0
  120. package/lib/private/frontend/Component.js +2 -0
  121. package/lib/private/frontend/Module.d.ts +60 -0
  122. package/lib/private/frontend/Module.js +241 -0
  123. package/lib/private/frontend/Publish.d.ts +5 -0
  124. package/lib/private/frontend/Publish.js +2 -0
  125. package/lib/private/frontend/Render.d.ts +9 -0
  126. package/lib/private/frontend/Render.js +2 -0
  127. package/lib/private/frontend/ServerComponent.d.ts +5 -0
  128. package/lib/private/frontend/ServerComponent.js +2 -0
  129. package/lib/private/frontend/ServerData.d.ts +7 -0
  130. package/lib/private/frontend/ServerData.js +2 -0
  131. package/lib/private/frontend/ViewOptions.d.ts +12 -0
  132. package/lib/private/frontend/ViewOptions.js +3 -0
  133. package/lib/private/frontend/ViewResponse.d.ts +6 -0
  134. package/lib/private/frontend/ViewResponse.js +2 -0
  135. package/lib/private/frontend/bundle-server.d.ts +11 -0
  136. package/lib/private/frontend/bundle-server.js +48 -0
  137. package/lib/private/hash.d.ts +3 -0
  138. package/lib/private/hash.js +10 -0
  139. package/lib/private/hook/build.d.ts +4 -0
  140. package/lib/private/hook/build.js +245 -0
  141. package/lib/private/hook/serve.d.ts +4 -0
  142. package/lib/private/hook/serve.js +13 -0
  143. package/lib/private/i18n/API.d.ts +21 -0
  144. package/lib/private/i18n/API.js +2 -0
  145. package/lib/private/i18n/Catalog.d.ts +4 -0
  146. package/lib/private/i18n/Catalog.js +2 -0
  147. package/lib/private/i18n/Catalogs.d.ts +4 -0
  148. package/lib/private/i18n/Catalogs.js +2 -0
  149. package/lib/private/i18n/Config.d.ts +10 -0
  150. package/lib/private/i18n/Config.js +2 -0
  151. package/lib/private/i18n/ContextData.d.ts +6 -0
  152. package/lib/private/i18n/ContextData.js +2 -0
  153. package/lib/private/i18n/Formatter.d.ts +18 -0
  154. package/lib/private/i18n/Formatter.js +108 -0
  155. package/lib/private/i18n/Module.d.ts +16 -0
  156. package/lib/private/i18n/Module.js +109 -0
  157. package/lib/private/i18n/PersistMode.d.ts +3 -0
  158. package/lib/private/i18n/PersistMode.js +2 -0
  159. package/lib/private/i18n/TypeOf.d.ts +4 -0
  160. package/lib/private/i18n/TypeOf.js +2 -0
  161. package/lib/private/i18n/constant/COOKIE_NAME.d.ts +3 -0
  162. package/lib/private/i18n/constant/COOKIE_NAME.js +2 -0
  163. package/lib/private/i18n/constant/DEFAULT_LOCALE.d.ts +3 -0
  164. package/lib/private/i18n/constant/DEFAULT_LOCALE.js +2 -0
  165. package/lib/private/i18n/constant/DEFAULT_PERSIST_MODE.d.ts +3 -0
  166. package/lib/private/i18n/constant/DEFAULT_PERSIST_MODE.js +2 -0
  167. package/lib/private/i18n/constant/PERSIST_HEADER.d.ts +3 -0
  168. package/lib/private/i18n/constant/PERSIST_HEADER.js +2 -0
  169. package/lib/private/i18n/constant/PERSIST_METHOD.d.ts +3 -0
  170. package/lib/private/i18n/constant/PERSIST_METHOD.js +2 -0
  171. package/lib/private/i18n/constant/PERSIST_STORAGE_KEY.d.ts +3 -0
  172. package/lib/private/i18n/constant/PERSIST_STORAGE_KEY.js +2 -0
  173. package/lib/private/i18n/index.d.ts +28 -0
  174. package/lib/private/i18n/index.js +236 -0
  175. package/lib/private/i18n/locale.d.ts +5 -0
  176. package/lib/private/i18n/locale.js +4 -0
  177. package/lib/private/i18n/ordinals.d.ts +4 -0
  178. package/lib/private/i18n/ordinals.js +52 -0
  179. package/lib/private/i18n/schema.d.ts +8 -0
  180. package/lib/private/i18n/schema.js +13 -0
  181. package/lib/private/i18n/symbol/internal.d.ts +3 -0
  182. package/lib/private/i18n/symbol/internal.js +3 -0
  183. package/lib/private/i18n/toIntlUnit.d.ts +3 -0
  184. package/lib/private/i18n/toIntlUnit.js +125 -0
  185. package/lib/private/inline.d.ts +7 -0
  186. package/lib/private/inline.js +12 -0
  187. package/lib/private/location.d.ts +17 -0
  188. package/lib/private/location.js +29 -0
  189. package/lib/private/log.d.ts +19 -0
  190. package/lib/private/log.js +46 -0
  191. package/lib/private/module/BuildHook.d.ts +5 -0
  192. package/lib/private/module/BuildHook.js +2 -0
  193. package/lib/private/module/Hook.d.ts +5 -0
  194. package/lib/private/module/Hook.js +2 -0
  195. package/lib/private/module/Next.d.ts +4 -0
  196. package/lib/private/module/Next.js +2 -0
  197. package/lib/private/module/NextBuild.d.ts +5 -0
  198. package/lib/private/module/NextBuild.js +2 -0
  199. package/lib/private/module/NextHandle.d.ts +5 -0
  200. package/lib/private/module/NextHandle.js +2 -0
  201. package/lib/private/module/NextRoute.d.ts +6 -0
  202. package/lib/private/module/NextRoute.js +2 -0
  203. package/lib/private/module/NextServe.d.ts +5 -0
  204. package/lib/private/module/NextServe.js +2 -0
  205. package/lib/private/module/RequestHook.d.ts +6 -0
  206. package/lib/private/module/RequestHook.js +2 -0
  207. package/lib/private/reducer.d.ts +24 -0
  208. package/lib/private/reducer.js +10 -0
  209. package/lib/private/request/RequestBag.d.ts +80 -0
  210. package/lib/private/request/RequestBag.js +119 -0
  211. package/lib/private/request/RequestBody.d.ts +39 -0
  212. package/lib/private/request/RequestBody.js +91 -0
  213. package/lib/private/request/RequestFacade.d.ts +20 -0
  214. package/lib/private/request/RequestFacade.js +2 -0
  215. package/lib/private/request/Verb.d.ts +4 -0
  216. package/lib/private/request/Verb.js +2 -0
  217. package/lib/private/request/parse.d.ts +4 -0
  218. package/lib/private/request/parse.js +69 -0
  219. package/lib/private/request/route.d.ts +4 -0
  220. package/lib/private/request/route.js +61 -0
  221. package/lib/private/request/router.d.ts +5 -0
  222. package/lib/private/request/router.js +56 -0
  223. package/lib/private/request/verbs.d.ts +3 -0
  224. package/lib/private/request/verbs.js +12 -0
  225. package/lib/private/response/ResponseFunction.d.ts +8 -0
  226. package/lib/private/response/ResponseFunction.js +2 -0
  227. package/lib/private/response/ResponseLike.d.ts +6 -0
  228. package/lib/private/response/ResponseLike.js +2 -0
  229. package/lib/private/response/binary.d.ts +10 -0
  230. package/lib/private/response/binary.js +47 -0
  231. package/lib/private/response/error.d.ts +18 -0
  232. package/lib/private/response/error.js +18 -0
  233. package/lib/private/response/json.d.ts +9 -0
  234. package/lib/private/response/json.js +10 -0
  235. package/lib/private/response/redirect.d.ts +11 -0
  236. package/lib/private/response/redirect.js +62 -0
  237. package/lib/private/response/respond.d.ts +5 -0
  238. package/lib/private/response/respond.js +31 -0
  239. package/lib/private/response/sse.d.ts +15 -0
  240. package/lib/private/response/sse.js +25 -0
  241. package/lib/private/response/text.d.ts +9 -0
  242. package/lib/private/response/text.js +11 -0
  243. package/lib/private/response/view.d.ts +11 -0
  244. package/lib/private/response/view.js +41 -0
  245. package/lib/private/response/ws.d.ts +5 -0
  246. package/lib/private/response/ws.js +2 -0
  247. package/lib/private/response.d.ts +5 -0
  248. package/lib/private/response.js +2 -0
  249. package/lib/private/route/Handler.d.ts +6 -0
  250. package/lib/private/route/Handler.js +2 -0
  251. package/lib/private/route/Options.d.ts +5 -0
  252. package/lib/private/route/Options.js +2 -0
  253. package/lib/private/route/Path.d.ts +11 -0
  254. package/lib/private/route/Path.js +2 -0
  255. package/lib/private/route/guard.d.ts +4 -0
  256. package/lib/private/route/guard.js +22 -0
  257. package/lib/private/route/router.d.ts +51 -0
  258. package/lib/private/route/router.js +32 -0
  259. package/lib/private/route/wrap.d.ts +6 -0
  260. package/lib/private/route/wrap.js +17 -0
  261. package/lib/private/route.d.ts +9 -0
  262. package/lib/private/route.js +6 -0
  263. package/lib/private/serve.d.ts +5 -0
  264. package/lib/private/serve.js +8 -0
  265. package/lib/private/session/Config.d.ts +4 -0
  266. package/lib/private/session/Config.js +2 -0
  267. package/lib/private/session/Data.d.ts +5 -0
  268. package/lib/private/session/Data.js +2 -0
  269. package/lib/private/session/InMemoryManager.d.ts +9 -0
  270. package/lib/private/session/InMemoryManager.js +23 -0
  271. package/lib/private/session/Manager.d.ts +9 -0
  272. package/lib/private/session/Manager.js +4 -0
  273. package/lib/private/session/SessionFacade.d.ts +56 -0
  274. package/lib/private/session/SessionFacade.js +2 -0
  275. package/lib/private/session/SessionHandle.d.ts +20 -0
  276. package/lib/private/session/SessionHandle.js +67 -0
  277. package/lib/private/session/SessionModule.d.ts +13 -0
  278. package/lib/private/session/SessionModule.js +99 -0
  279. package/lib/private/session/index.d.ts +13 -0
  280. package/lib/private/session/index.js +41 -0
  281. package/lib/private/session/k-serialize.d.ts +3 -0
  282. package/lib/private/session/k-serialize.js +2 -0
  283. package/lib/private/session/schema.d.ts +14 -0
  284. package/lib/private/session/schema.js +20 -0
  285. package/lib/private/session/storage.d.ts +5 -0
  286. package/lib/private/session/storage.js +5 -0
  287. package/lib/private/symbol/config.d.ts +3 -0
  288. package/lib/private/symbol/config.js +2 -0
  289. package/lib/private/symbol/layout-depth.d.ts +3 -0
  290. package/lib/private/symbol/layout-depth.js +2 -0
  291. package/lib/private/tags.d.ts +10 -0
  292. package/lib/private/tags.js +29 -0
  293. package/lib/private/target/Manager.d.ts +14 -0
  294. package/lib/private/target/Manager.js +44 -0
  295. package/lib/private/target/Target.d.ts +8 -0
  296. package/lib/private/target/Target.js +3 -0
  297. package/lib/private/target/web.d.ts +4 -0
  298. package/lib/private/target/web.js +68 -0
  299. package/lib/private/wasm/API.d.ts +7 -0
  300. package/lib/private/wasm/API.js +2 -0
  301. package/lib/private/wasm/BufferViewSource.d.ts +4 -0
  302. package/lib/private/wasm/BufferViewSource.js +2 -0
  303. package/lib/private/wasm/Exports.d.ts +23 -0
  304. package/lib/private/wasm/Exports.js +2 -0
  305. package/lib/private/wasm/I32.d.ts +5 -0
  306. package/lib/private/wasm/I32.js +2 -0
  307. package/lib/private/wasm/I32_SIZE.d.ts +3 -0
  308. package/lib/private/wasm/I32_SIZE.js +2 -0
  309. package/lib/private/wasm/Instantiation.d.ts +12 -0
  310. package/lib/private/wasm/Instantiation.js +2 -0
  311. package/lib/private/wasm/Tagged.d.ts +7 -0
  312. package/lib/private/wasm/Tagged.js +2 -0
  313. package/lib/private/wasm/buffersize.d.ts +2 -0
  314. package/lib/private/wasm/buffersize.js +5 -0
  315. package/lib/private/wasm/decode-bytes.d.ts +3 -0
  316. package/lib/private/wasm/decode-bytes.js +5 -0
  317. package/lib/private/wasm/decode-json.d.ts +7 -0
  318. package/lib/private/wasm/decode-json.js +11 -0
  319. package/lib/private/wasm/decode-option.d.ts +5 -0
  320. package/lib/private/wasm/decode-option.js +10 -0
  321. package/lib/private/wasm/decode-response.d.ts +19 -0
  322. package/lib/private/wasm/decode-response.js +90 -0
  323. package/lib/private/wasm/decode-string.d.ts +3 -0
  324. package/lib/private/wasm/decode-string.js +5 -0
  325. package/lib/private/wasm/decode-websocket-close.d.ts +5 -0
  326. package/lib/private/wasm/decode-websocket-close.js +6 -0
  327. package/lib/private/wasm/decode-websocket-send.d.ts +6 -0
  328. package/lib/private/wasm/decode-websocket-send.js +19 -0
  329. package/lib/private/wasm/encode-buffer.d.ts +3 -0
  330. package/lib/private/wasm/encode-buffer.js +6 -0
  331. package/lib/private/wasm/encode-request.d.ts +9 -0
  332. package/lib/private/wasm/encode-request.js +198 -0
  333. package/lib/private/wasm/encode-session.d.ts +3 -0
  334. package/lib/private/wasm/encode-session.js +25 -0
  335. package/lib/private/wasm/encode-string-map.d.ts +5 -0
  336. package/lib/private/wasm/encode-string-map.js +14 -0
  337. package/lib/private/wasm/encode-string.d.ts +13 -0
  338. package/lib/private/wasm/encode-string.js +17 -0
  339. package/lib/private/wasm/encode-url.d.ts +11 -0
  340. package/lib/private/wasm/encode-url.js +14 -0
  341. package/lib/private/wasm/encode-websocket-close.d.ts +2 -0
  342. package/lib/private/wasm/encode-websocket-close.js +7 -0
  343. package/lib/private/wasm/encode-websocket-message.d.ts +4 -0
  344. package/lib/private/wasm/encode-websocket-message.js +30 -0
  345. package/lib/private/wasm/encode-websocket-open.d.ts +2 -0
  346. package/lib/private/wasm/encode-websocket-open.js +7 -0
  347. package/lib/private/wasm/filesize.d.ts +2 -0
  348. package/lib/private/wasm/filesize.js +8 -0
  349. package/lib/private/wasm/instantiate.d.ts +37 -0
  350. package/lib/private/wasm/instantiate.js +408 -0
  351. package/lib/private/wasm/open-websocket.d.ts +4 -0
  352. package/lib/private/wasm/open-websocket.js +26 -0
  353. package/lib/private/wasm/stringsize.d.ts +3 -0
  354. package/lib/private/wasm/stringsize.js +5 -0
  355. package/lib/private/wasm/urlsize.d.ts +2 -0
  356. package/lib/private/wasm/urlsize.js +5 -0
  357. package/lib/public/App.d.ts +2 -0
  358. package/lib/public/App.js +2 -0
  359. package/lib/public/AppError.d.ts +2 -0
  360. package/lib/public/AppError.js +2 -0
  361. package/lib/public/BuildApp.d.ts +2 -0
  362. package/lib/public/BuildApp.js +2 -0
  363. package/lib/public/BuildHook.d.ts +2 -0
  364. package/lib/public/BuildHook.js +2 -0
  365. package/lib/public/Database.d.ts +2 -0
  366. package/lib/public/Database.js +2 -0
  367. package/lib/public/Loader.d.ts +2 -0
  368. package/lib/public/Loader.js +2 -0
  369. package/lib/public/Mode.d.ts +2 -0
  370. package/lib/public/Mode.js +2 -0
  371. package/lib/public/Module.d.ts +2 -0
  372. package/lib/public/Module.js +2 -0
  373. package/lib/public/Next.d.ts +2 -0
  374. package/lib/public/Next.js +2 -0
  375. package/lib/public/NextBuild.d.ts +2 -0
  376. package/lib/public/NextBuild.js +2 -0
  377. package/lib/public/NextHandle.d.ts +2 -0
  378. package/lib/public/NextHandle.js +2 -0
  379. package/lib/public/NextRoute.d.ts +3 -0
  380. package/lib/public/NextRoute.js +2 -0
  381. package/lib/public/NextServe.d.ts +2 -0
  382. package/lib/public/NextServe.js +2 -0
  383. package/lib/public/ServeApp.d.ts +2 -0
  384. package/lib/public/ServeApp.js +2 -0
  385. package/lib/public/Target.d.ts +2 -0
  386. package/lib/public/Target.js +2 -0
  387. package/lib/public/backend/Module.d.ts +2 -0
  388. package/lib/public/backend/Module.js +2 -0
  389. package/lib/public/build.d.ts +2 -0
  390. package/lib/public/build.js +2 -0
  391. package/lib/public/client/App.d.ts +2 -0
  392. package/lib/public/client/App.js +2 -0
  393. package/lib/public/client/Data.d.ts +2 -0
  394. package/lib/public/client/Data.js +2 -0
  395. package/lib/public/client/ValidateInit.d.ts +2 -0
  396. package/lib/public/client/ValidateInit.js +2 -0
  397. package/lib/public/client/ValidateUpdater.d.ts +2 -0
  398. package/lib/public/client/ValidateUpdater.js +2 -0
  399. package/lib/public/client/ValidationError.d.ts +2 -0
  400. package/lib/public/client/ValidationError.js +2 -0
  401. package/lib/public/client/spa.d.ts +2 -0
  402. package/lib/public/client/spa.js +2 -0
  403. package/lib/public/client/toValidated.d.ts +2 -0
  404. package/lib/public/client/toValidated.js +2 -0
  405. package/lib/public/client/validate.d.ts +2 -0
  406. package/lib/public/client/validate.js +2 -0
  407. package/lib/public/config.d.ts +2 -0
  408. package/lib/public/config.js +2 -0
  409. package/lib/public/database/As.d.ts +2 -0
  410. package/lib/public/database/As.js +2 -0
  411. package/lib/public/database/DataDict.d.ts +2 -0
  412. package/lib/public/database/DataDict.js +2 -0
  413. package/lib/public/database/InMemoryDatabase.d.ts +2 -0
  414. package/lib/public/database/InMemoryDatabase.js +2 -0
  415. package/lib/public/database/Sort.d.ts +2 -0
  416. package/lib/public/database/Sort.js +2 -0
  417. package/lib/public/database/Store.d.ts +2 -0
  418. package/lib/public/database/Store.js +2 -0
  419. package/lib/public/database/TypeMap.d.ts +2 -0
  420. package/lib/public/database/TypeMap.js +2 -0
  421. package/lib/public/database/Types.d.ts +2 -0
  422. package/lib/public/database/Types.js +2 -0
  423. package/lib/public/database/test.d.ts +2 -0
  424. package/lib/public/database/test.js +2 -0
  425. package/lib/public/database/wrap.d.ts +2 -0
  426. package/lib/public/database/wrap.js +2 -0
  427. package/lib/public/frontend/Module.d.ts +2 -0
  428. package/lib/public/frontend/Module.js +2 -0
  429. package/lib/public/frontend/Publish.d.ts +2 -0
  430. package/lib/public/frontend/Publish.js +2 -0
  431. package/lib/public/frontend/Render.d.ts +2 -0
  432. package/lib/public/frontend/Render.js +2 -0
  433. package/lib/public/frontend/ViewResponse.d.ts +2 -0
  434. package/lib/public/frontend/ViewResponse.js +2 -0
  435. package/lib/public/i18n/API.d.ts +2 -0
  436. package/lib/public/i18n/API.js +2 -0
  437. package/lib/public/i18n/Catalogs.d.ts +2 -0
  438. package/lib/public/i18n/Catalogs.js +2 -0
  439. package/lib/public/i18n/ContextData.d.ts +2 -0
  440. package/lib/public/i18n/ContextData.js +2 -0
  441. package/lib/public/i18n/config.d.ts +2 -0
  442. package/lib/public/i18n/config.js +2 -0
  443. package/lib/public/i18n/locale.d.ts +2 -0
  444. package/lib/public/i18n/locale.js +2 -0
  445. package/lib/public/i18n/sInternal.d.ts +2 -0
  446. package/lib/public/i18n/sInternal.js +2 -0
  447. package/lib/public/inline.d.ts +2 -0
  448. package/lib/public/inline.js +2 -0
  449. package/lib/public/location.d.ts +2 -0
  450. package/lib/public/location.js +2 -0
  451. package/lib/public/log.d.ts +2 -0
  452. package/{src/log/index.js → lib/public/log.js} +1 -0
  453. package/lib/public/request/RequestBody.d.ts +2 -0
  454. package/lib/public/request/RequestBody.js +2 -0
  455. package/lib/public/request/RequestFacade.d.ts +2 -0
  456. package/lib/public/request/RequestFacade.js +2 -0
  457. package/lib/public/request/Verb.d.ts +2 -0
  458. package/lib/public/request/Verb.js +2 -0
  459. package/lib/public/request/verbs.d.ts +2 -0
  460. package/lib/public/request/verbs.js +2 -0
  461. package/lib/public/response/ResponseFunction.d.ts +2 -0
  462. package/lib/public/response/ResponseFunction.js +2 -0
  463. package/lib/public/response/ResponseLike.d.ts +2 -0
  464. package/lib/public/response/ResponseLike.js +2 -0
  465. package/lib/public/response/binary.d.ts +2 -0
  466. package/lib/public/response/binary.js +2 -0
  467. package/lib/public/response/error.d.ts +2 -0
  468. package/lib/public/response/error.js +2 -0
  469. package/lib/public/response/json.d.ts +2 -0
  470. package/lib/public/response/json.js +2 -0
  471. package/lib/public/response/redirect.d.ts +2 -0
  472. package/lib/public/response/redirect.js +2 -0
  473. package/lib/public/response/sse.d.ts +2 -0
  474. package/lib/public/response/sse.js +2 -0
  475. package/lib/public/response/text.d.ts +2 -0
  476. package/lib/public/response/text.js +2 -0
  477. package/lib/public/response/view.d.ts +2 -0
  478. package/lib/public/response/view.js +2 -0
  479. package/lib/public/response/ws.d.ts +2 -0
  480. package/lib/public/response/ws.js +2 -0
  481. package/lib/public/route/router.d.ts +2 -0
  482. package/lib/public/route/router.js +2 -0
  483. package/lib/public/route/wrap.d.ts +2 -0
  484. package/lib/public/route/wrap.js +2 -0
  485. package/lib/public/route.d.ts +2 -0
  486. package/lib/public/route.js +2 -0
  487. package/lib/public/serve.d.ts +2 -0
  488. package/lib/public/serve.js +2 -0
  489. package/lib/public/session/Manager.d.ts +2 -0
  490. package/lib/public/session/Manager.js +2 -0
  491. package/lib/public/session/config.d.ts +2 -0
  492. package/lib/public/session/config.js +2 -0
  493. package/lib/public/symbol/config.d.ts +2 -0
  494. package/lib/public/symbol/config.js +2 -0
  495. package/lib/public/wasm/decode-json.d.ts +5 -0
  496. package/lib/public/wasm/decode-json.js +3 -0
  497. package/lib/public/wasm/decode-response.d.ts +3 -0
  498. package/lib/public/wasm/decode-response.js +3 -0
  499. package/lib/public/wasm/encode-request.d.ts +3 -0
  500. package/lib/public/wasm/encode-request.js +3 -0
  501. package/lib/public/wasm/encode-session.d.ts +3 -0
  502. package/lib/public/wasm/encode-session.js +3 -0
  503. package/lib/public/wasm/instantiate.d.ts +4 -0
  504. package/lib/public/wasm/instantiate.js +3 -0
  505. package/package.json +41 -35
  506. package/src/build/app.js +0 -99
  507. package/src/build/hook/build.js +0 -188
  508. package/src/build/hook/copy_includes.js +0 -20
  509. package/src/build/hook/exports.js +0 -2
  510. package/src/build/hook/init.js +0 -3
  511. package/src/build/hook/router.js +0 -33
  512. package/src/build/index.js +0 -49
  513. package/src/build/module_loader.js +0 -30
  514. package/src/build/targets/exports.js +0 -1
  515. package/src/build/targets/web.js +0 -70
  516. package/src/dispatch/index.js +0 -1
  517. package/src/http/verbs.js +0 -11
  518. package/src/private/config-filename.js +0 -1
  519. package/src/private/config.js +0 -48
  520. package/src/private/depend.js +0 -20
  521. package/src/private/dispatch.js +0 -18
  522. package/src/private/error/bad-body.js +0 -6
  523. package/src/private/error/bad-default-export.js +0 -6
  524. package/src/private/error/bad-path.js +0 -6
  525. package/src/private/error/bad-type-export.js +0 -6
  526. package/src/private/error/bad-type-name.js +0 -6
  527. package/src/private/error/double-extension.js +0 -6
  528. package/src/private/error/double-module.js +0 -6
  529. package/src/private/error/double-path-parameter.js +0 -6
  530. package/src/private/error/double-route.js +0 -6
  531. package/src/private/error/empty-config-file.js +0 -6
  532. package/src/private/error/empty-directory.js +0 -6
  533. package/src/private/error/empty-path-parameter.js +0 -6
  534. package/src/private/error/empty-route-file.js +0 -6
  535. package/src/private/error/error-in-config-file.js +0 -6
  536. package/src/private/error/mismatched-body.js +0 -6
  537. package/src/private/error/mismatched-path.js +0 -6
  538. package/src/private/error/mismatched-type.js +0 -6
  539. package/src/private/error/module-no-name.js +0 -6
  540. package/src/private/error/modules-array.js +0 -6
  541. package/src/private/error/no-handler.js +0 -6
  542. package/src/private/error/no-route-to-path.js +0 -6
  543. package/src/private/error/optional-route.js +0 -6
  544. package/src/private/error/reserved-type-name.js +0 -6
  545. package/src/private/error/rest-route.js +0 -6
  546. package/src/private/error.js +0 -15
  547. package/src/private/log.js +0 -69
  548. package/src/private/loglevel.js +0 -9
  549. package/src/private/mark.js +0 -5
  550. package/src/private/validate.js +0 -11
  551. package/src/serve/app.js +0 -206
  552. package/src/serve/handler/error.js +0 -10
  553. package/src/serve/handler/json.js +0 -10
  554. package/src/serve/handler/redirect.js +0 -11
  555. package/src/serve/handler/shared/base.js +0 -4
  556. package/src/serve/handler/sse.js +0 -24
  557. package/src/serve/handler/stream.js +0 -4
  558. package/src/serve/handler/text.js +0 -10
  559. package/src/serve/handler/view.js +0 -15
  560. package/src/serve/handler/ws.js +0 -2
  561. package/src/serve/hook/exports.js +0 -5
  562. package/src/serve/hook/handle.js +0 -106
  563. package/src/serve/hook/init.js +0 -3
  564. package/src/serve/hook/parse.js +0 -17
  565. package/src/serve/hook/respond.js +0 -28
  566. package/src/serve/hook/route.js +0 -50
  567. package/src/serve/hook/serve.js +0 -53
  568. package/src/serve/index.js +0 -9
  569. package/src/serve/module_loader.js +0 -16
  570. package/src/serve/to_sorted.js +0 -1
  571. /package/{src/build → lib/private}/defaults/app.html +0 -0
  572. /package/{src/build → lib/private}/defaults/error.html +0 -0
@@ -0,0 +1,245 @@
1
+ import AppError from "#AppError";
2
+ import location from "#location";
3
+ import log from "#log";
4
+ import reducer from "#reducer";
5
+ import $router from "#request/router";
6
+ import s_layout_depth from "#symbol/layout-depth";
7
+ import FileRef from "@rcompat/fs/FileRef";
8
+ import json from "@rcompat/package/json";
9
+ import dedent from "@rcompat/string/dedent";
10
+ const dirname = import.meta.dirname;
11
+ const pre = async (app) => {
12
+ // remove build directory in case exists
13
+ await app.path.build.remove();
14
+ await app.path.build.create();
15
+ await Promise.all(["server", "client", "components"]
16
+ .map(directory => app.runpath(directory).create()));
17
+ // this has to occur before post, so that layout depth is available for
18
+ // compiling root components
19
+ // bindings should have been registered during `init`
20
+ const router = await $router(app.path.routes, app.extensions);
21
+ app.set(s_layout_depth, router.depth("layout"));
22
+ const i18n_config_path = app.path.config.join("i18n.ts");
23
+ const i18n_config_js_path = app.path.config.join("i18n.js");
24
+ // minimal effort: check if i18n.ts exists (heavier effort during serve)
25
+ const has_i18n_config = await i18n_config_path.exists()
26
+ || await i18n_config_js_path.exists();
27
+ app.i18n_active = has_i18n_config;
28
+ return app;
29
+ };
30
+ async function indexDatabase(base) {
31
+ const export_from = "export { default } from";
32
+ const default_database = `${export_from} "#stage/config/database/index.js";`;
33
+ // app/config/database does not exist
34
+ if (!await base.exists())
35
+ return default_database;
36
+ const databases = await base.list();
37
+ const n = databases.length;
38
+ // none in app/config/database -> fallback
39
+ if (n === 0)
40
+ return default_database;
41
+ // index database file found, will be overwritten in next step
42
+ if (databases.some(d => d.base === "index"))
43
+ return "";
44
+ const names = databases.map(d => d.name);
45
+ // app/config/database/default.ts -> use
46
+ const ts = names.includes("default.ts");
47
+ if (ts)
48
+ return `${export_from} "#stage/config/database/default.ts";`;
49
+ // app/config/database/default.js -> use
50
+ const js = names.includes("default.js");
51
+ if (js)
52
+ return `${export_from} "#stage/config/database/default.js";`;
53
+ // one in app/config/database -> default
54
+ if (n === 1)
55
+ return `${export_from} "#stage/config/database/${names[0]}";`;
56
+ throw new AppError("Multiple database drivers; add index or default.(ts|js). Found: {0}", names.join(", "));
57
+ }
58
+ const js_re = /^.*.js$/;
59
+ const write_directories = async (build_directory, app) => {
60
+ for (const name of app.server_build) {
61
+ const d = app.runpath(`${name}s`);
62
+ const e = await Promise.all((await FileRef.collect(d, file => js_re.test(file.path)))
63
+ .map(async (path) => `${path}`.replace(d.toString(), _ => "")));
64
+ const files_js = `
65
+ const ${name} = [];
66
+ ${e.map(path => path.slice(1, -".js".length)).map((bare, i) => `const ${name}${i} = (await import("${FileRef.webpath(`#${name}/${bare}`)}")).default;
67
+ ${name}.push(["${FileRef.webpath(bare)}", ${name}${i}]);`).join("\n")}
68
+ export default ${name};`;
69
+ await build_directory.join(`${name}s.js`).write(files_js);
70
+ }
71
+ };
72
+ const write_stores = async (build_directory, app) => {
73
+ const d2 = app.runpath(location.stores);
74
+ const e = await Promise.all((await FileRef.collect(d2, file => js_re.test(file.path)))
75
+ .map(async (path) => `${path}`.replace(d2.toString(), _ => "")));
76
+ const stores_js = `
77
+ const store = [];
78
+ ${e.map(path => path.slice(1, -".js".length)).map((bare, i) => `import * as store${i} from "${FileRef.webpath(`#store/${bare}`)}";
79
+ store.push(["${FileRef.webpath(bare)}", store${i}]);`).join("\n")}
80
+
81
+ export default store;`;
82
+ await build_directory.join("stores.js").write(stores_js);
83
+ };
84
+ const write_components = async (build_directory, app) => {
85
+ const d2 = app.runpath(location.components);
86
+ const e = await Promise.all((await FileRef.collect(d2, file => js_re.test(file.path)))
87
+ .map(async (path) => `${path}`.replace(d2.toString(), _ => "")));
88
+ const components_js = `
89
+ const component = [];
90
+ ${e.map(path => path.slice(1, -".js".length)).map((bare, i) => `import * as component${i} from "${FileRef.webpath(`#component/${bare}`)}";
91
+ component.push(["${FileRef.webpath(bare)}", component${i}]);`).join("\n")}
92
+
93
+ ${app.roots.map((root, i) => `
94
+ import * as root${i} from "${FileRef.webpath(`../server/${root.name}`)}";
95
+ component.push(["${root.name.slice(0, -".js".length)}", root${i}]);
96
+ `).join("\n")}
97
+
98
+ export default component;`;
99
+ await build_directory.join("components.js").write(components_js);
100
+ };
101
+ const write_bootstrap = async (app, mode, i18n_active) => {
102
+ const build_start_script = `
103
+ import serve from "primate/serve";
104
+ const files = {};
105
+ ${app.server_build.map(name => `${name}s`).map(name => `import ${name} from "./${app.id}/${name}.js";
106
+ files.${name} = ${name};`).join("\n")}
107
+ import components from "./${app.id}/components.js";
108
+ import stores from "./${app.id}/stores.js";
109
+ import target from "./target.js";
110
+ import session from "#session";
111
+ import config from "#config";
112
+ import s_config from "primate/symbol/config";
113
+
114
+ ${i18n_active ? `
115
+ import t from "#i18n";
116
+ const i18n_config = t[s_config];
117
+ ` : `
118
+ const i18n_config = undefined;
119
+ `}
120
+
121
+ const app = await serve(import.meta.url, {
122
+ ...target,
123
+ config,
124
+ files,
125
+ components,
126
+ stores,
127
+ mode: "${mode}",
128
+ session_config: session[s_config],
129
+ i18n_config,
130
+ });
131
+
132
+ export default app;
133
+ `;
134
+ await app.path.build.join("serve.js").write(build_start_script);
135
+ };
136
+ const post = async (app) => {
137
+ const defaults = FileRef.join(import.meta.url, "../../defaults");
138
+ await app.stage(app.path.routes, "routes", file => dedent `
139
+ export * from "#stage/route${file}";
140
+ `);
141
+ await app.stage(app.path.stores, "stores", file => dedent `
142
+ import database from "#database";
143
+ import store from "#stage/store${file}";
144
+ import wrap from "primate/database/wrap";
145
+
146
+ export default await wrap("${file.base}", store, database);
147
+ `);
148
+ const configs = FileRef.join(dirname, "../../private/config/config");
149
+ const database_base = app.path.config.join("database");
150
+ await app.stage(configs, "config", async (file) => {
151
+ if (file.path === "/database/index.js")
152
+ return indexDatabase(database_base);
153
+ return `export { default } from "#stage/config${file}";`;
154
+ });
155
+ await app.stage(app.path.modules, "modules", file => `export { default } from "#stage/module${file}";`);
156
+ // stage locales
157
+ await app.stage(app.path.locales, "locales", file => `export { default } from "#stage/locale${file}";`);
158
+ // stage app config after locales so #locale imports can be resolved
159
+ await app.stage(app.path.config, "config", file => `export { default } from "#stage/config${file}";`);
160
+ // stage components
161
+ await app.stage(app.path.components, "components", file => `
162
+ import * as component from "#stage/component${file}";
163
+
164
+ export * from "#stage/component${file}";
165
+ export default component?.default;
166
+ `);
167
+ // copy framework pages
168
+ await defaults.copy(app.runpath(location.server, location.pages));
169
+ // copy pages to build
170
+ if (await app.path.pages.exists()) {
171
+ await app.path.pages.copy(app.runpath(location.server, location.pages));
172
+ }
173
+ if (await app.path.static.exists()) {
174
+ // copy static files to build/static
175
+ await app.path.static.copy(app.runpath(location.static));
176
+ }
177
+ // publish JavaScript and CSS files
178
+ const imports = await FileRef.collect(app.path.static, file => /\.(?:js|ts|css)$/.test(file.path));
179
+ await Promise.all(imports.map(async (file) => {
180
+ const src = file.debase(app.path.static);
181
+ app.build.export(`import "./${location.static}${src}";`);
182
+ }));
183
+ app.build.export("export { default } from \"primate/client/app\";");
184
+ app.build.plugin({
185
+ name: "@primate/core/frontend",
186
+ setup(build) {
187
+ build.onResolve({ filter: /#frontends/ }, ({ path }) => {
188
+ return { namespace: "frontends", path };
189
+ });
190
+ build.onLoad({ filter: /#frontends/ }, async () => {
191
+ const contents = [...app.frontends.keys()].map(name => `export { default as ${name} } from "@primate/${name}";`).join("\n");
192
+ return { contents, resolveDir: app.root.path };
193
+ });
194
+ },
195
+ });
196
+ app.build.plugin({
197
+ name: "@primate/core/alias",
198
+ setup(build) {
199
+ build.onResolve({ filter: /#static/ }, args => {
200
+ const path = args.path.slice(1);
201
+ return { path: app.root.join(path).path };
202
+ });
203
+ },
204
+ });
205
+ // start the build
206
+ await app.build.start();
207
+ // a target needs to create an `assets.js` that exports assets
208
+ await app.target.run();
209
+ const build_directory = app.path.build.join(app.id);
210
+ // TODO: remove after rcompat automatically creates directories
211
+ await build_directory.create();
212
+ await write_components(build_directory, app);
213
+ await write_stores(build_directory, app);
214
+ await write_directories(build_directory, app);
215
+ await write_bootstrap(app, app.mode, app.i18n_active);
216
+ const manifest_data = {
217
+ ...await (await json()).json(),
218
+ imports: {
219
+ "#config": "./config/app.js",
220
+ "#config/*": "./config/*.js",
221
+ "#database": "./config/database/index.js",
222
+ "#database/*": "./config/database/*.js",
223
+ "#session": "./config/session.js",
224
+ "#i18n": "./config/i18n.js",
225
+ "#component/*": "./components/*.js",
226
+ "#locale/*": "./locales/*.js",
227
+ "#module/*": "./modules/*.js",
228
+ "#route/*": "./routes/*.js",
229
+ "#stage/component/*": "./stage/components/*.js",
230
+ "#stage/locale/*": "./stage/locales/*.js",
231
+ "#stage/config/*": "./stage/config/*.js",
232
+ "#stage/module/*": "./stage/modules/*.js",
233
+ "#stage/route/*": "./stage/routes/*.js",
234
+ "#stage/store/*": "./stage/stores/*.js",
235
+ "#store/*": "./stores/*.js",
236
+ },
237
+ };
238
+ // create package.json
239
+ await app.path.build.join("package.json").writeJSON(manifest_data);
240
+ log.system("build written to {0}", app.path.build);
241
+ app.cleanup();
242
+ return app;
243
+ };
244
+ export default async (app) => post(await reducer(app.modules, await pre(app), "build"));
245
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1,4 @@
1
+ import type ServeApp from "#ServeApp";
2
+ declare const _default: (app: ServeApp) => Promise<ServeApp>;
3
+ export default _default;
4
+ //# sourceMappingURL=serve.d.ts.map
@@ -0,0 +1,13 @@
1
+ import log from "#log";
2
+ import reducer from "#reducer";
3
+ function pre(app) {
4
+ log.system("in startup");
5
+ return app;
6
+ }
7
+ ;
8
+ async function post(app) {
9
+ await app.start();
10
+ return app;
11
+ }
12
+ export default async (app) => post(await reducer(app.modules, pre(app), "serve"));
13
+ //# sourceMappingURL=serve.js.map
@@ -0,0 +1,21 @@
1
+ import type Catalogs from "#i18n/Catalogs";
2
+ import type sInternal from "#i18n/symbol/internal";
3
+ type LocaleTags<C extends Catalogs> = keyof C & string;
4
+ type API<C extends Catalogs> = {
5
+ onChange(fn: (locale: LocaleTags<C>) => void): () => void;
6
+ subscribe(run: (value: API<C>) => void): () => void;
7
+ locale: {
8
+ get(): LocaleTags<C>;
9
+ set(locale: LocaleTags<C>): void;
10
+ };
11
+ readonly loading: boolean;
12
+ [sInternal]: {
13
+ init(locale: LocaleTags<C>): void;
14
+ wait(): Promise<void>;
15
+ depend(fn: () => void): () => void;
16
+ readonly version: number;
17
+ restore: () => void;
18
+ };
19
+ };
20
+ export type { API as default };
21
+ //# sourceMappingURL=API.d.ts.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=API.js.map
@@ -0,0 +1,4 @@
1
+ import type Dict from "@rcompat/type/Dict";
2
+ type Catalog = Dict<string>;
3
+ export type { Catalog as default };
4
+ //# sourceMappingURL=Catalog.d.ts.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Catalog.js.map
@@ -0,0 +1,4 @@
1
+ import type Catalog from "#i18n/Catalog";
2
+ type Catalogs<Locale extends string = string> = Record<Locale, Catalog>;
3
+ export type { Catalogs as default };
4
+ //# sourceMappingURL=Catalogs.d.ts.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Catalogs.js.map
@@ -0,0 +1,10 @@
1
+ import type Catalogs from "#i18n/Catalogs";
2
+ import type PersistMode from "#i18n/PersistMode";
3
+ type Config<C extends Catalogs = Catalogs> = {
4
+ defaultLocale: keyof C & string;
5
+ locales: C;
6
+ currency?: string;
7
+ persist?: PersistMode;
8
+ };
9
+ export type { Config as default };
10
+ //# sourceMappingURL=Config.d.ts.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Config.js.map
@@ -0,0 +1,6 @@
1
+ type ContextData = {
2
+ locale: string;
3
+ currency?: string;
4
+ };
5
+ export type { ContextData as default };
6
+ //# sourceMappingURL=ContextData.d.ts.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ContextData.js.map
@@ -0,0 +1,18 @@
1
+ export default class Formatter {
2
+ #private;
3
+ constructor(locale: string);
4
+ get locale(): string;
5
+ set locale(locale: string);
6
+ number(number: number): string;
7
+ date(date: Date): string;
8
+ currency(currency: string, amount: number): string;
9
+ ordinal(number: number): string;
10
+ relative(milliseconds: number, options?: {
11
+ numeric?: "always" | "auto";
12
+ style?: "long" | "short" | "narrow";
13
+ }): string;
14
+ list(items: string[]): string;
15
+ unit(value: number, u: string): string;
16
+ pluralRules(): Intl.PluralRules;
17
+ }
18
+ //# sourceMappingURL=Formatter.d.ts.map
@@ -0,0 +1,108 @@
1
+ import fail from "#fail";
2
+ import ordinals from "#i18n/ordinals";
3
+ import toIntlUnit from "#i18n/toIntlUnit";
4
+ import is from "@rcompat/assert/is";
5
+ export default class Formatter {
6
+ #locale;
7
+ constructor(locale) {
8
+ is(locale).string();
9
+ this.#locale = locale;
10
+ }
11
+ get locale() {
12
+ return this.#locale;
13
+ }
14
+ set locale(locale) {
15
+ is(locale).string();
16
+ this.#locale = locale;
17
+ }
18
+ number(number) {
19
+ try {
20
+ return new Intl.NumberFormat(this.#locale).format(number);
21
+ }
22
+ catch {
23
+ return String(number);
24
+ }
25
+ }
26
+ date(date) {
27
+ try {
28
+ return new Intl.DateTimeFormat(this.#locale).format(date);
29
+ }
30
+ catch {
31
+ return date.toString();
32
+ }
33
+ }
34
+ currency(currency, amount) {
35
+ const options = { style: "currency", currency };
36
+ try {
37
+ return new Intl.NumberFormat(this.#locale, options).format(amount);
38
+ }
39
+ catch {
40
+ return String(amount);
41
+ }
42
+ }
43
+ ordinal(number) {
44
+ try {
45
+ const n = Math.trunc(number);
46
+ const rules = new Intl.PluralRules(this.#locale, { type: "ordinal" });
47
+ const category = rules.select(n);
48
+ const language = this.#locale.split("-")[0];
49
+ if (!(language in ordinals))
50
+ return String(n);
51
+ const strategy = ordinals[language];
52
+ const position = strategy.position;
53
+ const pattern = strategy[category] || strategy.other;
54
+ return position === "prefix" ? `${pattern}${n}` : `${n}${pattern}`;
55
+ }
56
+ catch {
57
+ return String(Math.trunc(number));
58
+ }
59
+ }
60
+ relative(milliseconds, options) {
61
+ const defaults = { numeric: "auto", style: "long", ...options };
62
+ try {
63
+ const rtf = new Intl.RelativeTimeFormat(this.#locale, defaults);
64
+ const s = Math.round(milliseconds / 1000);
65
+ const abs = Math.abs(s);
66
+ if (abs >= 31536000)
67
+ return rtf.format(Math.trunc(s / 31536000), "year");
68
+ if (abs >= 2592000)
69
+ return rtf.format(Math.trunc(s / 2592000), "month");
70
+ if (abs >= 604800)
71
+ return rtf.format(Math.trunc(s / 604800), "week");
72
+ if (abs >= 86400)
73
+ return rtf.format(Math.trunc(s / 86400), "day");
74
+ if (abs >= 3600)
75
+ return rtf.format(Math.trunc(s / 3600), "hour");
76
+ if (abs >= 60)
77
+ return rtf.format(Math.trunc(s / 60), "minute");
78
+ return rtf.format(s, "second");
79
+ }
80
+ catch {
81
+ return `${milliseconds}ms`;
82
+ }
83
+ }
84
+ list(items) {
85
+ try {
86
+ return new Intl.ListFormat(this.#locale).format(items);
87
+ }
88
+ catch {
89
+ return items.join(", ");
90
+ }
91
+ }
92
+ unit(value, u) {
93
+ const unit = toIntlUnit(u);
94
+ if (unit === undefined)
95
+ throw fail("unit {0} not supported", u);
96
+ const options = { style: "unit", unit };
97
+ try {
98
+ return new Intl.NumberFormat(this.#locale, options).format(value);
99
+ }
100
+ catch {
101
+ return `${value} ${u}`;
102
+ }
103
+ }
104
+ pluralRules() {
105
+ return new Intl.PluralRules(this.#locale);
106
+ }
107
+ }
108
+ //# sourceMappingURL=Formatter.js.map
@@ -0,0 +1,16 @@
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 "#ServeApp";
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
@@ -0,0 +1,109 @@
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, { status: Status.NO_CONTENT });
70
+ // only accept configured locales
71
+ if (!this.#configured(requested))
72
+ return new Response(null, { status: Status.NO_CONTENT });
73
+ const header = cookie(COOKIE_NAME, requested, {
74
+ secure: this.#secure,
75
+ path: "/",
76
+ sameSite: "Strict",
77
+ });
78
+ return new Response(null, {
79
+ headers: { "set-cookie": header },
80
+ status: Status.NO_CONTENT,
81
+ });
82
+ }
83
+ route(request, next) {
84
+ const server_locales = this.#locales;
85
+ const accept_language = request.headers.try("Accept-Language") ?? "";
86
+ const client_locales = accept_language
87
+ .split(",")
88
+ .map(s => s.split(";")[0].trim())
89
+ .filter(Boolean);
90
+ const mode = this.#persist;
91
+ const cookieLocale = mode === "cookie" ? request.cookies.try(COOKIE_NAME) : undefined;
92
+ const locale = cookieLocale ??
93
+ pick(client_locales, server_locales) ??
94
+ this.#defaultLocale;
95
+ return next({
96
+ ...request,
97
+ context: {
98
+ ...request.context,
99
+ i18n: {
100
+ currency: this.#currency,
101
+ mode,
102
+ locale,
103
+ locales: server_locales,
104
+ },
105
+ },
106
+ });
107
+ }
108
+ }
109
+ //# sourceMappingURL=Module.js.map
@@ -0,0 +1,3 @@
1
+ type PersistMode = "cookie" | "localStorage" | "sessionStorage" | false;
2
+ export type { PersistMode as default };
3
+ //# sourceMappingURL=PersistMode.d.ts.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=PersistMode.js.map
@@ -0,0 +1,4 @@
1
+ type Normalize<S extends string> = Lowercase<S extends `${infer A}|${string}` ? A : S>;
2
+ type TypeOf<T extends string> = Normalize<T> extends "n" | "number" ? number : Normalize<T> extends "d" | "date" ? Date | number : Normalize<T> extends "c" | "currency" ? number : Normalize<T> extends "o" | "ordinal" ? number : Normalize<T> extends "a" | "ago" ? number : Normalize<T> extends "l" | "list" ? string[] : Normalize<T> extends `u(${string})` | `unit(${string})` ? number : string;
3
+ export type { TypeOf as default };
4
+ //# sourceMappingURL=TypeOf.d.ts.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=TypeOf.js.map
@@ -0,0 +1,3 @@
1
+ declare const _default: "primate-i18n";
2
+ export default _default;
3
+ //# sourceMappingURL=COOKIE_NAME.d.ts.map
@@ -0,0 +1,2 @@
1
+ export default "primate-i18n";
2
+ //# sourceMappingURL=COOKIE_NAME.js.map
@@ -0,0 +1,3 @@
1
+ declare const _default: "en-US";
2
+ export default _default;
3
+ //# sourceMappingURL=DEFAULT_LOCALE.d.ts.map
@@ -0,0 +1,2 @@
1
+ export default "en-US";
2
+ //# sourceMappingURL=DEFAULT_LOCALE.js.map
@@ -0,0 +1,3 @@
1
+ declare const _default: "cookie";
2
+ export default _default;
3
+ //# sourceMappingURL=DEFAULT_PERSIST_MODE.d.ts.map
@@ -0,0 +1,2 @@
1
+ export default "cookie";
2
+ //# sourceMappingURL=DEFAULT_PERSIST_MODE.js.map
@@ -0,0 +1,3 @@
1
+ declare const _default: "Primate-I18N-Locale";
2
+ export default _default;
3
+ //# sourceMappingURL=PERSIST_HEADER.d.ts.map
@@ -0,0 +1,2 @@
1
+ export default "Primate-I18N-Locale";
2
+ //# sourceMappingURL=PERSIST_HEADER.js.map
@@ -0,0 +1,3 @@
1
+ declare const _default: "HEAD";
2
+ export default _default;
3
+ //# sourceMappingURL=PERSIST_METHOD.d.ts.map
@@ -0,0 +1,2 @@
1
+ export default "HEAD";
2
+ //# sourceMappingURL=PERSIST_METHOD.js.map
@@ -0,0 +1,3 @@
1
+ declare const _default: "primate-i18n";
2
+ export default _default;
3
+ //# sourceMappingURL=PERSIST_STORAGE_KEY.d.ts.map