acrylblends 0.4.1 → 0.5.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 (417) hide show
  1. package/LICENSE +73 -0
  2. package/README.md +325 -0
  3. package/docs/framework/README.md +51 -51
  4. package/docs/framework/UPSTREAM.md +1 -1
  5. package/docs/framework/agents/index.md +24 -0
  6. package/docs/framework/api/acryl.md +259 -0
  7. package/docs/framework/api/context.md +527 -0
  8. package/docs/framework/api/exception.md +80 -0
  9. package/docs/framework/api/index.md +12 -0
  10. package/docs/framework/api/presets.md +65 -0
  11. package/docs/framework/api/request.md +396 -0
  12. package/docs/framework/api/routing.md +303 -0
  13. package/docs/framework/{api-summary.md → api/summary.md} +19 -17
  14. package/docs/framework/concepts/benchmarks.md +26 -0
  15. package/docs/framework/concepts/developer-experience.md +5 -0
  16. package/docs/framework/concepts/middleware.md +21 -0
  17. package/docs/framework/concepts/motivation.md +14 -0
  18. package/docs/framework/concepts/routers.md +63 -0
  19. package/docs/framework/concepts/stacks.md +235 -0
  20. package/docs/framework/concepts/web-standard.md +37 -0
  21. package/docs/framework/{getting-started.md → cordis/acryl-in-a-cordis-app.md} +16 -16
  22. package/docs/framework/{concepts.md → cordis/concepts.md} +2 -2
  23. package/docs/framework/cordis/middleware.md +8 -0
  24. package/docs/framework/{migration-from-0-3.md → cordis/migration-from-0-3.md} +16 -13
  25. package/docs/framework/cordis/migration-from-0-4.md +14 -0
  26. package/docs/framework/{migration-from-dsh-webserver.md → cordis/migration-from-dsh-webserver.md} +13 -7
  27. package/docs/framework/{routing.md → cordis/mounting.md} +5 -108
  28. package/docs/framework/{node-server.md → cordis/node-server.md} +4 -4
  29. package/docs/framework/{surfaces.md → cordis/surfaces.md} +2 -2
  30. package/docs/framework/cordis/transport-and-cancellation.md +57 -0
  31. package/docs/framework/{validation.md → cordis/validation.md} +9 -9
  32. package/docs/framework/getting-started/basic.md +196 -0
  33. package/docs/framework/getting-started/bun.md +221 -0
  34. package/docs/framework/getting-started/nodejs.md +344 -0
  35. package/docs/framework/getting-started/other-runtimes.md +23 -0
  36. package/docs/framework/guides/best-practices.md +231 -0
  37. package/docs/framework/guides/create-acrylblends.md +79 -0
  38. package/docs/framework/guides/examples.md +3 -0
  39. package/docs/framework/guides/faq.md +19 -0
  40. package/docs/framework/guides/helpers.md +33 -0
  41. package/docs/framework/guides/jsx-dom.md +299 -0
  42. package/docs/framework/guides/jsx.md +440 -0
  43. package/docs/framework/guides/middleware.md +253 -0
  44. package/docs/framework/guides/rpc.md +886 -0
  45. package/docs/framework/guides/testing.md +133 -0
  46. package/docs/framework/guides/validation.md +383 -0
  47. package/docs/framework/helpers/accepts.md +60 -0
  48. package/docs/framework/helpers/adapter.md +87 -0
  49. package/docs/framework/helpers/conninfo.md +112 -0
  50. package/docs/framework/helpers/cookie.md +232 -0
  51. package/docs/framework/helpers/css.md +285 -0
  52. package/docs/framework/helpers/dev.md +67 -0
  53. package/docs/framework/helpers/factory.md +180 -0
  54. package/docs/framework/helpers/html.md +123 -0
  55. package/docs/framework/helpers/jwt.md +184 -0
  56. package/docs/framework/helpers/proxy.md +118 -0
  57. package/docs/framework/helpers/route.md +143 -0
  58. package/docs/framework/helpers/ssg.md +393 -0
  59. package/docs/framework/helpers/streaming.md +119 -0
  60. package/docs/framework/helpers/testing.md +101 -0
  61. package/docs/framework/helpers/websocket.md +215 -0
  62. package/docs/framework/middleware/builtin/basic-auth.md +165 -0
  63. package/docs/framework/middleware/builtin/bearer-auth.md +138 -0
  64. package/docs/framework/middleware/builtin/body-limit.md +71 -0
  65. package/docs/framework/middleware/builtin/cache.md +122 -0
  66. package/docs/framework/middleware/builtin/combine.md +94 -0
  67. package/docs/framework/middleware/builtin/compress.md +59 -0
  68. package/docs/framework/middleware/builtin/context-storage.md +78 -0
  69. package/docs/framework/middleware/builtin/cors.md +135 -0
  70. package/docs/framework/middleware/builtin/csrf.md +105 -0
  71. package/docs/framework/middleware/builtin/etag.md +54 -0
  72. package/docs/framework/middleware/builtin/ip-restriction.md +69 -0
  73. package/docs/framework/middleware/builtin/jsx-renderer.md +286 -0
  74. package/docs/framework/middleware/builtin/jwk.md +192 -0
  75. package/docs/framework/middleware/builtin/jwt.md +145 -0
  76. package/docs/framework/middleware/builtin/language.md +232 -0
  77. package/docs/framework/middleware/builtin/logger.md +74 -0
  78. package/docs/framework/middleware/builtin/loopback-only.md +31 -0
  79. package/docs/framework/middleware/builtin/method-not-allowed.md +48 -0
  80. package/docs/framework/middleware/builtin/method-override.md +80 -0
  81. package/docs/framework/middleware/builtin/mount.md +106 -0
  82. package/docs/framework/middleware/builtin/pretty-json.md +53 -0
  83. package/docs/framework/middleware/builtin/request-id.md +94 -0
  84. package/docs/framework/middleware/builtin/secure-headers.md +247 -0
  85. package/docs/framework/middleware/builtin/timeout.md +98 -0
  86. package/docs/framework/middleware/builtin/timing.md +101 -0
  87. package/docs/framework/middleware/builtin/trailing-slash.md +74 -0
  88. package/docs/framework/middleware/third-party.md +4 -0
  89. package/docs/framework/upstream.json +3 -3
  90. package/lib/accepts-XBuZPVRI.js +52 -0
  91. package/lib/accepts.d.ts +33 -0
  92. package/lib/accepts.js +2 -0
  93. package/lib/acryl-base.d.ts +2 -0
  94. package/lib/acryl-base.js +332 -0
  95. package/lib/adapter.d.ts +12 -0
  96. package/lib/adapter.js +37 -0
  97. package/lib/app-BM0rTCp7.js +26 -0
  98. package/lib/app-CmAYW1Al.d.ts +21 -0
  99. package/lib/basic-auth.d.ts +72 -0
  100. package/lib/basic-auth.js +95 -0
  101. package/lib/bearer-auth.d.ts +89 -0
  102. package/lib/bearer-auth.js +94 -0
  103. package/lib/body-limit.d.ts +42 -0
  104. package/lib/body-limit.js +66 -0
  105. package/lib/client-BHTr318g.js +266 -0
  106. package/lib/client.d.ts +3 -0
  107. package/lib/client.js +2 -0
  108. package/lib/combine.d.ts +85 -0
  109. package/lib/combine.js +137 -0
  110. package/lib/compose-BuW2B6PZ.js +50 -0
  111. package/lib/compress.d.ts +38 -0
  112. package/lib/compress.js +79 -0
  113. package/lib/connection-C7xgP1hP.js +24 -0
  114. package/lib/conninfo.d.ts +25 -0
  115. package/lib/conninfo.js +2 -0
  116. package/lib/constants-Dy7ZvN1H.js +4 -0
  117. package/lib/context-Bm7rI-oK.d.ts +1234 -0
  118. package/lib/context-DDO0cfuP.js +365 -0
  119. package/lib/context-storage.d.ts +38 -0
  120. package/lib/context-storage.js +52 -0
  121. package/lib/cookie-ClMaKDQf.d.ts +40 -0
  122. package/lib/cookie.d.ts +24 -0
  123. package/lib/cookie.js +82 -0
  124. package/lib/cors.d.ts +52 -0
  125. package/lib/cors.js +106 -0
  126. package/lib/csrf.d.ts +75 -0
  127. package/lib/csrf.js +101 -0
  128. package/lib/etag.d.ts +40 -0
  129. package/lib/etag.js +135 -0
  130. package/lib/factory.d.ts +35 -0
  131. package/lib/factory.js +30 -0
  132. package/lib/headers-tu2YYN8T.d.ts +11 -0
  133. package/lib/html.d.ts +6 -0
  134. package/lib/html.js +31 -0
  135. package/lib/http-exception.d.ts +57 -0
  136. package/lib/http-exception.js +54 -0
  137. package/lib/http-status-DaAwGAFL.d.ts +35 -0
  138. package/lib/index-B-3F4wt2.d.ts +12 -0
  139. package/lib/index-UTBmM3GX.d.ts +68 -0
  140. package/lib/index-oOClm_Xk.d.ts +45 -0
  141. package/lib/index.d.ts +5 -0
  142. package/lib/index.js +28 -0
  143. package/lib/ip-restriction.d.ts +68 -0
  144. package/lib/ip-restriction.js +166 -0
  145. package/lib/jwk.d.ts +52 -0
  146. package/lib/jwk.js +117 -0
  147. package/lib/jwt-BGJBw5AF.js +403 -0
  148. package/lib/jwt-Dg493Tai.d.ts +51 -0
  149. package/lib/jwt.d.ts +72 -0
  150. package/lib/jwt.js +115 -0
  151. package/lib/language.d.ts +88 -0
  152. package/lib/language.js +198 -0
  153. package/lib/logger.d.ts +22 -0
  154. package/lib/logger.js +54 -0
  155. package/lib/loopback-only.d.ts +45 -0
  156. package/lib/loopback-only.js +90 -0
  157. package/lib/method-not-allowed.d.ts +47 -0
  158. package/lib/method-not-allowed.js +82 -0
  159. package/lib/method-override.d.ts +46 -0
  160. package/lib/method-override.js +103 -0
  161. package/lib/mime-BQOYHl-l.d.ts +72 -0
  162. package/lib/node-server/conninfo.d.ts +11 -0
  163. package/lib/node-server/conninfo.js +19 -0
  164. package/lib/node-server/serve-static.d.ts +19 -0
  165. package/lib/node-server/serve-static.js +2 -0
  166. package/lib/node-server.d.ts +103 -0
  167. package/lib/node-server.js +1325 -0
  168. package/lib/powered-by.d.ts +28 -0
  169. package/lib/powered-by.js +24 -0
  170. package/lib/pretty-json.d.ts +40 -0
  171. package/lib/pretty-json.js +39 -0
  172. package/lib/reg-exp-router-DC1R3qoY.js +363 -0
  173. package/lib/request-id.d.ts +45 -0
  174. package/lib/request-id.js +34 -0
  175. package/lib/request.d.ts +2 -0
  176. package/lib/request.js +323 -0
  177. package/lib/route.d.ts +78 -0
  178. package/lib/route.js +126 -0
  179. package/lib/router/linear-router.d.ts +11 -0
  180. package/lib/router/linear-router.js +96 -0
  181. package/lib/router/pattern-router.d.ts +11 -0
  182. package/lib/router/pattern-router.js +41 -0
  183. package/lib/router/reg-exp-router.d.ts +35 -0
  184. package/lib/router/reg-exp-router.js +2 -0
  185. package/lib/router/smart-router.d.ts +15 -0
  186. package/lib/router/smart-router.js +2 -0
  187. package/lib/router/trie-router.d.ts +11 -0
  188. package/lib/router/trie-router.js +2 -0
  189. package/lib/router-CvUxUTOq.d.ts +99 -0
  190. package/lib/router.d.ts +2 -0
  191. package/lib/router.js +35 -0
  192. package/lib/schema-validator.d.ts +28 -0
  193. package/lib/schema-validator.js +22 -0
  194. package/lib/secure-headers.d.ts +125 -0
  195. package/lib/secure-headers.js +163 -0
  196. package/lib/serve-static-Dw_m6KxR.js +213 -0
  197. package/lib/serve-static.d.ts +31 -0
  198. package/lib/serve-static.js +77 -0
  199. package/lib/smart-router-C5CZ5XSM.js +49 -0
  200. package/lib/stream-CPdqZ0Fp.d.ts +34 -0
  201. package/lib/streaming-DHST3Scg.js +96 -0
  202. package/lib/streaming.d.ts +23 -0
  203. package/lib/streaming.js +2 -0
  204. package/lib/testing.d.ts +10 -0
  205. package/lib/testing.js +17 -0
  206. package/lib/timeout.d.ts +30 -0
  207. package/lib/timeout.js +42 -0
  208. package/lib/timing.d.ts +130 -0
  209. package/lib/timing.js +183 -0
  210. package/lib/trailing-slash.d.ts +91 -0
  211. package/lib/trailing-slash.js +85 -0
  212. package/lib/trie-router-CfFbapzL.js +146 -0
  213. package/lib/types-CDO6I3B0.d.ts +40 -0
  214. package/lib/types-CHesD1KG.d.ts +195 -0
  215. package/lib/types-CwrQjlaM.d.ts +105 -0
  216. package/lib/types-DR95J00T.d.ts +29 -0
  217. package/lib/types.d.ts +2 -0
  218. package/lib/types.js +4 -0
  219. package/lib/utils/accept.d.ts +9 -0
  220. package/lib/utils/accept.js +193 -0
  221. package/lib/utils/basic-auth.d.ts +8 -0
  222. package/lib/utils/basic-auth.js +20 -0
  223. package/lib/utils/body.d.ts +2 -0
  224. package/lib/utils/body.js +94 -0
  225. package/lib/utils/buffer.d.ts +19 -0
  226. package/lib/utils/buffer.js +51 -0
  227. package/lib/utils/color.d.ts +24 -0
  228. package/lib/utils/color.js +37 -0
  229. package/lib/utils/compress.d.ts +11 -0
  230. package/lib/utils/compress.js +11 -0
  231. package/lib/utils/concurrent.d.ts +17 -0
  232. package/lib/utils/concurrent.js +30 -0
  233. package/lib/utils/constants.d.ts +7 -0
  234. package/lib/utils/constants.js +7 -0
  235. package/lib/utils/cookie.d.ts +2 -0
  236. package/lib/utils/cookie.js +125 -0
  237. package/lib/utils/crypto.d.ts +14 -0
  238. package/lib/utils/crypto.js +34 -0
  239. package/lib/utils/encode.d.ts +11 -0
  240. package/lib/utils/encode.js +33 -0
  241. package/lib/utils/filepath.d.ts +14 -0
  242. package/lib/utils/filepath.js +25 -0
  243. package/lib/utils/handler.d.ts +9 -0
  244. package/lib/utils/handler.js +12 -0
  245. package/lib/utils/headers.d.ts +2 -0
  246. package/lib/utils/headers.js +1 -0
  247. package/lib/utils/html.d.ts +46 -0
  248. package/lib/utils/html.js +103 -0
  249. package/lib/utils/http-status.d.ts +2 -0
  250. package/lib/utils/http-status.js +1 -0
  251. package/lib/utils/ipaddr.d.ts +56 -0
  252. package/lib/utils/ipaddr.js +238 -0
  253. package/lib/utils/jwt.d.ts +24 -0
  254. package/lib/utils/jwt.js +2 -0
  255. package/lib/utils/mime.d.ts +2 -0
  256. package/lib/utils/mime.js +77 -0
  257. package/lib/utils/stream.d.ts +2 -0
  258. package/lib/utils/stream.js +88 -0
  259. package/lib/utils/types.d.ts +2 -0
  260. package/lib/utils/types.js +1 -0
  261. package/lib/utils/url.d.ts +46 -0
  262. package/lib/utils/url.js +197 -0
  263. package/lib/utils-dw8lxqjL.js +4 -0
  264. package/lib/validator-D84mq-dO.js +65 -0
  265. package/lib/validator.d.ts +42 -0
  266. package/lib/validator.js +2 -0
  267. package/lib/ws.d.ts +2 -0
  268. package/lib/ws.js +53 -0
  269. package/package.json +312 -14
  270. package/plugins/acryl-inspect/src/service.ts +2 -2
  271. package/plugins/acryl-inspect/tests/service.spec.ts +3 -3
  272. package/plugins/acryl-inspect/upstream.json +2 -2
  273. package/plugins/acryl-node-server/tests/adapter/app.ts +2 -2
  274. package/plugins/acryl-node-server/tests/adapter/assets/static/acryl.html +1 -1
  275. package/plugins/acryl-node-server/tests/adapter/assets/static/index.html +1 -1
  276. package/plugins/acryl-node-server/tests/adapter/conninfo.test.ts +2 -2
  277. package/plugins/acryl-node-server/tests/adapter/content-length.test.ts +4 -4
  278. package/plugins/acryl-node-server/tests/adapter/early-hints.test.ts +5 -5
  279. package/plugins/acryl-node-server/tests/adapter/request-client-disconnect.test.ts +2 -2
  280. package/plugins/acryl-node-server/tests/adapter/serve-static.test.ts +20 -20
  281. package/plugins/acryl-node-server/tests/adapter/server-socket.test.ts +2 -2
  282. package/plugins/acryl-node-server/tests/adapter/server.test.ts +60 -50
  283. package/plugins/acryl-node-server/tests/adapter/utils/response.test.ts +4 -4
  284. package/plugins/acryl-node-server/tests/adapter/websocket.test.ts +9 -9
  285. package/plugins/acryl-node-server/tests/server.spec.ts +6 -6
  286. package/plugins/acryl-node-server/upstream.json +2 -2
  287. package/plugins/acryl-router/src/client.ts +1 -1
  288. package/plugins/acryl-router/src/connection.ts +2 -2
  289. package/plugins/acryl-router/src/core/app-base.ts +29 -29
  290. package/plugins/acryl-router/src/core/app.test.ts +175 -175
  291. package/plugins/acryl-router/src/core/app.ts +8 -8
  292. package/plugins/acryl-router/src/core/client/client.test.ts +76 -76
  293. package/plugins/acryl-router/src/core/client/client.ts +2 -2
  294. package/plugins/acryl-router/src/core/client/fetch-result-please.ts +1 -1
  295. package/plugins/acryl-router/src/core/client/index.ts +1 -1
  296. package/plugins/acryl-router/src/core/client/types.test.ts +6 -6
  297. package/plugins/acryl-router/src/core/client/types.ts +16 -16
  298. package/plugins/acryl-router/src/core/client/utils.test.ts +2 -2
  299. package/plugins/acryl-router/src/core/context.test.ts +4 -4
  300. package/plugins/acryl-router/src/core/context.ts +6 -6
  301. package/plugins/acryl-router/src/core/helper/accepts/accepts.test.ts +3 -3
  302. package/plugins/acryl-router/src/core/helper/accepts/index.ts +1 -1
  303. package/plugins/acryl-router/src/core/helper/adapter/index.test.ts +6 -6
  304. package/plugins/acryl-router/src/core/helper/adapter/index.ts +1 -1
  305. package/plugins/acryl-router/src/core/helper/conninfo/index.ts +1 -1
  306. package/plugins/acryl-router/src/core/helper/cookie/index.test.ts +8 -8
  307. package/plugins/acryl-router/src/core/helper/cookie/index.ts +1 -1
  308. package/plugins/acryl-router/src/core/helper/factory/index.test.ts +9 -9
  309. package/plugins/acryl-router/src/core/helper/factory/index.ts +10 -10
  310. package/plugins/acryl-router/src/core/helper/html/index.test.ts +4 -4
  311. package/plugins/acryl-router/src/core/helper/html/index.ts +1 -1
  312. package/plugins/acryl-router/src/core/helper/route/index.test.ts +7 -7
  313. package/plugins/acryl-router/src/core/helper/route/index.ts +8 -8
  314. package/plugins/acryl-router/src/core/helper/streaming/index.ts +1 -1
  315. package/plugins/acryl-router/src/core/helper/testing/index.test.ts +6 -6
  316. package/plugins/acryl-router/src/core/helper/testing/index.ts +4 -4
  317. package/plugins/acryl-router/src/core/helper/websocket/index.ts +2 -1
  318. package/plugins/acryl-router/src/core/http-exception.ts +1 -1
  319. package/plugins/acryl-router/src/core/index.ts +9 -9
  320. package/plugins/acryl-router/src/core/middleware/basic-auth/index.test.ts +6 -6
  321. package/plugins/acryl-router/src/core/middleware/basic-auth/index.ts +3 -3
  322. package/plugins/acryl-router/src/core/middleware/bearer-auth/index.test.ts +5 -5
  323. package/plugins/acryl-router/src/core/middleware/bearer-auth/index.ts +3 -3
  324. package/plugins/acryl-router/src/core/middleware/body-limit/index.test.ts +6 -6
  325. package/plugins/acryl-router/src/core/middleware/body-limit/index.ts +3 -3
  326. package/plugins/acryl-router/src/core/middleware/combine/index.test.ts +9 -9
  327. package/plugins/acryl-router/src/core/middleware/combine/index.ts +7 -7
  328. package/plugins/acryl-router/src/core/middleware/compress/index.test.ts +9 -9
  329. package/plugins/acryl-router/src/core/middleware/compress/index.ts +3 -3
  330. package/plugins/acryl-router/src/core/middleware/context-storage/index.test.ts +5 -5
  331. package/plugins/acryl-router/src/core/middleware/context-storage/index.ts +4 -4
  332. package/plugins/acryl-router/src/core/middleware/cors/index.test.ts +7 -7
  333. package/plugins/acryl-router/src/core/middleware/cors/index.ts +3 -3
  334. package/plugins/acryl-router/src/core/middleware/csrf/index.test.ts +10 -10
  335. package/plugins/acryl-router/src/core/middleware/csrf/index.ts +3 -3
  336. package/plugins/acryl-router/src/core/middleware/etag/index.test.ts +42 -42
  337. package/plugins/acryl-router/src/core/middleware/etag/index.ts +4 -4
  338. package/plugins/acryl-router/src/core/middleware/ip-restriction/index.test.ts +4 -4
  339. package/plugins/acryl-router/src/core/middleware/ip-restriction/index.ts +6 -6
  340. package/plugins/acryl-router/src/core/middleware/jwk/index.test.ts +16 -16
  341. package/plugins/acryl-router/src/core/middleware/jwk/jwk.ts +7 -6
  342. package/plugins/acryl-router/src/core/middleware/jwt/index.test.ts +16 -16
  343. package/plugins/acryl-router/src/core/middleware/jwt/jwt.ts +4 -3
  344. package/plugins/acryl-router/src/core/middleware/language/index.test.ts +3 -3
  345. package/plugins/acryl-router/src/core/middleware/language/language.ts +3 -3
  346. package/plugins/acryl-router/src/core/middleware/logger/index.test.ts +5 -5
  347. package/plugins/acryl-router/src/core/middleware/logger/index.ts +4 -4
  348. package/plugins/acryl-router/src/core/middleware/method-not-allowed/index.test.ts +24 -24
  349. package/plugins/acryl-router/src/core/middleware/method-not-allowed/index.ts +8 -8
  350. package/plugins/acryl-router/src/core/middleware/method-override/index.test.ts +5 -5
  351. package/plugins/acryl-router/src/core/middleware/method-override/index.ts +6 -6
  352. package/plugins/acryl-router/src/core/middleware/powered-by/index.test.ts +4 -4
  353. package/plugins/acryl-router/src/core/middleware/powered-by/index.ts +6 -6
  354. package/plugins/acryl-router/src/core/middleware/pretty-json/index.test.ts +30 -30
  355. package/plugins/acryl-router/src/core/middleware/pretty-json/index.ts +4 -4
  356. package/plugins/acryl-router/src/core/middleware/request-id/index.test.ts +15 -15
  357. package/plugins/acryl-router/src/core/middleware/request-id/request-id.ts +3 -3
  358. package/plugins/acryl-router/src/core/middleware/secure-headers/index.test.ts +35 -35
  359. package/plugins/acryl-router/src/core/middleware/secure-headers/secure-headers.ts +3 -3
  360. package/plugins/acryl-router/src/core/middleware/serve-static/index.test.ts +23 -23
  361. package/plugins/acryl-router/src/core/middleware/serve-static/index.ts +1 -1
  362. package/plugins/acryl-router/src/core/middleware/timeout/index.test.ts +2 -2
  363. package/plugins/acryl-router/src/core/middleware/timeout/index.ts +3 -3
  364. package/plugins/acryl-router/src/core/middleware/timing/index.test.ts +14 -14
  365. package/plugins/acryl-router/src/core/middleware/timing/timing.ts +3 -3
  366. package/plugins/acryl-router/src/core/middleware/trailing-slash/index.test.ts +7 -7
  367. package/plugins/acryl-router/src/core/middleware/trailing-slash/index.ts +7 -7
  368. package/plugins/acryl-router/src/core/request.test.ts +42 -42
  369. package/plugins/acryl-router/src/core/request.ts +6 -6
  370. package/plugins/acryl-router/src/core/router/linear-router/index.ts +1 -1
  371. package/plugins/acryl-router/src/core/router/pattern-router/index.ts +1 -1
  372. package/plugins/acryl-router/src/core/router/reg-exp-router/index.ts +1 -1
  373. package/plugins/acryl-router/src/core/router/smart-router/index.ts +1 -1
  374. package/plugins/acryl-router/src/core/router/trie-router/index.ts +1 -1
  375. package/plugins/acryl-router/src/core/types.test.ts +115 -115
  376. package/plugins/acryl-router/src/core/types.ts +72 -72
  377. package/plugins/acryl-router/src/core/utils/body.ts +8 -8
  378. package/plugins/acryl-router/src/core/utils/html.ts +1 -1
  379. package/plugins/acryl-router/src/core/utils/jwt/jws.ts +3 -3
  380. package/plugins/acryl-router/src/core/utils/jwt/jwt.test.ts +2 -2
  381. package/plugins/acryl-router/src/core/utils/jwt/jwt.ts +3 -3
  382. package/plugins/acryl-router/src/core/utils/jwt/types.ts +1 -1
  383. package/plugins/acryl-router/src/core/utils/types.ts +42 -0
  384. package/plugins/acryl-router/src/core/utils/url.test.ts +2 -2
  385. package/plugins/acryl-router/src/core/validator/index.ts +1 -1
  386. package/plugins/acryl-router/src/core/validator/validator.test.ts +28 -28
  387. package/plugins/acryl-router/src/deprecated.ts +15 -0
  388. package/plugins/acryl-router/src/index.ts +3 -2
  389. package/plugins/acryl-router/src/service.ts +10 -10
  390. package/plugins/acryl-router/tests/docs-examples.spec.ts +11 -11
  391. package/plugins/acryl-router/tests/live-install.spec.ts +2 -2
  392. package/plugins/acryl-router/tests/loader.spec.ts +3 -3
  393. package/plugins/acryl-router/tests/loopback-only.spec.ts +4 -4
  394. package/plugins/acryl-router/tests/no-dom/consumer.ts +11 -0
  395. package/plugins/acryl-router/tests/no-dom/tsconfig.json +13 -0
  396. package/plugins/acryl-router/tests/service.spec.ts +23 -23
  397. package/plugins/acryl-router/upstream.json +3 -3
  398. package/plugins/acryl-router-http/tests/adapter.spec.ts +3 -3
  399. package/plugins/acryl-router-http/tests/surfaces.spec.ts +2 -2
  400. package/plugins/acryl-router-http/upstream.json +2 -2
  401. package/plugins/acryl-state/src/service.ts +2 -2
  402. package/plugins/acryl-state/upstream.json +2 -2
  403. package/plugins/builder/script.ts +2 -2
  404. package/plugins/extensions/resolve.ts +70 -10
  405. package/plugins/openai/prompt.ts +5 -5
  406. package/shared/AGENTS.core.md +16 -9
  407. package/templates/agent/src/routes.ts +2 -2
  408. package/templates/agent/test/model.test.ts +2 -2
  409. package/templates/agent/tsconfig.json +40 -0
  410. package/templates/blank/src/routes.ts +2 -2
  411. package/templates/todo/src/todo.ts +2 -2
  412. package/templates/todo/upstream.json +2 -2
  413. package/docs/framework/context.md +0 -129
  414. package/docs/framework/helpers.md +0 -118
  415. package/docs/framework/middleware.md +0 -154
  416. package/docs/framework/request.md +0 -106
  417. /package/docs/framework/{plugin-lifecycle.md → cordis/plugin-lifecycle.md} +0 -0
@@ -0,0 +1,365 @@
1
+ import { AcrylRequest } from "./request.js";
2
+ import { HtmlEscapedCallbackPhase, resolveCallback } from "./utils/html.js";
3
+ //#region ../../plugins/acryl-router/src/core/context.ts
4
+ const TEXT_PLAIN = "text/plain; charset=UTF-8";
5
+ const setDefaultContentType = (contentType, headers) => {
6
+ return {
7
+ "Content-Type": contentType,
8
+ ...headers
9
+ };
10
+ };
11
+ const createResponseInstance = (body, init) => new Response(body, init);
12
+ var Context = class {
13
+ #rawRequest;
14
+ #req;
15
+ /**
16
+ * `.env` can get bindings (environment variables, secrets, KV namespaces, D1 database, R2 bucket etc.) in Cloudflare Workers.
17
+ *
18
+ *
19
+ * @example
20
+ * ```ts
21
+ * // Environment object for Cloudflare Workers
22
+ * app.get('*', async c => {
23
+ * const counter = c.env.COUNTER
24
+ * })
25
+ * ```
26
+ */
27
+ env = {};
28
+ #var;
29
+ finalized = false;
30
+ /**
31
+ * `.error` can get the error object from the middleware if the Handler throws an error.
32
+ *
33
+ *
34
+ * @example
35
+ * ```ts
36
+ * app.use('*', async (c, next) => {
37
+ * await next()
38
+ * if (c.error) {
39
+ * // do something...
40
+ * }
41
+ * })
42
+ * ```
43
+ */
44
+ error;
45
+ #status;
46
+ #executionCtx;
47
+ #res;
48
+ #layout;
49
+ #renderer;
50
+ #notFoundHandler;
51
+ #preparedHeaders;
52
+ #matchResult;
53
+ #path;
54
+ /**
55
+ * Creates an instance of the Context class.
56
+ *
57
+ * @param req - The Request object.
58
+ * @param options - Optional configuration options for the context.
59
+ */
60
+ constructor(req, options) {
61
+ this.#rawRequest = req;
62
+ if (options) {
63
+ this.#executionCtx = options.executionCtx;
64
+ this.env = options.env;
65
+ this.#notFoundHandler = options.notFoundHandler;
66
+ this.#path = options.path;
67
+ this.#matchResult = options.matchResult;
68
+ }
69
+ }
70
+ /**
71
+ * `.req` is the instance of {@link AcrylRequest}.
72
+ */
73
+ get req() {
74
+ this.#req ??= new AcrylRequest(this.#rawRequest, this.#path, this.#matchResult);
75
+ return this.#req;
76
+ }
77
+ /**
78
+ * The FetchEvent associated with the current request.
79
+ *
80
+ * @throws Will throw an error if the context does not have a FetchEvent.
81
+ */
82
+ get event() {
83
+ if (this.#executionCtx && "respondWith" in this.#executionCtx) return this.#executionCtx;
84
+ else throw Error("This context has no FetchEvent");
85
+ }
86
+ /**
87
+ * The ExecutionContext associated with the current request.
88
+ *
89
+ * @throws Will throw an error if the context does not have an ExecutionContext.
90
+ */
91
+ get executionCtx() {
92
+ if (this.#executionCtx) return this.#executionCtx;
93
+ else throw Error("This context has no ExecutionContext");
94
+ }
95
+ /**
96
+ * The Response object for the current request.
97
+ */
98
+ get res() {
99
+ return this.#res ||= createResponseInstance(null, { headers: this.#preparedHeaders ??= new Headers() });
100
+ }
101
+ /**
102
+ * Sets the Response object for the current request.
103
+ *
104
+ * @param _res - The Response object to set.
105
+ */
106
+ set res(_res) {
107
+ if (this.#res && _res) {
108
+ _res = createResponseInstance(_res.body, _res);
109
+ for (const [k, v] of this.#res.headers.entries()) {
110
+ if (k === "content-type") continue;
111
+ if (k === "set-cookie") {
112
+ const cookies = this.#res.headers.getSetCookie();
113
+ _res.headers.delete("set-cookie");
114
+ for (const cookie of cookies) _res.headers.append("set-cookie", cookie);
115
+ } else _res.headers.set(k, v);
116
+ }
117
+ }
118
+ this.#res = _res;
119
+ this.finalized = true;
120
+ }
121
+ /**
122
+ * `.render()` can create a response within a layout.
123
+ *
124
+ *
125
+ * @example
126
+ * ```ts
127
+ * app.get('/', (c) => {
128
+ * return c.render('Hello!')
129
+ * })
130
+ * ```
131
+ */
132
+ render = (...args) => {
133
+ this.#renderer ??= (content) => this.html(content);
134
+ return this.#renderer(...args);
135
+ };
136
+ /**
137
+ * Sets the layout for the response.
138
+ *
139
+ * @param layout - The layout to set.
140
+ * @returns The layout function.
141
+ */
142
+ setLayout = (layout) => this.#layout = layout;
143
+ /**
144
+ * Gets the current layout for the response.
145
+ *
146
+ * @returns The current layout function.
147
+ */
148
+ getLayout = () => this.#layout;
149
+ /**
150
+ * `.setRenderer()` can set the layout in the custom middleware.
151
+ *
152
+ *
153
+ * @example
154
+ * ```tsx
155
+ * app.use('*', async (c, next) => {
156
+ * c.setRenderer((content) => {
157
+ * return c.html(
158
+ * <html>
159
+ * <body>
160
+ * <p>{content}</p>
161
+ * </body>
162
+ * </html>
163
+ * )
164
+ * })
165
+ * await next()
166
+ * })
167
+ * ```
168
+ */
169
+ setRenderer = (renderer) => {
170
+ this.#renderer = renderer;
171
+ };
172
+ /**
173
+ * `.header()` can set headers.
174
+ *
175
+ *
176
+ * @example
177
+ * ```ts
178
+ * app.get('/welcome', (c) => {
179
+ * // Set headers
180
+ * c.header('X-Message', 'Hello!')
181
+ * c.header('Content-Type', 'text/plain')
182
+ *
183
+ * // Append multiple headers using the append option (e.g. Vary)
184
+ * c.header('Vary', 'Accept-Encoding', { append: true })
185
+ * c.header('Vary', 'User-Agent', { append: true })
186
+ *
187
+ * return c.body('Thank you for coming')
188
+ * })
189
+ * ```
190
+ */
191
+ header = (name, value, options) => {
192
+ if (this.finalized) this.#res = createResponseInstance(this.#res.body, this.#res);
193
+ const headers = this.#res ? this.#res.headers : this.#preparedHeaders ??= new Headers();
194
+ if (value === void 0) headers.delete(name);
195
+ else if (options?.append) headers.append(name, value);
196
+ else headers.set(name, value);
197
+ };
198
+ status = (status) => {
199
+ this.#status = status;
200
+ };
201
+ /**
202
+ * `.set()` can set the value specified by the key.
203
+ *
204
+ *
205
+ * @example
206
+ * ```ts
207
+ * app.use('*', async (c, next) => {
208
+ * c.set('message', 'Acryl is hot!!')
209
+ * await next()
210
+ * })
211
+ * ```
212
+ */
213
+ set = (key, value) => {
214
+ this.#var ??= /* @__PURE__ */ new Map();
215
+ this.#var.set(key, value);
216
+ };
217
+ /**
218
+ * `.get()` can use the value specified by the key.
219
+ *
220
+ *
221
+ * @example
222
+ * ```ts
223
+ * app.get('/', (c) => {
224
+ * const message = c.get('message')
225
+ * return c.text(`The message is "${message}"`)
226
+ * })
227
+ * ```
228
+ */
229
+ get = (key) => {
230
+ return this.#var ? this.#var.get(key) : void 0;
231
+ };
232
+ /**
233
+ * `.var` can access the value of a variable.
234
+ *
235
+ *
236
+ * @example
237
+ * ```ts
238
+ * const result = c.var.client.oneMethod()
239
+ * ```
240
+ */
241
+ get var() {
242
+ if (!this.#var) return {};
243
+ return Object.fromEntries(this.#var);
244
+ }
245
+ #newResponse(data, arg, headers) {
246
+ let responseHeaders = this.#res ? new Headers(this.#res.headers) : this.#preparedHeaders;
247
+ if (typeof arg === "object" && arg.headers) {
248
+ responseHeaders ??= new Headers();
249
+ for (const [key, value] of new Headers(arg.headers)) if (key === "set-cookie") responseHeaders.append(key, value);
250
+ else responseHeaders.set(key, value);
251
+ }
252
+ if (headers) {
253
+ if (!responseHeaders) {
254
+ let count = 0;
255
+ for (const k in headers) if (++count > 1 || typeof headers[k] !== "string") {
256
+ responseHeaders = new Headers();
257
+ break;
258
+ }
259
+ }
260
+ if (responseHeaders) for (const k in headers) {
261
+ const v = headers[k];
262
+ if (typeof v === "string") responseHeaders.set(k, v);
263
+ else {
264
+ responseHeaders.delete(k);
265
+ for (const v2 of v) responseHeaders.append(k, v2);
266
+ }
267
+ }
268
+ }
269
+ const status = typeof arg === "number" ? arg : arg?.status ?? this.#status;
270
+ return createResponseInstance(data, {
271
+ status,
272
+ headers: responseHeaders ?? headers
273
+ });
274
+ }
275
+ newResponse = (...args) => this.#newResponse(...args);
276
+ /**
277
+ * `.body()` can return the HTTP response.
278
+ * You can set headers with `.header()` and set HTTP status code with `.status`.
279
+ * This can also be set in `.text()`, `.json()` and so on.
280
+ *
281
+ *
282
+ * @example
283
+ * ```ts
284
+ * app.get('/welcome', (c) => {
285
+ * // Set headers
286
+ * c.header('X-Message', 'Hello!')
287
+ * c.header('Content-Type', 'text/plain')
288
+ * // Set HTTP status code
289
+ * c.status(201)
290
+ *
291
+ * // Return the response body
292
+ * return c.body('Thank you for coming')
293
+ * })
294
+ * ```
295
+ */
296
+ body = (data, arg, headers) => this.#newResponse(data, arg, headers);
297
+ /**
298
+ * `.text()` can render text as `Content-Type:text/plain`.
299
+ *
300
+ *
301
+ * @example
302
+ * ```ts
303
+ * app.get('/say', (c) => {
304
+ * return c.text('Hello!')
305
+ * })
306
+ * ```
307
+ */
308
+ text = (text, arg, headers) => {
309
+ return !this.#preparedHeaders && !this.#status && !arg && !headers && !this.finalized ? new Response(text) : this.#newResponse(text, arg, setDefaultContentType(TEXT_PLAIN, headers));
310
+ };
311
+ /**
312
+ * `.json()` can render JSON as `Content-Type:application/json`.
313
+ *
314
+ *
315
+ * @example
316
+ * ```ts
317
+ * app.get('/api', (c) => {
318
+ * return c.json({ message: 'Hello!' })
319
+ * })
320
+ * ```
321
+ */
322
+ json = (object, arg, headers) => {
323
+ return this.#newResponse(JSON.stringify(object), arg, setDefaultContentType("application/json", headers));
324
+ };
325
+ html = (html, arg, headers) => {
326
+ const res = (html) => this.#newResponse(html, arg, setDefaultContentType("text/html; charset=UTF-8", headers));
327
+ return typeof html === "object" ? resolveCallback(html, HtmlEscapedCallbackPhase.Stringify, false, {}).then(res) : res(html);
328
+ };
329
+ /**
330
+ * `.redirect()` can Redirect, default status code is 302.
331
+ *
332
+ *
333
+ * @example
334
+ * ```ts
335
+ * app.get('/redirect', (c) => {
336
+ * return c.redirect('/')
337
+ * })
338
+ * app.get('/redirect-permanently', (c) => {
339
+ * return c.redirect('/', 301)
340
+ * })
341
+ * ```
342
+ */
343
+ redirect = (location, status) => {
344
+ const locationString = String(location);
345
+ this.header("Location", !/[^\x00-\xFF]/.test(locationString) ? locationString : encodeURI(locationString));
346
+ return this.newResponse(null, status ?? 302);
347
+ };
348
+ /**
349
+ * `.notFound()` can return the Not Found Response.
350
+ *
351
+ *
352
+ * @example
353
+ * ```ts
354
+ * app.get('/notfound', (c) => {
355
+ * return c.notFound()
356
+ * })
357
+ * ```
358
+ */
359
+ notFound = () => {
360
+ this.#notFoundHandler ??= () => createResponseInstance();
361
+ return this.#notFoundHandler(this);
362
+ };
363
+ };
364
+ //#endregion
365
+ export { TEXT_PLAIN as n, Context as t };
@@ -0,0 +1,38 @@
1
+ import { I as MiddlewareHandler, _ as Env, t as Context } from "./context-Bm7rI-oK.js";
2
+
3
+ //#region ../../plugins/acryl-router/src/core/middleware/context-storage/index.d.ts
4
+ /**
5
+ * Context Storage Middleware for Acryl.
6
+ *
7
+ *
8
+ * @returns {MiddlewareHandler} The middleware handler function.
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * type Env = {
13
+ * Variables: {
14
+ * message: string
15
+ * }
16
+ * }
17
+ *
18
+ * const app = new Acryl<Env>()
19
+ *
20
+ * app.use(contextStorage())
21
+ *
22
+ * app.use(async (c, next) => {
23
+ * c.set('message', 'Acryl is hot!!')
24
+ * await next()
25
+ * })
26
+ *
27
+ * app.get('/', async (c) => c.text(getMessage()))
28
+ *
29
+ * const getMessage = () => {
30
+ * return getContext<Env>().var.message
31
+ * }
32
+ * ```
33
+ */
34
+ declare const contextStorage: () => MiddlewareHandler;
35
+ declare const tryGetContext: <E extends Env = Env>() => Context<E> | undefined;
36
+ declare const getContext: <E extends Env = Env>() => Context<E>;
37
+ //#endregion
38
+ export { contextStorage, getContext, tryGetContext };
@@ -0,0 +1,52 @@
1
+ import { AsyncLocalStorage } from "node:async_hooks";
2
+ //#region ../../plugins/acryl-router/src/core/middleware/context-storage/index.ts
3
+ /**
4
+ * @module
5
+ * Context Storage Middleware for Acryl.
6
+ */
7
+ const asyncLocalStorage = new AsyncLocalStorage();
8
+ /**
9
+ * Context Storage Middleware for Acryl.
10
+ *
11
+ *
12
+ * @returns {MiddlewareHandler} The middleware handler function.
13
+ *
14
+ * @example
15
+ * ```ts
16
+ * type Env = {
17
+ * Variables: {
18
+ * message: string
19
+ * }
20
+ * }
21
+ *
22
+ * const app = new Acryl<Env>()
23
+ *
24
+ * app.use(contextStorage())
25
+ *
26
+ * app.use(async (c, next) => {
27
+ * c.set('message', 'Acryl is hot!!')
28
+ * await next()
29
+ * })
30
+ *
31
+ * app.get('/', async (c) => c.text(getMessage()))
32
+ *
33
+ * const getMessage = () => {
34
+ * return getContext<Env>().var.message
35
+ * }
36
+ * ```
37
+ */
38
+ const contextStorage = () => {
39
+ return async function contextStorage(c, next) {
40
+ await asyncLocalStorage.run(c, next);
41
+ };
42
+ };
43
+ const tryGetContext = () => {
44
+ return asyncLocalStorage.getStore();
45
+ };
46
+ const getContext = () => {
47
+ const context = tryGetContext();
48
+ if (!context) throw new Error("Context is not available");
49
+ return context;
50
+ };
51
+ //#endregion
52
+ export { contextStorage, getContext, tryGetContext };
@@ -0,0 +1,40 @@
1
+ import { n as BufferSource } from "./types-CwrQjlaM.js";
2
+
3
+ //#region ../../plugins/acryl-router/src/core/utils/cookie.d.ts
4
+ type Cookie = Record<string, string>;
5
+ type SignedCookie = Record<string, string | false>;
6
+ type PartitionedCookieConstraint = {
7
+ partitioned: true;
8
+ secure: true;
9
+ } | {
10
+ partitioned?: boolean;
11
+ secure?: boolean;
12
+ };
13
+ type SecureCookieConstraint = {
14
+ secure: true;
15
+ };
16
+ type HostCookieConstraint = {
17
+ secure: true;
18
+ path: '/';
19
+ domain?: undefined;
20
+ };
21
+ type CookieOptions = {
22
+ domain?: string;
23
+ expires?: Date;
24
+ httpOnly?: boolean;
25
+ maxAge?: number;
26
+ path?: string;
27
+ secure?: boolean;
28
+ sameSite?: 'Strict' | 'Lax' | 'None' | 'strict' | 'lax' | 'none';
29
+ partitioned?: boolean;
30
+ priority?: 'Low' | 'Medium' | 'High' | 'low' | 'medium' | 'high';
31
+ prefix?: CookiePrefixOptions;
32
+ } & PartitionedCookieConstraint;
33
+ type CookiePrefixOptions = 'host' | 'secure';
34
+ type CookieConstraint<Name> = Name extends `__Secure-${string}` ? CookieOptions & SecureCookieConstraint : Name extends `__Host-${string}` ? CookieOptions & HostCookieConstraint : CookieOptions;
35
+ declare const parse: (cookie: string, name?: string) => Cookie;
36
+ declare const parseSigned: (cookie: string, secret: string | BufferSource, name?: string) => Promise<SignedCookie>;
37
+ declare const serialize: <Name extends string>(name: Name, value: string, opt?: CookieConstraint<Name>) => string;
38
+ declare const serializeSigned: (name: string, value: string, secret: string | BufferSource, opt?: CookieOptions) => Promise<string>;
39
+ //#endregion
40
+ export { SignedCookie as a, serialize as c, CookiePrefixOptions as i, serializeSigned as l, CookieConstraint as n, parse as o, CookieOptions as r, parseSigned as s, Cookie as t };
@@ -0,0 +1,24 @@
1
+ import { t as Context } from "./context-Bm7rI-oK.js";
2
+ import { n as BufferSource } from "./types-CwrQjlaM.js";
3
+ import { a as SignedCookie, i as CookiePrefixOptions, r as CookieOptions, t as Cookie } from "./cookie-ClMaKDQf.js";
4
+
5
+ //#region ../../plugins/acryl-router/src/core/helper/cookie/index.d.ts
6
+ interface GetCookie {
7
+ (c: Context, key: string): string | undefined;
8
+ (c: Context): Cookie;
9
+ (c: Context, key: string, prefixOptions?: CookiePrefixOptions): string | undefined;
10
+ }
11
+ interface GetSignedCookie {
12
+ (c: Context, secret: string | BufferSource, key: string): Promise<string | undefined | false>;
13
+ (c: Context, secret: string | BufferSource): Promise<SignedCookie>;
14
+ (c: Context, secret: string | BufferSource, key: string, prefixOptions?: CookiePrefixOptions): Promise<string | undefined | false>;
15
+ }
16
+ declare const getCookie: GetCookie;
17
+ declare const getSignedCookie: GetSignedCookie;
18
+ declare const generateCookie: (name: string, value: string, opt?: CookieOptions) => string;
19
+ declare const setCookie: (c: Context, name: string, value: string, opt?: CookieOptions) => void;
20
+ declare const generateSignedCookie: (name: string, value: string, secret: string | BufferSource, opt?: CookieOptions) => Promise<string>;
21
+ declare const setSignedCookie: (c: Context, name: string, value: string, secret: string | BufferSource, opt?: CookieOptions) => Promise<void>;
22
+ declare const deleteCookie: (c: Context, name: string, opt?: CookieOptions) => string | undefined;
23
+ //#endregion
24
+ export { deleteCookie, generateCookie, generateSignedCookie, getCookie, getSignedCookie, setCookie, setSignedCookie };
package/lib/cookie.js ADDED
@@ -0,0 +1,82 @@
1
+ import { parse, parseSigned, serialize, serializeSigned } from "./utils/cookie.js";
2
+ //#region ../../plugins/acryl-router/src/core/helper/cookie/index.ts
3
+ const getCookie = (c, key, prefix) => {
4
+ const cookie = c.req.raw.headers.get("Cookie");
5
+ if (typeof key === "string") {
6
+ if (!cookie) return;
7
+ let finalKey = key;
8
+ if (prefix === "secure") finalKey = "__Secure-" + key;
9
+ else if (prefix === "host") finalKey = "__Host-" + key;
10
+ return parse(cookie, finalKey)[finalKey];
11
+ }
12
+ if (!cookie) return {};
13
+ return parse(cookie);
14
+ };
15
+ const getSignedCookie = async (c, secret, key, prefix) => {
16
+ const cookie = c.req.raw.headers.get("Cookie");
17
+ if (typeof key === "string") {
18
+ if (!cookie) return;
19
+ let finalKey = key;
20
+ if (prefix === "secure") finalKey = "__Secure-" + key;
21
+ else if (prefix === "host") finalKey = "__Host-" + key;
22
+ return (await parseSigned(cookie, secret, finalKey))[finalKey];
23
+ }
24
+ if (!cookie) return {};
25
+ return await parseSigned(cookie, secret);
26
+ };
27
+ const generateCookie = (name, value, opt) => {
28
+ let cookie;
29
+ if (opt?.prefix === "secure") cookie = serialize("__Secure-" + name, value, {
30
+ path: "/",
31
+ ...opt,
32
+ secure: true
33
+ });
34
+ else if (opt?.prefix === "host") cookie = serialize("__Host-" + name, value, {
35
+ ...opt,
36
+ path: "/",
37
+ secure: true,
38
+ domain: void 0
39
+ });
40
+ else cookie = serialize(name, value, {
41
+ path: "/",
42
+ ...opt
43
+ });
44
+ return cookie;
45
+ };
46
+ const setCookie = (c, name, value, opt) => {
47
+ const cookie = generateCookie(name, value, opt);
48
+ c.header("Set-Cookie", cookie, { append: true });
49
+ };
50
+ const generateSignedCookie = async (name, value, secret, opt) => {
51
+ let cookie;
52
+ if (opt?.prefix === "secure") cookie = await serializeSigned("__Secure-" + name, value, secret, {
53
+ path: "/",
54
+ ...opt,
55
+ secure: true
56
+ });
57
+ else if (opt?.prefix === "host") cookie = await serializeSigned("__Host-" + name, value, secret, {
58
+ ...opt,
59
+ path: "/",
60
+ secure: true,
61
+ domain: void 0
62
+ });
63
+ else cookie = await serializeSigned(name, value, secret, {
64
+ path: "/",
65
+ ...opt
66
+ });
67
+ return cookie;
68
+ };
69
+ const setSignedCookie = async (c, name, value, secret, opt) => {
70
+ const cookie = await generateSignedCookie(name, value, secret, opt);
71
+ c.header("set-cookie", cookie, { append: true });
72
+ };
73
+ const deleteCookie = (c, name, opt) => {
74
+ const deletedCookie = getCookie(c, name, opt?.prefix);
75
+ setCookie(c, name, "", {
76
+ ...opt,
77
+ maxAge: 0
78
+ });
79
+ return deletedCookie;
80
+ };
81
+ //#endregion
82
+ export { deleteCookie, generateCookie, generateSignedCookie, getCookie, getSignedCookie, setCookie, setSignedCookie };
package/lib/cors.d.ts ADDED
@@ -0,0 +1,52 @@
1
+ import { I as MiddlewareHandler, t as Context } from "./context-Bm7rI-oK.js";
2
+
3
+ //#region ../../plugins/acryl-router/src/core/middleware/cors/index.d.ts
4
+ type CORSOptions = {
5
+ origin?: string | string[] | ((origin: string, c: Context) => Promise<string | undefined | null> | string | undefined | null);
6
+ allowMethods?: string[] | ((origin: string, c: Context) => Promise<string[]> | string[]);
7
+ allowHeaders?: string[];
8
+ maxAge?: number;
9
+ credentials?: boolean;
10
+ exposeHeaders?: string[];
11
+ };
12
+ /**
13
+ * CORS Middleware for Acryl.
14
+ *
15
+ *
16
+ * @param {CORSOptions} [options] - The options for the CORS middleware.
17
+ * @param {string | string[] | ((origin: string, c: Context) => Promise<string | undefined | null> | string | undefined | null)} [options.origin='*'] - The value of "Access-Control-Allow-Origin" CORS header.
18
+ * @param {string[] | ((origin: string, c: Context) => Promise<string[]> | string[])} [options.allowMethods=['GET', 'HEAD', 'PUT', 'POST', 'DELETE', 'PATCH', 'QUERY']] - The value of "Access-Control-Allow-Methods" CORS header.
19
+ * @param {string[]} [options.allowHeaders=[]] - The value of "Access-Control-Allow-Headers" CORS header.
20
+ * @param {number} [options.maxAge] - The value of "Access-Control-Max-Age" CORS header.
21
+ * @param {boolean} [options.credentials] - The value of "Access-Control-Allow-Credentials" CORS header.
22
+ * @param {string[]} [options.exposeHeaders=[]] - The value of "Access-Control-Expose-Headers" CORS header.
23
+ * @returns {MiddlewareHandler} The middleware handler function.
24
+ *
25
+ * @example
26
+ * ```ts
27
+ * const app = new Acryl()
28
+ *
29
+ * app.use('/api/*', cors())
30
+ * app.use(
31
+ * '/api2/*',
32
+ * cors({
33
+ * origin: 'http://example.com',
34
+ * allowHeaders: ['X-Custom-Header', 'Upgrade-Insecure-Requests'],
35
+ * allowMethods: ['POST', 'GET', 'OPTIONS'],
36
+ * exposeHeaders: ['Content-Length', 'X-Kuma-Revision'],
37
+ * maxAge: 600,
38
+ * credentials: true,
39
+ * })
40
+ * )
41
+ *
42
+ * app.all('/api/abc', (c) => {
43
+ * return c.json({ success: true })
44
+ * })
45
+ * app.all('/api2/abc', (c) => {
46
+ * return c.json({ success: true })
47
+ * })
48
+ * ```
49
+ */
50
+ declare const cors: (options?: CORSOptions) => MiddlewareHandler;
51
+ //#endregion
52
+ export { cors };