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
|
@@ -0,0 +1,365 @@
|
|
|
1
|
+
import { AcrylRequest } from "./request.js";
|
|
2
|
+
import { HtmlEscapedCallbackPhase, resolveCallback } from "./utils/html.js";
|
|
3
|
+
//#region ../../plugins/acryl-router/src/core/context.ts
|
|
4
|
+
const TEXT_PLAIN = "text/plain; charset=UTF-8";
|
|
5
|
+
const setDefaultContentType = (contentType, headers) => {
|
|
6
|
+
return {
|
|
7
|
+
"Content-Type": contentType,
|
|
8
|
+
...headers
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
const createResponseInstance = (body, init) => new Response(body, init);
|
|
12
|
+
var Context = class {
|
|
13
|
+
#rawRequest;
|
|
14
|
+
#req;
|
|
15
|
+
/**
|
|
16
|
+
* `.env` can get bindings (environment variables, secrets, KV namespaces, D1 database, R2 bucket etc.) in Cloudflare Workers.
|
|
17
|
+
*
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```ts
|
|
21
|
+
* // Environment object for Cloudflare Workers
|
|
22
|
+
* app.get('*', async c => {
|
|
23
|
+
* const counter = c.env.COUNTER
|
|
24
|
+
* })
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
env = {};
|
|
28
|
+
#var;
|
|
29
|
+
finalized = false;
|
|
30
|
+
/**
|
|
31
|
+
* `.error` can get the error object from the middleware if the Handler throws an error.
|
|
32
|
+
*
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```ts
|
|
36
|
+
* app.use('*', async (c, next) => {
|
|
37
|
+
* await next()
|
|
38
|
+
* if (c.error) {
|
|
39
|
+
* // do something...
|
|
40
|
+
* }
|
|
41
|
+
* })
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
error;
|
|
45
|
+
#status;
|
|
46
|
+
#executionCtx;
|
|
47
|
+
#res;
|
|
48
|
+
#layout;
|
|
49
|
+
#renderer;
|
|
50
|
+
#notFoundHandler;
|
|
51
|
+
#preparedHeaders;
|
|
52
|
+
#matchResult;
|
|
53
|
+
#path;
|
|
54
|
+
/**
|
|
55
|
+
* Creates an instance of the Context class.
|
|
56
|
+
*
|
|
57
|
+
* @param req - The Request object.
|
|
58
|
+
* @param options - Optional configuration options for the context.
|
|
59
|
+
*/
|
|
60
|
+
constructor(req, options) {
|
|
61
|
+
this.#rawRequest = req;
|
|
62
|
+
if (options) {
|
|
63
|
+
this.#executionCtx = options.executionCtx;
|
|
64
|
+
this.env = options.env;
|
|
65
|
+
this.#notFoundHandler = options.notFoundHandler;
|
|
66
|
+
this.#path = options.path;
|
|
67
|
+
this.#matchResult = options.matchResult;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* `.req` is the instance of {@link AcrylRequest}.
|
|
72
|
+
*/
|
|
73
|
+
get req() {
|
|
74
|
+
this.#req ??= new AcrylRequest(this.#rawRequest, this.#path, this.#matchResult);
|
|
75
|
+
return this.#req;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* The FetchEvent associated with the current request.
|
|
79
|
+
*
|
|
80
|
+
* @throws Will throw an error if the context does not have a FetchEvent.
|
|
81
|
+
*/
|
|
82
|
+
get event() {
|
|
83
|
+
if (this.#executionCtx && "respondWith" in this.#executionCtx) return this.#executionCtx;
|
|
84
|
+
else throw Error("This context has no FetchEvent");
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* The ExecutionContext associated with the current request.
|
|
88
|
+
*
|
|
89
|
+
* @throws Will throw an error if the context does not have an ExecutionContext.
|
|
90
|
+
*/
|
|
91
|
+
get executionCtx() {
|
|
92
|
+
if (this.#executionCtx) return this.#executionCtx;
|
|
93
|
+
else throw Error("This context has no ExecutionContext");
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* The Response object for the current request.
|
|
97
|
+
*/
|
|
98
|
+
get res() {
|
|
99
|
+
return this.#res ||= createResponseInstance(null, { headers: this.#preparedHeaders ??= new Headers() });
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Sets the Response object for the current request.
|
|
103
|
+
*
|
|
104
|
+
* @param _res - The Response object to set.
|
|
105
|
+
*/
|
|
106
|
+
set res(_res) {
|
|
107
|
+
if (this.#res && _res) {
|
|
108
|
+
_res = createResponseInstance(_res.body, _res);
|
|
109
|
+
for (const [k, v] of this.#res.headers.entries()) {
|
|
110
|
+
if (k === "content-type") continue;
|
|
111
|
+
if (k === "set-cookie") {
|
|
112
|
+
const cookies = this.#res.headers.getSetCookie();
|
|
113
|
+
_res.headers.delete("set-cookie");
|
|
114
|
+
for (const cookie of cookies) _res.headers.append("set-cookie", cookie);
|
|
115
|
+
} else _res.headers.set(k, v);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
this.#res = _res;
|
|
119
|
+
this.finalized = true;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* `.render()` can create a response within a layout.
|
|
123
|
+
*
|
|
124
|
+
*
|
|
125
|
+
* @example
|
|
126
|
+
* ```ts
|
|
127
|
+
* app.get('/', (c) => {
|
|
128
|
+
* return c.render('Hello!')
|
|
129
|
+
* })
|
|
130
|
+
* ```
|
|
131
|
+
*/
|
|
132
|
+
render = (...args) => {
|
|
133
|
+
this.#renderer ??= (content) => this.html(content);
|
|
134
|
+
return this.#renderer(...args);
|
|
135
|
+
};
|
|
136
|
+
/**
|
|
137
|
+
* Sets the layout for the response.
|
|
138
|
+
*
|
|
139
|
+
* @param layout - The layout to set.
|
|
140
|
+
* @returns The layout function.
|
|
141
|
+
*/
|
|
142
|
+
setLayout = (layout) => this.#layout = layout;
|
|
143
|
+
/**
|
|
144
|
+
* Gets the current layout for the response.
|
|
145
|
+
*
|
|
146
|
+
* @returns The current layout function.
|
|
147
|
+
*/
|
|
148
|
+
getLayout = () => this.#layout;
|
|
149
|
+
/**
|
|
150
|
+
* `.setRenderer()` can set the layout in the custom middleware.
|
|
151
|
+
*
|
|
152
|
+
*
|
|
153
|
+
* @example
|
|
154
|
+
* ```tsx
|
|
155
|
+
* app.use('*', async (c, next) => {
|
|
156
|
+
* c.setRenderer((content) => {
|
|
157
|
+
* return c.html(
|
|
158
|
+
* <html>
|
|
159
|
+
* <body>
|
|
160
|
+
* <p>{content}</p>
|
|
161
|
+
* </body>
|
|
162
|
+
* </html>
|
|
163
|
+
* )
|
|
164
|
+
* })
|
|
165
|
+
* await next()
|
|
166
|
+
* })
|
|
167
|
+
* ```
|
|
168
|
+
*/
|
|
169
|
+
setRenderer = (renderer) => {
|
|
170
|
+
this.#renderer = renderer;
|
|
171
|
+
};
|
|
172
|
+
/**
|
|
173
|
+
* `.header()` can set headers.
|
|
174
|
+
*
|
|
175
|
+
*
|
|
176
|
+
* @example
|
|
177
|
+
* ```ts
|
|
178
|
+
* app.get('/welcome', (c) => {
|
|
179
|
+
* // Set headers
|
|
180
|
+
* c.header('X-Message', 'Hello!')
|
|
181
|
+
* c.header('Content-Type', 'text/plain')
|
|
182
|
+
*
|
|
183
|
+
* // Append multiple headers using the append option (e.g. Vary)
|
|
184
|
+
* c.header('Vary', 'Accept-Encoding', { append: true })
|
|
185
|
+
* c.header('Vary', 'User-Agent', { append: true })
|
|
186
|
+
*
|
|
187
|
+
* return c.body('Thank you for coming')
|
|
188
|
+
* })
|
|
189
|
+
* ```
|
|
190
|
+
*/
|
|
191
|
+
header = (name, value, options) => {
|
|
192
|
+
if (this.finalized) this.#res = createResponseInstance(this.#res.body, this.#res);
|
|
193
|
+
const headers = this.#res ? this.#res.headers : this.#preparedHeaders ??= new Headers();
|
|
194
|
+
if (value === void 0) headers.delete(name);
|
|
195
|
+
else if (options?.append) headers.append(name, value);
|
|
196
|
+
else headers.set(name, value);
|
|
197
|
+
};
|
|
198
|
+
status = (status) => {
|
|
199
|
+
this.#status = status;
|
|
200
|
+
};
|
|
201
|
+
/**
|
|
202
|
+
* `.set()` can set the value specified by the key.
|
|
203
|
+
*
|
|
204
|
+
*
|
|
205
|
+
* @example
|
|
206
|
+
* ```ts
|
|
207
|
+
* app.use('*', async (c, next) => {
|
|
208
|
+
* c.set('message', 'Acryl is hot!!')
|
|
209
|
+
* await next()
|
|
210
|
+
* })
|
|
211
|
+
* ```
|
|
212
|
+
*/
|
|
213
|
+
set = (key, value) => {
|
|
214
|
+
this.#var ??= /* @__PURE__ */ new Map();
|
|
215
|
+
this.#var.set(key, value);
|
|
216
|
+
};
|
|
217
|
+
/**
|
|
218
|
+
* `.get()` can use the value specified by the key.
|
|
219
|
+
*
|
|
220
|
+
*
|
|
221
|
+
* @example
|
|
222
|
+
* ```ts
|
|
223
|
+
* app.get('/', (c) => {
|
|
224
|
+
* const message = c.get('message')
|
|
225
|
+
* return c.text(`The message is "${message}"`)
|
|
226
|
+
* })
|
|
227
|
+
* ```
|
|
228
|
+
*/
|
|
229
|
+
get = (key) => {
|
|
230
|
+
return this.#var ? this.#var.get(key) : void 0;
|
|
231
|
+
};
|
|
232
|
+
/**
|
|
233
|
+
* `.var` can access the value of a variable.
|
|
234
|
+
*
|
|
235
|
+
*
|
|
236
|
+
* @example
|
|
237
|
+
* ```ts
|
|
238
|
+
* const result = c.var.client.oneMethod()
|
|
239
|
+
* ```
|
|
240
|
+
*/
|
|
241
|
+
get var() {
|
|
242
|
+
if (!this.#var) return {};
|
|
243
|
+
return Object.fromEntries(this.#var);
|
|
244
|
+
}
|
|
245
|
+
#newResponse(data, arg, headers) {
|
|
246
|
+
let responseHeaders = this.#res ? new Headers(this.#res.headers) : this.#preparedHeaders;
|
|
247
|
+
if (typeof arg === "object" && arg.headers) {
|
|
248
|
+
responseHeaders ??= new Headers();
|
|
249
|
+
for (const [key, value] of new Headers(arg.headers)) if (key === "set-cookie") responseHeaders.append(key, value);
|
|
250
|
+
else responseHeaders.set(key, value);
|
|
251
|
+
}
|
|
252
|
+
if (headers) {
|
|
253
|
+
if (!responseHeaders) {
|
|
254
|
+
let count = 0;
|
|
255
|
+
for (const k in headers) if (++count > 1 || typeof headers[k] !== "string") {
|
|
256
|
+
responseHeaders = new Headers();
|
|
257
|
+
break;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
if (responseHeaders) for (const k in headers) {
|
|
261
|
+
const v = headers[k];
|
|
262
|
+
if (typeof v === "string") responseHeaders.set(k, v);
|
|
263
|
+
else {
|
|
264
|
+
responseHeaders.delete(k);
|
|
265
|
+
for (const v2 of v) responseHeaders.append(k, v2);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
const status = typeof arg === "number" ? arg : arg?.status ?? this.#status;
|
|
270
|
+
return createResponseInstance(data, {
|
|
271
|
+
status,
|
|
272
|
+
headers: responseHeaders ?? headers
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
newResponse = (...args) => this.#newResponse(...args);
|
|
276
|
+
/**
|
|
277
|
+
* `.body()` can return the HTTP response.
|
|
278
|
+
* You can set headers with `.header()` and set HTTP status code with `.status`.
|
|
279
|
+
* This can also be set in `.text()`, `.json()` and so on.
|
|
280
|
+
*
|
|
281
|
+
*
|
|
282
|
+
* @example
|
|
283
|
+
* ```ts
|
|
284
|
+
* app.get('/welcome', (c) => {
|
|
285
|
+
* // Set headers
|
|
286
|
+
* c.header('X-Message', 'Hello!')
|
|
287
|
+
* c.header('Content-Type', 'text/plain')
|
|
288
|
+
* // Set HTTP status code
|
|
289
|
+
* c.status(201)
|
|
290
|
+
*
|
|
291
|
+
* // Return the response body
|
|
292
|
+
* return c.body('Thank you for coming')
|
|
293
|
+
* })
|
|
294
|
+
* ```
|
|
295
|
+
*/
|
|
296
|
+
body = (data, arg, headers) => this.#newResponse(data, arg, headers);
|
|
297
|
+
/**
|
|
298
|
+
* `.text()` can render text as `Content-Type:text/plain`.
|
|
299
|
+
*
|
|
300
|
+
*
|
|
301
|
+
* @example
|
|
302
|
+
* ```ts
|
|
303
|
+
* app.get('/say', (c) => {
|
|
304
|
+
* return c.text('Hello!')
|
|
305
|
+
* })
|
|
306
|
+
* ```
|
|
307
|
+
*/
|
|
308
|
+
text = (text, arg, headers) => {
|
|
309
|
+
return !this.#preparedHeaders && !this.#status && !arg && !headers && !this.finalized ? new Response(text) : this.#newResponse(text, arg, setDefaultContentType(TEXT_PLAIN, headers));
|
|
310
|
+
};
|
|
311
|
+
/**
|
|
312
|
+
* `.json()` can render JSON as `Content-Type:application/json`.
|
|
313
|
+
*
|
|
314
|
+
*
|
|
315
|
+
* @example
|
|
316
|
+
* ```ts
|
|
317
|
+
* app.get('/api', (c) => {
|
|
318
|
+
* return c.json({ message: 'Hello!' })
|
|
319
|
+
* })
|
|
320
|
+
* ```
|
|
321
|
+
*/
|
|
322
|
+
json = (object, arg, headers) => {
|
|
323
|
+
return this.#newResponse(JSON.stringify(object), arg, setDefaultContentType("application/json", headers));
|
|
324
|
+
};
|
|
325
|
+
html = (html, arg, headers) => {
|
|
326
|
+
const res = (html) => this.#newResponse(html, arg, setDefaultContentType("text/html; charset=UTF-8", headers));
|
|
327
|
+
return typeof html === "object" ? resolveCallback(html, HtmlEscapedCallbackPhase.Stringify, false, {}).then(res) : res(html);
|
|
328
|
+
};
|
|
329
|
+
/**
|
|
330
|
+
* `.redirect()` can Redirect, default status code is 302.
|
|
331
|
+
*
|
|
332
|
+
*
|
|
333
|
+
* @example
|
|
334
|
+
* ```ts
|
|
335
|
+
* app.get('/redirect', (c) => {
|
|
336
|
+
* return c.redirect('/')
|
|
337
|
+
* })
|
|
338
|
+
* app.get('/redirect-permanently', (c) => {
|
|
339
|
+
* return c.redirect('/', 301)
|
|
340
|
+
* })
|
|
341
|
+
* ```
|
|
342
|
+
*/
|
|
343
|
+
redirect = (location, status) => {
|
|
344
|
+
const locationString = String(location);
|
|
345
|
+
this.header("Location", !/[^\x00-\xFF]/.test(locationString) ? locationString : encodeURI(locationString));
|
|
346
|
+
return this.newResponse(null, status ?? 302);
|
|
347
|
+
};
|
|
348
|
+
/**
|
|
349
|
+
* `.notFound()` can return the Not Found Response.
|
|
350
|
+
*
|
|
351
|
+
*
|
|
352
|
+
* @example
|
|
353
|
+
* ```ts
|
|
354
|
+
* app.get('/notfound', (c) => {
|
|
355
|
+
* return c.notFound()
|
|
356
|
+
* })
|
|
357
|
+
* ```
|
|
358
|
+
*/
|
|
359
|
+
notFound = () => {
|
|
360
|
+
this.#notFoundHandler ??= () => createResponseInstance();
|
|
361
|
+
return this.#notFoundHandler(this);
|
|
362
|
+
};
|
|
363
|
+
};
|
|
364
|
+
//#endregion
|
|
365
|
+
export { TEXT_PLAIN as n, Context as t };
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { I as MiddlewareHandler, _ as Env, t as Context } from "./context-Bm7rI-oK.js";
|
|
2
|
+
|
|
3
|
+
//#region ../../plugins/acryl-router/src/core/middleware/context-storage/index.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Context Storage Middleware for Acryl.
|
|
6
|
+
*
|
|
7
|
+
*
|
|
8
|
+
* @returns {MiddlewareHandler} The middleware handler function.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* type Env = {
|
|
13
|
+
* Variables: {
|
|
14
|
+
* message: string
|
|
15
|
+
* }
|
|
16
|
+
* }
|
|
17
|
+
*
|
|
18
|
+
* const app = new Acryl<Env>()
|
|
19
|
+
*
|
|
20
|
+
* app.use(contextStorage())
|
|
21
|
+
*
|
|
22
|
+
* app.use(async (c, next) => {
|
|
23
|
+
* c.set('message', 'Acryl is hot!!')
|
|
24
|
+
* await next()
|
|
25
|
+
* })
|
|
26
|
+
*
|
|
27
|
+
* app.get('/', async (c) => c.text(getMessage()))
|
|
28
|
+
*
|
|
29
|
+
* const getMessage = () => {
|
|
30
|
+
* return getContext<Env>().var.message
|
|
31
|
+
* }
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
declare const contextStorage: () => MiddlewareHandler;
|
|
35
|
+
declare const tryGetContext: <E extends Env = Env>() => Context<E> | undefined;
|
|
36
|
+
declare const getContext: <E extends Env = Env>() => Context<E>;
|
|
37
|
+
//#endregion
|
|
38
|
+
export { contextStorage, getContext, tryGetContext };
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
2
|
+
//#region ../../plugins/acryl-router/src/core/middleware/context-storage/index.ts
|
|
3
|
+
/**
|
|
4
|
+
* @module
|
|
5
|
+
* Context Storage Middleware for Acryl.
|
|
6
|
+
*/
|
|
7
|
+
const asyncLocalStorage = new AsyncLocalStorage();
|
|
8
|
+
/**
|
|
9
|
+
* Context Storage Middleware for Acryl.
|
|
10
|
+
*
|
|
11
|
+
*
|
|
12
|
+
* @returns {MiddlewareHandler} The middleware handler function.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```ts
|
|
16
|
+
* type Env = {
|
|
17
|
+
* Variables: {
|
|
18
|
+
* message: string
|
|
19
|
+
* }
|
|
20
|
+
* }
|
|
21
|
+
*
|
|
22
|
+
* const app = new Acryl<Env>()
|
|
23
|
+
*
|
|
24
|
+
* app.use(contextStorage())
|
|
25
|
+
*
|
|
26
|
+
* app.use(async (c, next) => {
|
|
27
|
+
* c.set('message', 'Acryl is hot!!')
|
|
28
|
+
* await next()
|
|
29
|
+
* })
|
|
30
|
+
*
|
|
31
|
+
* app.get('/', async (c) => c.text(getMessage()))
|
|
32
|
+
*
|
|
33
|
+
* const getMessage = () => {
|
|
34
|
+
* return getContext<Env>().var.message
|
|
35
|
+
* }
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
const contextStorage = () => {
|
|
39
|
+
return async function contextStorage(c, next) {
|
|
40
|
+
await asyncLocalStorage.run(c, next);
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
const tryGetContext = () => {
|
|
44
|
+
return asyncLocalStorage.getStore();
|
|
45
|
+
};
|
|
46
|
+
const getContext = () => {
|
|
47
|
+
const context = tryGetContext();
|
|
48
|
+
if (!context) throw new Error("Context is not available");
|
|
49
|
+
return context;
|
|
50
|
+
};
|
|
51
|
+
//#endregion
|
|
52
|
+
export { contextStorage, getContext, tryGetContext };
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { n as BufferSource } from "./types-CwrQjlaM.js";
|
|
2
|
+
|
|
3
|
+
//#region ../../plugins/acryl-router/src/core/utils/cookie.d.ts
|
|
4
|
+
type Cookie = Record<string, string>;
|
|
5
|
+
type SignedCookie = Record<string, string | false>;
|
|
6
|
+
type PartitionedCookieConstraint = {
|
|
7
|
+
partitioned: true;
|
|
8
|
+
secure: true;
|
|
9
|
+
} | {
|
|
10
|
+
partitioned?: boolean;
|
|
11
|
+
secure?: boolean;
|
|
12
|
+
};
|
|
13
|
+
type SecureCookieConstraint = {
|
|
14
|
+
secure: true;
|
|
15
|
+
};
|
|
16
|
+
type HostCookieConstraint = {
|
|
17
|
+
secure: true;
|
|
18
|
+
path: '/';
|
|
19
|
+
domain?: undefined;
|
|
20
|
+
};
|
|
21
|
+
type CookieOptions = {
|
|
22
|
+
domain?: string;
|
|
23
|
+
expires?: Date;
|
|
24
|
+
httpOnly?: boolean;
|
|
25
|
+
maxAge?: number;
|
|
26
|
+
path?: string;
|
|
27
|
+
secure?: boolean;
|
|
28
|
+
sameSite?: 'Strict' | 'Lax' | 'None' | 'strict' | 'lax' | 'none';
|
|
29
|
+
partitioned?: boolean;
|
|
30
|
+
priority?: 'Low' | 'Medium' | 'High' | 'low' | 'medium' | 'high';
|
|
31
|
+
prefix?: CookiePrefixOptions;
|
|
32
|
+
} & PartitionedCookieConstraint;
|
|
33
|
+
type CookiePrefixOptions = 'host' | 'secure';
|
|
34
|
+
type CookieConstraint<Name> = Name extends `__Secure-${string}` ? CookieOptions & SecureCookieConstraint : Name extends `__Host-${string}` ? CookieOptions & HostCookieConstraint : CookieOptions;
|
|
35
|
+
declare const parse: (cookie: string, name?: string) => Cookie;
|
|
36
|
+
declare const parseSigned: (cookie: string, secret: string | BufferSource, name?: string) => Promise<SignedCookie>;
|
|
37
|
+
declare const serialize: <Name extends string>(name: Name, value: string, opt?: CookieConstraint<Name>) => string;
|
|
38
|
+
declare const serializeSigned: (name: string, value: string, secret: string | BufferSource, opt?: CookieOptions) => Promise<string>;
|
|
39
|
+
//#endregion
|
|
40
|
+
export { SignedCookie as a, serialize as c, CookiePrefixOptions as i, serializeSigned as l, CookieConstraint as n, parse as o, CookieOptions as r, parseSigned as s, Cookie as t };
|
package/lib/cookie.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { t as Context } from "./context-Bm7rI-oK.js";
|
|
2
|
+
import { n as BufferSource } from "./types-CwrQjlaM.js";
|
|
3
|
+
import { a as SignedCookie, i as CookiePrefixOptions, r as CookieOptions, t as Cookie } from "./cookie-ClMaKDQf.js";
|
|
4
|
+
|
|
5
|
+
//#region ../../plugins/acryl-router/src/core/helper/cookie/index.d.ts
|
|
6
|
+
interface GetCookie {
|
|
7
|
+
(c: Context, key: string): string | undefined;
|
|
8
|
+
(c: Context): Cookie;
|
|
9
|
+
(c: Context, key: string, prefixOptions?: CookiePrefixOptions): string | undefined;
|
|
10
|
+
}
|
|
11
|
+
interface GetSignedCookie {
|
|
12
|
+
(c: Context, secret: string | BufferSource, key: string): Promise<string | undefined | false>;
|
|
13
|
+
(c: Context, secret: string | BufferSource): Promise<SignedCookie>;
|
|
14
|
+
(c: Context, secret: string | BufferSource, key: string, prefixOptions?: CookiePrefixOptions): Promise<string | undefined | false>;
|
|
15
|
+
}
|
|
16
|
+
declare const getCookie: GetCookie;
|
|
17
|
+
declare const getSignedCookie: GetSignedCookie;
|
|
18
|
+
declare const generateCookie: (name: string, value: string, opt?: CookieOptions) => string;
|
|
19
|
+
declare const setCookie: (c: Context, name: string, value: string, opt?: CookieOptions) => void;
|
|
20
|
+
declare const generateSignedCookie: (name: string, value: string, secret: string | BufferSource, opt?: CookieOptions) => Promise<string>;
|
|
21
|
+
declare const setSignedCookie: (c: Context, name: string, value: string, secret: string | BufferSource, opt?: CookieOptions) => Promise<void>;
|
|
22
|
+
declare const deleteCookie: (c: Context, name: string, opt?: CookieOptions) => string | undefined;
|
|
23
|
+
//#endregion
|
|
24
|
+
export { deleteCookie, generateCookie, generateSignedCookie, getCookie, getSignedCookie, setCookie, setSignedCookie };
|
package/lib/cookie.js
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { parse, parseSigned, serialize, serializeSigned } from "./utils/cookie.js";
|
|
2
|
+
//#region ../../plugins/acryl-router/src/core/helper/cookie/index.ts
|
|
3
|
+
const getCookie = (c, key, prefix) => {
|
|
4
|
+
const cookie = c.req.raw.headers.get("Cookie");
|
|
5
|
+
if (typeof key === "string") {
|
|
6
|
+
if (!cookie) return;
|
|
7
|
+
let finalKey = key;
|
|
8
|
+
if (prefix === "secure") finalKey = "__Secure-" + key;
|
|
9
|
+
else if (prefix === "host") finalKey = "__Host-" + key;
|
|
10
|
+
return parse(cookie, finalKey)[finalKey];
|
|
11
|
+
}
|
|
12
|
+
if (!cookie) return {};
|
|
13
|
+
return parse(cookie);
|
|
14
|
+
};
|
|
15
|
+
const getSignedCookie = async (c, secret, key, prefix) => {
|
|
16
|
+
const cookie = c.req.raw.headers.get("Cookie");
|
|
17
|
+
if (typeof key === "string") {
|
|
18
|
+
if (!cookie) return;
|
|
19
|
+
let finalKey = key;
|
|
20
|
+
if (prefix === "secure") finalKey = "__Secure-" + key;
|
|
21
|
+
else if (prefix === "host") finalKey = "__Host-" + key;
|
|
22
|
+
return (await parseSigned(cookie, secret, finalKey))[finalKey];
|
|
23
|
+
}
|
|
24
|
+
if (!cookie) return {};
|
|
25
|
+
return await parseSigned(cookie, secret);
|
|
26
|
+
};
|
|
27
|
+
const generateCookie = (name, value, opt) => {
|
|
28
|
+
let cookie;
|
|
29
|
+
if (opt?.prefix === "secure") cookie = serialize("__Secure-" + name, value, {
|
|
30
|
+
path: "/",
|
|
31
|
+
...opt,
|
|
32
|
+
secure: true
|
|
33
|
+
});
|
|
34
|
+
else if (opt?.prefix === "host") cookie = serialize("__Host-" + name, value, {
|
|
35
|
+
...opt,
|
|
36
|
+
path: "/",
|
|
37
|
+
secure: true,
|
|
38
|
+
domain: void 0
|
|
39
|
+
});
|
|
40
|
+
else cookie = serialize(name, value, {
|
|
41
|
+
path: "/",
|
|
42
|
+
...opt
|
|
43
|
+
});
|
|
44
|
+
return cookie;
|
|
45
|
+
};
|
|
46
|
+
const setCookie = (c, name, value, opt) => {
|
|
47
|
+
const cookie = generateCookie(name, value, opt);
|
|
48
|
+
c.header("Set-Cookie", cookie, { append: true });
|
|
49
|
+
};
|
|
50
|
+
const generateSignedCookie = async (name, value, secret, opt) => {
|
|
51
|
+
let cookie;
|
|
52
|
+
if (opt?.prefix === "secure") cookie = await serializeSigned("__Secure-" + name, value, secret, {
|
|
53
|
+
path: "/",
|
|
54
|
+
...opt,
|
|
55
|
+
secure: true
|
|
56
|
+
});
|
|
57
|
+
else if (opt?.prefix === "host") cookie = await serializeSigned("__Host-" + name, value, secret, {
|
|
58
|
+
...opt,
|
|
59
|
+
path: "/",
|
|
60
|
+
secure: true,
|
|
61
|
+
domain: void 0
|
|
62
|
+
});
|
|
63
|
+
else cookie = await serializeSigned(name, value, secret, {
|
|
64
|
+
path: "/",
|
|
65
|
+
...opt
|
|
66
|
+
});
|
|
67
|
+
return cookie;
|
|
68
|
+
};
|
|
69
|
+
const setSignedCookie = async (c, name, value, secret, opt) => {
|
|
70
|
+
const cookie = await generateSignedCookie(name, value, secret, opt);
|
|
71
|
+
c.header("set-cookie", cookie, { append: true });
|
|
72
|
+
};
|
|
73
|
+
const deleteCookie = (c, name, opt) => {
|
|
74
|
+
const deletedCookie = getCookie(c, name, opt?.prefix);
|
|
75
|
+
setCookie(c, name, "", {
|
|
76
|
+
...opt,
|
|
77
|
+
maxAge: 0
|
|
78
|
+
});
|
|
79
|
+
return deletedCookie;
|
|
80
|
+
};
|
|
81
|
+
//#endregion
|
|
82
|
+
export { deleteCookie, generateCookie, generateSignedCookie, getCookie, getSignedCookie, setCookie, setSignedCookie };
|
package/lib/cors.d.ts
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { I as MiddlewareHandler, t as Context } from "./context-Bm7rI-oK.js";
|
|
2
|
+
|
|
3
|
+
//#region ../../plugins/acryl-router/src/core/middleware/cors/index.d.ts
|
|
4
|
+
type CORSOptions = {
|
|
5
|
+
origin?: string | string[] | ((origin: string, c: Context) => Promise<string | undefined | null> | string | undefined | null);
|
|
6
|
+
allowMethods?: string[] | ((origin: string, c: Context) => Promise<string[]> | string[]);
|
|
7
|
+
allowHeaders?: string[];
|
|
8
|
+
maxAge?: number;
|
|
9
|
+
credentials?: boolean;
|
|
10
|
+
exposeHeaders?: string[];
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* CORS Middleware for Acryl.
|
|
14
|
+
*
|
|
15
|
+
*
|
|
16
|
+
* @param {CORSOptions} [options] - The options for the CORS middleware.
|
|
17
|
+
* @param {string | string[] | ((origin: string, c: Context) => Promise<string | undefined | null> | string | undefined | null)} [options.origin='*'] - The value of "Access-Control-Allow-Origin" CORS header.
|
|
18
|
+
* @param {string[] | ((origin: string, c: Context) => Promise<string[]> | string[])} [options.allowMethods=['GET', 'HEAD', 'PUT', 'POST', 'DELETE', 'PATCH', 'QUERY']] - The value of "Access-Control-Allow-Methods" CORS header.
|
|
19
|
+
* @param {string[]} [options.allowHeaders=[]] - The value of "Access-Control-Allow-Headers" CORS header.
|
|
20
|
+
* @param {number} [options.maxAge] - The value of "Access-Control-Max-Age" CORS header.
|
|
21
|
+
* @param {boolean} [options.credentials] - The value of "Access-Control-Allow-Credentials" CORS header.
|
|
22
|
+
* @param {string[]} [options.exposeHeaders=[]] - The value of "Access-Control-Expose-Headers" CORS header.
|
|
23
|
+
* @returns {MiddlewareHandler} The middleware handler function.
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```ts
|
|
27
|
+
* const app = new Acryl()
|
|
28
|
+
*
|
|
29
|
+
* app.use('/api/*', cors())
|
|
30
|
+
* app.use(
|
|
31
|
+
* '/api2/*',
|
|
32
|
+
* cors({
|
|
33
|
+
* origin: 'http://example.com',
|
|
34
|
+
* allowHeaders: ['X-Custom-Header', 'Upgrade-Insecure-Requests'],
|
|
35
|
+
* allowMethods: ['POST', 'GET', 'OPTIONS'],
|
|
36
|
+
* exposeHeaders: ['Content-Length', 'X-Kuma-Revision'],
|
|
37
|
+
* maxAge: 600,
|
|
38
|
+
* credentials: true,
|
|
39
|
+
* })
|
|
40
|
+
* )
|
|
41
|
+
*
|
|
42
|
+
* app.all('/api/abc', (c) => {
|
|
43
|
+
* return c.json({ success: true })
|
|
44
|
+
* })
|
|
45
|
+
* app.all('/api2/abc', (c) => {
|
|
46
|
+
* return c.json({ success: true })
|
|
47
|
+
* })
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
declare const cors: (options?: CORSOptions) => MiddlewareHandler;
|
|
51
|
+
//#endregion
|
|
52
|
+
export { cors };
|