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
@@ -1,4 +1,4 @@
1
- import { App } from '../../../acryl-router/src/index.ts'
1
+ import { Acryl } from '../../../acryl-router/src/index.ts'
2
2
  import type * as fs from 'node:fs'
3
3
  import {
4
4
  chmodSync,
@@ -26,7 +26,7 @@ vi.mock('node:fs', async (importOriginal) => {
26
26
  })
27
27
 
28
28
  describe('Serve Static Middleware', () => {
29
- const app = new App<{
29
+ const app = new Acryl<{
30
30
  Variables: {
31
31
  path: string
32
32
  }
@@ -99,7 +99,7 @@ describe('Serve Static Middleware', () => {
99
99
  const rewriteRequestPath = vi.fn((path: string) => path)
100
100
  const onFound = vi.fn()
101
101
  const onNotFound = vi.fn()
102
- const app = new App().use(
102
+ const app = new Acryl().use(
103
103
  '/static/*',
104
104
  serveStatic({ root: './tests/adapter/assets', rewriteRequestPath, onFound, onNotFound })
105
105
  )
@@ -136,7 +136,7 @@ describe('Serve Static Middleware', () => {
136
136
  it('Should return index.html', async () => {
137
137
  const res = await requestServer(server, { method: 'GET', path: '/static/' })
138
138
  expect(res.status).toBe(200)
139
- expect(await res.text()).toBe('<h1>Hello App</h1>')
139
+ expect(await res.text()).toBe('<h1>Hello Acryl</h1>')
140
140
  expect(res.headers.get('content-type')).toBe('text/html; charset=utf-8')
141
141
  expect(res.headers.get('x-custom')).toMatch(
142
142
  /Found the file at tests[\/\\]adapter[\/\\]assets[\/\\]static[\/\\]index\.html$/
@@ -146,7 +146,7 @@ describe('Serve Static Middleware', () => {
146
146
  it('Should return acryl.html', async () => {
147
147
  const res = await requestServer(server, { method: 'GET', path: '/static/acryl.html' })
148
148
  expect(res.status).toBe(200)
149
- expect(await res.text()).toBe('<h1>This is App.html</h1>')
149
+ expect(await res.text()).toBe('<h1>This is Acryl.html</h1>')
150
150
  expect(res.headers.get('content-type')).toBe('text/html; charset=utf-8')
151
151
  })
152
152
 
@@ -421,7 +421,7 @@ describe('Serve Static Middleware', () => {
421
421
 
422
422
  const res = await requestServer(server, { method: 'GET', path: '/static/symlink.html' })
423
423
  expect(res.status).toBe(200)
424
- expect(await res.text()).toBe('<h1>Hello App</h1>')
424
+ expect(await res.text()).toBe('<h1>Hello Acryl</h1>')
425
425
  } finally {
426
426
  rmSync(symlinkPath, { force: true })
427
427
  }
@@ -514,7 +514,7 @@ describe('Serve Static Middleware', () => {
514
514
  ]
515
515
  rootPaths.forEach((root) => {
516
516
  describe(root, () => {
517
- const app = new App()
517
+ const app = new Acryl()
518
518
  const server = createAdaptorServer(app)
519
519
  app.use('/static/*', serveStatic({ root }))
520
520
  app.use('/favicon.ico', serveStatic({ path: root + path.sep + 'favicon.ico' }))
@@ -523,7 +523,7 @@ describe('Serve Static Middleware', () => {
523
523
  const res = await requestServer(server, { method: 'GET', path: '/static' })
524
524
  expect(res.status).toBe(200)
525
525
  expect(res.headers.get('content-type')).toBe('text/html; charset=utf-8')
526
- expect(await res.text()).toBe('<h1>Hello App</h1>')
526
+ expect(await res.text()).toBe('<h1>Hello Acryl</h1>')
527
527
  })
528
528
 
529
529
  it('Should return correct headers and data for text', async () => {
@@ -551,7 +551,7 @@ describe('Serve Static Middleware', () => {
551
551
  rootPaths.forEach((root) => {
552
552
  optionPaths.forEach((optionPath) => {
553
553
  describe(`${root} + ${optionPath}`, () => {
554
- const app = new App()
554
+ const app = new Acryl()
555
555
  const server = createAdaptorServer(app)
556
556
 
557
557
  app.use(
@@ -573,7 +573,7 @@ describe('Serve Static Middleware', () => {
573
573
  })
574
574
 
575
575
  describe('Path traversal security tests', () => {
576
- const app = new App()
576
+ const app = new Acryl()
577
577
  const server = createAdaptorServer(app)
578
578
  app.use('/static/*', serveStatic({ root: './tests/adapter/assets' }))
579
579
 
@@ -613,7 +613,7 @@ describe('Serve Static Middleware', () => {
613
613
  })
614
614
 
615
615
  describe('Path mismatch security tests', () => {
616
- const app = new App()
616
+ const app = new Acryl()
617
617
  const server = createAdaptorServer(app)
618
618
 
619
619
  app.use('/static/admin/*', async (c, next) => {
@@ -673,7 +673,7 @@ describe('Serve Static Middleware', () => {
673
673
  ['/static/%E7%82%8E.txt', 'static/炎.txt'],
674
674
  ['/static/hello%20world.txt', 'static/hello world.txt'],
675
675
  ])('Should decode URI strings - %s', async (url, filePath) => {
676
- const fileApp = new App().use('/static/*', serveStatic({ root }))
676
+ const fileApp = new Acryl().use('/static/*', serveStatic({ root }))
677
677
  const res = await requestServer(createAdaptorServer(fileApp), {
678
678
  method: 'GET',
679
679
  path: url,
@@ -688,7 +688,7 @@ describe('Serve Static Middleware', () => {
688
688
  async (url) => {
689
689
  const onNotFound = vi.fn()
690
690
  const rewriteRequestPath = vi.fn((filePath: string) => filePath)
691
- const fileApp = new App().use(
691
+ const fileApp = new Acryl().use(
692
692
  '/static/*',
693
693
  serveStatic({ root, onNotFound, rewriteRequestPath })
694
694
  )
@@ -706,7 +706,7 @@ describe('Serve Static Middleware', () => {
706
706
  ['/static/100%25/hello.txt', 'static/100%/hello.txt'],
707
707
  ['/static/%2Fadmin/secret.txt', 'static/%2Fadmin/secret.txt'],
708
708
  ])('Should allow percent signs when opted in - %s', async (url, filePath) => {
709
- const fileApp = new App().use('/static/*', serveStatic({ root, allowPercentInPath: true }))
709
+ const fileApp = new Acryl().use('/static/*', serveStatic({ root, allowPercentInPath: true }))
710
710
 
711
711
  const res = await requestServer(createAdaptorServer(fileApp), { method: 'GET', path: url })
712
712
 
@@ -715,7 +715,7 @@ describe('Serve Static Middleware', () => {
715
715
  })
716
716
 
717
717
  it('Should not bypass authentication through a second decode', async () => {
718
- const protectedApp = new App()
718
+ const protectedApp = new Acryl()
719
719
  const rewriteRequestPath = vi.fn((filePath: string) => filePath)
720
720
  protectedApp.use('/static/admin/*', async (c) => c.text('Unauthorized', 401))
721
721
  protectedApp.use('/static/*', serveStatic({ root: './tests/adapter/assets', rewriteRequestPath }))
@@ -737,7 +737,7 @@ describe('Serve Static Middleware', () => {
737
737
  })
738
738
 
739
739
  it('Should pass the routed path and context to onNotFound, then continue', async () => {
740
- const fileApp = new App()
740
+ const fileApp = new Acryl()
741
741
  let hookPath: string | undefined
742
742
  let contextPath: string | undefined
743
743
  fileApp.use(
@@ -765,7 +765,7 @@ describe('Serve Static Middleware', () => {
765
765
  it.each(['/static/%2e%2e%5C100%.txt', '/static//100%.txt', '/static/%5C100%.txt'])(
766
766
  'Should retain path validation when opted in: %s',
767
767
  async (requestPath) => {
768
- const fileApp = new App()
768
+ const fileApp = new Acryl()
769
769
  const rewriteRequestPath = vi.fn((requestPath: string) => requestPath)
770
770
  const onNotFound = vi.fn()
771
771
  fileApp.use(
@@ -783,7 +783,7 @@ describe('Serve Static Middleware', () => {
783
783
  )
784
784
 
785
785
  it('Should preserve the fixed path option for percent filenames', async () => {
786
- const fileApp = new App()
786
+ const fileApp = new Acryl()
787
787
  fileApp.use('/static/*', serveStatic({ root, path: 'static/100%.txt' }))
788
788
  const res = await requestServer(createAdaptorServer(fileApp), {
789
789
  method: 'GET',
@@ -814,7 +814,7 @@ describe('Serve Static Middleware', () => {
814
814
  ;(process.platform === 'win32' ? it.skip : it)(
815
815
  'Should handle read permission errors gracefully',
816
816
  async () => {
817
- const app = new App()
817
+ const app = new Acryl()
818
818
  app.use('/static/*', serveStatic({ root: './tests/adapter/assets' }))
819
819
  const server = createAdaptorServer(app)
820
820
  await expect(
@@ -829,7 +829,7 @@ describe('Serve Static Middleware with wrong path', () => {
829
829
  it('Should show an error when the path is wrong', async () => {
830
830
  const logSpy = vi.spyOn(console, 'error')
831
831
 
832
- const app = new App<{
832
+ const app = new Acryl<{
833
833
  Variables: {
834
834
  path: string
835
835
  }
@@ -1,4 +1,4 @@
1
- import { App } from '../../../acryl-router/src/index.ts'
1
+ import { Acryl } from '../../../acryl-router/src/index.ts'
2
2
  import { bodyLimit } from '../../../acryl-router/src/middleware/index.ts'
3
3
  import fs from 'node:fs'
4
4
  import { request as requestHTTP } from 'node:http'
@@ -19,7 +19,7 @@ import { app } from './app.ts'
19
19
  const nodeVersionV20OrLater = parseInt(process.version.slice(1).split('.')[0]) >= 20
20
20
 
21
21
  const createBodyLimitApp = () => {
22
- const app = new App()
22
+ const app = new Acryl()
23
23
 
24
24
  app.post(
25
25
  '/',
@@ -1,4 +1,4 @@
1
- import { App } from '../../../acryl-router/src/index.ts'
1
+ import { Acryl } from '../../../acryl-router/src/index.ts'
2
2
  import { basicAuth } from '../../../acryl-router/src/middleware/index.ts'
3
3
  import { compress } from '../../../acryl-router/src/middleware/index.ts'
4
4
  import { etag } from '../../../acryl-router/src/middleware/index.ts'
@@ -46,11 +46,11 @@ describe('Basic', () => {
46
46
  const res = await requestServer(server, {
47
47
  method: 'GET',
48
48
  path: '/user-agent',
49
- headers: { 'user-agent': 'App' },
49
+ headers: { 'user-agent': 'Acryl' },
50
50
  })
51
51
  expect(res.status).toBe(200)
52
52
  expect(res.headers.get('content-type')).toMatch('text/plain')
53
- expect(await res.text()).toBe('App')
53
+ expect(await res.text()).toBe('Acryl')
54
54
  })
55
55
 
56
56
  it('Should return 302 response - POST /posts', async () => {
@@ -142,7 +142,7 @@ describe.each([
142
142
  ])('Caller-owned response headers over $protocol', ({ serverOptions, request }) => {
143
143
  it('should allow reusing the headers passed to c.body()', async () => {
144
144
  const headers = { 'content-type': 'text/plain' }
145
- const testApp = new App()
145
+ const testApp = new Acryl()
146
146
  testApp.get('/', (c) => c.body(new Uint8Array([104, 105]), 200, headers))
147
147
  const server = createAdaptorServer({ fetch: testApp.fetch, ...serverOptions })
148
148
 
@@ -166,7 +166,7 @@ describe.each([
166
166
  }
167
167
  const bodies = ['hi', 'hello', '']
168
168
  let index = 0
169
- const testApp = new App()
169
+ const testApp = new Acryl()
170
170
  testApp.get('/', () => new Response(makeBody(bodies[index++]), { headers }))
171
171
  const server = createAdaptorServer({ fetch: testApp.fetch, ...serverOptions })
172
172
 
@@ -186,10 +186,11 @@ describe('various response body types', () => {
186
186
  const largeText = 'a'.repeat(1024 * 1024 * 10)
187
187
  let server: ServerType
188
188
  let resolveReadableStreamPromise: () => void
189
+ let resolveReadableStreamFirstChunkPromise: () => void
189
190
  let resolveEventStreamPromise: () => void
190
191
  let resolveEventStreamWithoutTransferEncodingPromise: () => void
191
192
  beforeAll(() => {
192
- const app = new App()
193
+ const app = new Acryl()
193
194
  app.use('*', async (c, next) => {
194
195
  await next()
195
196
 
@@ -223,11 +224,17 @@ describe('various response body types', () => {
223
224
  const readableStreamPromise = new Promise<void>((resolve) => {
224
225
  resolveReadableStreamPromise = resolve
225
226
  })
227
+ const readableStreamFirstChunkPromise = new Promise<void>((resolve) => {
228
+ resolveReadableStreamFirstChunkPromise = resolve
229
+ })
226
230
  app.get('/readable-stream', () => {
227
231
  const stream = new ReadableStream({
228
232
  async start(controller) {
229
233
  await readableStreamPromise
230
234
  controller.enqueue('Hello!')
235
+ // The second chunk waits until the client has the first, so the two arrive as two reads on every platform (TCP may join
236
+ // two back-to-back writes into one read, as it does on Windows).
237
+ await readableStreamFirstChunkPromise
231
238
  controller.enqueue(' Node!')
232
239
  controller.close()
233
240
  },
@@ -286,34 +293,34 @@ describe('various response body types', () => {
286
293
  })
287
294
  })
288
295
  app.get('/buffer', () => {
289
- const response = new Response(Buffer.from('Hello App!'), {
296
+ const response = new Response(Buffer.from('Hello Acryl!'), {
290
297
  headers: { 'content-type': 'text/plain' },
291
298
  })
292
299
  return response
293
300
  })
294
301
  app.get('/text-with-content-length-object', () => {
295
- const response = new Response('Hello App!', {
296
- headers: { 'content-type': 'text/plain', 'content-length': '00010' },
302
+ const response = new Response('Hello Acryl!', {
303
+ headers: { 'content-type': 'text/plain', 'content-length': '00012' },
297
304
  })
298
305
  return response
299
306
  })
300
307
  app.get('/text-with-content-length-headers', () => {
301
- const response = new Response('Hello App!', {
302
- headers: new Headers({ 'content-type': 'text/plain', 'content-length': '00010' }),
308
+ const response = new Response('Hello Acryl!', {
309
+ headers: new Headers({ 'content-type': 'text/plain', 'content-length': '00012' }),
303
310
  })
304
311
  return response
305
312
  })
306
313
  app.get('/text-with-content-length-array', () => {
307
- const response = new Response('Hello App!', {
314
+ const response = new Response('Hello Acryl!', {
308
315
  headers: [
309
316
  ['content-type', 'text/plain'],
310
- ['content-length', '00010'],
317
+ ['content-length', '00012'],
311
318
  ],
312
319
  })
313
320
  return response
314
321
  })
315
322
  app.get('/text-with-set-cookie-array', () => {
316
- const response = new Response('Hello App!', {
323
+ const response = new Response('Hello Acryl!', {
317
324
  headers: [
318
325
  ['content-type', 'text/plain'],
319
326
  ['set-cookie', 'a=1'],
@@ -325,7 +332,7 @@ describe('various response body types', () => {
325
332
 
326
333
  app.use('/etag/*', etag())
327
334
  app.get('/etag/buffer', () => {
328
- const response = new Response(Buffer.from('Hello App!'), {
335
+ const response = new Response(Buffer.from('Hello Acryl!'), {
329
336
  headers: { 'content-type': 'text/plain' },
330
337
  })
331
338
  return response
@@ -376,6 +383,9 @@ describe('various response body types', () => {
376
383
  expect(headers.get('transfer-encoding')).toBe('chunked')
377
384
  resolveReadableStreamPromise()
378
385
  },
386
+ onChunk: (_chunk, index) => {
387
+ if (index === 0) resolveReadableStreamFirstChunkPromise()
388
+ },
379
389
  }
380
390
  )
381
391
  expect(res.status).toBe(200)
@@ -442,8 +452,8 @@ describe('various response body types', () => {
442
452
  const res = await requestServer(server, { method: 'GET', path: '/buffer' })
443
453
  expect(res.status).toBe(200)
444
454
  expect(res.headers.get('content-type')).toMatch('text/plain')
445
- expect(res.headers.get('content-length')).toMatch('10')
446
- expect(await res.text()).toBe('Hello App!')
455
+ expect(res.headers.get('content-length')).toMatch('12')
456
+ expect(await res.text()).toBe('Hello Acryl!')
447
457
  })
448
458
 
449
459
  it('Should return 200 response - GET /text-with-content-length-object', async () => {
@@ -453,8 +463,8 @@ describe('various response body types', () => {
453
463
  })
454
464
  expect(res.status).toBe(200)
455
465
  expect(res.headers.get('content-type')).toMatch('text/plain')
456
- expect(res.headers.get('content-length')).toBe('00010')
457
- expect(await res.text()).toBe('Hello App!')
466
+ expect(res.headers.get('content-length')).toBe('00012')
467
+ expect(await res.text()).toBe('Hello Acryl!')
458
468
  })
459
469
 
460
470
  it('Should return 200 response - GET /text-with-content-length-headers', async () => {
@@ -464,8 +474,8 @@ describe('various response body types', () => {
464
474
  })
465
475
  expect(res.status).toBe(200)
466
476
  expect(res.headers.get('content-type')).toMatch('text/plain')
467
- expect(res.headers.get('content-length')).toBe('00010')
468
- expect(await res.text()).toBe('Hello App!')
477
+ expect(res.headers.get('content-length')).toBe('00012')
478
+ expect(await res.text()).toBe('Hello Acryl!')
469
479
  })
470
480
 
471
481
  it('Should return 200 response - GET /text-with-content-length-array', async () => {
@@ -475,8 +485,8 @@ describe('various response body types', () => {
475
485
  })
476
486
  expect(res.status).toBe(200)
477
487
  expect(res.headers.get('content-type')).toMatch('text/plain')
478
- expect(res.headers.get('content-length')).toBe('00010')
479
- expect(await res.text()).toBe('Hello App!')
488
+ expect(res.headers.get('content-length')).toBe('00012')
489
+ expect(await res.text()).toBe('Hello Acryl!')
480
490
  })
481
491
 
482
492
  it('Should return 200 response - GET /text-with-set-cookie-array', async () => {
@@ -487,16 +497,16 @@ describe('various response body types', () => {
487
497
  expect(res.status).toBe(200)
488
498
  expect(res.headers.get('content-type')).toMatch('text/plain')
489
499
  expect(res.headers.getSetCookie()).toEqual(['a=1', 'b=2'])
490
- expect(await res.text()).toBe('Hello App!')
500
+ expect(await res.text()).toBe('Hello Acryl!')
491
501
  })
492
502
 
493
503
  it('Should return 200 response - GET /etag/buffer', async () => {
494
504
  const res = await requestServer(server, { method: 'GET', path: '/etag/buffer' })
495
505
  expect(res.status).toBe(200)
496
506
  expect(res.headers.get('content-type')).toMatch('text/plain')
497
- expect(res.headers.get('etag')).toMatch('"a4b794176ec9cd86063d6a0075c27385b32ec9b4"')
498
- expect(res.headers.get('content-length')).toMatch('10')
499
- expect(await res.text()).toBe('Hello App!')
507
+ expect(res.headers.get('etag')).toMatch('"687f9e1bf5c0384d6b9cb63d0f6f0ba1803b2669"')
508
+ expect(res.headers.get('content-length')).toMatch('12')
509
+ expect(await res.text()).toBe('Hello Acryl!')
500
510
  })
501
511
  }
502
512
 
@@ -511,14 +521,14 @@ describe('various response body types', () => {
511
521
 
512
522
  describe('Routing', () => {
513
523
  describe('Nested Route', () => {
514
- const book = new App()
524
+ const book = new Acryl()
515
525
  book.get('/', (c) => c.text('get /book'))
516
526
  book.get('/:id', (c) => {
517
527
  return c.text('get /book/' + c.req.param('id'))
518
528
  })
519
529
  book.post('/', (c) => c.text('post /book'))
520
530
 
521
- const app = new App()
531
+ const app = new Acryl()
522
532
  app.route('/book', book)
523
533
 
524
534
  const server = createAdaptorServer(app)
@@ -539,7 +549,7 @@ describe('Routing', () => {
539
549
  })
540
550
 
541
551
  describe('Chained route', () => {
542
- const app = new App()
552
+ const app = new Acryl()
543
553
 
544
554
  app
545
555
  .get('/chained/:abc', (c) => {
@@ -568,7 +578,7 @@ describe('Routing', () => {
568
578
  })
569
579
 
570
580
  describe('Request body', () => {
571
- const app = new App()
581
+ const app = new Acryl()
572
582
  app.post('/json', async (c) => {
573
583
  const data = await c.req.json()
574
584
  return c.json(data)
@@ -604,7 +614,7 @@ describe('Request body', () => {
604
614
 
605
615
  describe('Response body', () => {
606
616
  describe('Cached Response', () => {
607
- const app = new App()
617
+ const app = new Acryl()
608
618
  app.get('/json', (c) => {
609
619
  return c.json({ foo: 'bar' })
610
620
  })
@@ -649,7 +659,7 @@ describe('Response body', () => {
649
659
  })
650
660
 
651
661
  describe('Fallback to global.Response', () => {
652
- const app = new App()
662
+ const app = new Acryl()
653
663
 
654
664
  app.get('/json-blob', async () => {
655
665
  return new Response(new Blob([JSON.stringify({ foo: 'blob' })]), {
@@ -682,7 +692,7 @@ describe('Response body', () => {
682
692
  })
683
693
 
684
694
  describe('Middleware', () => {
685
- const app = new App<{ Variables: { foo: string } }>()
695
+ const app = new Acryl<{ Variables: { foo: string } }>()
686
696
  app.use('*', poweredBy())
687
697
  app.use('*', async (c, next) => {
688
698
  c.set('foo', 'bar')
@@ -695,13 +705,13 @@ describe('Middleware', () => {
695
705
  it('Should have correct header values', async () => {
696
706
  const res = await requestServer(server, { method: 'GET', path: '/' })
697
707
  expect(res.status).toBe(200)
698
- expect(res.headers.get('x-powered-by')).toBe('ACRYL')
708
+ expect(res.headers.get('x-powered-by')).toBe('Acryl')
699
709
  expect(res.headers.get('foo')).toBe('bar')
700
710
  })
701
711
  })
702
712
 
703
713
  describe('Error handling', () => {
704
- const app = new App()
714
+ const app = new Acryl()
705
715
  app.notFound((c) => {
706
716
  return c.text('Custom NotFound', 404)
707
717
  })
@@ -732,7 +742,7 @@ describe('Error handling', () => {
732
742
  })
733
743
 
734
744
  describe('Basic Auth Middleware', () => {
735
- const app = new App()
745
+ const app = new Acryl()
736
746
  const username = 'acryl-user-a'
737
747
  const password = 'acryl-password-a'
738
748
  const unicodePassword = '炎'
@@ -788,7 +798,7 @@ describe('Basic Auth Middleware', () => {
788
798
  })
789
799
 
790
800
  describe('Stream and non-stream response', () => {
791
- const app = new App()
801
+ const app = new Acryl()
792
802
 
793
803
  app.get('/json', (c) => c.json({ foo: 'bar' }))
794
804
  app.get('/text', (c) => c.text('Hello!'))
@@ -873,7 +883,7 @@ describe('Stream and non-stream response', () => {
873
883
  })
874
884
 
875
885
  describe('SSL', () => {
876
- const app = new App()
886
+ const app = new Acryl()
877
887
  app.get('/', (c) => c.text('Hello! Node!'))
878
888
  app.get('/url', (c) => c.text(c.req.url))
879
889
 
@@ -905,7 +915,7 @@ describe('SSL', () => {
905
915
  })
906
916
 
907
917
  describe('HTTP2', () => {
908
- const app = new App()
918
+ const app = new Acryl()
909
919
  app.get('/', (c) => c.text('Hello! Node!'))
910
920
  app.get('/headers', (c) => {
911
921
  // call newRequestFromIncoming
@@ -949,8 +959,8 @@ describe('HTTP2', () => {
949
959
  })
950
960
  })
951
961
 
952
- describe('App compression default gzip', () => {
953
- const app = new App()
962
+ describe('Acryl compression default gzip', () => {
963
+ const app = new Acryl()
954
964
  app.use('*', compress())
955
965
 
956
966
  app.notFound((c) => {
@@ -1013,8 +1023,8 @@ describe('App compression default gzip', () => {
1013
1023
  })
1014
1024
  })
1015
1025
 
1016
- describe('App compression deflate', () => {
1017
- const app = new App()
1026
+ describe('Acryl compression deflate', () => {
1027
+ const app = new Acryl()
1018
1028
  app.use('*', compress({ encoding: 'deflate' }))
1019
1029
 
1020
1030
  app.notFound((c) => {
@@ -1078,7 +1088,7 @@ describe('App compression deflate', () => {
1078
1088
  })
1079
1089
 
1080
1090
  describe('set child response to c.res', () => {
1081
- const app = new App()
1091
+ const app = new Acryl()
1082
1092
  app.use('*', async (c, next) => {
1083
1093
  await next()
1084
1094
  c.res = new Response('', c.res)
@@ -1101,7 +1111,7 @@ describe('Headers appended to a raw Response after construction (issue #304)', (
1101
1111
  // Regression test: a handler returning `new Response(body, init)` and
1102
1112
  // appending headers (e.g. `Set-Cookie`) afterwards must not lose those
1103
1113
  // headers when middleware later clones the response via `new Response(...)`.
1104
- const app = new App()
1114
+ const app = new Acryl()
1105
1115
  app.use('*', async (c, next) => {
1106
1116
  await next()
1107
1117
  // Mimics what middleware such as `cors`/`compress` does internally.
@@ -1127,7 +1137,7 @@ describe('Headers appended to a raw Response after construction (issue #304)', (
1127
1137
  })
1128
1138
 
1129
1139
  describe('forwarding IncomingMessage and ServerResponse in env', () => {
1130
- const app = new App<{ Bindings: HttpBindings }>()
1140
+ const app = new Acryl<{ Bindings: HttpBindings }>()
1131
1141
  app.get('/', (c) =>
1132
1142
  c.json({
1133
1143
  incoming: c.env.incoming.constructor.name,
@@ -1151,7 +1161,7 @@ describe('forwarding IncomingMessage and ServerResponse in env', () => {
1151
1161
  })
1152
1162
 
1153
1163
  describe('overrideGlobalObjects', () => {
1154
- const app = new App()
1164
+ const app = new Acryl()
1155
1165
 
1156
1166
  beforeEach(() => {
1157
1167
  Object.defineProperty(global, 'Headers', {
@@ -1201,7 +1211,7 @@ describe('Memory leak test', () => {
1201
1211
  const registry = new FinalizationRegistry(() => {
1202
1212
  counter--
1203
1213
  })
1204
- const app = new App()
1214
+ const app = new Acryl()
1205
1215
  const server = createAdaptorServer(app)
1206
1216
 
1207
1217
  let onAbort: () => void
@@ -1286,7 +1296,7 @@ describe('Memory leak test', () => {
1286
1296
  })
1287
1297
 
1288
1298
  describe('serve', () => {
1289
- const app = new App()
1299
+ const app = new Acryl()
1290
1300
  app.get('/', (c) => c.newResponse(null, 200))
1291
1301
  serve(app)
1292
1302
 
@@ -1,15 +1,15 @@
1
- import { App } from '../../../../acryl-router/src/index.ts'
1
+ import { Acryl } from '../../../../acryl-router/src/index.ts'
2
2
  import type { HttpBindings } from '../../../src/adapter/index.ts'
3
3
  import { createAdaptorServer } from '../../../src/adapter/server.ts'
4
4
  import { RESPONSE_ALREADY_SENT } from '../../../src/adapter/utils/response.ts'
5
5
  import { requestServer } from '../helpers/request.ts'
6
6
 
7
7
  describe('RESPONSE_ALREADY_SENT', () => {
8
- const app = new App<{ Bindings: HttpBindings }>()
8
+ const app = new Acryl<{ Bindings: HttpBindings }>()
9
9
  app.get('/', (c) => {
10
10
  const { outgoing } = c.env
11
11
  outgoing.writeHead(200, { 'Content-Type': 'text/plain' })
12
- outgoing.end('App!')
12
+ outgoing.end('Acryl!')
13
13
  return RESPONSE_ALREADY_SENT
14
14
  })
15
15
  const server = createAdaptorServer(app)
@@ -18,6 +18,6 @@ describe('RESPONSE_ALREADY_SENT', () => {
18
18
  const res = await requestServer(server, { method: 'GET', path: '/' })
19
19
  expect(res.status).toBe(200)
20
20
  expect(res.headers.get('content-type')).toMatch('text/plain')
21
- expect(await res.text()).toBe('App!')
21
+ expect(await res.text()).toBe('Acryl!')
22
22
  })
23
23
  })
@@ -1,11 +1,11 @@
1
- import { App } from '../../../acryl-router/src/index.ts'
1
+ import { Acryl } from '../../../acryl-router/src/index.ts'
2
2
  import { WebSocket, WebSocketServer } from 'ws'
3
3
  import { connect } from 'node:net'
4
4
  import type { AddressInfo } from 'node:net'
5
5
  import { createAdaptorServer, upgradeWebSocket } from '../../src/adapter/index.ts'
6
6
 
7
7
  describe('WebSocket', () => {
8
- const startServer = (app: App) => {
8
+ const startServer = (app: Acryl) => {
9
9
  const wss = new WebSocketServer({ noServer: true })
10
10
  const server = createAdaptorServer({ fetch: app.fetch, websocket: { server: wss } })
11
11
  return new Promise<{ server: ReturnType<typeof createAdaptorServer>; address: AddressInfo }>(
@@ -18,7 +18,7 @@ describe('WebSocket', () => {
18
18
  }
19
19
 
20
20
  it('should connect with upgradeWebSocket without manual injection', async () => {
21
- const app = new App()
21
+ const app = new Acryl()
22
22
 
23
23
  app.get(
24
24
  '/ws',
@@ -50,7 +50,7 @@ describe('WebSocket', () => {
50
50
  })
51
51
 
52
52
  it('should reject WebSocket upgrade when route is not upgraded', async () => {
53
- const app = new App()
53
+ const app = new Acryl()
54
54
  app.get('/ws', (c) => c.text('ok'))
55
55
 
56
56
  const { server, address } = await startServer(app)
@@ -71,7 +71,7 @@ describe('WebSocket', () => {
71
71
  })
72
72
 
73
73
  it('should forward response headers set by middleware on a successful upgrade', async () => {
74
- const app = new App()
74
+ const app = new Acryl()
75
75
 
76
76
  app.use(async (c, next) => {
77
77
  await next()
@@ -106,7 +106,7 @@ describe('WebSocket', () => {
106
106
  })
107
107
 
108
108
  it('should forward response headers when the upgrade is rejected', async () => {
109
- const app = new App()
109
+ const app = new Acryl()
110
110
 
111
111
  app.get(
112
112
  '/ws',
@@ -138,7 +138,7 @@ describe('WebSocket', () => {
138
138
  })
139
139
 
140
140
  it('should not block other upgrade listeners', async () => {
141
- const app = new App()
141
+ const app = new Acryl()
142
142
  const { server, address } = await startServer(app)
143
143
  const wss = new WebSocketServer({ noServer: true })
144
144
 
@@ -165,7 +165,7 @@ describe('WebSocket', () => {
165
165
  })
166
166
 
167
167
  it('should call onError with the underlying error when the raw socket errors', async () => {
168
- const app = new App()
168
+ const app = new Acryl()
169
169
  const receivedError = new Error('boom')
170
170
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
171
171
  let rawWs: any
@@ -210,7 +210,7 @@ describe('WebSocket', () => {
210
210
  liveCount--
211
211
  })
212
212
 
213
- const app = new App()
213
+ const app = new Acryl()
214
214
  app.use('/ws', async (c, next) => {
215
215
  liveCount++
216
216
  registry.register((c.env as { incoming: object }).incoming, 'incoming')