acrylblends 0.4.1 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +73 -0
- package/docs/framework/README.md +51 -51
- package/docs/framework/UPSTREAM.md +1 -1
- package/docs/framework/agents/index.md +24 -0
- package/docs/framework/api/acryl.md +259 -0
- package/docs/framework/api/context.md +527 -0
- package/docs/framework/api/exception.md +80 -0
- package/docs/framework/api/index.md +12 -0
- package/docs/framework/api/presets.md +65 -0
- package/docs/framework/api/request.md +396 -0
- package/docs/framework/api/routing.md +303 -0
- package/docs/framework/{api-summary.md → api/summary.md} +19 -17
- package/docs/framework/concepts/benchmarks.md +26 -0
- package/docs/framework/concepts/developer-experience.md +5 -0
- package/docs/framework/concepts/middleware.md +21 -0
- package/docs/framework/concepts/motivation.md +14 -0
- package/docs/framework/concepts/routers.md +63 -0
- package/docs/framework/concepts/stacks.md +235 -0
- package/docs/framework/concepts/web-standard.md +37 -0
- package/docs/framework/{getting-started.md → cordis/acryl-in-a-cordis-app.md} +16 -16
- package/docs/framework/{concepts.md → cordis/concepts.md} +2 -2
- package/docs/framework/cordis/middleware.md +8 -0
- package/docs/framework/{migration-from-0-3.md → cordis/migration-from-0-3.md} +16 -13
- package/docs/framework/cordis/migration-from-0-4.md +14 -0
- package/docs/framework/{migration-from-dsh-webserver.md → cordis/migration-from-dsh-webserver.md} +7 -7
- package/docs/framework/{routing.md → cordis/mounting.md} +5 -108
- package/docs/framework/{node-server.md → cordis/node-server.md} +4 -4
- package/docs/framework/{surfaces.md → cordis/surfaces.md} +2 -2
- package/docs/framework/cordis/transport-and-cancellation.md +57 -0
- package/docs/framework/{validation.md → cordis/validation.md} +9 -9
- package/docs/framework/getting-started/basic.md +196 -0
- package/docs/framework/getting-started/bun.md +221 -0
- package/docs/framework/getting-started/nodejs.md +344 -0
- package/docs/framework/getting-started/other-runtimes.md +23 -0
- package/docs/framework/guides/best-practices.md +231 -0
- package/docs/framework/guides/create-acrylblends.md +79 -0
- package/docs/framework/guides/examples.md +3 -0
- package/docs/framework/guides/faq.md +19 -0
- package/docs/framework/guides/helpers.md +33 -0
- package/docs/framework/guides/jsx-dom.md +299 -0
- package/docs/framework/guides/jsx.md +440 -0
- package/docs/framework/guides/middleware.md +253 -0
- package/docs/framework/guides/rpc.md +886 -0
- package/docs/framework/guides/testing.md +133 -0
- package/docs/framework/guides/validation.md +383 -0
- package/docs/framework/helpers/accepts.md +60 -0
- package/docs/framework/helpers/adapter.md +87 -0
- package/docs/framework/helpers/conninfo.md +112 -0
- package/docs/framework/helpers/cookie.md +232 -0
- package/docs/framework/helpers/css.md +285 -0
- package/docs/framework/helpers/dev.md +67 -0
- package/docs/framework/helpers/factory.md +180 -0
- package/docs/framework/helpers/html.md +123 -0
- package/docs/framework/helpers/jwt.md +184 -0
- package/docs/framework/helpers/proxy.md +118 -0
- package/docs/framework/helpers/route.md +143 -0
- package/docs/framework/helpers/ssg.md +393 -0
- package/docs/framework/helpers/streaming.md +119 -0
- package/docs/framework/helpers/testing.md +101 -0
- package/docs/framework/helpers/websocket.md +215 -0
- package/docs/framework/middleware/builtin/basic-auth.md +165 -0
- package/docs/framework/middleware/builtin/bearer-auth.md +138 -0
- package/docs/framework/middleware/builtin/body-limit.md +71 -0
- package/docs/framework/middleware/builtin/cache.md +122 -0
- package/docs/framework/middleware/builtin/combine.md +94 -0
- package/docs/framework/middleware/builtin/compress.md +59 -0
- package/docs/framework/middleware/builtin/context-storage.md +78 -0
- package/docs/framework/middleware/builtin/cors.md +135 -0
- package/docs/framework/middleware/builtin/csrf.md +105 -0
- package/docs/framework/middleware/builtin/etag.md +54 -0
- package/docs/framework/middleware/builtin/ip-restriction.md +69 -0
- package/docs/framework/middleware/builtin/jsx-renderer.md +286 -0
- package/docs/framework/middleware/builtin/jwk.md +192 -0
- package/docs/framework/middleware/builtin/jwt.md +145 -0
- package/docs/framework/middleware/builtin/language.md +232 -0
- package/docs/framework/middleware/builtin/logger.md +74 -0
- package/docs/framework/middleware/builtin/loopback-only.md +31 -0
- package/docs/framework/middleware/builtin/method-not-allowed.md +48 -0
- package/docs/framework/middleware/builtin/method-override.md +80 -0
- package/docs/framework/middleware/builtin/mount.md +106 -0
- package/docs/framework/middleware/builtin/pretty-json.md +53 -0
- package/docs/framework/middleware/builtin/request-id.md +94 -0
- package/docs/framework/middleware/builtin/secure-headers.md +247 -0
- package/docs/framework/middleware/builtin/timeout.md +98 -0
- package/docs/framework/middleware/builtin/timing.md +101 -0
- package/docs/framework/middleware/builtin/trailing-slash.md +74 -0
- package/docs/framework/middleware/third-party.md +4 -0
- package/docs/framework/upstream.json +3 -3
- package/lib/accepts-XBuZPVRI.js +52 -0
- package/lib/accepts.d.ts +33 -0
- package/lib/accepts.js +2 -0
- package/lib/acryl-base.d.ts +2 -0
- package/lib/acryl-base.js +332 -0
- package/lib/adapter.d.ts +12 -0
- package/lib/adapter.js +37 -0
- package/lib/app-BM0rTCp7.js +26 -0
- package/lib/app-CmAYW1Al.d.ts +21 -0
- package/lib/basic-auth.d.ts +72 -0
- package/lib/basic-auth.js +95 -0
- package/lib/bearer-auth.d.ts +89 -0
- package/lib/bearer-auth.js +94 -0
- package/lib/body-limit.d.ts +42 -0
- package/lib/body-limit.js +66 -0
- package/lib/client-BHTr318g.js +266 -0
- package/lib/client.d.ts +3 -0
- package/lib/client.js +2 -0
- package/lib/combine.d.ts +85 -0
- package/lib/combine.js +137 -0
- package/lib/compose-BuW2B6PZ.js +50 -0
- package/lib/compress.d.ts +38 -0
- package/lib/compress.js +79 -0
- package/lib/connection-C7xgP1hP.js +24 -0
- package/lib/conninfo.d.ts +25 -0
- package/lib/conninfo.js +2 -0
- package/lib/constants-Dy7ZvN1H.js +4 -0
- package/lib/context-Bm7rI-oK.d.ts +1234 -0
- package/lib/context-DDO0cfuP.js +365 -0
- package/lib/context-storage.d.ts +38 -0
- package/lib/context-storage.js +52 -0
- package/lib/cookie-ClMaKDQf.d.ts +40 -0
- package/lib/cookie.d.ts +24 -0
- package/lib/cookie.js +82 -0
- package/lib/cors.d.ts +52 -0
- package/lib/cors.js +106 -0
- package/lib/csrf.d.ts +75 -0
- package/lib/csrf.js +101 -0
- package/lib/etag.d.ts +40 -0
- package/lib/etag.js +135 -0
- package/lib/factory.d.ts +35 -0
- package/lib/factory.js +30 -0
- package/lib/headers-tu2YYN8T.d.ts +11 -0
- package/lib/html.d.ts +6 -0
- package/lib/html.js +31 -0
- package/lib/http-exception.d.ts +57 -0
- package/lib/http-exception.js +54 -0
- package/lib/http-status-DaAwGAFL.d.ts +35 -0
- package/lib/index-B-3F4wt2.d.ts +12 -0
- package/lib/index-UTBmM3GX.d.ts +68 -0
- package/lib/index-oOClm_Xk.d.ts +45 -0
- package/lib/index.d.ts +5 -0
- package/lib/index.js +28 -0
- package/lib/ip-restriction.d.ts +68 -0
- package/lib/ip-restriction.js +166 -0
- package/lib/jwk.d.ts +52 -0
- package/lib/jwk.js +117 -0
- package/lib/jwt-BGJBw5AF.js +403 -0
- package/lib/jwt-Dg493Tai.d.ts +51 -0
- package/lib/jwt.d.ts +72 -0
- package/lib/jwt.js +115 -0
- package/lib/language.d.ts +88 -0
- package/lib/language.js +198 -0
- package/lib/logger.d.ts +22 -0
- package/lib/logger.js +54 -0
- package/lib/loopback-only.d.ts +45 -0
- package/lib/loopback-only.js +90 -0
- package/lib/method-not-allowed.d.ts +47 -0
- package/lib/method-not-allowed.js +82 -0
- package/lib/method-override.d.ts +46 -0
- package/lib/method-override.js +103 -0
- package/lib/mime-BQOYHl-l.d.ts +72 -0
- package/lib/node-server/conninfo.d.ts +11 -0
- package/lib/node-server/conninfo.js +19 -0
- package/lib/node-server/serve-static.d.ts +19 -0
- package/lib/node-server/serve-static.js +2 -0
- package/lib/node-server.d.ts +103 -0
- package/lib/node-server.js +1325 -0
- package/lib/powered-by.d.ts +28 -0
- package/lib/powered-by.js +24 -0
- package/lib/pretty-json.d.ts +40 -0
- package/lib/pretty-json.js +39 -0
- package/lib/reg-exp-router-DC1R3qoY.js +363 -0
- package/lib/request-id.d.ts +45 -0
- package/lib/request-id.js +34 -0
- package/lib/request.d.ts +2 -0
- package/lib/request.js +323 -0
- package/lib/route.d.ts +78 -0
- package/lib/route.js +126 -0
- package/lib/router/linear-router.d.ts +11 -0
- package/lib/router/linear-router.js +96 -0
- package/lib/router/pattern-router.d.ts +11 -0
- package/lib/router/pattern-router.js +41 -0
- package/lib/router/reg-exp-router.d.ts +35 -0
- package/lib/router/reg-exp-router.js +2 -0
- package/lib/router/smart-router.d.ts +15 -0
- package/lib/router/smart-router.js +2 -0
- package/lib/router/trie-router.d.ts +11 -0
- package/lib/router/trie-router.js +2 -0
- package/lib/router-CvUxUTOq.d.ts +99 -0
- package/lib/router.d.ts +2 -0
- package/lib/router.js +35 -0
- package/lib/schema-validator.d.ts +28 -0
- package/lib/schema-validator.js +22 -0
- package/lib/secure-headers.d.ts +125 -0
- package/lib/secure-headers.js +163 -0
- package/lib/serve-static-Dw_m6KxR.js +213 -0
- package/lib/serve-static.d.ts +31 -0
- package/lib/serve-static.js +77 -0
- package/lib/smart-router-C5CZ5XSM.js +49 -0
- package/lib/stream-CPdqZ0Fp.d.ts +34 -0
- package/lib/streaming-DHST3Scg.js +96 -0
- package/lib/streaming.d.ts +23 -0
- package/lib/streaming.js +2 -0
- package/lib/testing.d.ts +10 -0
- package/lib/testing.js +17 -0
- package/lib/timeout.d.ts +30 -0
- package/lib/timeout.js +42 -0
- package/lib/timing.d.ts +130 -0
- package/lib/timing.js +183 -0
- package/lib/trailing-slash.d.ts +91 -0
- package/lib/trailing-slash.js +85 -0
- package/lib/trie-router-CfFbapzL.js +146 -0
- package/lib/types-CDO6I3B0.d.ts +40 -0
- package/lib/types-CHesD1KG.d.ts +195 -0
- package/lib/types-CwrQjlaM.d.ts +105 -0
- package/lib/types-DR95J00T.d.ts +29 -0
- package/lib/types.d.ts +2 -0
- package/lib/types.js +4 -0
- package/lib/utils/accept.d.ts +9 -0
- package/lib/utils/accept.js +193 -0
- package/lib/utils/basic-auth.d.ts +8 -0
- package/lib/utils/basic-auth.js +20 -0
- package/lib/utils/body.d.ts +2 -0
- package/lib/utils/body.js +94 -0
- package/lib/utils/buffer.d.ts +19 -0
- package/lib/utils/buffer.js +51 -0
- package/lib/utils/color.d.ts +24 -0
- package/lib/utils/color.js +37 -0
- package/lib/utils/compress.d.ts +11 -0
- package/lib/utils/compress.js +11 -0
- package/lib/utils/concurrent.d.ts +17 -0
- package/lib/utils/concurrent.js +30 -0
- package/lib/utils/constants.d.ts +7 -0
- package/lib/utils/constants.js +7 -0
- package/lib/utils/cookie.d.ts +2 -0
- package/lib/utils/cookie.js +125 -0
- package/lib/utils/crypto.d.ts +14 -0
- package/lib/utils/crypto.js +34 -0
- package/lib/utils/encode.d.ts +11 -0
- package/lib/utils/encode.js +33 -0
- package/lib/utils/filepath.d.ts +14 -0
- package/lib/utils/filepath.js +25 -0
- package/lib/utils/handler.d.ts +9 -0
- package/lib/utils/handler.js +12 -0
- package/lib/utils/headers.d.ts +2 -0
- package/lib/utils/headers.js +1 -0
- package/lib/utils/html.d.ts +46 -0
- package/lib/utils/html.js +103 -0
- package/lib/utils/http-status.d.ts +2 -0
- package/lib/utils/http-status.js +1 -0
- package/lib/utils/ipaddr.d.ts +56 -0
- package/lib/utils/ipaddr.js +238 -0
- package/lib/utils/jwt.d.ts +24 -0
- package/lib/utils/jwt.js +2 -0
- package/lib/utils/mime.d.ts +2 -0
- package/lib/utils/mime.js +77 -0
- package/lib/utils/stream.d.ts +2 -0
- package/lib/utils/stream.js +88 -0
- package/lib/utils/types.d.ts +2 -0
- package/lib/utils/types.js +1 -0
- package/lib/utils/url.d.ts +46 -0
- package/lib/utils/url.js +197 -0
- package/lib/utils-dw8lxqjL.js +4 -0
- package/lib/validator-D84mq-dO.js +65 -0
- package/lib/validator.d.ts +42 -0
- package/lib/validator.js +2 -0
- package/lib/ws.d.ts +2 -0
- package/lib/ws.js +53 -0
- package/package.json +312 -14
- package/plugins/acryl-inspect/src/service.ts +2 -2
- package/plugins/acryl-inspect/tests/service.spec.ts +3 -3
- package/plugins/acryl-inspect/upstream.json +2 -2
- package/plugins/acryl-node-server/tests/adapter/app.ts +2 -2
- package/plugins/acryl-node-server/tests/adapter/assets/static/acryl.html +1 -1
- package/plugins/acryl-node-server/tests/adapter/assets/static/index.html +1 -1
- package/plugins/acryl-node-server/tests/adapter/conninfo.test.ts +2 -2
- package/plugins/acryl-node-server/tests/adapter/content-length.test.ts +4 -4
- package/plugins/acryl-node-server/tests/adapter/early-hints.test.ts +5 -5
- package/plugins/acryl-node-server/tests/adapter/request-client-disconnect.test.ts +2 -2
- package/plugins/acryl-node-server/tests/adapter/serve-static.test.ts +20 -20
- package/plugins/acryl-node-server/tests/adapter/server-socket.test.ts +2 -2
- package/plugins/acryl-node-server/tests/adapter/server.test.ts +50 -50
- package/plugins/acryl-node-server/tests/adapter/utils/response.test.ts +4 -4
- package/plugins/acryl-node-server/tests/adapter/websocket.test.ts +9 -9
- package/plugins/acryl-node-server/tests/server.spec.ts +6 -6
- package/plugins/acryl-node-server/upstream.json +2 -2
- package/plugins/acryl-router/src/client.ts +1 -1
- package/plugins/acryl-router/src/connection.ts +2 -2
- package/plugins/acryl-router/src/core/app-base.ts +29 -29
- package/plugins/acryl-router/src/core/app.test.ts +175 -175
- package/plugins/acryl-router/src/core/app.ts +8 -8
- package/plugins/acryl-router/src/core/client/client.test.ts +76 -76
- package/plugins/acryl-router/src/core/client/client.ts +2 -2
- package/plugins/acryl-router/src/core/client/fetch-result-please.ts +1 -1
- package/plugins/acryl-router/src/core/client/index.ts +1 -1
- package/plugins/acryl-router/src/core/client/types.test.ts +6 -6
- package/plugins/acryl-router/src/core/client/types.ts +16 -16
- package/plugins/acryl-router/src/core/client/utils.test.ts +2 -2
- package/plugins/acryl-router/src/core/context.test.ts +4 -4
- package/plugins/acryl-router/src/core/context.ts +6 -6
- package/plugins/acryl-router/src/core/helper/accepts/accepts.test.ts +3 -3
- package/plugins/acryl-router/src/core/helper/accepts/index.ts +1 -1
- package/plugins/acryl-router/src/core/helper/adapter/index.test.ts +6 -6
- package/plugins/acryl-router/src/core/helper/adapter/index.ts +1 -1
- package/plugins/acryl-router/src/core/helper/conninfo/index.ts +1 -1
- package/plugins/acryl-router/src/core/helper/cookie/index.test.ts +8 -8
- package/plugins/acryl-router/src/core/helper/cookie/index.ts +1 -1
- package/plugins/acryl-router/src/core/helper/factory/index.test.ts +9 -9
- package/plugins/acryl-router/src/core/helper/factory/index.ts +10 -10
- package/plugins/acryl-router/src/core/helper/html/index.test.ts +4 -4
- package/plugins/acryl-router/src/core/helper/html/index.ts +1 -1
- package/plugins/acryl-router/src/core/helper/route/index.test.ts +7 -7
- package/plugins/acryl-router/src/core/helper/route/index.ts +8 -8
- package/plugins/acryl-router/src/core/helper/streaming/index.ts +1 -1
- package/plugins/acryl-router/src/core/helper/testing/index.test.ts +6 -6
- package/plugins/acryl-router/src/core/helper/testing/index.ts +4 -4
- package/plugins/acryl-router/src/core/helper/websocket/index.ts +2 -1
- package/plugins/acryl-router/src/core/http-exception.ts +1 -1
- package/plugins/acryl-router/src/core/index.ts +9 -9
- package/plugins/acryl-router/src/core/middleware/basic-auth/index.test.ts +6 -6
- package/plugins/acryl-router/src/core/middleware/basic-auth/index.ts +3 -3
- package/plugins/acryl-router/src/core/middleware/bearer-auth/index.test.ts +5 -5
- package/plugins/acryl-router/src/core/middleware/bearer-auth/index.ts +3 -3
- package/plugins/acryl-router/src/core/middleware/body-limit/index.test.ts +6 -6
- package/plugins/acryl-router/src/core/middleware/body-limit/index.ts +3 -3
- package/plugins/acryl-router/src/core/middleware/combine/index.test.ts +9 -9
- package/plugins/acryl-router/src/core/middleware/combine/index.ts +7 -7
- package/plugins/acryl-router/src/core/middleware/compress/index.test.ts +9 -9
- package/plugins/acryl-router/src/core/middleware/compress/index.ts +3 -3
- package/plugins/acryl-router/src/core/middleware/context-storage/index.test.ts +5 -5
- package/plugins/acryl-router/src/core/middleware/context-storage/index.ts +4 -4
- package/plugins/acryl-router/src/core/middleware/cors/index.test.ts +7 -7
- package/plugins/acryl-router/src/core/middleware/cors/index.ts +3 -3
- package/plugins/acryl-router/src/core/middleware/csrf/index.test.ts +10 -10
- package/plugins/acryl-router/src/core/middleware/csrf/index.ts +3 -3
- package/plugins/acryl-router/src/core/middleware/etag/index.test.ts +42 -42
- package/plugins/acryl-router/src/core/middleware/etag/index.ts +4 -4
- package/plugins/acryl-router/src/core/middleware/ip-restriction/index.test.ts +4 -4
- package/plugins/acryl-router/src/core/middleware/ip-restriction/index.ts +6 -6
- package/plugins/acryl-router/src/core/middleware/jwk/index.test.ts +16 -16
- package/plugins/acryl-router/src/core/middleware/jwk/jwk.ts +7 -6
- package/plugins/acryl-router/src/core/middleware/jwt/index.test.ts +16 -16
- package/plugins/acryl-router/src/core/middleware/jwt/jwt.ts +4 -3
- package/plugins/acryl-router/src/core/middleware/language/index.test.ts +3 -3
- package/plugins/acryl-router/src/core/middleware/language/language.ts +3 -3
- package/plugins/acryl-router/src/core/middleware/logger/index.test.ts +5 -5
- package/plugins/acryl-router/src/core/middleware/logger/index.ts +4 -4
- package/plugins/acryl-router/src/core/middleware/method-not-allowed/index.test.ts +24 -24
- package/plugins/acryl-router/src/core/middleware/method-not-allowed/index.ts +8 -8
- package/plugins/acryl-router/src/core/middleware/method-override/index.test.ts +5 -5
- package/plugins/acryl-router/src/core/middleware/method-override/index.ts +6 -6
- package/plugins/acryl-router/src/core/middleware/powered-by/index.test.ts +4 -4
- package/plugins/acryl-router/src/core/middleware/powered-by/index.ts +6 -6
- package/plugins/acryl-router/src/core/middleware/pretty-json/index.test.ts +30 -30
- package/plugins/acryl-router/src/core/middleware/pretty-json/index.ts +4 -4
- package/plugins/acryl-router/src/core/middleware/request-id/index.test.ts +15 -15
- package/plugins/acryl-router/src/core/middleware/request-id/request-id.ts +3 -3
- package/plugins/acryl-router/src/core/middleware/secure-headers/index.test.ts +35 -35
- package/plugins/acryl-router/src/core/middleware/secure-headers/secure-headers.ts +3 -3
- package/plugins/acryl-router/src/core/middleware/serve-static/index.test.ts +23 -23
- package/plugins/acryl-router/src/core/middleware/serve-static/index.ts +1 -1
- package/plugins/acryl-router/src/core/middleware/timeout/index.test.ts +2 -2
- package/plugins/acryl-router/src/core/middleware/timeout/index.ts +3 -3
- package/plugins/acryl-router/src/core/middleware/timing/index.test.ts +14 -14
- package/plugins/acryl-router/src/core/middleware/timing/timing.ts +3 -3
- package/plugins/acryl-router/src/core/middleware/trailing-slash/index.test.ts +7 -7
- package/plugins/acryl-router/src/core/middleware/trailing-slash/index.ts +7 -7
- package/plugins/acryl-router/src/core/request.test.ts +42 -42
- package/plugins/acryl-router/src/core/request.ts +6 -6
- package/plugins/acryl-router/src/core/router/linear-router/index.ts +1 -1
- package/plugins/acryl-router/src/core/router/pattern-router/index.ts +1 -1
- package/plugins/acryl-router/src/core/router/reg-exp-router/index.ts +1 -1
- package/plugins/acryl-router/src/core/router/smart-router/index.ts +1 -1
- package/plugins/acryl-router/src/core/router/trie-router/index.ts +1 -1
- package/plugins/acryl-router/src/core/types.test.ts +115 -115
- package/plugins/acryl-router/src/core/types.ts +72 -72
- package/plugins/acryl-router/src/core/utils/body.ts +8 -8
- package/plugins/acryl-router/src/core/utils/html.ts +1 -1
- package/plugins/acryl-router/src/core/utils/jwt/jws.ts +3 -3
- package/plugins/acryl-router/src/core/utils/jwt/jwt.test.ts +2 -2
- package/plugins/acryl-router/src/core/utils/jwt/jwt.ts +3 -3
- package/plugins/acryl-router/src/core/utils/jwt/types.ts +1 -1
- package/plugins/acryl-router/src/core/utils/types.ts +42 -0
- package/plugins/acryl-router/src/core/utils/url.test.ts +2 -2
- package/plugins/acryl-router/src/core/validator/index.ts +1 -1
- package/plugins/acryl-router/src/core/validator/validator.test.ts +28 -28
- package/plugins/acryl-router/src/deprecated.ts +15 -0
- package/plugins/acryl-router/src/index.ts +3 -2
- package/plugins/acryl-router/src/service.ts +10 -10
- package/plugins/acryl-router/tests/docs-examples.spec.ts +11 -11
- package/plugins/acryl-router/tests/live-install.spec.ts +2 -2
- package/plugins/acryl-router/tests/loader.spec.ts +3 -3
- package/plugins/acryl-router/tests/loopback-only.spec.ts +4 -4
- package/plugins/acryl-router/tests/no-dom/consumer.ts +11 -0
- package/plugins/acryl-router/tests/no-dom/tsconfig.json +13 -0
- package/plugins/acryl-router/tests/service.spec.ts +23 -23
- package/plugins/acryl-router/upstream.json +3 -3
- package/plugins/acryl-router-http/tests/adapter.spec.ts +3 -3
- package/plugins/acryl-router-http/tests/surfaces.spec.ts +2 -2
- package/plugins/acryl-router-http/upstream.json +2 -2
- package/plugins/acryl-state/src/service.ts +2 -2
- package/plugins/acryl-state/upstream.json +2 -2
- package/plugins/builder/script.ts +2 -2
- package/plugins/extensions/resolve.ts +70 -10
- package/plugins/openai/prompt.ts +5 -5
- package/shared/AGENTS.core.md +16 -9
- package/templates/agent/src/routes.ts +2 -2
- package/templates/agent/test/model.test.ts +2 -2
- package/templates/agent/tsconfig.json +40 -0
- package/templates/blank/src/routes.ts +2 -2
- package/templates/todo/src/todo.ts +2 -2
- package/templates/todo/upstream.json +2 -2
- package/docs/framework/context.md +0 -129
- package/docs/framework/helpers.md +0 -118
- package/docs/framework/middleware.md +0 -154
- package/docs/framework/request.md +0 -106
- /package/docs/framework/{plugin-lifecycle.md → cordis/plugin-lifecycle.md} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
832
|
+
const app = new Acryl<{
|
|
833
833
|
Variables: {
|
|
834
834
|
path: string
|
|
835
835
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
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
|
|
22
|
+
const app = new Acryl()
|
|
23
23
|
|
|
24
24
|
app.post(
|
|
25
25
|
'/',
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
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': '
|
|
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('
|
|
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
|
|
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
|
|
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
|
|
|
@@ -189,7 +189,7 @@ describe('various response body types', () => {
|
|
|
189
189
|
let resolveEventStreamPromise: () => void
|
|
190
190
|
let resolveEventStreamWithoutTransferEncodingPromise: () => void
|
|
191
191
|
beforeAll(() => {
|
|
192
|
-
const app = new
|
|
192
|
+
const app = new Acryl()
|
|
193
193
|
app.use('*', async (c, next) => {
|
|
194
194
|
await next()
|
|
195
195
|
|
|
@@ -286,34 +286,34 @@ describe('various response body types', () => {
|
|
|
286
286
|
})
|
|
287
287
|
})
|
|
288
288
|
app.get('/buffer', () => {
|
|
289
|
-
const response = new Response(Buffer.from('Hello
|
|
289
|
+
const response = new Response(Buffer.from('Hello Acryl!'), {
|
|
290
290
|
headers: { 'content-type': 'text/plain' },
|
|
291
291
|
})
|
|
292
292
|
return response
|
|
293
293
|
})
|
|
294
294
|
app.get('/text-with-content-length-object', () => {
|
|
295
|
-
const response = new Response('Hello
|
|
296
|
-
headers: { 'content-type': 'text/plain', 'content-length': '
|
|
295
|
+
const response = new Response('Hello Acryl!', {
|
|
296
|
+
headers: { 'content-type': 'text/plain', 'content-length': '00012' },
|
|
297
297
|
})
|
|
298
298
|
return response
|
|
299
299
|
})
|
|
300
300
|
app.get('/text-with-content-length-headers', () => {
|
|
301
|
-
const response = new Response('Hello
|
|
302
|
-
headers: new Headers({ 'content-type': 'text/plain', 'content-length': '
|
|
301
|
+
const response = new Response('Hello Acryl!', {
|
|
302
|
+
headers: new Headers({ 'content-type': 'text/plain', 'content-length': '00012' }),
|
|
303
303
|
})
|
|
304
304
|
return response
|
|
305
305
|
})
|
|
306
306
|
app.get('/text-with-content-length-array', () => {
|
|
307
|
-
const response = new Response('Hello
|
|
307
|
+
const response = new Response('Hello Acryl!', {
|
|
308
308
|
headers: [
|
|
309
309
|
['content-type', 'text/plain'],
|
|
310
|
-
['content-length', '
|
|
310
|
+
['content-length', '00012'],
|
|
311
311
|
],
|
|
312
312
|
})
|
|
313
313
|
return response
|
|
314
314
|
})
|
|
315
315
|
app.get('/text-with-set-cookie-array', () => {
|
|
316
|
-
const response = new Response('Hello
|
|
316
|
+
const response = new Response('Hello Acryl!', {
|
|
317
317
|
headers: [
|
|
318
318
|
['content-type', 'text/plain'],
|
|
319
319
|
['set-cookie', 'a=1'],
|
|
@@ -325,7 +325,7 @@ describe('various response body types', () => {
|
|
|
325
325
|
|
|
326
326
|
app.use('/etag/*', etag())
|
|
327
327
|
app.get('/etag/buffer', () => {
|
|
328
|
-
const response = new Response(Buffer.from('Hello
|
|
328
|
+
const response = new Response(Buffer.from('Hello Acryl!'), {
|
|
329
329
|
headers: { 'content-type': 'text/plain' },
|
|
330
330
|
})
|
|
331
331
|
return response
|
|
@@ -442,8 +442,8 @@ describe('various response body types', () => {
|
|
|
442
442
|
const res = await requestServer(server, { method: 'GET', path: '/buffer' })
|
|
443
443
|
expect(res.status).toBe(200)
|
|
444
444
|
expect(res.headers.get('content-type')).toMatch('text/plain')
|
|
445
|
-
expect(res.headers.get('content-length')).toMatch('
|
|
446
|
-
expect(await res.text()).toBe('Hello
|
|
445
|
+
expect(res.headers.get('content-length')).toMatch('12')
|
|
446
|
+
expect(await res.text()).toBe('Hello Acryl!')
|
|
447
447
|
})
|
|
448
448
|
|
|
449
449
|
it('Should return 200 response - GET /text-with-content-length-object', async () => {
|
|
@@ -453,8 +453,8 @@ describe('various response body types', () => {
|
|
|
453
453
|
})
|
|
454
454
|
expect(res.status).toBe(200)
|
|
455
455
|
expect(res.headers.get('content-type')).toMatch('text/plain')
|
|
456
|
-
expect(res.headers.get('content-length')).toBe('
|
|
457
|
-
expect(await res.text()).toBe('Hello
|
|
456
|
+
expect(res.headers.get('content-length')).toBe('00012')
|
|
457
|
+
expect(await res.text()).toBe('Hello Acryl!')
|
|
458
458
|
})
|
|
459
459
|
|
|
460
460
|
it('Should return 200 response - GET /text-with-content-length-headers', async () => {
|
|
@@ -464,8 +464,8 @@ describe('various response body types', () => {
|
|
|
464
464
|
})
|
|
465
465
|
expect(res.status).toBe(200)
|
|
466
466
|
expect(res.headers.get('content-type')).toMatch('text/plain')
|
|
467
|
-
expect(res.headers.get('content-length')).toBe('
|
|
468
|
-
expect(await res.text()).toBe('Hello
|
|
467
|
+
expect(res.headers.get('content-length')).toBe('00012')
|
|
468
|
+
expect(await res.text()).toBe('Hello Acryl!')
|
|
469
469
|
})
|
|
470
470
|
|
|
471
471
|
it('Should return 200 response - GET /text-with-content-length-array', async () => {
|
|
@@ -475,8 +475,8 @@ describe('various response body types', () => {
|
|
|
475
475
|
})
|
|
476
476
|
expect(res.status).toBe(200)
|
|
477
477
|
expect(res.headers.get('content-type')).toMatch('text/plain')
|
|
478
|
-
expect(res.headers.get('content-length')).toBe('
|
|
479
|
-
expect(await res.text()).toBe('Hello
|
|
478
|
+
expect(res.headers.get('content-length')).toBe('00012')
|
|
479
|
+
expect(await res.text()).toBe('Hello Acryl!')
|
|
480
480
|
})
|
|
481
481
|
|
|
482
482
|
it('Should return 200 response - GET /text-with-set-cookie-array', async () => {
|
|
@@ -487,16 +487,16 @@ describe('various response body types', () => {
|
|
|
487
487
|
expect(res.status).toBe(200)
|
|
488
488
|
expect(res.headers.get('content-type')).toMatch('text/plain')
|
|
489
489
|
expect(res.headers.getSetCookie()).toEqual(['a=1', 'b=2'])
|
|
490
|
-
expect(await res.text()).toBe('Hello
|
|
490
|
+
expect(await res.text()).toBe('Hello Acryl!')
|
|
491
491
|
})
|
|
492
492
|
|
|
493
493
|
it('Should return 200 response - GET /etag/buffer', async () => {
|
|
494
494
|
const res = await requestServer(server, { method: 'GET', path: '/etag/buffer' })
|
|
495
495
|
expect(res.status).toBe(200)
|
|
496
496
|
expect(res.headers.get('content-type')).toMatch('text/plain')
|
|
497
|
-
expect(res.headers.get('etag')).toMatch('"
|
|
498
|
-
expect(res.headers.get('content-length')).toMatch('
|
|
499
|
-
expect(await res.text()).toBe('Hello
|
|
497
|
+
expect(res.headers.get('etag')).toMatch('"687f9e1bf5c0384d6b9cb63d0f6f0ba1803b2669"')
|
|
498
|
+
expect(res.headers.get('content-length')).toMatch('12')
|
|
499
|
+
expect(await res.text()).toBe('Hello Acryl!')
|
|
500
500
|
})
|
|
501
501
|
}
|
|
502
502
|
|
|
@@ -511,14 +511,14 @@ describe('various response body types', () => {
|
|
|
511
511
|
|
|
512
512
|
describe('Routing', () => {
|
|
513
513
|
describe('Nested Route', () => {
|
|
514
|
-
const book = new
|
|
514
|
+
const book = new Acryl()
|
|
515
515
|
book.get('/', (c) => c.text('get /book'))
|
|
516
516
|
book.get('/:id', (c) => {
|
|
517
517
|
return c.text('get /book/' + c.req.param('id'))
|
|
518
518
|
})
|
|
519
519
|
book.post('/', (c) => c.text('post /book'))
|
|
520
520
|
|
|
521
|
-
const app = new
|
|
521
|
+
const app = new Acryl()
|
|
522
522
|
app.route('/book', book)
|
|
523
523
|
|
|
524
524
|
const server = createAdaptorServer(app)
|
|
@@ -539,7 +539,7 @@ describe('Routing', () => {
|
|
|
539
539
|
})
|
|
540
540
|
|
|
541
541
|
describe('Chained route', () => {
|
|
542
|
-
const app = new
|
|
542
|
+
const app = new Acryl()
|
|
543
543
|
|
|
544
544
|
app
|
|
545
545
|
.get('/chained/:abc', (c) => {
|
|
@@ -568,7 +568,7 @@ describe('Routing', () => {
|
|
|
568
568
|
})
|
|
569
569
|
|
|
570
570
|
describe('Request body', () => {
|
|
571
|
-
const app = new
|
|
571
|
+
const app = new Acryl()
|
|
572
572
|
app.post('/json', async (c) => {
|
|
573
573
|
const data = await c.req.json()
|
|
574
574
|
return c.json(data)
|
|
@@ -604,7 +604,7 @@ describe('Request body', () => {
|
|
|
604
604
|
|
|
605
605
|
describe('Response body', () => {
|
|
606
606
|
describe('Cached Response', () => {
|
|
607
|
-
const app = new
|
|
607
|
+
const app = new Acryl()
|
|
608
608
|
app.get('/json', (c) => {
|
|
609
609
|
return c.json({ foo: 'bar' })
|
|
610
610
|
})
|
|
@@ -649,7 +649,7 @@ describe('Response body', () => {
|
|
|
649
649
|
})
|
|
650
650
|
|
|
651
651
|
describe('Fallback to global.Response', () => {
|
|
652
|
-
const app = new
|
|
652
|
+
const app = new Acryl()
|
|
653
653
|
|
|
654
654
|
app.get('/json-blob', async () => {
|
|
655
655
|
return new Response(new Blob([JSON.stringify({ foo: 'blob' })]), {
|
|
@@ -682,7 +682,7 @@ describe('Response body', () => {
|
|
|
682
682
|
})
|
|
683
683
|
|
|
684
684
|
describe('Middleware', () => {
|
|
685
|
-
const app = new
|
|
685
|
+
const app = new Acryl<{ Variables: { foo: string } }>()
|
|
686
686
|
app.use('*', poweredBy())
|
|
687
687
|
app.use('*', async (c, next) => {
|
|
688
688
|
c.set('foo', 'bar')
|
|
@@ -695,13 +695,13 @@ describe('Middleware', () => {
|
|
|
695
695
|
it('Should have correct header values', async () => {
|
|
696
696
|
const res = await requestServer(server, { method: 'GET', path: '/' })
|
|
697
697
|
expect(res.status).toBe(200)
|
|
698
|
-
expect(res.headers.get('x-powered-by')).toBe('
|
|
698
|
+
expect(res.headers.get('x-powered-by')).toBe('Acryl')
|
|
699
699
|
expect(res.headers.get('foo')).toBe('bar')
|
|
700
700
|
})
|
|
701
701
|
})
|
|
702
702
|
|
|
703
703
|
describe('Error handling', () => {
|
|
704
|
-
const app = new
|
|
704
|
+
const app = new Acryl()
|
|
705
705
|
app.notFound((c) => {
|
|
706
706
|
return c.text('Custom NotFound', 404)
|
|
707
707
|
})
|
|
@@ -732,7 +732,7 @@ describe('Error handling', () => {
|
|
|
732
732
|
})
|
|
733
733
|
|
|
734
734
|
describe('Basic Auth Middleware', () => {
|
|
735
|
-
const app = new
|
|
735
|
+
const app = new Acryl()
|
|
736
736
|
const username = 'acryl-user-a'
|
|
737
737
|
const password = 'acryl-password-a'
|
|
738
738
|
const unicodePassword = '炎'
|
|
@@ -788,7 +788,7 @@ describe('Basic Auth Middleware', () => {
|
|
|
788
788
|
})
|
|
789
789
|
|
|
790
790
|
describe('Stream and non-stream response', () => {
|
|
791
|
-
const app = new
|
|
791
|
+
const app = new Acryl()
|
|
792
792
|
|
|
793
793
|
app.get('/json', (c) => c.json({ foo: 'bar' }))
|
|
794
794
|
app.get('/text', (c) => c.text('Hello!'))
|
|
@@ -873,7 +873,7 @@ describe('Stream and non-stream response', () => {
|
|
|
873
873
|
})
|
|
874
874
|
|
|
875
875
|
describe('SSL', () => {
|
|
876
|
-
const app = new
|
|
876
|
+
const app = new Acryl()
|
|
877
877
|
app.get('/', (c) => c.text('Hello! Node!'))
|
|
878
878
|
app.get('/url', (c) => c.text(c.req.url))
|
|
879
879
|
|
|
@@ -905,7 +905,7 @@ describe('SSL', () => {
|
|
|
905
905
|
})
|
|
906
906
|
|
|
907
907
|
describe('HTTP2', () => {
|
|
908
|
-
const app = new
|
|
908
|
+
const app = new Acryl()
|
|
909
909
|
app.get('/', (c) => c.text('Hello! Node!'))
|
|
910
910
|
app.get('/headers', (c) => {
|
|
911
911
|
// call newRequestFromIncoming
|
|
@@ -949,8 +949,8 @@ describe('HTTP2', () => {
|
|
|
949
949
|
})
|
|
950
950
|
})
|
|
951
951
|
|
|
952
|
-
describe('
|
|
953
|
-
const app = new
|
|
952
|
+
describe('Acryl compression default gzip', () => {
|
|
953
|
+
const app = new Acryl()
|
|
954
954
|
app.use('*', compress())
|
|
955
955
|
|
|
956
956
|
app.notFound((c) => {
|
|
@@ -1013,8 +1013,8 @@ describe('App compression default gzip', () => {
|
|
|
1013
1013
|
})
|
|
1014
1014
|
})
|
|
1015
1015
|
|
|
1016
|
-
describe('
|
|
1017
|
-
const app = new
|
|
1016
|
+
describe('Acryl compression deflate', () => {
|
|
1017
|
+
const app = new Acryl()
|
|
1018
1018
|
app.use('*', compress({ encoding: 'deflate' }))
|
|
1019
1019
|
|
|
1020
1020
|
app.notFound((c) => {
|
|
@@ -1078,7 +1078,7 @@ describe('App compression deflate', () => {
|
|
|
1078
1078
|
})
|
|
1079
1079
|
|
|
1080
1080
|
describe('set child response to c.res', () => {
|
|
1081
|
-
const app = new
|
|
1081
|
+
const app = new Acryl()
|
|
1082
1082
|
app.use('*', async (c, next) => {
|
|
1083
1083
|
await next()
|
|
1084
1084
|
c.res = new Response('', c.res)
|
|
@@ -1101,7 +1101,7 @@ describe('Headers appended to a raw Response after construction (issue #304)', (
|
|
|
1101
1101
|
// Regression test: a handler returning `new Response(body, init)` and
|
|
1102
1102
|
// appending headers (e.g. `Set-Cookie`) afterwards must not lose those
|
|
1103
1103
|
// headers when middleware later clones the response via `new Response(...)`.
|
|
1104
|
-
const app = new
|
|
1104
|
+
const app = new Acryl()
|
|
1105
1105
|
app.use('*', async (c, next) => {
|
|
1106
1106
|
await next()
|
|
1107
1107
|
// Mimics what middleware such as `cors`/`compress` does internally.
|
|
@@ -1127,7 +1127,7 @@ describe('Headers appended to a raw Response after construction (issue #304)', (
|
|
|
1127
1127
|
})
|
|
1128
1128
|
|
|
1129
1129
|
describe('forwarding IncomingMessage and ServerResponse in env', () => {
|
|
1130
|
-
const app = new
|
|
1130
|
+
const app = new Acryl<{ Bindings: HttpBindings }>()
|
|
1131
1131
|
app.get('/', (c) =>
|
|
1132
1132
|
c.json({
|
|
1133
1133
|
incoming: c.env.incoming.constructor.name,
|
|
@@ -1151,7 +1151,7 @@ describe('forwarding IncomingMessage and ServerResponse in env', () => {
|
|
|
1151
1151
|
})
|
|
1152
1152
|
|
|
1153
1153
|
describe('overrideGlobalObjects', () => {
|
|
1154
|
-
const app = new
|
|
1154
|
+
const app = new Acryl()
|
|
1155
1155
|
|
|
1156
1156
|
beforeEach(() => {
|
|
1157
1157
|
Object.defineProperty(global, 'Headers', {
|
|
@@ -1201,7 +1201,7 @@ describe('Memory leak test', () => {
|
|
|
1201
1201
|
const registry = new FinalizationRegistry(() => {
|
|
1202
1202
|
counter--
|
|
1203
1203
|
})
|
|
1204
|
-
const app = new
|
|
1204
|
+
const app = new Acryl()
|
|
1205
1205
|
const server = createAdaptorServer(app)
|
|
1206
1206
|
|
|
1207
1207
|
let onAbort: () => void
|
|
@@ -1286,7 +1286,7 @@ describe('Memory leak test', () => {
|
|
|
1286
1286
|
})
|
|
1287
1287
|
|
|
1288
1288
|
describe('serve', () => {
|
|
1289
|
-
const app = new
|
|
1289
|
+
const app = new Acryl()
|
|
1290
1290
|
app.get('/', (c) => c.newResponse(null, 200))
|
|
1291
1291
|
serve(app)
|
|
1292
1292
|
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import {
|
|
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
|
|
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('
|
|
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('
|
|
21
|
+
expect(await res.text()).toBe('Acryl!')
|
|
22
22
|
})
|
|
23
23
|
})
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import {
|
|
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:
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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')
|