acrylblends 0.3.0 → 0.4.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/dist/index.d.ts +6 -1
- package/dist/index.js +84 -5
- package/dist/index.js.map +1 -1
- package/docs/framework/LICENSE +23 -0
- package/docs/framework/README.md +63 -0
- package/docs/framework/UPSTREAM.md +3 -0
- package/docs/framework/api-summary.md +138 -0
- package/docs/framework/concepts.md +105 -0
- package/docs/framework/context.md +129 -0
- package/docs/framework/getting-started.md +146 -0
- package/docs/framework/helpers.md +118 -0
- package/docs/framework/middleware.md +154 -0
- package/docs/framework/migration-from-0-3.md +108 -0
- package/docs/framework/migration-from-dsh-webserver.md +103 -0
- package/docs/framework/node-server.md +75 -0
- package/docs/framework/plugin-lifecycle.md +111 -0
- package/docs/framework/request.md +106 -0
- package/docs/framework/routing.md +188 -0
- package/docs/framework/surfaces.md +71 -0
- package/docs/framework/upstream.json +9 -0
- package/docs/framework/validation.md +135 -0
- package/package.json +4 -2
- package/plugins/acryl-inspect/plugin.json +2 -1
- package/plugins/acryl-inspect/src/report.ts +21 -13
- package/plugins/acryl-inspect/src/service.ts +9 -7
- package/plugins/acryl-inspect/tests/report.spec.ts +13 -8
- package/plugins/acryl-inspect/tests/service.spec.ts +11 -10
- package/plugins/acryl-inspect/upstream.json +2 -2
- package/plugins/acryl-node-server/LICENSE +26 -0
- package/plugins/acryl-node-server/plugin.json +2 -1
- package/plugins/acryl-node-server/src/adapter/conninfo.ts +23 -0
- package/plugins/acryl-node-server/src/adapter/early-hints.ts +55 -0
- package/plugins/acryl-node-server/src/adapter/error.ts +11 -0
- package/plugins/acryl-node-server/src/adapter/headers.ts +249 -0
- package/plugins/acryl-node-server/src/adapter/index.ts +6 -0
- package/plugins/acryl-node-server/src/adapter/listener.ts +540 -0
- package/plugins/acryl-node-server/src/adapter/request.ts +797 -0
- package/plugins/acryl-node-server/src/adapter/response.ts +186 -0
- package/plugins/acryl-node-server/src/adapter/serve-static.ts +238 -0
- package/plugins/acryl-node-server/src/adapter/server.ts +36 -0
- package/plugins/acryl-node-server/src/adapter/types.ts +82 -0
- package/plugins/acryl-node-server/src/adapter/url.ts +42 -0
- package/plugins/acryl-node-server/src/adapter/utils/response/constants.ts +1 -0
- package/plugins/acryl-node-server/src/adapter/utils/response.ts +4 -0
- package/plugins/acryl-node-server/src/adapter/utils/stream.ts +88 -0
- package/plugins/acryl-node-server/src/adapter/utils.ts +96 -0
- package/plugins/acryl-node-server/src/adapter/websocket-types.ts +45 -0
- package/plugins/acryl-node-server/src/adapter/websocket.ts +375 -0
- package/plugins/acryl-node-server/src/index.ts +19 -6
- package/plugins/acryl-node-server/tests/adapter/app.ts +76 -0
- package/plugins/acryl-node-server/tests/adapter/assets/.static/plain.txt +1 -0
- package/plugins/acryl-node-server/tests/adapter/assets/favicon.ico +0 -0
- package/plugins/acryl-node-server/tests/adapter/assets/secret.txt +1 -0
- package/plugins/acryl-node-server/tests/adapter/assets/static/acryl.html +1 -0
- package/plugins/acryl-node-server/tests/adapter/assets/static/admin/secret.txt +1 -0
- package/plugins/acryl-node-server/tests/adapter/assets/static/data.json +5 -0
- package/plugins/acryl-node-server/tests/adapter/assets/static/extensionless +1 -0
- package/plugins/acryl-node-server/tests/adapter/assets/static/foo..bar.txt +0 -0
- package/plugins/acryl-node-server/tests/adapter/assets/static/index.html +1 -0
- package/plugins/acryl-node-server/tests/adapter/assets/static/plain.txt +1 -0
- package/plugins/acryl-node-server/tests/adapter/assets/static-with-context-path/plain.txt +1 -0
- package/plugins/acryl-node-server/tests/adapter/assets/static-with-precompressed/hello.bin +1 -0
- package/plugins/acryl-node-server/tests/adapter/assets/static-with-precompressed/hello.bin.br +1 -0
- package/plugins/acryl-node-server/tests/adapter/assets/static-with-precompressed/hello.txt +1 -0
- package/plugins/acryl-node-server/tests/adapter/assets/static-with-precompressed/hello.txt.br +1 -0
- package/plugins/acryl-node-server/tests/adapter/assets/static-with-precompressed/hello.txt.zst +1 -0
- package/plugins/acryl-node-server/tests/adapter/conninfo.test.ts +34 -0
- package/plugins/acryl-node-server/tests/adapter/content-length.test.ts +248 -0
- package/plugins/acryl-node-server/tests/adapter/early-hints.test.ts +457 -0
- package/plugins/acryl-node-server/tests/adapter/fixtures/keys/agent1-cert.pem +23 -0
- package/plugins/acryl-node-server/tests/adapter/fixtures/keys/agent1-key.pem +27 -0
- package/plugins/acryl-node-server/tests/adapter/headers.test.ts +252 -0
- package/plugins/acryl-node-server/tests/adapter/helpers/request.ts +190 -0
- package/plugins/acryl-node-server/tests/adapter/listener.test.ts +727 -0
- package/plugins/acryl-node-server/tests/adapter/request-client-disconnect.test.ts +189 -0
- package/plugins/acryl-node-server/tests/adapter/request.test.ts +1230 -0
- package/plugins/acryl-node-server/tests/adapter/response.test.ts +285 -0
- package/plugins/acryl-node-server/tests/adapter/serve-static.test.ts +849 -0
- package/plugins/acryl-node-server/tests/adapter/server-socket.test.ts +790 -0
- package/plugins/acryl-node-server/tests/adapter/server.test.ts +1302 -0
- package/plugins/acryl-node-server/tests/adapter/setup.ts +16 -0
- package/plugins/acryl-node-server/tests/adapter/url.test.ts +76 -0
- package/plugins/acryl-node-server/tests/adapter/utils/response.test.ts +23 -0
- package/plugins/acryl-node-server/tests/adapter/utils/stream.test.ts +75 -0
- package/plugins/acryl-node-server/tests/adapter/utils.test.ts +235 -0
- package/plugins/acryl-node-server/tests/adapter/websocket.test.ts +260 -0
- package/plugins/acryl-node-server/tests/server.spec.ts +44 -8
- package/plugins/acryl-node-server/upstream.json +3 -3
- package/plugins/acryl-router/LICENSE +26 -0
- package/plugins/acryl-router/plugin.json +2 -1
- package/plugins/acryl-router/src/client.ts +2 -0
- package/plugins/acryl-router/src/connection.ts +42 -0
- package/plugins/acryl-router/src/core/app-base.ts +544 -0
- package/plugins/acryl-router/src/core/app.test.ts +3833 -0
- package/plugins/acryl-router/src/core/app.ts +34 -0
- package/plugins/acryl-router/src/core/client/client.test.ts +2313 -0
- package/plugins/acryl-router/src/core/client/client.ts +249 -0
- package/plugins/acryl-router/src/core/client/fetch-result-please.ts +95 -0
- package/plugins/acryl-router/src/core/client/index.ts +17 -0
- package/plugins/acryl-router/src/core/client/types.test.ts +149 -0
- package/plugins/acryl-router/src/core/client/types.ts +393 -0
- package/plugins/acryl-router/src/core/client/utils.test.ts +405 -0
- package/plugins/acryl-router/src/core/client/utils.ts +117 -0
- package/plugins/acryl-router/src/core/compose.test.ts +751 -0
- package/plugins/acryl-router/src/core/compose.ts +73 -0
- package/plugins/acryl-router/src/core/context.test.ts +629 -0
- package/plugins/acryl-router/src/core/context.ts +781 -0
- package/plugins/acryl-router/src/core/helper/accepts/accepts.test.ts +344 -0
- package/plugins/acryl-router/src/core/helper/accepts/accepts.ts +96 -0
- package/plugins/acryl-router/src/core/helper/accepts/index.ts +6 -0
- package/plugins/acryl-router/src/core/helper/adapter/index.test.ts +55 -0
- package/plugins/acryl-router/src/core/helper/adapter/index.ts +90 -0
- package/plugins/acryl-router/src/core/helper/conninfo/index.ts +6 -0
- package/plugins/acryl-router/src/core/helper/conninfo/types.ts +45 -0
- package/plugins/acryl-router/src/core/helper/cookie/index.test.ts +510 -0
- package/plugins/acryl-router/src/core/helper/cookie/index.ts +146 -0
- package/plugins/acryl-router/src/core/helper/factory/index.test.ts +434 -0
- package/plugins/acryl-router/src/core/helper/factory/index.ts +375 -0
- package/plugins/acryl-router/src/core/helper/html/index.test.ts +78 -0
- package/plugins/acryl-router/src/core/helper/html/index.ts +57 -0
- package/plugins/acryl-router/src/core/helper/route/index.test.ts +259 -0
- package/plugins/acryl-router/src/core/helper/route/index.ts +144 -0
- package/plugins/acryl-router/src/core/helper/streaming/index.ts +9 -0
- package/plugins/acryl-router/src/core/helper/streaming/sse.ts +101 -0
- package/plugins/acryl-router/src/core/helper/streaming/stream.test.ts +128 -0
- package/plugins/acryl-router/src/core/helper/streaming/stream.ts +45 -0
- package/plugins/acryl-router/src/core/helper/streaming/text.test.ts +34 -0
- package/plugins/acryl-router/src/core/helper/streaming/text.ts +15 -0
- package/plugins/acryl-router/src/core/helper/streaming/utils.ts +11 -0
- package/plugins/acryl-router/src/core/helper/testing/index.test.ts +42 -0
- package/plugins/acryl-router/src/core/helper/testing/index.ts +28 -0
- package/plugins/acryl-router/src/core/helper/websocket/index.test.ts +124 -0
- package/plugins/acryl-router/src/core/helper/websocket/index.ts +140 -0
- package/plugins/acryl-router/src/core/http-exception.test.ts +45 -0
- package/plugins/acryl-router/src/core/http-exception.ts +77 -0
- package/plugins/acryl-router/src/core/index.ts +53 -0
- package/plugins/acryl-router/src/core/middleware/basic-auth/index.test.ts +434 -0
- package/plugins/acryl-router/src/core/middleware/basic-auth/index.ts +152 -0
- package/plugins/acryl-router/src/core/middleware/bearer-auth/index.test.ts +1018 -0
- package/plugins/acryl-router/src/core/middleware/bearer-auth/index.ts +220 -0
- package/plugins/acryl-router/src/core/middleware/body-limit/index.test.ts +273 -0
- package/plugins/acryl-router/src/core/middleware/body-limit/index.ts +110 -0
- package/plugins/acryl-router/src/core/middleware/combine/index.test.ts +355 -0
- package/plugins/acryl-router/src/core/middleware/combine/index.ts +171 -0
- package/plugins/acryl-router/src/core/middleware/compress/index.test.ts +535 -0
- package/plugins/acryl-router/src/core/middleware/compress/index.ts +142 -0
- package/plugins/acryl-router/src/core/middleware/context-storage/index.test.ts +43 -0
- package/plugins/acryl-router/src/core/middleware/context-storage/index.ts +58 -0
- package/plugins/acryl-router/src/core/middleware/cors/index.test.ts +532 -0
- package/plugins/acryl-router/src/core/middleware/cors/index.ts +163 -0
- package/plugins/acryl-router/src/core/middleware/csrf/index.test.ts +534 -0
- package/plugins/acryl-router/src/core/middleware/csrf/index.ts +150 -0
- package/plugins/acryl-router/src/core/middleware/etag/digest.test.ts +21 -0
- package/plugins/acryl-router/src/core/middleware/etag/digest.ts +95 -0
- package/plugins/acryl-router/src/core/middleware/etag/index.test.ts +503 -0
- package/plugins/acryl-router/src/core/middleware/etag/index.ts +135 -0
- package/plugins/acryl-router/src/core/middleware/ip-restriction/index.test.ts +217 -0
- package/plugins/acryl-router/src/core/middleware/ip-restriction/index.ts +278 -0
- package/plugins/acryl-router/src/core/middleware/jwk/index.test.ts +1135 -0
- package/plugins/acryl-router/src/core/middleware/jwk/index.ts +1 -0
- package/plugins/acryl-router/src/core/middleware/jwk/jwk.ts +195 -0
- package/plugins/acryl-router/src/core/middleware/jwk/keys.test.json +48 -0
- package/plugins/acryl-router/src/core/middleware/jwt/index.test.ts +802 -0
- package/plugins/acryl-router/src/core/middleware/jwt/index.ts +9 -0
- package/plugins/acryl-router/src/core/middleware/jwt/jwt.ts +189 -0
- package/plugins/acryl-router/src/core/middleware/language/index.test.ts +552 -0
- package/plugins/acryl-router/src/core/middleware/language/index.ts +12 -0
- package/plugins/acryl-router/src/core/middleware/language/language.ts +314 -0
- package/plugins/acryl-router/src/core/middleware/logger/index.test.ts +204 -0
- package/plugins/acryl-router/src/core/middleware/logger/index.ts +95 -0
- package/plugins/acryl-router/src/core/middleware/method-not-allowed/index.test.ts +292 -0
- package/plugins/acryl-router/src/core/middleware/method-not-allowed/index.ts +141 -0
- package/plugins/acryl-router/src/core/middleware/method-override/index.test.ts +221 -0
- package/plugins/acryl-router/src/core/middleware/method-override/index.ts +147 -0
- package/plugins/acryl-router/src/core/middleware/powered-by/index.test.ts +37 -0
- package/plugins/acryl-router/src/core/middleware/powered-by/index.ts +35 -0
- package/plugins/acryl-router/src/core/middleware/pretty-json/index.test.ts +218 -0
- package/plugins/acryl-router/src/core/middleware/pretty-json/index.ts +67 -0
- package/plugins/acryl-router/src/core/middleware/request-id/index.test.ts +168 -0
- package/plugins/acryl-router/src/core/middleware/request-id/index.ts +7 -0
- package/plugins/acryl-router/src/core/middleware/request-id/request-id.ts +59 -0
- package/plugins/acryl-router/src/core/middleware/secure-headers/index.test.ts +671 -0
- package/plugins/acryl-router/src/core/middleware/secure-headers/index.ts +8 -0
- package/plugins/acryl-router/src/core/middleware/secure-headers/permissions-policy.ts +101 -0
- package/plugins/acryl-router/src/core/middleware/secure-headers/secure-headers.ts +340 -0
- package/plugins/acryl-router/src/core/middleware/serve-static/index.test.ts +450 -0
- package/plugins/acryl-router/src/core/middleware/serve-static/index.ts +135 -0
- package/plugins/acryl-router/src/core/middleware/serve-static/path.test.ts +50 -0
- package/plugins/acryl-router/src/core/middleware/serve-static/path.ts +25 -0
- package/plugins/acryl-router/src/core/middleware/timeout/index.test.ts +70 -0
- package/plugins/acryl-router/src/core/middleware/timeout/index.ts +58 -0
- package/plugins/acryl-router/src/core/middleware/timing/index.test.ts +310 -0
- package/plugins/acryl-router/src/core/middleware/timing/index.ts +8 -0
- package/plugins/acryl-router/src/core/middleware/timing/timing.ts +256 -0
- package/plugins/acryl-router/src/core/middleware/trailing-slash/index.test.ts +381 -0
- package/plugins/acryl-router/src/core/middleware/trailing-slash/index.ts +156 -0
- package/plugins/acryl-router/src/core/request/constants.ts +1 -0
- package/plugins/acryl-router/src/core/request.test.ts +751 -0
- package/plugins/acryl-router/src/core/request.ts +502 -0
- package/plugins/acryl-router/src/core/router/common.case.test.ts +1132 -0
- package/plugins/acryl-router/src/core/router/linear-router/index.ts +6 -0
- package/plugins/acryl-router/src/core/router/linear-router/router.test.ts +80 -0
- package/plugins/acryl-router/src/core/router/linear-router/router.ts +152 -0
- package/plugins/acryl-router/src/core/router/pattern-router/index.ts +6 -0
- package/plugins/acryl-router/src/core/router/pattern-router/router.test.ts +46 -0
- package/plugins/acryl-router/src/core/router/pattern-router/router.ts +54 -0
- package/plugins/acryl-router/src/core/router/reg-exp-router/index.ts +7 -0
- package/plugins/acryl-router/src/core/router/reg-exp-router/matcher.ts +33 -0
- package/plugins/acryl-router/src/core/router/reg-exp-router/node.ts +170 -0
- package/plugins/acryl-router/src/core/router/reg-exp-router/prepared-router.test.ts +154 -0
- package/plugins/acryl-router/src/core/router/reg-exp-router/prepared-router.ts +165 -0
- package/plugins/acryl-router/src/core/router/reg-exp-router/router.test.ts +265 -0
- package/plugins/acryl-router/src/core/router/reg-exp-router/router.ts +174 -0
- package/plugins/acryl-router/src/core/router/reg-exp-router/trie.ts +84 -0
- package/plugins/acryl-router/src/core/router/smart-router/index.ts +6 -0
- package/plugins/acryl-router/src/core/router/smart-router/router.test.ts +13 -0
- package/plugins/acryl-router/src/core/router/smart-router/router.ts +70 -0
- package/plugins/acryl-router/src/core/router/trie-router/index.ts +6 -0
- package/plugins/acryl-router/src/core/router/trie-router/node.test.ts +896 -0
- package/plugins/acryl-router/src/core/router/trie-router/node.ts +221 -0
- package/plugins/acryl-router/src/core/router/trie-router/router.test.ts +8 -0
- package/plugins/acryl-router/src/core/router/trie-router/router.ts +18 -0
- package/plugins/acryl-router/src/core/router/utils.ts +1 -0
- package/plugins/acryl-router/src/core/router.ts +103 -0
- package/plugins/acryl-router/src/core/types.test.ts +4134 -0
- package/plugins/acryl-router/src/core/types.ts +2782 -0
- package/plugins/acryl-router/src/core/utils/accept.test.ts +299 -0
- package/plugins/acryl-router/src/core/utils/accept.ts +268 -0
- package/plugins/acryl-router/src/core/utils/basic-auth.test.ts +56 -0
- package/plugins/acryl-router/src/core/utils/basic-auth.ts +26 -0
- package/plugins/acryl-router/src/core/utils/body.test.ts +496 -0
- package/plugins/acryl-router/src/core/utils/body.ts +263 -0
- package/plugins/acryl-router/src/core/utils/buffer.test.ts +147 -0
- package/plugins/acryl-router/src/core/utils/buffer.ts +117 -0
- package/plugins/acryl-router/src/core/utils/color.test.ts +23 -0
- package/plugins/acryl-router/src/core/utils/color.ts +56 -0
- package/plugins/acryl-router/src/core/utils/compress.ts +10 -0
- package/plugins/acryl-router/src/core/utils/concurrent.test.ts +69 -0
- package/plugins/acryl-router/src/core/utils/concurrent.ts +55 -0
- package/plugins/acryl-router/src/core/utils/constants.ts +4 -0
- package/plugins/acryl-router/src/core/utils/cookie.test.ts +460 -0
- package/plugins/acryl-router/src/core/utils/cookie.ts +281 -0
- package/plugins/acryl-router/src/core/utils/crypto.test.ts +43 -0
- package/plugins/acryl-router/src/core/utils/crypto.ts +58 -0
- package/plugins/acryl-router/src/core/utils/encode.test.ts +61 -0
- package/plugins/acryl-router/src/core/utils/encode.ts +34 -0
- package/plugins/acryl-router/src/core/utils/filepath.test.ts +78 -0
- package/plugins/acryl-router/src/core/utils/filepath.ts +60 -0
- package/plugins/acryl-router/src/core/utils/handler.ts +15 -0
- package/plugins/acryl-router/src/core/utils/headers.ts +355 -0
- package/plugins/acryl-router/src/core/utils/html.test.ts +16 -0
- package/plugins/acryl-router/src/core/utils/html.ts +182 -0
- package/plugins/acryl-router/src/core/utils/http-status.ts +72 -0
- package/plugins/acryl-router/src/core/utils/ipaddr.test.ts +149 -0
- package/plugins/acryl-router/src/core/utils/ipaddr.ts +374 -0
- package/plugins/acryl-router/src/core/utils/jwt/index.ts +7 -0
- package/plugins/acryl-router/src/core/utils/jwt/jwa.test.ts +86 -0
- package/plugins/acryl-router/src/core/utils/jwt/jwa.ts +38 -0
- package/plugins/acryl-router/src/core/utils/jwt/jws.ts +235 -0
- package/plugins/acryl-router/src/core/utils/jwt/jwt.test.ts +1788 -0
- package/plugins/acryl-router/src/core/utils/jwt/jwt.ts +292 -0
- package/plugins/acryl-router/src/core/utils/jwt/types.ts +157 -0
- package/plugins/acryl-router/src/core/utils/jwt/utf8.ts +7 -0
- package/plugins/acryl-router/src/core/utils/mime.test.ts +64 -0
- package/plugins/acryl-router/src/core/utils/mime.ts +94 -0
- package/plugins/acryl-router/src/core/utils/stream.test.ts +212 -0
- package/plugins/acryl-router/src/core/utils/stream.ts +107 -0
- package/plugins/acryl-router/src/core/utils/types.test.ts +295 -0
- package/plugins/acryl-router/src/core/utils/types.ts +123 -0
- package/plugins/acryl-router/src/core/utils/url.test.ts +384 -0
- package/plugins/acryl-router/src/core/utils/url.ts +337 -0
- package/plugins/acryl-router/src/core/validator/index.ts +8 -0
- package/plugins/acryl-router/src/core/validator/utils.test.ts +82 -0
- package/plugins/acryl-router/src/core/validator/utils.ts +69 -0
- package/plugins/acryl-router/src/core/validator/validator.test.ts +1488 -0
- package/plugins/acryl-router/src/core/validator/validator.ts +185 -0
- package/plugins/acryl-router/src/helpers/index.ts +13 -3
- package/plugins/acryl-router/src/helpers/schema-validator.ts +35 -0
- package/plugins/acryl-router/src/index.ts +6 -6
- package/plugins/acryl-router/src/middleware/index.ts +25 -6
- package/plugins/acryl-router/src/middleware/loopback-only.ts +53 -14
- package/plugins/acryl-router/src/service.ts +262 -64
- package/plugins/acryl-router/tests/docs-examples.spec.ts +152 -0
- package/plugins/acryl-router/tests/live-install.spec.ts +2 -2
- package/plugins/acryl-router/tests/loader.spec.ts +3 -2
- package/plugins/acryl-router/tests/loopback-only.spec.ts +80 -0
- package/plugins/acryl-router/tests/service.spec.ts +281 -66
- package/plugins/acryl-router/tests/shadow-state.spec.ts +79 -0
- package/plugins/acryl-router/upstream.json +2 -2
- package/plugins/acryl-router-http/plugin.json +2 -1
- package/plugins/acryl-router-http/src/bridge.ts +3 -1
- package/plugins/acryl-router-http/tests/adapter.spec.ts +16 -12
- package/plugins/acryl-router-http/tests/surfaces.spec.ts +12 -10
- package/plugins/acryl-router-http/upstream.json +3 -3
- package/plugins/acryl-state/NOTICE +30 -0
- package/plugins/acryl-state/plugin.json +1 -1
- package/plugins/acryl-state/src/cell.ts +1 -1
- package/plugins/acryl-state/src/service.ts +33 -15
- package/plugins/acryl-state/upstream.json +6 -4
- package/plugins/builder/script.ts +4 -7
- package/plugins/extensions/index.ts +6 -5
- package/plugins/extensions/resolve.ts +28 -3
- package/plugins/openai/prompt.ts +9 -7
- package/plugins/tsconfig.json +5 -4
- package/shared/AGENTS.core.md +54 -0
- package/templates/agent/AGENTS.md +6 -0
- package/templates/agent/README.md +2 -2
- package/templates/agent/blend.yaml +1 -1
- package/templates/agent/src/routes.ts +37 -27
- package/templates/agent/test/model.test.ts +2 -1
- package/templates/agent/tsconfig.json +8 -5
- package/templates/blank/AGENTS.md +5 -0
- package/templates/blank/README.md +1 -1
- package/templates/blank/src/routes.ts +6 -4
- package/templates/blank/tsconfig.json +2 -4
- package/templates/todo/AGENTS.md +5 -0
- package/templates/todo/src/page.ts +1 -1
- package/templates/todo/src/todo.ts +58 -29
- package/templates/todo/tsconfig.json +2 -4
- package/templates/todo/upstream.json +2 -2
- package/plugins/acryl-router/src/compose.ts +0 -21
- package/plugins/acryl-router/src/context.ts +0 -59
- package/plugins/acryl-router/src/helpers/read-body.ts +0 -59
- package/plugins/acryl-router/src/helpers/sse.ts +0 -83
- package/plugins/acryl-router/src/helpers/validate.ts +0 -44
- package/plugins/acryl-router/src/http-error.ts +0 -21
- package/plugins/acryl-router/src/middleware/body-limit.ts +0 -25
- package/plugins/acryl-router/src/middleware/cors.ts +0 -46
- package/plugins/acryl-router/src/middleware/logger.ts +0 -21
- package/plugins/acryl-router/src/middleware/request-id.ts +0 -24
- package/plugins/acryl-router/src/middleware/secure-headers.ts +0 -23
- package/plugins/acryl-router/src/pattern.ts +0 -89
- package/plugins/acryl-router/src/registrar.ts +0 -90
- package/plugins/acryl-router/src/table.ts +0 -156
- package/plugins/acryl-router/src/types.ts +0 -73
- package/plugins/acryl-router/src/util.ts +0 -23
- package/plugins/acryl-router/tests/api.spec.ts +0 -223
- package/plugins/acryl-router/tests/conformance.ts +0 -170
- package/plugins/acryl-router/tests/helpers.spec.ts +0 -172
- package/plugins/acryl-router/tests/middleware.spec.ts +0 -183
- package/plugins/acryl-router/tests/table.spec.ts +0 -47
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"source": {
|
|
3
3
|
"repo": "acryldev/acryl",
|
|
4
4
|
"path": "plugins/acryl-inspect",
|
|
5
|
-
"commit": "
|
|
5
|
+
"commit": "64e7c9d2e787f74b2da82492644fbbb46a601074"
|
|
6
6
|
},
|
|
7
7
|
"vendored": [
|
|
8
8
|
"src",
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"LICENSE"
|
|
11
11
|
],
|
|
12
12
|
"rewrittenSpecifiers": 3,
|
|
13
|
-
"digest": "sha256:
|
|
13
|
+
"digest": "sha256:434ed3cf6b9028da90ad6b395209affbc917a62aa994f2b3c8f1d98a26398ea7",
|
|
14
14
|
"testsNotRun": {},
|
|
15
15
|
"notice": [
|
|
16
16
|
"LICENSE"
|
|
@@ -19,3 +19,29 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
|
19
19
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
20
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
21
|
SOFTWARE.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
The files under src/adapter and tests/adapter are derived from @hono/node-server v2.1.5 (https://github.com/honojs/node-server), used under this license:
|
|
26
|
+
|
|
27
|
+
MIT License
|
|
28
|
+
|
|
29
|
+
Copyright (c) 2022 - present, Yusuke Wada and Hono contributors
|
|
30
|
+
|
|
31
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
32
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
33
|
+
in the Software without restriction, including without limitation the rights
|
|
34
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
35
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
36
|
+
furnished to do so, subject to the following conditions:
|
|
37
|
+
|
|
38
|
+
The above copyright notice and this permission notice shall be included in all
|
|
39
|
+
copies or substantial portions of the Software.
|
|
40
|
+
|
|
41
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
42
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
43
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
44
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
45
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
46
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
47
|
+
SOFTWARE.
|
|
@@ -8,5 +8,6 @@
|
|
|
8
8
|
"@deepseek-ai/cordis": "4.0.4",
|
|
9
9
|
"@deepseek-ai/schemastery": "3.18.4"
|
|
10
10
|
},
|
|
11
|
-
"mount": "root.plugin(router); root.plugin(nodeServer, { port: 3000, hostname: '127.0.0.1', scan: 20 }); ctx.nodeServer.url"
|
|
11
|
+
"mount": "root.plugin(router); root.plugin(nodeServer, { port: 3000, hostname: '127.0.0.1', scan: 20 }); ctx.nodeServer.url",
|
|
12
|
+
"omit": ["**/*.test.*", "**/*.case.ts"]
|
|
12
13
|
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { GetConnInfo } from '../../../acryl-router/src/helpers/index.ts'
|
|
2
|
+
import type { HttpBindings } from './types.ts'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* ConnInfo Helper for Node.js
|
|
6
|
+
* @param c Context
|
|
7
|
+
* @returns ConnInfo
|
|
8
|
+
*/
|
|
9
|
+
export const getConnInfo: GetConnInfo = (c) => {
|
|
10
|
+
const bindings = (c.env.server ? c.env.server : c.env) as HttpBindings
|
|
11
|
+
|
|
12
|
+
const address = bindings.incoming.socket.remoteAddress
|
|
13
|
+
const port = bindings.incoming.socket.remotePort
|
|
14
|
+
const family = bindings.incoming.socket.remoteFamily
|
|
15
|
+
|
|
16
|
+
return {
|
|
17
|
+
remote: {
|
|
18
|
+
address,
|
|
19
|
+
port,
|
|
20
|
+
addressType: family === 'IPv4' ? 'IPv4' : family === 'IPv6' ? 'IPv6' : void 0,
|
|
21
|
+
},
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { Context, Env, MiddlewareHandler } from '../../../acryl-router/src/index.ts'
|
|
2
|
+
import type { HttpBindings } from './types.ts'
|
|
3
|
+
|
|
4
|
+
export type EarlyHintsOptions<E extends Env = Env> = {
|
|
5
|
+
link: string | string[] | ((c: Context<E>) => string | string[] | undefined)
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Early Hints middleware for Node.js
|
|
10
|
+
* Automatically sends a 103 Early Hints informational response with the specified Link header(s).
|
|
11
|
+
*
|
|
12
|
+
* @param options EarlyHintsOptions
|
|
13
|
+
* @returns MiddlewareHandler
|
|
14
|
+
*/
|
|
15
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
16
|
+
export const earlyHints = <E extends Env = any>(
|
|
17
|
+
options: EarlyHintsOptions<E>
|
|
18
|
+
): MiddlewareHandler<E> => {
|
|
19
|
+
let warned = false
|
|
20
|
+
|
|
21
|
+
return async (c, next) => {
|
|
22
|
+
const mode = c.req.header('Sec-Fetch-Mode')
|
|
23
|
+
const dest = c.req.header('Sec-Fetch-Dest')
|
|
24
|
+
|
|
25
|
+
if ((mode && mode !== 'navigate') || (dest && dest !== 'document')) {
|
|
26
|
+
return next()
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const env = c.env || {}
|
|
30
|
+
const bindings = ('server' in env ? env.server : env) as HttpBindings
|
|
31
|
+
const outgoing = bindings?.outgoing
|
|
32
|
+
|
|
33
|
+
// Capability check: outgoing.writeEarlyHints exists and is a function.
|
|
34
|
+
// This guard exists for non-Node runtimes and non-HTTP bindings.
|
|
35
|
+
if (typeof outgoing?.writeEarlyHints !== 'function') {
|
|
36
|
+
if (!warned) {
|
|
37
|
+
console.warn(
|
|
38
|
+
'Early Hints Middleware is not supported because writeEarlyHints is not defined.'
|
|
39
|
+
)
|
|
40
|
+
warned = true
|
|
41
|
+
}
|
|
42
|
+
return await next()
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
if (!outgoing.headersSent) {
|
|
46
|
+
const link = typeof options.link === 'function' ? options.link(c) : options.link
|
|
47
|
+
|
|
48
|
+
if (link !== undefined && (Array.isArray(link) ? link.length > 0 : Boolean(link))) {
|
|
49
|
+
outgoing.writeEarlyHints({ link })
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
await next()
|
|
54
|
+
}
|
|
55
|
+
}
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
import type { IncomingMessage } from 'node:http'
|
|
2
|
+
import { Http2ServerRequest } from 'node:http2'
|
|
3
|
+
|
|
4
|
+
type IncomingHeadersSource = Pick<IncomingMessage | Http2ServerRequest, 'rawHeaders'> & {
|
|
5
|
+
headers?: IncomingMessage['headers']
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
// Node's HTTP/1 parser already joins ordinary repeated headers with the same
|
|
9
|
+
// separators as WHATWG Headers, so its parsed object is a safe fast path for
|
|
10
|
+
// those names. It discards repeats of this fixed set by default, however, and
|
|
11
|
+
// HTTP/2 has different collapsing rules; resolve those cases from rawHeaders.
|
|
12
|
+
// https://nodejs.org/api/http.html#messageheaders
|
|
13
|
+
// https://github.com/nodejs/node/blob/v26.7.0/lib/_http_incoming.js
|
|
14
|
+
// https://www.rfc-editor.org/rfc/rfc9110.html#section-5.2
|
|
15
|
+
const nonJoinedHeaders = new Set([
|
|
16
|
+
'age',
|
|
17
|
+
'authorization',
|
|
18
|
+
'content-length',
|
|
19
|
+
'content-type',
|
|
20
|
+
'etag',
|
|
21
|
+
'expires',
|
|
22
|
+
'from',
|
|
23
|
+
'host',
|
|
24
|
+
'if-modified-since',
|
|
25
|
+
'if-unmodified-since',
|
|
26
|
+
'last-modified',
|
|
27
|
+
'location',
|
|
28
|
+
'max-forwards',
|
|
29
|
+
'proxy-authorization',
|
|
30
|
+
'referer',
|
|
31
|
+
'retry-after',
|
|
32
|
+
'server',
|
|
33
|
+
'user-agent',
|
|
34
|
+
])
|
|
35
|
+
|
|
36
|
+
// Converted from RFC 9110's `field-name = token` and `token`/`tchar` ABNF.
|
|
37
|
+
// https://www.rfc-editor.org/rfc/rfc9110.html#section-5.1
|
|
38
|
+
// https://www.rfc-editor.org/rfc/rfc9110.html#section-5.6.2
|
|
39
|
+
const validHeaderName = /^[!#$%&'*+\-.^_`|~\dA-Za-z]+$/
|
|
40
|
+
|
|
41
|
+
const isHttpWhitespace = (code: number): boolean =>
|
|
42
|
+
code === 0x09 || code === 0x0a || code === 0x0d || code === 0x20
|
|
43
|
+
|
|
44
|
+
const normalizeHeaderValue = (value: string): string => {
|
|
45
|
+
if (
|
|
46
|
+
!isHttpWhitespace(value.charCodeAt(0)) &&
|
|
47
|
+
!isHttpWhitespace(value.charCodeAt(value.length - 1))
|
|
48
|
+
) {
|
|
49
|
+
return value
|
|
50
|
+
}
|
|
51
|
+
let start = 0
|
|
52
|
+
let end = value.length
|
|
53
|
+
while (start < end && isHttpWhitespace(value.charCodeAt(start))) {
|
|
54
|
+
start++
|
|
55
|
+
}
|
|
56
|
+
while (end > start && isHttpWhitespace(value.charCodeAt(end - 1))) {
|
|
57
|
+
end--
|
|
58
|
+
}
|
|
59
|
+
return value.slice(start, end)
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const forbiddenHeaderValue = /[\0\r\n]/
|
|
63
|
+
|
|
64
|
+
export const GlobalHeaders = globalThis.Headers
|
|
65
|
+
export type GlobalHeaders = InstanceType<typeof GlobalHeaders>
|
|
66
|
+
|
|
67
|
+
const materializeHeaders = (
|
|
68
|
+
rawHeaders: string[],
|
|
69
|
+
HeadersCtor: typeof GlobalHeaders = GlobalHeaders
|
|
70
|
+
): GlobalHeaders => {
|
|
71
|
+
const headers = new HeadersCtor()
|
|
72
|
+
for (let i = 0; i < rawHeaders.length; i += 2) {
|
|
73
|
+
const name = rawHeaders[i]
|
|
74
|
+
if (!name.startsWith(':')) {
|
|
75
|
+
headers.append(name, rawHeaders[i + 1])
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return headers
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export class RequestHeaders {
|
|
82
|
+
#incoming: IncomingHeadersSource
|
|
83
|
+
#rawHeaders?: string[]
|
|
84
|
+
#headers?: GlobalHeaders
|
|
85
|
+
#invalidValue?: boolean
|
|
86
|
+
|
|
87
|
+
constructor(incoming: IncomingHeadersSource) {
|
|
88
|
+
this.#incoming = incoming
|
|
89
|
+
if (incoming instanceof Http2ServerRequest) {
|
|
90
|
+
this.#rawHeaders = incoming.rawHeaders.slice()
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
get #lazyRawHeaders(): string[] {
|
|
95
|
+
return (this.#rawHeaders ??= this.#incoming.rawHeaders.slice())
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
get #native(): GlobalHeaders {
|
|
99
|
+
if (!this.#headers) {
|
|
100
|
+
this.#headers = materializeHeaders(this.#lazyRawHeaders)
|
|
101
|
+
this.#rawHeaders = undefined
|
|
102
|
+
}
|
|
103
|
+
return this.#headers
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
#normalizedName(name: string): string | undefined {
|
|
107
|
+
if (typeof name !== 'string') {
|
|
108
|
+
return
|
|
109
|
+
}
|
|
110
|
+
if (!validHeaderName.test(name)) {
|
|
111
|
+
throw new TypeError(`Invalid header name: ${name}`)
|
|
112
|
+
}
|
|
113
|
+
return name.toLowerCase()
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// The HTTP/1 fast path trusts Node's parser-produced headers object. Mutating
|
|
117
|
+
// it through the incoming binding is outside this optimization's contract;
|
|
118
|
+
// detecting such changes would require scanning or copying every header.
|
|
119
|
+
#lookupHttp1(lowerName: string): string | null | undefined {
|
|
120
|
+
const headers =
|
|
121
|
+
this.#incoming instanceof Http2ServerRequest ? undefined : this.#incoming.headers
|
|
122
|
+
if (
|
|
123
|
+
!headers ||
|
|
124
|
+
nonJoinedHeaders.has(lowerName) ||
|
|
125
|
+
lowerName === 'set-cookie' ||
|
|
126
|
+
lowerName === '__proto__'
|
|
127
|
+
) {
|
|
128
|
+
return
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
if (!Object.hasOwn(headers, lowerName)) {
|
|
132
|
+
return null
|
|
133
|
+
}
|
|
134
|
+
const rawValue = headers[lowerName]
|
|
135
|
+
if (typeof rawValue === 'string') {
|
|
136
|
+
const value = normalizeHeaderValue(rawValue)
|
|
137
|
+
return forbiddenHeaderValue.test(value) ? undefined : value
|
|
138
|
+
}
|
|
139
|
+
return
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
#lookup(rawHeaders: string[], lowerName: string): string | null | undefined {
|
|
143
|
+
const separator = lowerName === 'cookie' ? '; ' : ', '
|
|
144
|
+
let value: string | null = null
|
|
145
|
+
for (let i = 0; i < rawHeaders.length; i += 2) {
|
|
146
|
+
const rawName = rawHeaders[i]
|
|
147
|
+
if (rawName.length === lowerName.length && rawName.toLowerCase() === lowerName) {
|
|
148
|
+
const rawValue = normalizeHeaderValue(rawHeaders[i + 1])
|
|
149
|
+
if (forbiddenHeaderValue.test(rawValue)) {
|
|
150
|
+
this.#invalidValue = true
|
|
151
|
+
return
|
|
152
|
+
}
|
|
153
|
+
value = value === null ? rawValue : value + separator + rawValue
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
return value
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
append(name: string, value: string): void {
|
|
161
|
+
this.#native.append(name, value)
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
delete(name: string): void {
|
|
165
|
+
this.#native.delete(name)
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
get(name: string): string | null {
|
|
169
|
+
const lowerName = this.#normalizedName(name)
|
|
170
|
+
if (lowerName && !this.#headers && !this.#invalidValue) {
|
|
171
|
+
const http1Value = this.#lookupHttp1(lowerName)
|
|
172
|
+
if (http1Value !== undefined) {
|
|
173
|
+
return http1Value
|
|
174
|
+
}
|
|
175
|
+
const value = this.#lookup(this.#lazyRawHeaders, lowerName)
|
|
176
|
+
if (value !== undefined) {
|
|
177
|
+
return value
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return this.#native.get(name)
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
has(name: string): boolean {
|
|
184
|
+
const lowerName = this.#normalizedName(name)
|
|
185
|
+
if (lowerName && !this.#headers && !this.#invalidValue) {
|
|
186
|
+
const http1Value = this.#lookupHttp1(lowerName)
|
|
187
|
+
if (http1Value !== undefined) {
|
|
188
|
+
return http1Value !== null
|
|
189
|
+
}
|
|
190
|
+
const value = this.#lookup(this.#lazyRawHeaders, lowerName)
|
|
191
|
+
if (value !== undefined) {
|
|
192
|
+
return value !== null
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
return this.#native.has(name)
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
set(name: string, value: string): void {
|
|
199
|
+
this.#native.set(name, value)
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
getSetCookie(): string[] {
|
|
203
|
+
return this.#native.getSetCookie()
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
keys(): HeadersIterator<string> {
|
|
207
|
+
return this.#native.keys()
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
values(): HeadersIterator<string> {
|
|
211
|
+
return this.#native.values()
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
entries(): HeadersIterator<[string, string]> {
|
|
215
|
+
return this.#native.entries()
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
forEach(
|
|
219
|
+
callback: (value: string, key: string, parent: GlobalHeaders) => void,
|
|
220
|
+
thisArg?: unknown
|
|
221
|
+
): void {
|
|
222
|
+
this.#native.forEach((value, key) => {
|
|
223
|
+
callback.call(thisArg, value, key, this as unknown as GlobalHeaders)
|
|
224
|
+
})
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
[Symbol.iterator](): HeadersIterator<[string, string]> {
|
|
228
|
+
return this.entries()
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
Object.defineProperty(RequestHeaders.prototype, Symbol.for('nodejs.util.inspect.custom'), {
|
|
233
|
+
value: function (this: RequestHeaders, depth: number, options: object, inspectFn: Function) {
|
|
234
|
+
const props = Object.fromEntries(this)
|
|
235
|
+
return `Headers (lightweight) ${inspectFn(props, { ...options, depth: depth == null ? null : depth - 1 })}`
|
|
236
|
+
},
|
|
237
|
+
})
|
|
238
|
+
|
|
239
|
+
// Keep request headers compatible with the captured Headers constructor so
|
|
240
|
+
// `request.headers instanceof Headers` remains true without Symbol.hasInstance
|
|
241
|
+
// or replacing the global constructor.
|
|
242
|
+
Object.setPrototypeOf(RequestHeaders.prototype, GlobalHeaders.prototype)
|
|
243
|
+
|
|
244
|
+
// Preserve the previous live-global behavior when a consumer installs a
|
|
245
|
+
// Headers polyfill after this module has initialized.
|
|
246
|
+
export const newHeadersFromIncoming = (incoming: IncomingHeadersSource): GlobalHeaders =>
|
|
247
|
+
globalThis.Headers === GlobalHeaders
|
|
248
|
+
? (new RequestHeaders(incoming) as unknown as GlobalHeaders)
|
|
249
|
+
: materializeHeaders(incoming.rawHeaders, globalThis.Headers)
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { serve, createAdaptorServer } from './server.ts'
|
|
2
|
+
export { upgradeWebSocket } from './websocket.ts'
|
|
3
|
+
export { getRequestListener } from './listener.ts'
|
|
4
|
+
export { RequestError } from './request.ts'
|
|
5
|
+
export type { HttpBindings, Http2Bindings, ServerType } from './types.ts'
|
|
6
|
+
export type { WebSocketData, WebSocketLike, WebSocketServerLike } from './websocket-types.ts'
|