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,130 @@
1
+ import { I as MiddlewareHandler, t as Context } from "./context-Bm7rI-oK.js";
2
+
3
+ //#region ../../plugins/acryl-router/src/core/middleware/timing/timing.d.ts
4
+ type TimingVariables = {
5
+ metric?: {
6
+ headers: string[];
7
+ timers: Map<string, Timer>;
8
+ };
9
+ };
10
+ interface Timer {
11
+ description?: string;
12
+ start: number;
13
+ }
14
+ interface TimingOptions {
15
+ total?: boolean;
16
+ enabled?: boolean | ((c: Context) => boolean);
17
+ totalDescription?: string;
18
+ autoEnd?: boolean;
19
+ crossOrigin?: boolean | string | ((c: Context) => boolean | string);
20
+ }
21
+ /**
22
+ * Server-Timing Middleware for Acryl.
23
+ *
24
+ *
25
+ * @param {TimingOptions} [config] - The options for the timing middleware.
26
+ * @param {boolean} [config.total=true] - Show the total response time.
27
+ * @param {boolean | ((c: Context) => boolean)} [config.enabled=true] - Whether timings should be added to the headers or not.
28
+ * @param {string} [config.totalDescription=Total Response Time] - Description for the total response time.
29
+ * @param {boolean} [config.autoEnd=true] - If `startTime()` should end automatically at the end of the request.
30
+ * @param {boolean | string | ((c: Context) => boolean | string)} [config.crossOrigin=false] - The origin this timings header should be readable.
31
+ * @returns {MiddlewareHandler} The middleware handler function.
32
+ *
33
+ * @example
34
+ * ```ts
35
+ * const app = new Acryl()
36
+ *
37
+ * // add the middleware to your router
38
+ * app.use(timing());
39
+ *
40
+ * app.get('/', async (c) => {
41
+ * // add custom metrics
42
+ * setMetric(c, 'region', 'europe-west3')
43
+ *
44
+ * // add custom metrics with timing, must be in milliseconds
45
+ * setMetric(c, 'custom', 23.8, 'My custom Metric')
46
+ *
47
+ * // start a new timer
48
+ * startTime(c, 'db');
49
+ *
50
+ * const data = await db.findMany(...);
51
+ *
52
+ * // end the timer
53
+ * endTime(c, 'db');
54
+ *
55
+ * return c.json({ response: data });
56
+ * });
57
+ * ```
58
+ */
59
+ declare const timing: (config?: TimingOptions) => MiddlewareHandler;
60
+ interface SetMetric {
61
+ (c: Context, name: string, value: number, description?: string, precision?: number): void;
62
+ (c: Context, name: string, description?: string): void;
63
+ }
64
+ /**
65
+ * Set a metric for the timing middleware.
66
+ *
67
+ * @param {Context} c - The context of the request.
68
+ * @param {string} name - The name of the metric.
69
+ * @param {number | string} [valueDescription] - The value or description of the metric.
70
+ * @param {string} [description] - The description of the metric.
71
+ * @param {number} [precision] - The precision of the metric value.
72
+ *
73
+ * @example
74
+ * ```ts
75
+ * setMetric(c, 'region', 'europe-west3')
76
+ * setMetric(c, 'custom', 23.8, 'My custom Metric')
77
+ * ```
78
+ */
79
+ declare const setMetric: SetMetric;
80
+ /**
81
+ * Start a timer for the timing middleware.
82
+ *
83
+ * @param {Context} c - The context of the request.
84
+ * @param {string} name - The name of the timer.
85
+ * @param {string} [description] - The description of the timer.
86
+ *
87
+ * @example
88
+ * ```ts
89
+ * startTime(c, 'db')
90
+ * ```
91
+ */
92
+ declare const startTime: (c: Context, name: string, description?: string) => void;
93
+ /**
94
+ * End a timer for the timing middleware.
95
+ *
96
+ * @param {Context} c - The context of the request.
97
+ * @param {string} name - The name of the timer.
98
+ * @param {number} [precision] - The precision of the timer value.
99
+ *
100
+ * @example
101
+ * ```ts
102
+ * endTime(c, 'db')
103
+ * ```
104
+ */
105
+ declare const endTime: (c: Context, name: string, precision?: number) => void;
106
+ /**
107
+ * Wrap a Promise to capture its duration.
108
+ * @param {Context} c - The context of the request.
109
+ * @param {string} name - The name of the timer.
110
+ * @param {Promise<T>} callable - The Promise to time.
111
+ * @param {string} [description] - The description of the timer.
112
+ * @param {number} [precision] - The precision of the timer value.
113
+ *
114
+ * @example
115
+ * ```ts
116
+ * // Instead of this:
117
+ * const data = await db.findMany(...);
118
+ *
119
+ * // do this:
120
+ * const data = await wrapTime(c, 'query', db.findMany(...));
121
+ * ```
122
+ * */
123
+ declare function wrapTime<T>(c: Context, name: string, callable: Promise<T>, description?: string, precision?: number): Promise<T>;
124
+ //#endregion
125
+ //#region ../../plugins/acryl-router/src/core/middleware/timing/index.d.ts
126
+ declare module '../../context.ts' {
127
+ interface ContextVariableMap extends TimingVariables {}
128
+ }
129
+ //#endregion
130
+ export { type TimingVariables, endTime, setMetric, startTime, timing, wrapTime };
package/lib/timing.js ADDED
@@ -0,0 +1,183 @@
1
+ //#region ../../plugins/acryl-router/src/core/middleware/timing/timing.ts
2
+ const getTime = () => {
3
+ try {
4
+ return performance.now();
5
+ } catch {}
6
+ return Date.now();
7
+ };
8
+ /**
9
+ * Server-Timing Middleware for Acryl.
10
+ *
11
+ *
12
+ * @param {TimingOptions} [config] - The options for the timing middleware.
13
+ * @param {boolean} [config.total=true] - Show the total response time.
14
+ * @param {boolean | ((c: Context) => boolean)} [config.enabled=true] - Whether timings should be added to the headers or not.
15
+ * @param {string} [config.totalDescription=Total Response Time] - Description for the total response time.
16
+ * @param {boolean} [config.autoEnd=true] - If `startTime()` should end automatically at the end of the request.
17
+ * @param {boolean | string | ((c: Context) => boolean | string)} [config.crossOrigin=false] - The origin this timings header should be readable.
18
+ * @returns {MiddlewareHandler} The middleware handler function.
19
+ *
20
+ * @example
21
+ * ```ts
22
+ * const app = new Acryl()
23
+ *
24
+ * // add the middleware to your router
25
+ * app.use(timing());
26
+ *
27
+ * app.get('/', async (c) => {
28
+ * // add custom metrics
29
+ * setMetric(c, 'region', 'europe-west3')
30
+ *
31
+ * // add custom metrics with timing, must be in milliseconds
32
+ * setMetric(c, 'custom', 23.8, 'My custom Metric')
33
+ *
34
+ * // start a new timer
35
+ * startTime(c, 'db');
36
+ *
37
+ * const data = await db.findMany(...);
38
+ *
39
+ * // end the timer
40
+ * endTime(c, 'db');
41
+ *
42
+ * return c.json({ response: data });
43
+ * });
44
+ * ```
45
+ */
46
+ const timing = (config) => {
47
+ const options = {
48
+ total: true,
49
+ enabled: true,
50
+ totalDescription: "Total Response Time",
51
+ autoEnd: true,
52
+ crossOrigin: false,
53
+ ...config
54
+ };
55
+ return async function timing(c, next) {
56
+ const headers = [];
57
+ const timers = /* @__PURE__ */ new Map();
58
+ if (c.get("metric")) return await next();
59
+ c.set("metric", {
60
+ headers,
61
+ timers
62
+ });
63
+ if (options.total) startTime(c, "total", options.totalDescription);
64
+ await next();
65
+ if (options.total) endTime(c, "total");
66
+ if (options.autoEnd) timers.forEach((_, key) => {
67
+ endTime(c, key);
68
+ });
69
+ if (typeof options.enabled === "function" ? options.enabled(c) : options.enabled) {
70
+ c.res.headers.append("Server-Timing", headers.join(","));
71
+ const crossOrigin = typeof options.crossOrigin === "function" ? options.crossOrigin(c) : options.crossOrigin;
72
+ if (crossOrigin) c.res.headers.append("Timing-Allow-Origin", typeof crossOrigin === "string" ? crossOrigin : "*");
73
+ }
74
+ };
75
+ };
76
+ /**
77
+ * Set a metric for the timing middleware.
78
+ *
79
+ * @param {Context} c - The context of the request.
80
+ * @param {string} name - The name of the metric.
81
+ * @param {number | string} [valueDescription] - The value or description of the metric.
82
+ * @param {string} [description] - The description of the metric.
83
+ * @param {number} [precision] - The precision of the metric value.
84
+ *
85
+ * @example
86
+ * ```ts
87
+ * setMetric(c, 'region', 'europe-west3')
88
+ * setMetric(c, 'custom', 23.8, 'My custom Metric')
89
+ * ```
90
+ */
91
+ const setMetric = (c, name, valueDescription, description, precision) => {
92
+ const metrics = c.get("metric");
93
+ if (!metrics) {
94
+ console.warn("Metrics not initialized! Please add the `timing()` middleware to this route!");
95
+ return;
96
+ }
97
+ if (typeof valueDescription === "number") {
98
+ const dur = valueDescription.toFixed(precision || 1);
99
+ const metric = description ? `${name};dur=${dur};desc="${description}"` : `${name};dur=${dur}`;
100
+ metrics.headers.push(metric);
101
+ } else {
102
+ const metric = valueDescription ? `${name};desc="${valueDescription}"` : `${name}`;
103
+ metrics.headers.push(metric);
104
+ }
105
+ };
106
+ /**
107
+ * Start a timer for the timing middleware.
108
+ *
109
+ * @param {Context} c - The context of the request.
110
+ * @param {string} name - The name of the timer.
111
+ * @param {string} [description] - The description of the timer.
112
+ *
113
+ * @example
114
+ * ```ts
115
+ * startTime(c, 'db')
116
+ * ```
117
+ */
118
+ const startTime = (c, name, description) => {
119
+ const metrics = c.get("metric");
120
+ if (!metrics) {
121
+ console.warn("Metrics not initialized! Please add the `timing()` middleware to this route!");
122
+ return;
123
+ }
124
+ metrics.timers.set(name, {
125
+ description,
126
+ start: getTime()
127
+ });
128
+ };
129
+ /**
130
+ * End a timer for the timing middleware.
131
+ *
132
+ * @param {Context} c - The context of the request.
133
+ * @param {string} name - The name of the timer.
134
+ * @param {number} [precision] - The precision of the timer value.
135
+ *
136
+ * @example
137
+ * ```ts
138
+ * endTime(c, 'db')
139
+ * ```
140
+ */
141
+ const endTime = (c, name, precision) => {
142
+ const metrics = c.get("metric");
143
+ if (!metrics) {
144
+ console.warn("Metrics not initialized! Please add the `timing()` middleware to this route!");
145
+ return;
146
+ }
147
+ const timer = metrics.timers.get(name);
148
+ if (!timer) {
149
+ console.warn(`Timer "${name}" does not exist!`);
150
+ return;
151
+ }
152
+ const { description, start } = timer;
153
+ const duration = getTime() - start;
154
+ setMetric(c, name, duration, description, precision);
155
+ metrics.timers.delete(name);
156
+ };
157
+ /**
158
+ * Wrap a Promise to capture its duration.
159
+ * @param {Context} c - The context of the request.
160
+ * @param {string} name - The name of the timer.
161
+ * @param {Promise<T>} callable - The Promise to time.
162
+ * @param {string} [description] - The description of the timer.
163
+ * @param {number} [precision] - The precision of the timer value.
164
+ *
165
+ * @example
166
+ * ```ts
167
+ * // Instead of this:
168
+ * const data = await db.findMany(...);
169
+ *
170
+ * // do this:
171
+ * const data = await wrapTime(c, 'query', db.findMany(...));
172
+ * ```
173
+ * */
174
+ async function wrapTime(c, name, callable, description, precision) {
175
+ startTime(c, name, description);
176
+ try {
177
+ return await callable;
178
+ } finally {
179
+ endTime(c, name, precision);
180
+ }
181
+ }
182
+ //#endregion
183
+ export { endTime, setMetric, startTime, timing, wrapTime };
@@ -0,0 +1,91 @@
1
+ import { I as MiddlewareHandler } from "./context-Bm7rI-oK.js";
2
+
3
+ //#region ../../plugins/acryl-router/src/core/middleware/trailing-slash/index.d.ts
4
+ type TrimTrailingSlashOptions = {
5
+ /**
6
+ * If `true`, the middleware will always redirect requests with a trailing slash
7
+ * before executing handlers.
8
+ * This is useful for routes with wildcards (`*`).
9
+ * If `false` (default), it will only redirect when the route is not found (404).
10
+ * @default false
11
+ */
12
+ alwaysRedirect?: boolean;
13
+ };
14
+ /**
15
+ * Trailing Slash Middleware for Acryl.
16
+ *
17
+ *
18
+ * @param {TrimTrailingSlashOptions} options - The options for the middleware.
19
+ * @returns {MiddlewareHandler} The middleware handler function.
20
+ *
21
+ * @example
22
+ * ```ts
23
+ * const app = new Acryl()
24
+ *
25
+ * app.use(trimTrailingSlash())
26
+ * app.get('/about/me/', (c) => c.text('With Trailing Slash'))
27
+ * ```
28
+ *
29
+ * @example
30
+ * ```ts
31
+ * // With alwaysRedirect option for wildcard routes
32
+ * const app = new Acryl()
33
+ *
34
+ * app.use(trimTrailingSlash({ alwaysRedirect: true }))
35
+ * app.get('/my-path/*', (c) => c.text('Wildcard route'))
36
+ * ```
37
+ */
38
+ declare const trimTrailingSlash: (options?: TrimTrailingSlashOptions) => MiddlewareHandler;
39
+ type AppendTrailingSlashOptions = {
40
+ /**
41
+ * If `true`, the middleware will always redirect requests without a trailing slash
42
+ * before executing handlers.
43
+ * This is useful for routes with wildcards (`*`).
44
+ * If `false` (default), it will only redirect when the route is not found (404).
45
+ * @default false
46
+ */
47
+ alwaysRedirect?: boolean;
48
+ /**
49
+ * A function that determines whether to skip the redirect for a given path.
50
+ * If the function returns `true`, the redirect will be skipped.
51
+ * @param path - The request path
52
+ * @returns `true` to skip the redirect
53
+ *
54
+ * @example
55
+ * ```ts
56
+ * // Skip redirect for paths with file extensions
57
+ * app.use(appendTrailingSlash({
58
+ * alwaysRedirect: true,
59
+ * skip: (path) => /\.\w+$/.test(path),
60
+ * }))
61
+ * ```
62
+ */
63
+ skip?: (path: string) => boolean;
64
+ };
65
+ /**
66
+ * Append trailing slash middleware for Acryl.
67
+ * Append a trailing slash to the URL if it doesn't have one. For example, `/path/to/page` will be redirected to `/path/to/page/`.
68
+ *
69
+ *
70
+ * @param {AppendTrailingSlashOptions} options - The options for the middleware.
71
+ * @returns {MiddlewareHandler} The middleware handler function.
72
+ *
73
+ * @example
74
+ * ```ts
75
+ * const app = new Acryl()
76
+ *
77
+ * app.use(appendTrailingSlash())
78
+ * ```
79
+ *
80
+ * @example
81
+ * ```ts
82
+ * // With alwaysRedirect option for wildcard routes
83
+ * const app = new Acryl()
84
+ *
85
+ * app.use(appendTrailingSlash({ alwaysRedirect: true }))
86
+ * app.get('/my-path/*', (c) => c.text('Wildcard route'))
87
+ * ```
88
+ */
89
+ declare const appendTrailingSlash: (options?: AppendTrailingSlashOptions) => MiddlewareHandler;
90
+ //#endregion
91
+ export { appendTrailingSlash, trimTrailingSlash };
@@ -0,0 +1,85 @@
1
+ //#region ../../plugins/acryl-router/src/core/middleware/trailing-slash/index.ts
2
+ /**
3
+ * Trailing Slash Middleware for Acryl.
4
+ *
5
+ *
6
+ * @param {TrimTrailingSlashOptions} options - The options for the middleware.
7
+ * @returns {MiddlewareHandler} The middleware handler function.
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * const app = new Acryl()
12
+ *
13
+ * app.use(trimTrailingSlash())
14
+ * app.get('/about/me/', (c) => c.text('With Trailing Slash'))
15
+ * ```
16
+ *
17
+ * @example
18
+ * ```ts
19
+ * // With alwaysRedirect option for wildcard routes
20
+ * const app = new Acryl()
21
+ *
22
+ * app.use(trimTrailingSlash({ alwaysRedirect: true }))
23
+ * app.get('/my-path/*', (c) => c.text('Wildcard route'))
24
+ * ```
25
+ */
26
+ const trimTrailingSlash = (options) => {
27
+ return async function trimTrailingSlash(c, next) {
28
+ if (options?.alwaysRedirect) {
29
+ if ((c.req.method === "GET" || c.req.method === "HEAD") && c.req.path !== "/" && c.req.path.at(-1) === "/") {
30
+ const url = new URL(c.req.url);
31
+ url.pathname = url.pathname.substring(0, url.pathname.length - 1);
32
+ return c.redirect(url.toString(), 301);
33
+ }
34
+ }
35
+ await next();
36
+ if (!options?.alwaysRedirect && c.res.status === 404 && (c.req.method === "GET" || c.req.method === "HEAD") && c.req.path !== "/" && c.req.path.at(-1) === "/") {
37
+ const url = new URL(c.req.url);
38
+ url.pathname = url.pathname.substring(0, url.pathname.length - 1);
39
+ c.res = c.redirect(url.toString(), 301);
40
+ }
41
+ };
42
+ };
43
+ /**
44
+ * Append trailing slash middleware for Acryl.
45
+ * Append a trailing slash to the URL if it doesn't have one. For example, `/path/to/page` will be redirected to `/path/to/page/`.
46
+ *
47
+ *
48
+ * @param {AppendTrailingSlashOptions} options - The options for the middleware.
49
+ * @returns {MiddlewareHandler} The middleware handler function.
50
+ *
51
+ * @example
52
+ * ```ts
53
+ * const app = new Acryl()
54
+ *
55
+ * app.use(appendTrailingSlash())
56
+ * ```
57
+ *
58
+ * @example
59
+ * ```ts
60
+ * // With alwaysRedirect option for wildcard routes
61
+ * const app = new Acryl()
62
+ *
63
+ * app.use(appendTrailingSlash({ alwaysRedirect: true }))
64
+ * app.get('/my-path/*', (c) => c.text('Wildcard route'))
65
+ * ```
66
+ */
67
+ const appendTrailingSlash = (options) => {
68
+ return async function appendTrailingSlash(c, next) {
69
+ if (options?.alwaysRedirect) {
70
+ if ((c.req.method === "GET" || c.req.method === "HEAD") && c.req.path.at(-1) !== "/" && !options.skip?.(c.req.path)) {
71
+ const url = new URL(c.req.url);
72
+ url.pathname += "/";
73
+ return c.redirect(url.toString(), 301);
74
+ }
75
+ }
76
+ await next();
77
+ if (!options?.alwaysRedirect && c.res.status === 404 && (c.req.method === "GET" || c.req.method === "HEAD") && c.req.path.at(-1) !== "/" && !options?.skip?.(c.req.path)) {
78
+ const url = new URL(c.req.url);
79
+ url.pathname += "/";
80
+ c.res = c.redirect(url.toString(), 301);
81
+ }
82
+ };
83
+ };
84
+ //#endregion
85
+ export { appendTrailingSlash, trimTrailingSlash };
@@ -0,0 +1,146 @@
1
+ import { checkOptionalParameter, getPattern, splitPath, splitRoutingPath } from "./utils/url.js";
2
+ import "./router.js";
3
+ import { t as createNullObject } from "./utils-dw8lxqjL.js";
4
+ //#region ../../plugins/acryl-router/src/core/router/trie-router/node.ts
5
+ const emptyParams = createNullObject();
6
+ let order = 0;
7
+ var Node = class Node {
8
+ #methods = [];
9
+ #children = createNullObject();
10
+ #patterns = [];
11
+ #pattern;
12
+ #params = emptyParams;
13
+ insert(method, path, handler) {
14
+ let curNode = this;
15
+ const parts = splitRoutingPath(path);
16
+ const possibleKeys = /* @__PURE__ */ new Set();
17
+ let i = 0;
18
+ for (const p of parts) {
19
+ const nextP = parts[++i];
20
+ const pattern = getPattern(p, nextP) || (nextP === void 0 && p && p.indexOf("*") === p.length - 1 ? p : null);
21
+ const isParam = Array.isArray(pattern);
22
+ const key = isParam ? pattern[0] : pattern || p;
23
+ const child = curNode.#children[key] ||= new Node();
24
+ if (pattern && !child.#pattern) {
25
+ child.#pattern = pattern;
26
+ curNode.#patterns.push(child);
27
+ }
28
+ curNode = child;
29
+ if (isParam) possibleKeys.add(pattern[1]);
30
+ }
31
+ curNode.#methods.push({ [method]: {
32
+ handler,
33
+ possibleKeys: [...possibleKeys],
34
+ score: ++order
35
+ } });
36
+ }
37
+ #pushHandlerSets(handlerSets, node, method, nodeParams, params) {
38
+ for (let i = 0, len = node.#methods.length; i < len; i++) {
39
+ const m = node.#methods[i];
40
+ const handlerSet = m[method] || m["ALL"];
41
+ if (handlerSet) {
42
+ handlerSet.params = createNullObject();
43
+ handlerSets.push(handlerSet);
44
+ for (let i = 0, len = handlerSet.possibleKeys.length; i < len; i++) {
45
+ const key = handlerSet.possibleKeys[i];
46
+ handlerSet.params[key] = params?.[key] && !i ? params[key] : nodeParams[key] ?? params?.[key];
47
+ }
48
+ }
49
+ }
50
+ }
51
+ search(method, path) {
52
+ const handlerSets = [];
53
+ this.#params = emptyParams;
54
+ let curNodes = [this];
55
+ const parts = splitPath(path);
56
+ const curNodesQueue = [];
57
+ const len = parts.length;
58
+ let partOffsets = null;
59
+ for (let i = 0; i < len; i++) {
60
+ const part = parts[i];
61
+ const isLast = i === len - 1;
62
+ const tempNodes = [];
63
+ for (let j = 0, len2 = curNodes.length; j < len2; j++) {
64
+ const node = curNodes[j];
65
+ const nextNode = node.#children[part];
66
+ if (nextNode) {
67
+ nextNode.#params = node.#params;
68
+ if (isLast) {
69
+ if (nextNode.#children["*"]) this.#pushHandlerSets(handlerSets, nextNode.#children["*"], method, node.#params);
70
+ this.#pushHandlerSets(handlerSets, nextNode, method, node.#params);
71
+ } else tempNodes.push(nextNode);
72
+ }
73
+ for (const child of node.#patterns) {
74
+ const pattern = child.#pattern;
75
+ const params = node.#params === emptyParams ? {} : { ...node.#params };
76
+ if (typeof pattern === "string") {
77
+ if (pattern === "*" || part.startsWith(pattern.slice(0, -1))) {
78
+ this.#pushHandlerSets(handlerSets, child, method, node.#params);
79
+ if (pattern === "*") {
80
+ child.#params = params;
81
+ tempNodes.push(child);
82
+ }
83
+ }
84
+ continue;
85
+ }
86
+ const [, name, matcher] = pattern;
87
+ if (!part && matcher === true) continue;
88
+ if (matcher !== true) {
89
+ if (!partOffsets) {
90
+ partOffsets = [];
91
+ let offset = path[0] === "/" ? 1 : 0;
92
+ for (let p = 0; p < len; p++) {
93
+ partOffsets[p] = offset;
94
+ offset += parts[p].length + 1;
95
+ }
96
+ }
97
+ const restPathString = path.slice(partOffsets[i]);
98
+ const m = matcher.exec(restPathString);
99
+ if (m) {
100
+ if (!Object.hasOwn(params, name)) params[name] = m[0];
101
+ this.#pushHandlerSets(handlerSets, child, method, node.#params, params);
102
+ if (m[0].length === restPathString.length && child.#children["*"]) this.#pushHandlerSets(handlerSets, child.#children["*"], method, node.#params, params);
103
+ for (const _ in child.#children) {
104
+ child.#params = params;
105
+ const componentCount = m[0].match(/\//g)?.length ?? 0;
106
+ (curNodesQueue[componentCount] ||= []).push(child);
107
+ break;
108
+ }
109
+ continue;
110
+ }
111
+ }
112
+ if (matcher === true || matcher.test(part)) {
113
+ if (!Object.hasOwn(params, name)) params[name] = part;
114
+ if (isLast) {
115
+ this.#pushHandlerSets(handlerSets, child, method, params, node.#params);
116
+ if (child.#children["*"]) this.#pushHandlerSets(handlerSets, child.#children["*"], method, params, node.#params);
117
+ } else {
118
+ child.#params = params;
119
+ tempNodes.push(child);
120
+ }
121
+ }
122
+ }
123
+ }
124
+ const shifted = curNodesQueue.shift();
125
+ curNodes = shifted ? tempNodes.concat(shifted) : tempNodes;
126
+ }
127
+ if (handlerSets[1]) handlerSets.sort((a, b) => {
128
+ return a.score - b.score;
129
+ });
130
+ return [handlerSets.map(({ handler, params }) => [handler, params])];
131
+ }
132
+ };
133
+ //#endregion
134
+ //#region ../../plugins/acryl-router/src/core/router/trie-router/router.ts
135
+ var TrieRouter = class {
136
+ name = "TrieRouter";
137
+ #node = new Node();
138
+ add(method, path, handler) {
139
+ for (const result of checkOptionalParameter(path) || [path]) this.#node.insert(method, result, handler);
140
+ }
141
+ match(method, path) {
142
+ return this.#node.search(method, path);
143
+ }
144
+ };
145
+ //#endregion
146
+ export { TrieRouter as t };
@@ -0,0 +1,40 @@
1
+ import { t as Context } from "./context-Bm7rI-oK.js";
2
+
3
+ //#region ../../plugins/acryl-router/src/core/helper/conninfo/types.d.ts
4
+ type AddressType = 'IPv6' | 'IPv4' | undefined;
5
+ type NetAddrInfo = {
6
+ /**
7
+ * Transport protocol type
8
+ */
9
+ transport?: 'tcp' | 'udp';
10
+ /**
11
+ * Transport port number
12
+ */
13
+ port?: number;
14
+ address?: string;
15
+ addressType?: AddressType;
16
+ } & ({
17
+ /**
18
+ * Host name such as IP Addr
19
+ */
20
+ address: string;
21
+ /**
22
+ * Host name type
23
+ */
24
+ addressType: AddressType;
25
+ } | {});
26
+ /**
27
+ * HTTP Connection information
28
+ */
29
+ interface ConnInfo {
30
+ /**
31
+ * Remote information
32
+ */
33
+ remote: NetAddrInfo;
34
+ }
35
+ /**
36
+ * Helper type
37
+ */
38
+ type GetConnInfo = (c: Context) => ConnInfo;
39
+ //#endregion
40
+ export { NetAddrInfo as i, ConnInfo as n, GetConnInfo as r, AddressType as t };