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,19 @@
|
|
|
1
|
+
//#region ../../plugins/acryl-router/src/core/utils/buffer.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* @module
|
|
4
|
+
* Buffer utility.
|
|
5
|
+
*/
|
|
6
|
+
declare const equal: (a: ArrayBuffer, b: ArrayBuffer) => boolean;
|
|
7
|
+
type StringHashFunction = (input: string) => string | null | Promise<string | null>;
|
|
8
|
+
type TimingSafeEqual = {
|
|
9
|
+
(a: string, b: string, hashFunction?: StringHashFunction): Promise<boolean>;
|
|
10
|
+
/**
|
|
11
|
+
* @deprecated object and boolean signatures that take boolean as first and second arguments, and functions with signatures that take non-string arguments have been deprecated
|
|
12
|
+
*/
|
|
13
|
+
(a: string | object | boolean, b: string | object | boolean, hashFunction?: Function): Promise<boolean>;
|
|
14
|
+
};
|
|
15
|
+
declare const timingSafeEqual: TimingSafeEqual;
|
|
16
|
+
declare const bufferToString: (buffer: ArrayBuffer) => string;
|
|
17
|
+
declare const bufferToFormData: (arrayBuffer: ArrayBuffer, contentType: string) => Promise<FormData>;
|
|
18
|
+
//#endregion
|
|
19
|
+
export { bufferToFormData, bufferToString, equal, timingSafeEqual };
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { sha256 } from "./crypto.js";
|
|
2
|
+
//#region ../../plugins/acryl-router/src/core/utils/buffer.ts
|
|
3
|
+
/**
|
|
4
|
+
* @module
|
|
5
|
+
* Buffer utility.
|
|
6
|
+
*/
|
|
7
|
+
const equal = (a, b) => {
|
|
8
|
+
if (a === b) return true;
|
|
9
|
+
if (a.byteLength !== b.byteLength) return false;
|
|
10
|
+
const va = new DataView(a);
|
|
11
|
+
const vb = new DataView(b);
|
|
12
|
+
let i = va.byteLength;
|
|
13
|
+
while (i--) if (va.getUint8(i) !== vb.getUint8(i)) return false;
|
|
14
|
+
return true;
|
|
15
|
+
};
|
|
16
|
+
const constantTimeEqualString = (a, b) => {
|
|
17
|
+
const aLen = a.length;
|
|
18
|
+
const bLen = b.length;
|
|
19
|
+
const maxLen = Math.max(aLen, bLen);
|
|
20
|
+
let out = aLen ^ bLen;
|
|
21
|
+
for (let i = 0; i < maxLen; i++) {
|
|
22
|
+
const aChar = i < aLen ? a.charCodeAt(i) : 0;
|
|
23
|
+
const bChar = i < bLen ? b.charCodeAt(i) : 0;
|
|
24
|
+
out |= aChar ^ bChar;
|
|
25
|
+
}
|
|
26
|
+
return out === 0;
|
|
27
|
+
};
|
|
28
|
+
const timingSafeEqualString = async (a, b, hashFunction) => {
|
|
29
|
+
if (!hashFunction) hashFunction = sha256;
|
|
30
|
+
const [sa, sb] = await Promise.all([hashFunction(a), hashFunction(b)]);
|
|
31
|
+
if (sa == null || sb == null || typeof sa !== "string" || typeof sb !== "string") return false;
|
|
32
|
+
const hashEqual = constantTimeEqualString(sa, sb);
|
|
33
|
+
const originalEqual = constantTimeEqualString(a, b);
|
|
34
|
+
return hashEqual && originalEqual;
|
|
35
|
+
};
|
|
36
|
+
const timingSafeEqual = async (a, b, hashFunction) => {
|
|
37
|
+
if (typeof a === "string" && typeof b === "string") return timingSafeEqualString(a, b, hashFunction);
|
|
38
|
+
if (!hashFunction) hashFunction = sha256;
|
|
39
|
+
const [sa, sb] = await Promise.all([hashFunction(a), hashFunction(b)]);
|
|
40
|
+
if (!sa || !sb || typeof sa !== "string" || typeof sb !== "string") return false;
|
|
41
|
+
return timingSafeEqualString(sa, sb);
|
|
42
|
+
};
|
|
43
|
+
const bufferToString = (buffer) => {
|
|
44
|
+
if (buffer instanceof ArrayBuffer) return new TextDecoder("utf-8").decode(buffer);
|
|
45
|
+
return buffer;
|
|
46
|
+
};
|
|
47
|
+
const bufferToFormData = (arrayBuffer, contentType) => {
|
|
48
|
+
return new Response(arrayBuffer, { headers: { "Content-Type": contentType.replace(/^[^;]+/, (mediaType) => mediaType.toLowerCase()) } }).formData();
|
|
49
|
+
};
|
|
50
|
+
//#endregion
|
|
51
|
+
export { bufferToFormData, bufferToString, equal, timingSafeEqual };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
//#region ../../plugins/acryl-router/src/core/utils/color.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* @module
|
|
4
|
+
* Color utility.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Get whether color change on terminal is enabled or disabled.
|
|
8
|
+
* If `NO_COLOR` environment variable is set, this function returns `false`.
|
|
9
|
+
* Unlike getColorEnabledAsync(), this cannot check Cloudflare environment variables.
|
|
10
|
+
* @see {@link https://no-color.org/}
|
|
11
|
+
*
|
|
12
|
+
* @returns {boolean}
|
|
13
|
+
*/
|
|
14
|
+
declare function getColorEnabled(): boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Get whether color change on terminal is enabled or disabled.
|
|
17
|
+
* If `NO_COLOR` environment variable is set, this function returns `false`.
|
|
18
|
+
* @see {@link https://no-color.org/}
|
|
19
|
+
*
|
|
20
|
+
* @returns {boolean}
|
|
21
|
+
*/
|
|
22
|
+
declare function getColorEnabledAsync(): Promise<boolean>;
|
|
23
|
+
//#endregion
|
|
24
|
+
export { getColorEnabled, getColorEnabledAsync };
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
//#region ../../plugins/acryl-router/src/core/utils/color.ts
|
|
2
|
+
/**
|
|
3
|
+
* @module
|
|
4
|
+
* Color utility.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Get whether color change on terminal is enabled or disabled.
|
|
8
|
+
* If `NO_COLOR` environment variable is set, this function returns `false`.
|
|
9
|
+
* Unlike getColorEnabledAsync(), this cannot check Cloudflare environment variables.
|
|
10
|
+
* @see {@link https://no-color.org/}
|
|
11
|
+
*
|
|
12
|
+
* @returns {boolean}
|
|
13
|
+
*/
|
|
14
|
+
function getColorEnabled() {
|
|
15
|
+
const { process, Deno } = globalThis;
|
|
16
|
+
return !(typeof Deno?.noColor === "boolean" ? Deno.noColor : process !== void 0 ? "NO_COLOR" in process?.env : false);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Get whether color change on terminal is enabled or disabled.
|
|
20
|
+
* If `NO_COLOR` environment variable is set, this function returns `false`.
|
|
21
|
+
* @see {@link https://no-color.org/}
|
|
22
|
+
*
|
|
23
|
+
* @returns {boolean}
|
|
24
|
+
*/
|
|
25
|
+
async function getColorEnabledAsync() {
|
|
26
|
+
const { navigator } = globalThis;
|
|
27
|
+
const cfWorkers = "cloudflare:workers";
|
|
28
|
+
return !(navigator !== void 0 && navigator.userAgent === "Cloudflare-Workers" ? await (async () => {
|
|
29
|
+
try {
|
|
30
|
+
return "NO_COLOR" in ((await import(cfWorkers)).env ?? {});
|
|
31
|
+
} catch {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
})() : !getColorEnabled());
|
|
35
|
+
}
|
|
36
|
+
//#endregion
|
|
37
|
+
export { getColorEnabled, getColorEnabledAsync };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
//#region ../../plugins/acryl-router/src/core/utils/compress.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* @module
|
|
4
|
+
* Constants for compression.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Match for compressible content type.
|
|
8
|
+
*/
|
|
9
|
+
declare const COMPRESSIBLE_CONTENT_TYPE_REGEX: RegExp;
|
|
10
|
+
//#endregion
|
|
11
|
+
export { COMPRESSIBLE_CONTENT_TYPE_REGEX };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
//#region ../../plugins/acryl-router/src/core/utils/compress.ts
|
|
2
|
+
/**
|
|
3
|
+
* @module
|
|
4
|
+
* Constants for compression.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Match for compressible content type.
|
|
8
|
+
*/
|
|
9
|
+
const COMPRESSIBLE_CONTENT_TYPE_REGEX = /^\s*(?:text\/(?!event-stream(?:[;\s]|$))[^;\s]+|application\/(?:javascript|json|xml|xml-dtd|ecmascript|dart|msgpack|postscript|rtf|tar|toml|vnd\.dart|vnd\.ms-fontobject|vnd\.ms-opentype|vnd\.msgpack|wasm|x-httpd-php|x-javascript|x-msgpack|x-ns-proxy-autoconfig|x-sh|x-tar|x-virtualbox-hdd|x-virtualbox-ova|x-virtualbox-ovf|x-virtualbox-vbox|x-virtualbox-vdi|x-virtualbox-vhd|x-virtualbox-vmdk|x-www-form-urlencoded)|font\/(?:otf|ttf)|image\/(?:bmp|vnd\.adobe\.photoshop|vnd\.microsoft\.icon|vnd\.ms-dds|x-icon|x-ms-bmp)|message\/rfc822|model\/gltf-binary|x-shader\/x-fragment|x-shader\/x-vertex|[^;\s]+?\+(?:json|text|xml|yaml|msgpack))(?:[;\s]|$)/i;
|
|
10
|
+
//#endregion
|
|
11
|
+
export { COMPRESSIBLE_CONTENT_TYPE_REGEX };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
//#region ../../plugins/acryl-router/src/core/utils/concurrent.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* @module
|
|
4
|
+
* Concurrent utility.
|
|
5
|
+
*/
|
|
6
|
+
interface Pool {
|
|
7
|
+
run<T>(fn: () => T): Promise<T>;
|
|
8
|
+
}
|
|
9
|
+
declare const createPool: ({
|
|
10
|
+
concurrency,
|
|
11
|
+
interval
|
|
12
|
+
}?: {
|
|
13
|
+
concurrency?: number;
|
|
14
|
+
interval?: number;
|
|
15
|
+
}) => Pool;
|
|
16
|
+
//#endregion
|
|
17
|
+
export { Pool, createPool };
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
//#region ../../plugins/acryl-router/src/core/utils/concurrent.ts
|
|
2
|
+
/**
|
|
3
|
+
* @module
|
|
4
|
+
* Concurrent utility.
|
|
5
|
+
*/
|
|
6
|
+
const DEFAULT_CONCURRENCY = 1024;
|
|
7
|
+
const createPool = ({ concurrency, interval } = {}) => {
|
|
8
|
+
concurrency ||= DEFAULT_CONCURRENCY;
|
|
9
|
+
if (concurrency === Infinity) return { run: async (fn) => fn() };
|
|
10
|
+
const pool = /* @__PURE__ */ new Set();
|
|
11
|
+
const run = async (fn, promise, resolve) => {
|
|
12
|
+
if (pool.size >= concurrency) {
|
|
13
|
+
promise ||= new Promise((r) => resolve = r);
|
|
14
|
+
setTimeout(() => run(fn, promise, resolve));
|
|
15
|
+
return promise;
|
|
16
|
+
}
|
|
17
|
+
const marker = {};
|
|
18
|
+
pool.add(marker);
|
|
19
|
+
const result = await fn();
|
|
20
|
+
if (interval) setTimeout(() => pool.delete(marker), interval);
|
|
21
|
+
else pool.delete(marker);
|
|
22
|
+
if (resolve) {
|
|
23
|
+
resolve(result);
|
|
24
|
+
return promise;
|
|
25
|
+
} else return result;
|
|
26
|
+
};
|
|
27
|
+
return { run };
|
|
28
|
+
};
|
|
29
|
+
//#endregion
|
|
30
|
+
export { createPool };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { a as SignedCookie, c as serialize, i as CookiePrefixOptions, l as serializeSigned, n as CookieConstraint, o as parse, r as CookieOptions, s as parseSigned, t as Cookie } from "../cookie-ClMaKDQf.js";
|
|
2
|
+
export { Cookie, CookieConstraint, CookieOptions, CookiePrefixOptions, SignedCookie, parse, parseSigned, serialize, serializeSigned };
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { tryDecodeURIComponent } from "./url.js";
|
|
2
|
+
//#region ../../plugins/acryl-router/src/core/utils/cookie.ts
|
|
3
|
+
/**
|
|
4
|
+
* @module
|
|
5
|
+
* Cookie utility.
|
|
6
|
+
*/
|
|
7
|
+
const algorithm = {
|
|
8
|
+
name: "HMAC",
|
|
9
|
+
hash: "SHA-256"
|
|
10
|
+
};
|
|
11
|
+
const getCryptoKey = async (secret) => {
|
|
12
|
+
const secretBuf = typeof secret === "string" ? new TextEncoder().encode(secret) : secret;
|
|
13
|
+
return await crypto.subtle.importKey("raw", secretBuf, algorithm, false, ["sign", "verify"]);
|
|
14
|
+
};
|
|
15
|
+
const makeSignature = async (value, secret) => {
|
|
16
|
+
const key = await getCryptoKey(secret);
|
|
17
|
+
const signature = await crypto.subtle.sign(algorithm.name, key, new TextEncoder().encode(value));
|
|
18
|
+
return btoa(String.fromCharCode(...new Uint8Array(signature)));
|
|
19
|
+
};
|
|
20
|
+
const verifySignature = async (base64Signature, value, secret) => {
|
|
21
|
+
try {
|
|
22
|
+
const signatureBinStr = atob(base64Signature);
|
|
23
|
+
const signature = new Uint8Array(signatureBinStr.length);
|
|
24
|
+
for (let i = 0, len = signatureBinStr.length; i < len; i++) signature[i] = signatureBinStr.charCodeAt(i);
|
|
25
|
+
return await crypto.subtle.verify(algorithm, secret, signature, new TextEncoder().encode(value));
|
|
26
|
+
} catch {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
const validCookieNameRegEx = /^[\w!#$%&'*.^`|~+-]+$/;
|
|
31
|
+
const relaxedCookieNameRegEx = /^[!#-:<>-[\]-~]+$/;
|
|
32
|
+
const validCookieValueRegEx = /^[ !#-:<-[\]-~]*$/;
|
|
33
|
+
const trimCookieWhitespace = (value) => {
|
|
34
|
+
let start = 0;
|
|
35
|
+
let end = value.length;
|
|
36
|
+
while (start < end) {
|
|
37
|
+
const charCode = value.charCodeAt(start);
|
|
38
|
+
if (charCode !== 32 && charCode !== 9) break;
|
|
39
|
+
start++;
|
|
40
|
+
}
|
|
41
|
+
while (end > start) {
|
|
42
|
+
const charCode = value.charCodeAt(end - 1);
|
|
43
|
+
if (charCode !== 32 && charCode !== 9) break;
|
|
44
|
+
end--;
|
|
45
|
+
}
|
|
46
|
+
return start === 0 && end === value.length ? value : value.slice(start, end);
|
|
47
|
+
};
|
|
48
|
+
const parse = (cookie, name) => {
|
|
49
|
+
if (name && cookie.indexOf(name) === -1) return {};
|
|
50
|
+
const pairs = cookie.split(";");
|
|
51
|
+
const parsedCookie = Object.create(null);
|
|
52
|
+
for (const pairStr of pairs) {
|
|
53
|
+
const valueStartPos = pairStr.indexOf("=");
|
|
54
|
+
if (valueStartPos === -1) continue;
|
|
55
|
+
const cookieName = trimCookieWhitespace(pairStr.substring(0, valueStartPos));
|
|
56
|
+
if (name && name !== cookieName || !relaxedCookieNameRegEx.test(cookieName) || cookieName in parsedCookie) continue;
|
|
57
|
+
let cookieValue = trimCookieWhitespace(pairStr.substring(valueStartPos + 1));
|
|
58
|
+
if (cookieValue.startsWith("\"") && cookieValue.endsWith("\"")) cookieValue = cookieValue.slice(1, -1);
|
|
59
|
+
if (validCookieValueRegEx.test(cookieValue)) {
|
|
60
|
+
parsedCookie[cookieName] = tryDecodeURIComponent(cookieValue);
|
|
61
|
+
if (name) break;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return parsedCookie;
|
|
65
|
+
};
|
|
66
|
+
const parseSigned = async (cookie, secret, name) => {
|
|
67
|
+
const parsedCookie = Object.create(null);
|
|
68
|
+
const secretKey = await getCryptoKey(secret);
|
|
69
|
+
for (const [key, value] of Object.entries(parse(cookie, name))) {
|
|
70
|
+
const signatureStartPos = value.lastIndexOf(".");
|
|
71
|
+
if (signatureStartPos < 0) continue;
|
|
72
|
+
const signedValue = value.substring(0, signatureStartPos);
|
|
73
|
+
const signature = value.substring(signatureStartPos + 1);
|
|
74
|
+
if (signature.length !== 44 || !signature.endsWith("=")) continue;
|
|
75
|
+
parsedCookie[key] = await verifySignature(signature, signedValue, secretKey) ? signedValue : false;
|
|
76
|
+
}
|
|
77
|
+
return parsedCookie;
|
|
78
|
+
};
|
|
79
|
+
const _serialize = (name, value, opt = {}) => {
|
|
80
|
+
if (!validCookieNameRegEx.test(name)) throw new Error("Invalid cookie name");
|
|
81
|
+
let cookie = `${name}=${value}`;
|
|
82
|
+
if (name.startsWith("__Secure-") && !opt.secure) throw new Error("__Secure- Cookie must have Secure attributes");
|
|
83
|
+
if (name.startsWith("__Host-")) {
|
|
84
|
+
if (!opt.secure) throw new Error("__Host- Cookie must have Secure attributes");
|
|
85
|
+
if (opt.path !== "/") throw new Error("__Host- Cookie must have Path attributes with \"/\"");
|
|
86
|
+
if (opt.domain) throw new Error("__Host- Cookie must not have Domain attributes");
|
|
87
|
+
}
|
|
88
|
+
for (const key of [
|
|
89
|
+
"domain",
|
|
90
|
+
"path",
|
|
91
|
+
"sameSite",
|
|
92
|
+
"priority"
|
|
93
|
+
]) if (opt[key] && /[;\r\n]/.test(opt[key])) throw new Error(`${key} must not contain ";", "\\r", or "\\n"`);
|
|
94
|
+
if (opt && typeof opt.maxAge === "number" && opt.maxAge >= 0) {
|
|
95
|
+
if (opt.maxAge > 3456e4) throw new Error("Cookies Max-Age SHOULD NOT be greater than 400 days (34560000 seconds) in duration.");
|
|
96
|
+
cookie += `; Max-Age=${opt.maxAge | 0}`;
|
|
97
|
+
}
|
|
98
|
+
if (opt.domain && opt.prefix !== "host") cookie += `; Domain=${opt.domain}`;
|
|
99
|
+
if (opt.path) cookie += `; Path=${opt.path}`;
|
|
100
|
+
if (opt.expires) {
|
|
101
|
+
if (opt.expires.getTime() - Date.now() > 3456e7) throw new Error("Cookies Expires SHOULD NOT be greater than 400 days (34560000 seconds) in the future.");
|
|
102
|
+
cookie += `; Expires=${opt.expires.toUTCString()}`;
|
|
103
|
+
}
|
|
104
|
+
if (opt.httpOnly) cookie += "; HttpOnly";
|
|
105
|
+
if (opt.secure) cookie += "; Secure";
|
|
106
|
+
if (opt.sameSite) cookie += `; SameSite=${opt.sameSite.charAt(0).toUpperCase() + opt.sameSite.slice(1)}`;
|
|
107
|
+
if (opt.priority) cookie += `; Priority=${opt.priority.charAt(0).toUpperCase() + opt.priority.slice(1)}`;
|
|
108
|
+
if (opt.partitioned) {
|
|
109
|
+
if (!opt.secure) throw new Error("Partitioned Cookie must have Secure attributes");
|
|
110
|
+
cookie += "; Partitioned";
|
|
111
|
+
}
|
|
112
|
+
return cookie;
|
|
113
|
+
};
|
|
114
|
+
const serialize = (name, value, opt) => {
|
|
115
|
+
value = encodeURIComponent(value);
|
|
116
|
+
return _serialize(name, value, opt);
|
|
117
|
+
};
|
|
118
|
+
const serializeSigned = async (name, value, secret, opt = {}) => {
|
|
119
|
+
const signature = await makeSignature(value, secret);
|
|
120
|
+
value = `${value}.${signature}`;
|
|
121
|
+
value = encodeURIComponent(value);
|
|
122
|
+
return _serialize(name, value, opt);
|
|
123
|
+
};
|
|
124
|
+
//#endregion
|
|
125
|
+
export { parse, parseSigned, serialize, serializeSigned };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { g as JSONValue } from "../types-CwrQjlaM.js";
|
|
2
|
+
|
|
3
|
+
//#region ../../plugins/acryl-router/src/core/utils/crypto.d.ts
|
|
4
|
+
type Algorithm = {
|
|
5
|
+
name: string;
|
|
6
|
+
alias: string;
|
|
7
|
+
};
|
|
8
|
+
type Data = string | boolean | number | JSONValue | ArrayBufferView | ArrayBuffer;
|
|
9
|
+
declare const sha256: (data: Data) => Promise<string | null>;
|
|
10
|
+
declare const sha1: (data: Data) => Promise<string | null>;
|
|
11
|
+
declare const md5: (data: Data) => Promise<string | null>;
|
|
12
|
+
declare const createHash: (data: Data, algorithm: Algorithm) => Promise<string | null>;
|
|
13
|
+
//#endregion
|
|
14
|
+
export { createHash, md5, sha1, sha256 };
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
//#region ../../plugins/acryl-router/src/core/utils/crypto.ts
|
|
2
|
+
const sha256 = async (data) => {
|
|
3
|
+
return await createHash(data, {
|
|
4
|
+
name: "SHA-256",
|
|
5
|
+
alias: "sha256"
|
|
6
|
+
});
|
|
7
|
+
};
|
|
8
|
+
const sha1 = async (data) => {
|
|
9
|
+
return await createHash(data, {
|
|
10
|
+
name: "SHA-1",
|
|
11
|
+
alias: "sha1"
|
|
12
|
+
});
|
|
13
|
+
};
|
|
14
|
+
const md5 = async (data) => {
|
|
15
|
+
return await createHash(data, {
|
|
16
|
+
name: "MD5",
|
|
17
|
+
alias: "md5"
|
|
18
|
+
});
|
|
19
|
+
};
|
|
20
|
+
const createHash = async (data, algorithm) => {
|
|
21
|
+
let sourceBuffer;
|
|
22
|
+
if (ArrayBuffer.isView(data) || data instanceof ArrayBuffer) sourceBuffer = data;
|
|
23
|
+
else {
|
|
24
|
+
if (typeof data === "object") data = JSON.stringify(data);
|
|
25
|
+
sourceBuffer = new TextEncoder().encode(String(data));
|
|
26
|
+
}
|
|
27
|
+
if (crypto && crypto.subtle) {
|
|
28
|
+
const buffer = await crypto.subtle.digest({ name: algorithm.name }, sourceBuffer);
|
|
29
|
+
return Array.prototype.map.call(new Uint8Array(buffer), (x) => ("00" + x.toString(16)).slice(-2)).join("");
|
|
30
|
+
}
|
|
31
|
+
return null;
|
|
32
|
+
};
|
|
33
|
+
//#endregion
|
|
34
|
+
export { createHash, md5, sha1, sha256 };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
//#region ../../plugins/acryl-router/src/core/utils/encode.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* @module
|
|
4
|
+
* Encode utility.
|
|
5
|
+
*/
|
|
6
|
+
declare const decodeBase64Url: (str: string) => Uint8Array<ArrayBuffer>;
|
|
7
|
+
declare const encodeBase64Url: (buf: ArrayBufferLike) => string;
|
|
8
|
+
declare const encodeBase64: (buf: ArrayBufferLike) => string;
|
|
9
|
+
declare const decodeBase64: (str: string) => Uint8Array<ArrayBuffer>;
|
|
10
|
+
//#endregion
|
|
11
|
+
export { decodeBase64, decodeBase64Url, encodeBase64, encodeBase64Url };
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
//#region ../../plugins/acryl-router/src/core/utils/encode.ts
|
|
2
|
+
/**
|
|
3
|
+
* @module
|
|
4
|
+
* Encode utility.
|
|
5
|
+
*/
|
|
6
|
+
const decodeBase64Url = (str) => {
|
|
7
|
+
return decodeBase64(str.replace(/_|-/g, (m) => ({
|
|
8
|
+
_: "/",
|
|
9
|
+
"-": "+"
|
|
10
|
+
})[m] ?? m));
|
|
11
|
+
};
|
|
12
|
+
const encodeBase64Url = (buf) => encodeBase64(buf).replace(/\/|\+/g, (m) => ({
|
|
13
|
+
"/": "_",
|
|
14
|
+
"+": "-"
|
|
15
|
+
})[m] ?? m);
|
|
16
|
+
const encodeBase64 = (buf) => {
|
|
17
|
+
let binary = "";
|
|
18
|
+
const bytes = new Uint8Array(buf);
|
|
19
|
+
for (let i = 0, len = bytes.length; i < len; i++) binary += String.fromCharCode(bytes[i]);
|
|
20
|
+
return btoa(binary);
|
|
21
|
+
};
|
|
22
|
+
const decodeBase64 = (str) => {
|
|
23
|
+
const binary = atob(str);
|
|
24
|
+
const bytes = new Uint8Array(new ArrayBuffer(binary.length));
|
|
25
|
+
const half = binary.length / 2;
|
|
26
|
+
for (let i = 0, j = binary.length - 1; i <= half; i++, j--) {
|
|
27
|
+
bytes[i] = binary.charCodeAt(i);
|
|
28
|
+
bytes[j] = binary.charCodeAt(j);
|
|
29
|
+
}
|
|
30
|
+
return bytes;
|
|
31
|
+
};
|
|
32
|
+
//#endregion
|
|
33
|
+
export { decodeBase64, decodeBase64Url, encodeBase64, encodeBase64Url };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
//#region ../../plugins/acryl-router/src/core/utils/filepath.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* @module
|
|
4
|
+
* FilePath utility.
|
|
5
|
+
*/
|
|
6
|
+
type FilePathOptions = {
|
|
7
|
+
filename: string;
|
|
8
|
+
root?: string;
|
|
9
|
+
defaultDocument?: string;
|
|
10
|
+
};
|
|
11
|
+
declare const getFilePath: (options: FilePathOptions) => string | undefined;
|
|
12
|
+
declare const getFilePathWithoutDefaultDocument: (options: Omit<FilePathOptions, "defaultDocument">) => string | undefined;
|
|
13
|
+
//#endregion
|
|
14
|
+
export { getFilePath, getFilePathWithoutDefaultDocument };
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
//#region ../../plugins/acryl-router/src/core/utils/filepath.ts
|
|
2
|
+
const getFilePath = (options) => {
|
|
3
|
+
let filename = options.filename;
|
|
4
|
+
const defaultDocument = options.defaultDocument || "index.html";
|
|
5
|
+
if (filename.endsWith("/")) filename = filename.concat(defaultDocument);
|
|
6
|
+
else if (!filename.match(/\.[a-zA-Z0-9_-]+$/)) filename = filename.concat("/" + defaultDocument);
|
|
7
|
+
return getFilePathWithoutDefaultDocument({
|
|
8
|
+
root: options.root,
|
|
9
|
+
filename
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
const getFilePathWithoutDefaultDocument = (options) => {
|
|
13
|
+
let root = options.root || "";
|
|
14
|
+
let filename = options.filename;
|
|
15
|
+
if (/(?:^|[\/\\])\.\.(?:$|[\/\\])/.test(filename)) return;
|
|
16
|
+
filename = filename.replace(/^\.?[\/\\]/, "");
|
|
17
|
+
filename = filename.replace(/\\/g, "/");
|
|
18
|
+
root = root.replace(/\/$/, "");
|
|
19
|
+
let path = root ? root + "/" + filename : filename;
|
|
20
|
+
path = path.replace(/^\.?\//, "");
|
|
21
|
+
if (root[0] !== "/" && path[0] === "/") return;
|
|
22
|
+
return path;
|
|
23
|
+
};
|
|
24
|
+
//#endregion
|
|
25
|
+
export { getFilePath, getFilePathWithoutDefaultDocument };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
//#region ../../plugins/acryl-router/src/core/utils/handler.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* @module
|
|
4
|
+
* Handler utility.
|
|
5
|
+
*/
|
|
6
|
+
declare const isMiddleware: (handler: Function) => boolean;
|
|
7
|
+
declare const findTargetHandler: (handler: Function) => Function;
|
|
8
|
+
//#endregion
|
|
9
|
+
export { findTargetHandler, isMiddleware };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { COMPOSED_HANDLER } from "./constants.js";
|
|
2
|
+
//#region ../../plugins/acryl-router/src/core/utils/handler.ts
|
|
3
|
+
/**
|
|
4
|
+
* @module
|
|
5
|
+
* Handler utility.
|
|
6
|
+
*/
|
|
7
|
+
const isMiddleware = (handler) => handler.length > 1;
|
|
8
|
+
const findTargetHandler = (handler) => {
|
|
9
|
+
return handler["__COMPOSED_HANDLER"] ? findTargetHandler(handler[COMPOSED_HANDLER]) : handler;
|
|
10
|
+
};
|
|
11
|
+
//#endregion
|
|
12
|
+
export { findTargetHandler, isMiddleware };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
//#region ../../plugins/acryl-router/src/core/utils/html.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* @module
|
|
4
|
+
* HTML utility.
|
|
5
|
+
*/
|
|
6
|
+
declare const HtmlEscapedCallbackPhase: {
|
|
7
|
+
readonly Stringify: 1;
|
|
8
|
+
readonly BeforeStream: 2;
|
|
9
|
+
readonly Stream: 3;
|
|
10
|
+
};
|
|
11
|
+
type HtmlEscapedCallbackOpts = {
|
|
12
|
+
buffer?: [string];
|
|
13
|
+
phase: (typeof HtmlEscapedCallbackPhase)[keyof typeof HtmlEscapedCallbackPhase];
|
|
14
|
+
context: Readonly<object>;
|
|
15
|
+
};
|
|
16
|
+
type HtmlEscapedCallback = (opts: HtmlEscapedCallbackOpts) => Promise<string> | undefined;
|
|
17
|
+
type HtmlEscaped = {
|
|
18
|
+
isEscaped: true;
|
|
19
|
+
callbacks?: HtmlEscapedCallback[];
|
|
20
|
+
};
|
|
21
|
+
type HtmlEscapedString = string & HtmlEscaped;
|
|
22
|
+
/**
|
|
23
|
+
* StringBuffer contains string and Promise<string> alternately
|
|
24
|
+
* The length of the array will be odd, the odd numbered element will be a string,
|
|
25
|
+
* and the even numbered element will be a Promise<string>.
|
|
26
|
+
* When concatenating into a single string, it must be processed from the tail.
|
|
27
|
+
* @example
|
|
28
|
+
* [
|
|
29
|
+
* 'framework.',
|
|
30
|
+
* Promise.resolve('ultra fast'),
|
|
31
|
+
* 'a ',
|
|
32
|
+
* Promise.resolve('is '),
|
|
33
|
+
* 'Acryl',
|
|
34
|
+
* ]
|
|
35
|
+
*/
|
|
36
|
+
type StringBuffer = (string | Promise<string>)[];
|
|
37
|
+
type StringBufferWithCallbacks = StringBuffer & {
|
|
38
|
+
callbacks: HtmlEscapedCallback[];
|
|
39
|
+
};
|
|
40
|
+
declare const raw: (value: unknown, callbacks?: HtmlEscapedCallback[]) => HtmlEscapedString;
|
|
41
|
+
declare const stringBufferToString: (buffer: StringBuffer, callbacks: HtmlEscapedCallback[] | undefined) => Promise<HtmlEscapedString>;
|
|
42
|
+
declare const escapeToBuffer: (str: string, buffer: StringBuffer) => void;
|
|
43
|
+
declare const resolveCallbackSync: (str: string | HtmlEscapedString) => string;
|
|
44
|
+
declare const resolveCallback: (str: string | HtmlEscapedString | Promise<string>, phase: (typeof HtmlEscapedCallbackPhase)[keyof typeof HtmlEscapedCallbackPhase], preserveCallbacks: boolean, context: object, buffer?: [string]) => Promise<string>;
|
|
45
|
+
//#endregion
|
|
46
|
+
export { HtmlEscaped, HtmlEscapedCallback, HtmlEscapedCallbackPhase, HtmlEscapedString, StringBuffer, StringBufferWithCallbacks, escapeToBuffer, raw, resolveCallback, resolveCallbackSync, stringBufferToString };
|