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.
- package/LICENSE +73 -0
- package/README.md +325 -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} +13 -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 +60 -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,6 +1,6 @@
|
|
|
1
1
|
import { NONCE, secureHeaders } from './index.ts'
|
|
2
2
|
import type { ContentSecurityPolicyOptionHandler } from './index.ts'
|
|
3
|
-
import {
|
|
3
|
+
import { Acryl } from '../../app.ts'
|
|
4
4
|
import { poweredBy } from '../powered-by/index.ts'
|
|
5
5
|
|
|
6
6
|
declare module '../../context.ts' {
|
|
@@ -12,7 +12,7 @@ declare module '../../context.ts' {
|
|
|
12
12
|
|
|
13
13
|
describe('Secure Headers Middleware', () => {
|
|
14
14
|
it('default middleware', async () => {
|
|
15
|
-
const app = new
|
|
15
|
+
const app = new Acryl()
|
|
16
16
|
app.use('*', secureHeaders())
|
|
17
17
|
app.get('/test', async (ctx) => {
|
|
18
18
|
return ctx.text('test')
|
|
@@ -41,7 +41,7 @@ describe('Secure Headers Middleware', () => {
|
|
|
41
41
|
})
|
|
42
42
|
|
|
43
43
|
it('all headers enabled', async () => {
|
|
44
|
-
const app = new
|
|
44
|
+
const app = new Acryl()
|
|
45
45
|
app.use(
|
|
46
46
|
'*',
|
|
47
47
|
secureHeaders({
|
|
@@ -85,7 +85,7 @@ describe('Secure Headers Middleware', () => {
|
|
|
85
85
|
})
|
|
86
86
|
|
|
87
87
|
it('specific headers disabled', async () => {
|
|
88
|
-
const app = new
|
|
88
|
+
const app = new Acryl()
|
|
89
89
|
app.use('*', secureHeaders({ xFrameOptions: false, xXssProtection: false }))
|
|
90
90
|
app.get('/test', async (ctx) => {
|
|
91
91
|
return ctx.text('test')
|
|
@@ -112,27 +112,27 @@ describe('Secure Headers Middleware', () => {
|
|
|
112
112
|
})
|
|
113
113
|
|
|
114
114
|
it('should remove x-powered-by header', async () => {
|
|
115
|
-
const appBefore = new
|
|
115
|
+
const appBefore = new Acryl()
|
|
116
116
|
appBefore.use('*', secureHeaders())
|
|
117
117
|
appBefore.use('*', poweredBy())
|
|
118
118
|
|
|
119
119
|
const resBefore = await appBefore.request('/')
|
|
120
120
|
expect(resBefore.headers.get('x-powered-by')).toBeFalsy()
|
|
121
121
|
|
|
122
|
-
const appAfter = new
|
|
122
|
+
const appAfter = new Acryl()
|
|
123
123
|
appAfter.use('*', poweredBy())
|
|
124
124
|
appAfter.use('*', secureHeaders())
|
|
125
125
|
|
|
126
126
|
const resAfter = await appAfter.request('/')
|
|
127
|
-
expect(resAfter.headers.get('x-powered-by')).toBe('
|
|
127
|
+
expect(resAfter.headers.get('x-powered-by')).toBe('Acryl')
|
|
128
128
|
})
|
|
129
129
|
|
|
130
130
|
it('should override Strict-Transport-Security header after middleware', async () => {
|
|
131
|
-
const app = new
|
|
131
|
+
const app = new Acryl()
|
|
132
132
|
app.use('/test1', secureHeaders())
|
|
133
133
|
|
|
134
134
|
app.all('*', async (c) => {
|
|
135
|
-
c.res.headers.set('Strict-Transport-Security', '
|
|
135
|
+
c.res.headers.set('Strict-Transport-Security', 'Acryl')
|
|
136
136
|
return c.text('header updated')
|
|
137
137
|
})
|
|
138
138
|
|
|
@@ -142,11 +142,11 @@ describe('Secure Headers Middleware', () => {
|
|
|
142
142
|
)
|
|
143
143
|
|
|
144
144
|
const res2 = await app.request('/test2')
|
|
145
|
-
expect(res2.headers.get('Strict-Transport-Security')).toEqual('
|
|
145
|
+
expect(res2.headers.get('Strict-Transport-Security')).toEqual('Acryl')
|
|
146
146
|
})
|
|
147
147
|
|
|
148
148
|
it('should use custom value when overridden', async () => {
|
|
149
|
-
const app = new
|
|
149
|
+
const app = new Acryl()
|
|
150
150
|
app.use(
|
|
151
151
|
'/test',
|
|
152
152
|
secureHeaders({
|
|
@@ -165,7 +165,7 @@ describe('Secure Headers Middleware', () => {
|
|
|
165
165
|
})
|
|
166
166
|
|
|
167
167
|
it('should set Permission-Policy header correctly', async () => {
|
|
168
|
-
const app = new
|
|
168
|
+
const app = new Acryl()
|
|
169
169
|
app.use(
|
|
170
170
|
'/test',
|
|
171
171
|
secureHeaders({
|
|
@@ -198,10 +198,10 @@ describe('Secure Headers Middleware', () => {
|
|
|
198
198
|
})
|
|
199
199
|
|
|
200
200
|
it('Remove X-Powered-By', async () => {
|
|
201
|
-
const app = new
|
|
201
|
+
const app = new Acryl()
|
|
202
202
|
|
|
203
203
|
app.get('/test', secureHeaders(), poweredBy(), async (c) => {
|
|
204
|
-
return c.text('
|
|
204
|
+
return c.text('Acryl is hot')
|
|
205
205
|
})
|
|
206
206
|
|
|
207
207
|
app.get(
|
|
@@ -211,19 +211,19 @@ describe('Secure Headers Middleware', () => {
|
|
|
211
211
|
}),
|
|
212
212
|
poweredBy(),
|
|
213
213
|
async (c) => {
|
|
214
|
-
return c.text('
|
|
214
|
+
return c.text('Acryl is hot')
|
|
215
215
|
}
|
|
216
216
|
)
|
|
217
217
|
|
|
218
218
|
const res = await app.request('/test')
|
|
219
219
|
const poweredby = res.headers.get('X-Powered-By')
|
|
220
220
|
expect(poweredby).toEqual(null)
|
|
221
|
-
expect(await res.text()).toEqual('
|
|
221
|
+
expect(await res.text()).toEqual('Acryl is hot')
|
|
222
222
|
|
|
223
223
|
const res2 = await app.request('/test2')
|
|
224
224
|
const poweredby2 = res2.headers.get('X-Powered-By')
|
|
225
|
-
expect(poweredby2).toEqual('
|
|
226
|
-
expect(await res2.text()).toEqual('
|
|
225
|
+
expect(poweredby2).toEqual('Acryl')
|
|
226
|
+
expect(await res2.text()).toEqual('Acryl is hot')
|
|
227
227
|
})
|
|
228
228
|
|
|
229
229
|
describe.each([
|
|
@@ -234,7 +234,7 @@ describe('Secure Headers Middleware', () => {
|
|
|
234
234
|
},
|
|
235
235
|
])('CSP Setting ($cspSettingName)', ({ cspSettingName, cspHeaderName }) => {
|
|
236
236
|
it('CSP Setting', async () => {
|
|
237
|
-
const app = new
|
|
237
|
+
const app = new Acryl()
|
|
238
238
|
app.use(
|
|
239
239
|
'/test',
|
|
240
240
|
secureHeaders({
|
|
@@ -255,7 +255,7 @@ describe('Secure Headers Middleware', () => {
|
|
|
255
255
|
)
|
|
256
256
|
|
|
257
257
|
app.all('*', async (c) => {
|
|
258
|
-
c.res.headers.set('Strict-Transport-Security', '
|
|
258
|
+
c.res.headers.set('Strict-Transport-Security', 'Acryl')
|
|
259
259
|
return c.text('header updated')
|
|
260
260
|
})
|
|
261
261
|
|
|
@@ -266,7 +266,7 @@ describe('Secure Headers Middleware', () => {
|
|
|
266
266
|
})
|
|
267
267
|
|
|
268
268
|
it('CSP Setting one only', async () => {
|
|
269
|
-
const app = new
|
|
269
|
+
const app = new Acryl()
|
|
270
270
|
app.use(
|
|
271
271
|
'/test',
|
|
272
272
|
secureHeaders({
|
|
@@ -285,7 +285,7 @@ describe('Secure Headers Middleware', () => {
|
|
|
285
285
|
})
|
|
286
286
|
|
|
287
287
|
it('No CSP Setting', async () => {
|
|
288
|
-
const app = new
|
|
288
|
+
const app = new Acryl()
|
|
289
289
|
app.use('/test', secureHeaders({ [cspSettingName]: {} }))
|
|
290
290
|
|
|
291
291
|
app.all('*', async (c) => {
|
|
@@ -297,7 +297,7 @@ describe('Secure Headers Middleware', () => {
|
|
|
297
297
|
})
|
|
298
298
|
|
|
299
299
|
it('CSP with reportTo', async () => {
|
|
300
|
-
const app = new
|
|
300
|
+
const app = new Acryl()
|
|
301
301
|
app.use(
|
|
302
302
|
'/test1',
|
|
303
303
|
secureHeaders({
|
|
@@ -409,7 +409,7 @@ describe('Secure Headers Middleware', () => {
|
|
|
409
409
|
})
|
|
410
410
|
|
|
411
411
|
it('CSP nonce for script-src', async () => {
|
|
412
|
-
const app = new
|
|
412
|
+
const app = new Acryl()
|
|
413
413
|
app.use(
|
|
414
414
|
'/test',
|
|
415
415
|
secureHeaders({
|
|
@@ -431,7 +431,7 @@ describe('Secure Headers Middleware', () => {
|
|
|
431
431
|
})
|
|
432
432
|
|
|
433
433
|
it('CSP nonce for script-src and style-src', async () => {
|
|
434
|
-
const app = new
|
|
434
|
+
const app = new Acryl()
|
|
435
435
|
app.use(
|
|
436
436
|
'/test',
|
|
437
437
|
secureHeaders({
|
|
@@ -455,7 +455,7 @@ describe('Secure Headers Middleware', () => {
|
|
|
455
455
|
})
|
|
456
456
|
|
|
457
457
|
it('CSP nonce by app own function', async () => {
|
|
458
|
-
const app = new
|
|
458
|
+
const app = new Acryl()
|
|
459
459
|
const setNonce: ContentSecurityPolicyOptionHandler = (ctx, directive) => {
|
|
460
460
|
ctx.set(`test-${directive}-nonce`, directive)
|
|
461
461
|
return `'nonce-${directive}'`
|
|
@@ -486,7 +486,7 @@ describe('Secure Headers Middleware', () => {
|
|
|
486
486
|
|
|
487
487
|
describe('CSP with combined modes', () => {
|
|
488
488
|
it('keeps the enforced policy when report-only uses a nonce', async () => {
|
|
489
|
-
const app = new
|
|
489
|
+
const app = new Acryl()
|
|
490
490
|
app.use(
|
|
491
491
|
'/test',
|
|
492
492
|
secureHeaders({
|
|
@@ -510,7 +510,7 @@ describe('Secure Headers Middleware', () => {
|
|
|
510
510
|
})
|
|
511
511
|
|
|
512
512
|
it('keeps the report-only policy when the enforced policy uses a nonce', async () => {
|
|
513
|
-
const app = new
|
|
513
|
+
const app = new Acryl()
|
|
514
514
|
app.use(
|
|
515
515
|
'/test',
|
|
516
516
|
secureHeaders({
|
|
@@ -534,7 +534,7 @@ describe('Secure Headers Middleware', () => {
|
|
|
534
534
|
})
|
|
535
535
|
|
|
536
536
|
it('supports nonces in both policies', async () => {
|
|
537
|
-
const app = new
|
|
537
|
+
const app = new Acryl()
|
|
538
538
|
app.use(
|
|
539
539
|
'/test',
|
|
540
540
|
secureHeaders({
|
|
@@ -562,7 +562,7 @@ describe('Secure Headers Middleware', () => {
|
|
|
562
562
|
// OUR NEW REPORT-URI TESTS
|
|
563
563
|
describe('CSP report-uri directive', () => {
|
|
564
564
|
it('should set report-uri with single endpoint', async () => {
|
|
565
|
-
const app = new
|
|
565
|
+
const app = new Acryl()
|
|
566
566
|
app.use(
|
|
567
567
|
'/test',
|
|
568
568
|
secureHeaders({
|
|
@@ -580,7 +580,7 @@ describe('Secure Headers Middleware', () => {
|
|
|
580
580
|
})
|
|
581
581
|
|
|
582
582
|
it('should set report-uri with multiple endpoints', async () => {
|
|
583
|
-
const app = new
|
|
583
|
+
const app = new Acryl()
|
|
584
584
|
app.use(
|
|
585
585
|
'/test',
|
|
586
586
|
secureHeaders({
|
|
@@ -598,7 +598,7 @@ describe('Secure Headers Middleware', () => {
|
|
|
598
598
|
})
|
|
599
599
|
|
|
600
600
|
it('should work with report-to and report-uri together', async () => {
|
|
601
|
-
const app = new
|
|
601
|
+
const app = new Acryl()
|
|
602
602
|
app.use(
|
|
603
603
|
'/test',
|
|
604
604
|
secureHeaders({
|
|
@@ -617,7 +617,7 @@ describe('Secure Headers Middleware', () => {
|
|
|
617
617
|
})
|
|
618
618
|
|
|
619
619
|
it('should work with Content-Security-Policy-Report-Only', async () => {
|
|
620
|
-
const app = new
|
|
620
|
+
const app = new Acryl()
|
|
621
621
|
app.use(
|
|
622
622
|
'/test',
|
|
623
623
|
secureHeaders({
|
|
@@ -637,7 +637,7 @@ describe('Secure Headers Middleware', () => {
|
|
|
637
637
|
// ADDED MISSING TEST CASE for Report-Only:
|
|
638
638
|
|
|
639
639
|
it('should not output report-uri when reportUri is not set', async () => {
|
|
640
|
-
const app = new
|
|
640
|
+
const app = new Acryl()
|
|
641
641
|
app.use(
|
|
642
642
|
'/test',
|
|
643
643
|
secureHeaders({
|
|
@@ -653,7 +653,7 @@ describe('Secure Headers Middleware', () => {
|
|
|
653
653
|
})
|
|
654
654
|
|
|
655
655
|
it('should not output report-uri in Report-Only when reportUri is not set', async () => {
|
|
656
|
-
const app = new
|
|
656
|
+
const app = new Acryl()
|
|
657
657
|
app.use(
|
|
658
658
|
'/test',
|
|
659
659
|
secureHeaders({
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @module
|
|
3
|
-
* Secure Headers Middleware for
|
|
3
|
+
* Secure Headers Middleware for Acryl.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import type { Context } from '../../context.ts'
|
|
@@ -145,7 +145,7 @@ export const NONCE: ContentSecurityPolicyOptionHandler = (ctx) => {
|
|
|
145
145
|
}
|
|
146
146
|
|
|
147
147
|
/**
|
|
148
|
-
* Secure Headers Middleware for
|
|
148
|
+
* Secure Headers Middleware for Acryl.
|
|
149
149
|
*
|
|
150
150
|
*
|
|
151
151
|
* @param {Partial<SecureHeadersOptions>} [customOptions] - The options for the secure headers middleware.
|
|
@@ -171,7 +171,7 @@ export const NONCE: ContentSecurityPolicyOptionHandler = (ctx) => {
|
|
|
171
171
|
*
|
|
172
172
|
* @example
|
|
173
173
|
* ```ts
|
|
174
|
-
* const app = new
|
|
174
|
+
* const app = new Acryl()
|
|
175
175
|
* app.use(secureHeaders())
|
|
176
176
|
* ```
|
|
177
177
|
*/
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { serveStatic as baseServeStatic } from './index.ts'
|
|
2
|
-
import {
|
|
2
|
+
import { Acryl } from '../../app.ts'
|
|
3
3
|
|
|
4
4
|
describe('Serve Static Middleware with a Blob body', () => {
|
|
5
5
|
it('Should serve content returned as a Blob', async () => {
|
|
6
|
-
const app = new
|
|
6
|
+
const app = new Acryl()
|
|
7
7
|
app.use(
|
|
8
8
|
'/static/*',
|
|
9
9
|
baseServeStatic({
|
|
@@ -17,7 +17,7 @@ describe('Serve Static Middleware with a Blob body', () => {
|
|
|
17
17
|
})
|
|
18
18
|
|
|
19
19
|
describe('Serve Static Middleware', () => {
|
|
20
|
-
const app = new
|
|
20
|
+
const app = new Acryl()
|
|
21
21
|
const getContent = vi.fn(async (path) => {
|
|
22
22
|
if (path.endsWith('not-found.txt')) {
|
|
23
23
|
return null
|
|
@@ -48,7 +48,7 @@ describe('Serve Static Middleware', () => {
|
|
|
48
48
|
it.each(['GET', 'HEAD'])(
|
|
49
49
|
'Should serve files for %s requests registered with use()',
|
|
50
50
|
async (method) => {
|
|
51
|
-
const app = new
|
|
51
|
+
const app = new Acryl().use('/static/*', serveStatic)
|
|
52
52
|
|
|
53
53
|
const res = await app.request('/static/hello.html', { method })
|
|
54
54
|
|
|
@@ -66,7 +66,7 @@ describe('Serve Static Middleware', () => {
|
|
|
66
66
|
const rewriteRequestPath = vi.fn((path: string) => path)
|
|
67
67
|
const onFound = vi.fn()
|
|
68
68
|
const onNotFound = vi.fn()
|
|
69
|
-
const app = new
|
|
69
|
+
const app = new Acryl().use(
|
|
70
70
|
'/static/*',
|
|
71
71
|
baseServeStatic({ getContent, isDir, rewriteRequestPath, onFound, onNotFound })
|
|
72
72
|
)
|
|
@@ -87,7 +87,7 @@ describe('Serve Static Middleware', () => {
|
|
|
87
87
|
it.each(['/static/hello.html', '/static/not-found.txt'])(
|
|
88
88
|
'Should return 404 for an unhandled POST request regardless of file existence - %s',
|
|
89
89
|
async (path) => {
|
|
90
|
-
const app = new
|
|
90
|
+
const app = new Acryl().use('/static/*', serveStatic)
|
|
91
91
|
|
|
92
92
|
const res = await app.request(path, { method: 'POST' })
|
|
93
93
|
|
|
@@ -134,7 +134,7 @@ describe('Serve Static Middleware', () => {
|
|
|
134
134
|
'Should skip paths containing percent signs by default - %s',
|
|
135
135
|
async (path) => {
|
|
136
136
|
const onNotFound = vi.fn()
|
|
137
|
-
const app = new
|
|
137
|
+
const app = new Acryl().use('*', baseServeStatic({ getContent, onNotFound }))
|
|
138
138
|
|
|
139
139
|
const res = await app.request(path)
|
|
140
140
|
|
|
@@ -149,7 +149,7 @@ describe('Serve Static Middleware', () => {
|
|
|
149
149
|
['/static/100%25/hello.txt', 'static/100%/hello.txt'],
|
|
150
150
|
['/static/%2Fadmin/secret.txt', 'static/%2Fadmin/secret.txt'],
|
|
151
151
|
])('Should allow percent signs when opted in - %s', async (url, path) => {
|
|
152
|
-
const app = new
|
|
152
|
+
const app = new Acryl().use('*', baseServeStatic({ getContent, allowPercentInPath: true }))
|
|
153
153
|
|
|
154
154
|
const res = await app.request(url)
|
|
155
155
|
|
|
@@ -158,7 +158,7 @@ describe('Serve Static Middleware', () => {
|
|
|
158
158
|
})
|
|
159
159
|
|
|
160
160
|
it('Should not bypass authentication through a second decode', async () => {
|
|
161
|
-
const app = new
|
|
161
|
+
const app = new Acryl()
|
|
162
162
|
app.get('/static/admin/*', (c) => c.text('Unauthorized', 401))
|
|
163
163
|
app.use('/static/*', baseServeStatic({ getContent }))
|
|
164
164
|
|
|
@@ -181,7 +181,7 @@ describe('Serve Static Middleware', () => {
|
|
|
181
181
|
|
|
182
182
|
it('Should return 200 response for empty string content - /static/empty.txt', async () => {
|
|
183
183
|
const onNotFound = vi.fn()
|
|
184
|
-
const app = new
|
|
184
|
+
const app = new Acryl().use(
|
|
185
185
|
'*',
|
|
186
186
|
baseServeStatic({
|
|
187
187
|
getContent: async () => '',
|
|
@@ -214,7 +214,7 @@ describe('Serve Static Middleware', () => {
|
|
|
214
214
|
})
|
|
215
215
|
|
|
216
216
|
it('Should return a pre-compressed zstd response - /static/hello.html', async () => {
|
|
217
|
-
const app = new
|
|
217
|
+
const app = new Acryl().use(
|
|
218
218
|
'*',
|
|
219
219
|
baseServeStatic({
|
|
220
220
|
getContent,
|
|
@@ -234,7 +234,7 @@ describe('Serve Static Middleware', () => {
|
|
|
234
234
|
})
|
|
235
235
|
|
|
236
236
|
it('Should return a pre-compressed brotli response - /static/hello.html', async () => {
|
|
237
|
-
const app = new
|
|
237
|
+
const app = new Acryl().use(
|
|
238
238
|
'*',
|
|
239
239
|
baseServeStatic({
|
|
240
240
|
getContent,
|
|
@@ -254,7 +254,7 @@ describe('Serve Static Middleware', () => {
|
|
|
254
254
|
})
|
|
255
255
|
|
|
256
256
|
it('Should return a pre-compressed brotli response - /static/hello.unknown', async () => {
|
|
257
|
-
const app = new
|
|
257
|
+
const app = new Acryl().use(
|
|
258
258
|
'*',
|
|
259
259
|
baseServeStatic({
|
|
260
260
|
getContent,
|
|
@@ -274,7 +274,7 @@ describe('Serve Static Middleware', () => {
|
|
|
274
274
|
})
|
|
275
275
|
|
|
276
276
|
it('Should return a pre-compressed response when Accept-Encoding has q-values', async () => {
|
|
277
|
-
const app = new
|
|
277
|
+
const app = new Acryl().use(
|
|
278
278
|
'*',
|
|
279
279
|
baseServeStatic({
|
|
280
280
|
getContent,
|
|
@@ -293,7 +293,7 @@ describe('Serve Static Middleware', () => {
|
|
|
293
293
|
})
|
|
294
294
|
|
|
295
295
|
it('Should not return a pre-compressed response - /static/not-found.txt', async () => {
|
|
296
|
-
const app = new
|
|
296
|
+
const app = new Acryl().use(
|
|
297
297
|
'*',
|
|
298
298
|
baseServeStatic({
|
|
299
299
|
getContent,
|
|
@@ -313,7 +313,7 @@ describe('Serve Static Middleware', () => {
|
|
|
313
313
|
})
|
|
314
314
|
|
|
315
315
|
it('Should not return a pre-compressed response - /static/hello.html', async () => {
|
|
316
|
-
const app = new
|
|
316
|
+
const app = new Acryl().use(
|
|
317
317
|
'*',
|
|
318
318
|
baseServeStatic({
|
|
319
319
|
getContent,
|
|
@@ -333,7 +333,7 @@ describe('Serve Static Middleware', () => {
|
|
|
333
333
|
})
|
|
334
334
|
|
|
335
335
|
it('Should not find pre-compressed files - /static/hello.jpg', async () => {
|
|
336
|
-
const app = new
|
|
336
|
+
const app = new Acryl().use(
|
|
337
337
|
'*',
|
|
338
338
|
baseServeStatic({
|
|
339
339
|
getContent,
|
|
@@ -355,7 +355,7 @@ describe('Serve Static Middleware', () => {
|
|
|
355
355
|
it('Should return response object content as-is', async () => {
|
|
356
356
|
const body = new ReadableStream()
|
|
357
357
|
const response = new Response(body)
|
|
358
|
-
const app = new
|
|
358
|
+
const app = new Acryl().use(
|
|
359
359
|
'*',
|
|
360
360
|
baseServeStatic({
|
|
361
361
|
getContent: async () => {
|
|
@@ -374,7 +374,7 @@ describe('Serve Static Middleware', () => {
|
|
|
374
374
|
|
|
375
375
|
describe('Changing root path', () => {
|
|
376
376
|
it('Should return the content with absolute root path', async () => {
|
|
377
|
-
const app = new
|
|
377
|
+
const app = new Acryl()
|
|
378
378
|
const serveStatic = baseServeStatic({
|
|
379
379
|
getContent,
|
|
380
380
|
root: '/home/acryl/child',
|
|
@@ -386,7 +386,7 @@ describe('Serve Static Middleware', () => {
|
|
|
386
386
|
})
|
|
387
387
|
|
|
388
388
|
it('Should traverse the directories with absolute root path', async () => {
|
|
389
|
-
const app = new
|
|
389
|
+
const app = new Acryl()
|
|
390
390
|
const serveStatic = baseServeStatic({
|
|
391
391
|
getContent,
|
|
392
392
|
root: '/home/acryl/../parent',
|
|
@@ -398,7 +398,7 @@ describe('Serve Static Middleware', () => {
|
|
|
398
398
|
})
|
|
399
399
|
|
|
400
400
|
it('Should treat the root path includes .. as relative path', async () => {
|
|
401
|
-
const app = new
|
|
401
|
+
const app = new Acryl()
|
|
402
402
|
const serveStatic = baseServeStatic({
|
|
403
403
|
getContent,
|
|
404
404
|
root: '../home/acryl',
|
|
@@ -410,7 +410,7 @@ describe('Serve Static Middleware', () => {
|
|
|
410
410
|
})
|
|
411
411
|
|
|
412
412
|
it('Should not allow directory traversal with . as relative path', async () => {
|
|
413
|
-
const app = new
|
|
413
|
+
const app = new Acryl()
|
|
414
414
|
const serveStatic = baseServeStatic({
|
|
415
415
|
getContent,
|
|
416
416
|
root: '.',
|
|
@@ -422,7 +422,7 @@ describe('Serve Static Middleware', () => {
|
|
|
422
422
|
})
|
|
423
423
|
|
|
424
424
|
it('Should not allow bypass via path mismatch between middleware and serveStatic', async () => {
|
|
425
|
-
const app = new
|
|
425
|
+
const app = new Acryl()
|
|
426
426
|
|
|
427
427
|
app.use('/admin/*', async (c, next) => {
|
|
428
428
|
c.header('X-Authorized', 'true')
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import type { HTTPExceptionFunction } from './index.ts'
|
|
2
2
|
import { timeout } from './index.ts'
|
|
3
3
|
import type { Context } from '../../context.ts'
|
|
4
|
-
import {
|
|
4
|
+
import { Acryl } from '../../app.ts'
|
|
5
5
|
import { HTTPException } from '../../http-exception.ts'
|
|
6
6
|
|
|
7
7
|
describe('Timeout API', () => {
|
|
8
|
-
const app = new
|
|
8
|
+
const app = new Acryl()
|
|
9
9
|
|
|
10
10
|
app.use('/slow-endpoint', timeout(1000))
|
|
11
11
|
app.use(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @module
|
|
3
|
-
* Timeout Middleware for
|
|
3
|
+
* Timeout Middleware for Acryl.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import type { Context } from '../../context.ts'
|
|
@@ -14,7 +14,7 @@ const defaultTimeoutException = new HTTPException(504, {
|
|
|
14
14
|
})
|
|
15
15
|
|
|
16
16
|
/**
|
|
17
|
-
* Timeout Middleware for
|
|
17
|
+
* Timeout Middleware for Acryl.
|
|
18
18
|
*
|
|
19
19
|
* @param {number} duration - The timeout duration in milliseconds.
|
|
20
20
|
* @param {HTTPExceptionFunction | HTTPException} [exception=defaultTimeoutException] - The exception to throw when the timeout occurs. Can be a function that returns an HTTPException or an HTTPException object.
|
|
@@ -22,7 +22,7 @@ const defaultTimeoutException = new HTTPException(504, {
|
|
|
22
22
|
*
|
|
23
23
|
* @example
|
|
24
24
|
* ```ts
|
|
25
|
-
* const app = new
|
|
25
|
+
* const app = new Acryl()
|
|
26
26
|
*
|
|
27
27
|
* app.use(
|
|
28
28
|
* '/long-request',
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { endTime, setMetric, startTime, timing, wrapTime } from './index.ts'
|
|
2
|
-
import {
|
|
2
|
+
import { Acryl } from '../../app.ts'
|
|
3
3
|
|
|
4
4
|
describe('Server-Timing API', () => {
|
|
5
|
-
const app = new
|
|
5
|
+
const app = new Acryl()
|
|
6
6
|
|
|
7
7
|
const totalDescription = 'my total DescRipTion!'
|
|
8
8
|
const name = 'sleep'
|
|
@@ -43,7 +43,7 @@ describe('Server-Timing API', () => {
|
|
|
43
43
|
return c.text('cache!')
|
|
44
44
|
})
|
|
45
45
|
|
|
46
|
-
const sub = new
|
|
46
|
+
const sub = new Acryl()
|
|
47
47
|
|
|
48
48
|
sub.use(timing())
|
|
49
49
|
sub.get('/', (c) => c.text('sub'))
|
|
@@ -105,7 +105,7 @@ describe('Server-Timing API', () => {
|
|
|
105
105
|
|
|
106
106
|
describe('Should handle timing options', async () => {
|
|
107
107
|
it('Should handle autoEnd option', async () => {
|
|
108
|
-
const autoEndApp = new
|
|
108
|
+
const autoEndApp = new Acryl()
|
|
109
109
|
|
|
110
110
|
autoEndApp.use('*', timing())
|
|
111
111
|
autoEndApp.get('/', (c) => {
|
|
@@ -118,7 +118,7 @@ describe('Server-Timing API', () => {
|
|
|
118
118
|
expect(res.status).toBe(200)
|
|
119
119
|
expect(res.headers.get('server-timing')).toContain('test;dur=')
|
|
120
120
|
|
|
121
|
-
const disabledAutoEndApp = new
|
|
121
|
+
const disabledAutoEndApp = new Acryl()
|
|
122
122
|
|
|
123
123
|
disabledAutoEndApp.use('*', timing({ autoEnd: false }))
|
|
124
124
|
disabledAutoEndApp.get('/', (c) => {
|
|
@@ -133,7 +133,7 @@ describe('Server-Timing API', () => {
|
|
|
133
133
|
})
|
|
134
134
|
|
|
135
135
|
it('Should use enabled function return value', async () => {
|
|
136
|
-
const enabledApp = new
|
|
136
|
+
const enabledApp = new Acryl()
|
|
137
137
|
const enabled = vi.fn(() => false)
|
|
138
138
|
|
|
139
139
|
enabledApp.use('*', timing({ enabled }))
|
|
@@ -147,7 +147,7 @@ describe('Server-Timing API', () => {
|
|
|
147
147
|
})
|
|
148
148
|
|
|
149
149
|
it('Should handle total false and value-less metrics without description', async () => {
|
|
150
|
-
const metricApp = new
|
|
150
|
+
const metricApp = new Acryl()
|
|
151
151
|
|
|
152
152
|
metricApp.use('*', timing({ total: false }))
|
|
153
153
|
metricApp.get('/', (c) => {
|
|
@@ -164,7 +164,7 @@ describe('Server-Timing API', () => {
|
|
|
164
164
|
|
|
165
165
|
describe('Should handle crossOrigin setting', async () => {
|
|
166
166
|
it('Should do nothing when crossOrigin is falsy', async () => {
|
|
167
|
-
const crossOriginApp = new
|
|
167
|
+
const crossOriginApp = new Acryl()
|
|
168
168
|
|
|
169
169
|
crossOriginApp.use(
|
|
170
170
|
'*',
|
|
@@ -183,7 +183,7 @@ describe('Server-Timing API', () => {
|
|
|
183
183
|
})
|
|
184
184
|
|
|
185
185
|
it('Should set Timing-Allow-Origin to * when crossOrigin is true', async () => {
|
|
186
|
-
const crossOriginApp = new
|
|
186
|
+
const crossOriginApp = new Acryl()
|
|
187
187
|
|
|
188
188
|
crossOriginApp.use(
|
|
189
189
|
'*',
|
|
@@ -203,7 +203,7 @@ describe('Server-Timing API', () => {
|
|
|
203
203
|
})
|
|
204
204
|
|
|
205
205
|
it('Should set Timing-Allow-Origin to the value of crossOrigin when it is a string', async () => {
|
|
206
|
-
const crossOriginApp = new
|
|
206
|
+
const crossOriginApp = new Acryl()
|
|
207
207
|
|
|
208
208
|
crossOriginApp.use(
|
|
209
209
|
'*',
|
|
@@ -223,7 +223,7 @@ describe('Server-Timing API', () => {
|
|
|
223
223
|
})
|
|
224
224
|
|
|
225
225
|
it('Should set Timing-Allow-Origin to the return value of crossOrigin when it is a function', async () => {
|
|
226
|
-
const crossOriginApp = new
|
|
226
|
+
const crossOriginApp = new Acryl()
|
|
227
227
|
|
|
228
228
|
crossOriginApp.use(
|
|
229
229
|
'*',
|
|
@@ -252,7 +252,7 @@ describe('Server-Timing API', () => {
|
|
|
252
252
|
delete globalThis.performance
|
|
253
253
|
const DateNowSpy = vi.spyOn(Date, 'now').mockReturnValue(123456789)
|
|
254
254
|
|
|
255
|
-
const app = new
|
|
255
|
+
const app = new Acryl().use(timing()).get('/', (c) => {
|
|
256
256
|
startTime(c, 'test')
|
|
257
257
|
endTime(c, 'test')
|
|
258
258
|
return c.text('hello')
|
|
@@ -272,7 +272,7 @@ describe('Server-Timing API', () => {
|
|
|
272
272
|
it('Should silently warn when no timing metrics are available', async () => {
|
|
273
273
|
const consoleWarnSpy = vi.spyOn(console, 'warn').mockImplementation(() => {})
|
|
274
274
|
|
|
275
|
-
const app = new
|
|
275
|
+
const app = new Acryl().get('/', (c) => {
|
|
276
276
|
setMetric(c, 'test', 123)
|
|
277
277
|
startTime(c, 'test')
|
|
278
278
|
endTime(c, 'test')
|
|
@@ -293,7 +293,7 @@ describe('Server-Timing API', () => {
|
|
|
293
293
|
it('Should silently warn when trying to end a non-existent timer', async () => {
|
|
294
294
|
const consoleWarnSpy = vi.spyOn(console, 'warn').mockImplementation(() => {})
|
|
295
295
|
|
|
296
|
-
const app = new
|
|
296
|
+
const app = new Acryl().use(timing()).get('/', (c) => {
|
|
297
297
|
setMetric(c, 'region', 'europe-west3')
|
|
298
298
|
endTime(c, 'nonExistentTimer')
|
|
299
299
|
return c.text('hello')
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @module
|
|
3
|
-
* Server-Timing Middleware for
|
|
3
|
+
* Server-Timing Middleware for Acryl.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import type { Context } from '../../context.ts'
|
|
@@ -35,7 +35,7 @@ const getTime = (): number => {
|
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
/**
|
|
38
|
-
* Server-Timing Middleware for
|
|
38
|
+
* Server-Timing Middleware for Acryl.
|
|
39
39
|
*
|
|
40
40
|
*
|
|
41
41
|
* @param {TimingOptions} [config] - The options for the timing middleware.
|
|
@@ -48,7 +48,7 @@ const getTime = (): number => {
|
|
|
48
48
|
*
|
|
49
49
|
* @example
|
|
50
50
|
* ```ts
|
|
51
|
-
* const app = new
|
|
51
|
+
* const app = new Acryl()
|
|
52
52
|
*
|
|
53
53
|
* // add the middleware to your router
|
|
54
54
|
* app.use(timing());
|