@primate/core 0.1.10 → 0.2.1

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 +246 -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 -36
  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
@@ -1,48 +0,0 @@
1
- export default {
2
- base: "/",
3
- modules: [],
4
- pages: {
5
- app: "app.html",
6
- error: "error.html",
7
- },
8
- log: {
9
- level: "warn",
10
- trace: false,
11
- },
12
- http: {
13
- host: "localhost",
14
- port: 6161,
15
- csp: {},
16
- static: {
17
- root: "/",
18
- },
19
- },
20
- request: {
21
- body: {
22
- parse: true,
23
- },
24
- },
25
- location: {
26
- // renderable components
27
- components: "components",
28
- // HTML pages
29
- pages: "pages",
30
- // hierarchical routes
31
- routes: "routes",
32
- // static assets
33
- static: "static",
34
- // runtime types
35
- types: "types",
36
- // build environment
37
- build: "build",
38
- // client build
39
- client: "client",
40
- // server build
41
- server: "server",
42
- },
43
- build: {
44
- name: "app",
45
- includes: [],
46
- excludes: [],
47
- },
48
- };
@@ -1,20 +0,0 @@
1
- import filter from "@rcompat/object/filter";
2
- import manifest from "@rcompat/package/manifest";
3
- import packager from "@rcompat/package/packager";
4
- import errors from "./errors.js";
5
-
6
- const { MissingDependencies } = errors;
7
-
8
- export default async (library_manifest, desired, from) => {
9
- const app_dependencies = (await manifest()).dependencies;
10
- const keys = Object.keys(app_dependencies);
11
- const library_peers = filter(library_manifest.peerDependencies, ([key]) =>
12
- desired.includes(key));
13
- const missing = desired.filter(peer => !keys.includes(peer));
14
-
15
- if (missing.length > 0) {
16
- const to_install = missing.map(key => `${key}@${library_peers[key]}`);
17
- const install = `${packager()} install ${to_install.join(" ")}`;
18
- MissingDependencies.throw(missing.join(", "), from, install);
19
- }
20
- };
@@ -1,18 +0,0 @@
1
- import is from "@rcompat/invariant/is";
2
-
3
- export default (object, raw, cased = true) => {
4
- return Object.assign(Object.create(null), {
5
- get(key) {
6
- is(key).string();
7
-
8
- return object[cased ? key : key.toLowerCase()];
9
- },
10
- json() {
11
- return JSON.parse(JSON.stringify(object));
12
- },
13
- toString() {
14
- return JSON.stringify(object);
15
- },
16
- raw,
17
- });
18
- };
@@ -1,6 +0,0 @@
1
- import { error } from "#error";
2
-
3
- export default error(import.meta.url, {
4
- message: "bad body returned from route, got {0}",
5
- fix: "return a proper body from route",
6
- });
@@ -1,6 +0,0 @@
1
- import { error } from "#error";
2
-
3
- export default error(import.meta.url, {
4
- message: "bad default export at {0}",
5
- fix: "use only functions for the default export of the given file",
6
- });
@@ -1,6 +0,0 @@
1
- import { error } from "#error";
2
-
3
- export default error(import.meta.url, {
4
- message: "bad path {0}",
5
- fix: "use only letters, digits, '_', '[', ']' or '=' in path filenames",
6
- });
@@ -1,6 +0,0 @@
1
- import { error } from "#error";
2
-
3
- export default error(import.meta.url, {
4
- message: "bad type export at {0}",
5
- fix: "export object with a `base` string and a `validate` function",
6
- });
@@ -1,6 +0,0 @@
1
- import { error } from "#error";
2
-
3
- export default error(import.meta.url, {
4
- message: "bad type name {0}",
5
- fix: "use lowercase-first latin letters and decimals in type names",
6
- });
@@ -1,6 +0,0 @@
1
- import { error } from "#error";
2
-
3
- export default error(import.meta.url, {
4
- message: "double file extension {0}",
5
- fix: "unload one of the two handlers registering the file extension",
6
- });
@@ -1,6 +0,0 @@
1
- import { error } from "#error";
2
-
3
- export default error(import.meta.url, {
4
- message: "double module {0} in {1}",
5
- fix: "load {0} only once",
6
- });
@@ -1,6 +0,0 @@
1
- import { error } from "#error";
2
-
3
- export default error(import.meta.url, {
4
- message: "double path parameter {0} in route {1}",
5
- fix: "disambiguate path parameters in route names",
6
- });
@@ -1,6 +0,0 @@
1
- import { error } from "#error";
2
-
3
- export default error(import.meta.url, {
4
- message: "double route of the form {0}",
5
- fix: "disambiguate routes",
6
- });
@@ -1,6 +0,0 @@
1
- import { error } from "#error";
2
-
3
- export default error(import.meta.url, {
4
- message: "empty config file at {0}",
5
- fix: "add configuration options to the file or remove it",
6
- });
@@ -1,6 +0,0 @@
1
- import { warn } from "#error";
2
-
3
- export default warn(import.meta.url, {
4
- message: "empty {0} directory",
5
- fix: "populate {1} or remove it",
6
- });
@@ -1,6 +0,0 @@
1
- import { error } from "#error";
2
-
3
- export default error(import.meta.url, {
4
- message: "empty path parameter {0} in route {1}",
5
- fix: "name the parameter or remove it",
6
- });
@@ -1,6 +0,0 @@
1
- import { warn } from "#error";
2
-
3
- export default warn(import.meta.url, {
4
- message: "empty route file at {0}",
5
- fix: "add routes to the file or remove it",
6
- });
@@ -1,6 +0,0 @@
1
- import { error } from "#error";
2
-
3
- export default error(import.meta.url, {
4
- message: "error in config file: {0}",
5
- fix: "check errors in config file by running {1}",
6
- });
@@ -1,6 +0,0 @@
1
- import { error } from "#error";
2
-
3
- export default error(import.meta.url, {
4
- message: "{0}: {1}",
5
- fix: "make sure the request body corresponds to the used content type",
6
- });
@@ -1,6 +0,0 @@
1
- import { info } from "#error";
2
-
3
- export default info(import.meta.url, {
4
- message: "mismatched path {0}: {1}",
5
- fix: "fix the type or the caller",
6
- });
@@ -1,6 +0,0 @@
1
- import { info } from "#error";
2
-
3
- export default info(import.meta.url, {
4
- message: "mismatched type: {0}",
5
- fix: "fix the type or the caller",
6
- });
@@ -1,6 +0,0 @@
1
- import { error } from "#error";
2
-
3
- export default error(import.meta.url, {
4
- message: "module at index {0} has no name",
5
- fix: "update module at index {0} and inform maintainer",
6
- });
@@ -1,6 +0,0 @@
1
- import { error } from "#error";
2
-
3
- export default error(import.meta.url, {
4
- message: "the {0} config property must be an array",
5
- fix: "change {0} to an array in the config or remove this property",
6
- });
@@ -1,6 +0,0 @@
1
- import { error } from "#error";
2
-
3
- export default error(import.meta.url, {
4
- message: "no handler for {0}",
5
- fix: "add handler module for this component or remove {0}",
6
- });
@@ -1,6 +0,0 @@
1
- import { info } from "#error";
2
-
3
- export default info(import.meta.url, {
4
- message: "no {0} route to {1}",
5
- fix: "create a {0} route function at {2}.js",
6
- });
@@ -1,6 +0,0 @@
1
- import { error } from "#error";
2
-
3
- export default error(import.meta.url, {
4
- message: "optional route {0} must be a leaf",
5
- fix: "move route to leaf (last) position in filesystem hierarchy",
6
- });
@@ -1,6 +0,0 @@
1
- import { error } from "#error";
2
-
3
- export default error(import.meta.url, {
4
- message: "reserved type name {0}",
5
- fix: "do not use any reserved type names",
6
- });
@@ -1,6 +0,0 @@
1
- import { error } from "#error";
2
-
3
- export default error(import.meta.url, {
4
- message: "rest route {0} must be a leaf",
5
- fix: "move route to leaf (last) position in filesystem hierarchy",
6
- });
@@ -1,15 +0,0 @@
1
- import log from "@primate/core/log";
2
- import file from "@rcompat/fs/file";
3
-
4
- const base = level => (url, args) => (...params) => log[level]({
5
- params,
6
- name: file(url).base,
7
- module: "@primate/core",
8
- ...args,
9
- });
10
-
11
- const info = base("info");
12
- const warn = base("warn");
13
- const error = base("error");
14
-
15
- export { error, info, warn };
@@ -1,69 +0,0 @@
1
- import loglevel from "#loglevel";
2
- import mark from "#mark";
3
- import blue from "@rcompat/cli/color/blue";
4
- import dim from "@rcompat/cli/color/dim";
5
- import green from "@rcompat/cli/color/green";
6
- import red from "@rcompat/cli/color/red";
7
- import yellow from "@rcompat/cli/color/yellow";
8
- import print from "@rcompat/cli/print";
9
-
10
- const url = "https://primatejs.com/errors";
11
- const slice_length = "@primate/".length;
12
- const helpat = (name, error) => `${url}/${name.slice(slice_length)}#${error}`;
13
-
14
- const levels = {
15
- error: 0,
16
- warn: 1,
17
- info: 2,
18
- };
19
- const level = levels[loglevel];
20
-
21
- const make_error = (level, { message, fix, name, params, module }) => ({
22
- level,
23
- fix: mark(fix, ...params),
24
- message: mark(message, ...params),
25
- name,
26
- module,
27
- });
28
-
29
- const normalize = (level, message) => typeof message === "string"
30
- ? { message }
31
- : make_error(level, message);
32
-
33
- const log = (pre, color, error, override) => {
34
- const { fix, module, name, message } = { ...error, ...override };
35
- print(color(pre), `${module !== undefined ? `${color(module)} ` : ""}${message}`, "\n");
36
- if (fix) {
37
- print(blue("++"), fix);
38
- name && print(dim(`\n -> ${helpat(module, name)}`), "\n");
39
- }
40
- };
41
-
42
- export default {
43
- system(message) {
44
- log("++", blue, { message });
45
- },
46
-
47
- info(error, override) {
48
- // info prints only on info level
49
- level === levels.info && log("--", green, normalize("info", error), override);
50
- },
51
-
52
- warn(error, override) {
53
- // warn prints on info and warn levels
54
- level >= levels.warn && log("??", yellow, normalize("warn", error), override);
55
- },
56
-
57
- error(error, override, toss = true) {
58
- // error always prints
59
- log("!!", red, normalize("error", error));
60
- if (toss) {
61
- error.level = "error";
62
- throw error;
63
- }
64
- },
65
-
66
- auto(error) {
67
- Object.keys(levels).includes(error.level) && this[error.level](error, {}, false);
68
- },
69
- };
@@ -1,9 +0,0 @@
1
- import args from "@rcompat/args";
2
-
3
- const default_level = "warn";
4
- const flag = "--loglevel=";
5
- const levels = ["error", "warn", "info"];
6
-
7
- const loglevel = args.find(arg => arg.startsWith(flag))?.slice(flag.length);
8
-
9
- export default levels.includes(loglevel) ? loglevel : default_level;
@@ -1,5 +0,0 @@
1
- import bold from "@rcompat/cli/color/bold";
2
-
3
- export default (format, ...params) => params.reduce((formatted, param, i) =>
4
- formatted.replace(`{${i}}`, bold(param)), format);
5
-
@@ -1,11 +0,0 @@
1
- import is from "@rcompat/invariant/is";
2
- import maybe from "@rcompat/invariant/maybe";
3
-
4
- export default (type, value, name) => {
5
- maybe(type.validate).function();
6
- if (type.validate) {
7
- return type.validate(value, name);
8
- }
9
- is(type).function();
10
- return type(value, name);
11
- };
package/src/serve/app.js DELETED
@@ -1,206 +0,0 @@
1
- import double_extension from "#error/double-extension";
2
- import crypto from "@rcompat/crypto";
3
- import file from "@rcompat/fs/file";
4
- import join from "@rcompat/fs/join";
5
- import { html } from "@rcompat/http/mime";
6
- import { OK } from "@rcompat/http/status";
7
- import is from "@rcompat/invariant/is";
8
- import empty from "@rcompat/object/empty";
9
- import get from "@rcompat/object/get";
10
- import stringify from "@rcompat/object/stringify";
11
- import valmap from "@rcompat/object/valmap";
12
- import module_loader from "./module_loader.js";
13
- import to_sorted from "./to_sorted.js";
14
-
15
- const to_csp = (config_csp, assets, csp) => config_csp
16
- // only csp entries in the config will be enriched
17
- .map(([key, directives]) =>
18
- // enrich with application assets
19
- [key, assets[key] ? directives.concat(...assets[key]) : directives])
20
- .map(([key, directives]) =>
21
- // enrich with explicit csp
22
- [key, csp[key] ? directives.concat(...csp[key]) : directives])
23
- .map(([key, directives]) => `${key} ${directives.join(" ")}`)
24
- .join(";");
25
-
26
- const attribute = attributes => empty(attributes)
27
- ? ""
28
- : " ".concat(Object.entries(attributes)
29
- .map(([key, value]) => `${key}="${value}"`).join(" "))
30
- ;
31
- const tag = (name, { attributes = {}, code = "", close = true }) =>
32
- `<${name}${attribute(attributes)}${close ? `>${code}</${name}>` : "/>"}`;
33
- const nctag = (name, properties) => tag(name, { ...properties, close: false });
34
- const tags = {
35
- // inline: <script type integrity>...</script>
36
- // outline: <script type integrity src></script>
37
- script({ inline, code, type, integrity, src }) {
38
- return inline
39
- ? tag("script", { attributes: { type, integrity }, code })
40
- : tag("script", { attributes: { type, integrity, src } });
41
- },
42
- // inline: <style>...</style>
43
- // outline: <link rel="stylesheet" href />
44
- style({ inline, code, href, rel = "stylesheet" }) {
45
- return inline
46
- ? tag("style", { code })
47
- : nctag("link", { attributes: { rel, href } });
48
- },
49
- font({ href, rel = "preload", as = "font", type, crossorigin = true }) {
50
- return nctag("link", { attributes: { rel, href, as, type, crossorigin } });
51
- },
52
- };
53
-
54
- const render_head = (assets, fonts, head) =>
55
- to_sorted(assets, ({ type }) => -1 * (type === "importmap"))
56
- .map(({ src, code, type, inline, integrity }) =>
57
- type === "style"
58
- ? tags.style({ inline, code, href: src })
59
- : tags.script({ inline, code, type, integrity, src }),
60
- ).join("\n").concat("\n", head ?? "").concat("\n", fonts.map(href =>
61
- tags.font({ href, type: "font/woff2" }),
62
- ).join("\n"));
63
-
64
- const encoder = new TextEncoder();
65
- const hash = async (data, algorithm = "sha-384") => {
66
- const bytes = await crypto.subtle.digest(algorithm, encoder.encode(data));
67
- const prefix = algorithm.replace("-", _ => "");
68
- return`${prefix}-${btoa(String.fromCharCode(...new Uint8Array(bytes)))}`;
69
- };
70
-
71
- export default async (rootfile, build) => {
72
- const root = file(rootfile).directory;
73
- const { config, files, components, loader, target, mode } = build;
74
- const assets = await Promise.all(build.assets.map(async asset => {
75
- const code = asset.type === "importmap" ? stringify(asset.code) : asset.code;
76
- return {
77
- ...asset,
78
- code,
79
- integrity: await hash(code),
80
- };
81
- }));
82
-
83
- const { http } = build.config;
84
- const secure = http?.ssl !== undefined;
85
- const path = valmap(config.location, value => root.join(value));
86
-
87
- // if ssl activated, resolve key and cert early
88
- if (secure) {
89
- http.ssl.key = root.join(http.ssl.key);
90
- http.ssl.cert = root.join(http.ssl.cert);
91
- }
92
-
93
- const $components = Object.fromEntries(components ?? []);
94
- const error = await path.routes.join("+error.js");
95
-
96
- return {
97
- secure,
98
- importmaps: {},
99
- assets,
100
- files,
101
- path,
102
- root,
103
- get_component(name) {
104
- const component = $components[name];
105
- return component?.default ?? component;
106
- },
107
- // pseudostatic thus arrowbound
108
- get: (config_key, fallback) => get(config, config_key) ?? fallback,
109
- set: (key, value) => {
110
- config[key] = value;
111
- },
112
- error: {
113
- default: await error.exists() ? await error.import("default") : undefined,
114
- },
115
- handlers: {},
116
- modules: await module_loader(root, config.modules ?? []),
117
- fonts: [],
118
- headers(csp = {}) {
119
- const http_csp = Object.entries(this.get("http.csp", {}));
120
-
121
- return {
122
- ...this.get("http.headers", {}),
123
- ...http_csp.length === 0 ? {} : {
124
- "Content-Security-Policy": to_csp(http_csp, this.asset_csp, csp),
125
- },
126
- };
127
- },
128
- runpath(...directories) {
129
- return this.root.join(...directories);
130
- },
131
- async render(content) {
132
- const { body, head, partial, placeholders = {}, page } = content;
133
- ["body", "head"].every(used => is(placeholders[used]).undefined());
134
-
135
- return partial ? body : Object.entries(placeholders)
136
- // replace given placeholders, defaulting to ""
137
- .reduce((html, [key, value]) => html.replace(`%${key}%`, value ?? ""),
138
- this.loader.page(page))
139
- // replace non-given placeholders, aside from %body% / %head%
140
- .replaceAll(/(?<keep>%(?:head|body)%)|%.*?%/gus, "$1")
141
- // replace body and head
142
- .replace("%body%", body)
143
- .replace("%head%", render_head(this.assets, this.fonts, head));
144
- },
145
- respond(body, { status = OK, headers = {} } = {}) {
146
- return new Response(body, { status, headers: {
147
- "Content-Type": html, ...this.headers(), ...headers },
148
- });
149
- },
150
- async view(options) {
151
- // split render and respond options
152
- const { status, headers, ...rest } = options;
153
- return this.respond(await this.render(rest), { status, headers });
154
- },
155
- media(type, { status, headers } = {}) {
156
- return { status, headers: { ...headers, "Content-Type": type } };
157
- },
158
- async inline(code, type) {
159
- const integrity = await this.hash(code);
160
- const tag_name = type === "style" ? "style" : "script";
161
- const head = tags[tag_name]({ code, type, inline: true, integrity });
162
- return { head, integrity: `'${integrity}'` };
163
- },
164
- async publish({ src, code, type = "", inline = false }) {
165
- if (inline || type === "style") {
166
- this.assets.push({
167
- src: join(http.static.root, src ?? "").path,
168
- code: inline ? code : "",
169
- type,
170
- inline,
171
- integrity: await this.hash(code),
172
- });
173
- }
174
-
175
- // rehash assets_csp
176
- this.asset_csp = this.assets.map(({ type: directive, integrity }) => [
177
- `${directive === "style" ? "style" : "script"}-src`, integrity])
178
- .reduce((csp, [directive, hash]) =>
179
- ({ ...csp, [directive]: csp[directive].concat(`'${hash}'`) } ),
180
- { "style-src": [], "script-src": [] },
181
- );
182
- },
183
- create_csp() {
184
- this.asset_csp = this.assets.map(({ type: directive, integrity }) => [
185
- `${directive === "style" ? "style" : "script"}-src`, integrity])
186
- .reduce((csp, [directive, hash]) =>
187
- ({ ...csp, [directive]: csp[directive].concat(`'${hash}'`) } ),
188
- { "style-src": [], "script-src": [] },
189
- );
190
- },
191
- register(extension, handle) {
192
- this.handlers[extension] !== undefined && double_extension(extension);
193
- this.handlers[extension] = handle;
194
- },
195
- hash,
196
- // noops
197
- target(name, handler) {},
198
- bind(extension, handler) {},
199
- build_target: target,
200
- loader,
201
- stop() {
202
- this.get("server").stop();
203
- },
204
- mode,
205
- };
206
- };
@@ -1,10 +0,0 @@
1
- import { NOT_FOUND } from "@rcompat/http/status";
2
-
3
- /**
4
- * Render an error page
5
- * @param {string} body replacement for %body%
6
- * @param {ErrorOptions} options rendering options
7
- * @return {ResponseFn}
8
- */
9
- export default (body = "Not Found", { status = NOT_FOUND, page } = {}) =>
10
- app => app.view({ body, status, page: page ?? app.get("pages.error") });
@@ -1,10 +0,0 @@
1
- import { json } from "@rcompat/http/mime";
2
- import base from "./shared/base.js";
3
-
4
- /**
5
- * Issue a JSON response
6
- * @param {object} body object
7
- * @param {MinOptions} options rendering options
8
- * @return {ResponseFn}
9
- */
10
- export default base(json, JSON.stringify);
@@ -1,11 +0,0 @@
1
- import { FOUND } from "@rcompat/http/status";
2
-
3
- /**
4
- * Redirect request
5
- * @param {string} Location location to redirect to
6
- * @param {MinOptions} options handler options
7
- * @return {ResponseFn}
8
- */
9
- export default (Location, { status = FOUND } = {}) => app =>
10
- // no body
11
- app.respond(null, { status, headers: { Location } });
@@ -1,4 +0,0 @@
1
- import identity from "@rcompat/function/identity";
2
-
3
- export default (mediatype, mapper = identity) => (body, options) => app =>
4
- app.respond(mapper(body), app.media(mediatype, options));