acrylblends 1.0.4 → 1.0.6
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/docs/framework/agents/index.md +7 -5
- package/lib/accept-CNNHu4Cf.js +193 -0
- package/lib/{accepts-XBuZPVRI.js → accepts-Btq83xPd.js} +1 -1
- package/lib/accepts.js +1 -1
- package/lib/acryl-base.js +1 -331
- package/lib/adapter-CaZ6FZUU.js +37 -0
- package/lib/adapter.js +1 -36
- package/lib/{app-BM0rTCp7.js → app-CQcGWjrk.js} +4 -4
- package/lib/app-base-CpRMZL4v.js +332 -0
- package/lib/{audit-D5z9uwOP.d.ts → audit-GcLtvNLV.d.ts} +4 -2
- package/lib/{base-NSN_SNv-.js → base-D_6kfOr-.js} +1 -1
- package/lib/basic-auth-C0HTRpXh.js +20 -0
- package/lib/basic-auth-DFLflXNe.js +95 -0
- package/lib/basic-auth.js +1 -94
- package/lib/bearer-auth-Cwxt-vgS.js +94 -0
- package/lib/bearer-auth.js +1 -93
- package/lib/body-D7f4e7w_.js +94 -0
- package/lib/body-limit-WmIjWRLt.js +66 -0
- package/lib/body-limit.js +1 -65
- package/lib/buffer-CkEOJCcY.js +51 -0
- package/lib/bun.js +3 -3
- package/lib/cache-B0bHH7s5.js +169 -0
- package/lib/cache.js +1 -168
- package/lib/{client-DDLXwhBo.js → client-BrMFnMEd.js} +1 -1
- package/lib/{client-modules-CLvWOjbd.js → client-modules-drj4mjhj.js} +4 -4
- package/lib/client.js +1 -1
- package/lib/color-COa3DplO.js +37 -0
- package/lib/combine-TWuGdcbC.js +137 -0
- package/lib/combine.js +1 -136
- package/lib/{components-cEW3ovK0.js → components-B2ka9Ax1.js} +4 -4
- package/lib/{components-JXVm45kK.js → components-PVXwaOaC.js} +2 -2
- package/lib/compress-BzWqsHF1.js +79 -0
- package/lib/compress-C-9vK4B2.d.ts +11 -0
- package/lib/compress-DCyrrQ5D.js +11 -0
- package/lib/compress.d.ts +1 -1
- package/lib/compress.js +2 -78
- package/lib/concurrent-DrF3d2c-.js +30 -0
- package/lib/conninfo-BCROmdnf.d.ts +11 -0
- package/lib/conninfo-CWJwieh4.js +19 -0
- package/lib/constants-CBSEudrb.js +7 -0
- package/lib/{context-DDO0cfuP.js → context-CkOh7Ygv.js} +2 -2
- package/lib/context-storage-iuPoI_CR.js +52 -0
- package/lib/context-storage.js +1 -51
- package/lib/cookie-B1LlkzOe.js +125 -0
- package/lib/cookie-BHIduy2T.js +82 -0
- package/lib/cookie.js +1 -81
- package/lib/cordis/db-sqlite.d.ts +1 -1
- package/lib/cordis/door.d.ts +99 -5
- package/lib/cordis/door.js +562 -20
- package/lib/cordis/inspect.js +4 -4
- package/lib/cordis/kv-db.d.ts +1 -1
- package/lib/cordis/kv-db.js +1 -1
- package/lib/cordis/kv-json.d.ts +1 -1
- package/lib/cordis/kv-json.js +1 -1
- package/lib/cordis/node-server.d.ts +1 -1
- package/lib/cordis/node-server.js +3 -116
- package/lib/cordis/router-http.js +2 -2
- package/lib/cordis/router.js +4 -4
- package/lib/cordis/state.js +7 -7
- package/lib/{core-CaY8XDZ6.js → core-BOu1jYua.js} +1 -1
- package/lib/cors-CbAQ-8qU.js +106 -0
- package/lib/cors.js +1 -105
- package/lib/crypto-iVP-N-tS.js +34 -0
- package/lib/csrf-DqqOZtgy.js +101 -0
- package/lib/csrf.js +1 -100
- package/lib/css-C5CPVMvM.js +134 -0
- package/lib/css.js +2 -133
- package/lib/db/sqlite.d.ts +1 -25
- package/lib/dev-CLgu-JRe.js +50 -0
- package/lib/dev.js +1 -49
- package/lib/dom-YjND9Jt3.js +74 -0
- package/lib/door/host.d.ts +2 -2
- package/lib/door/host.js +1 -1
- package/lib/door/page.d.ts +3 -1
- package/lib/door/page.js +2 -2
- package/lib/door/protocol.d.ts +1 -1
- package/lib/door/protocol.js +1 -212
- package/lib/encode-BhbNLrjp.js +33 -0
- package/lib/factory-CLdSf-xS.js +30 -0
- package/lib/factory.js +1 -29
- package/lib/handler-C0wZ0KwO.js +12 -0
- package/lib/helpers-BEjcdbgw.js +5 -0
- package/lib/{hooks-w72iLeFR.js → hooks-CfC07ri0.js} +1 -1
- package/lib/html-CgNa89xw.js +31 -0
- package/lib/html-DGExBFNg.js +103 -0
- package/lib/html.d.ts +2 -5
- package/lib/html.js +2 -30
- package/lib/http-exception-MjWkT89V.js +54 -0
- package/lib/http-exception.js +1 -53
- package/lib/index-dAzQsJG9.d.ts +6 -0
- package/lib/index.js +3 -3
- package/lib/ip-restriction-jKtKCRM_.js +166 -0
- package/lib/ip-restriction.js +1 -165
- package/lib/ipaddr-DCoIo528.js +238 -0
- package/lib/jsx/dom/client.js +1 -1
- package/lib/jsx/dom/jsx-dev-runtime.js +1 -1
- package/lib/jsx/dom/jsx-runtime.js +2 -1
- package/lib/jsx/dom/server.js +3 -3
- package/lib/jsx/dom.js +5 -73
- package/lib/jsx/jsx-dev-runtime.d.ts +2 -5
- package/lib/jsx/jsx-dev-runtime.js +2 -13
- package/lib/jsx/jsx-runtime.d.ts +2 -2
- package/lib/jsx/jsx-runtime.js +4 -4
- package/lib/jsx/streaming.js +1 -1
- package/lib/jsx-CUQgttxU.js +47 -0
- package/lib/jsx-dev-runtime-B4WTyq8r.js +14 -0
- package/lib/{jsx-dev-runtime-CWLRA2F3.js → jsx-dev-runtime-BLfA-EhI.js} +2 -2
- package/lib/jsx-dev-runtime-CGt4kNYr.d.ts +6 -0
- package/lib/jsx-renderer-CfifM4hT.js +99 -0
- package/lib/jsx-renderer.js +1 -98
- package/lib/jsx-runtime-COCRWBJ9.js +2 -0
- package/lib/jsx.js +5 -46
- package/lib/{jwk-LkzeoaU8.js → jwk-CDPpYQpD.js} +3 -3
- package/lib/jwk.js +1 -1
- package/lib/{jwt-BGJBw5AF.js → jwt-BXoIA2fQ.js} +2 -2
- package/lib/{jwt-CskdhEW9.js → jwt-lyS4Q3mT.js} +3 -3
- package/lib/jwt.js +2 -2
- package/lib/kv/db.d.ts +1 -10
- package/lib/kv/db.js +1 -56
- package/lib/kv/json.d.ts +1 -9
- package/lib/kv/json.js +1 -223
- package/lib/{language-D9a4zqvn.js → language-DeGRtLJt.js} +2 -2
- package/lib/language.js +1 -1
- package/lib/{linear-router-C3FPib6h.js → linear-router-CmZn_JLV.js} +2 -2
- package/lib/logger-Ckxu8diz.js +54 -0
- package/lib/logger.js +1 -53
- package/lib/loopback-only-BbasoF7R.js +90 -0
- package/lib/loopback-only.js +1 -89
- package/lib/method-not-allowed-TO2_hnfl.js +82 -0
- package/lib/method-not-allowed.js +1 -81
- package/lib/method-override-DnZKfJbV.js +103 -0
- package/lib/method-override.js +1 -102
- package/lib/middleware-BfG_fp8P.js +12 -0
- package/lib/mime-BnScXkQn.js +77 -0
- package/lib/mount-QkK_3NtJ.js +67 -0
- package/lib/mount.js +1 -66
- package/lib/node-server/conninfo.d.ts +1 -10
- package/lib/node-server/conninfo.js +1 -18
- package/lib/node-server/register.js +25 -2
- package/lib/node-server/serve-static.d.ts +1 -17
- package/lib/node-server/serve-static.js +1 -1
- package/lib/node-server.d.ts +2 -2
- package/lib/node-server.js +4 -4
- package/lib/open-BqK4D2Wn.d.ts +11 -0
- package/lib/open-But9E2rL.js +57 -0
- package/lib/open-CULVJgOc.d.ts +12 -0
- package/lib/open-Dp4sxspc.js +224 -0
- package/lib/open-T7kgbO2O.d.ts +27 -0
- package/lib/{pattern-router-HZxjDGEQ.js → pattern-router-CJBecJBd.js} +1 -1
- package/lib/powered-by-CXQNjNIX.js +24 -0
- package/lib/powered-by.js +1 -23
- package/lib/pretty-json-CeC1yvYt.js +39 -0
- package/lib/pretty-json.js +1 -38
- package/lib/{protocol-C37gPePD.d.ts → protocol-CR31M7K_.d.ts} +2 -0
- package/lib/protocol-Dt0AZBOz.js +213 -0
- package/lib/proxy-C2w_mH7k.js +121 -0
- package/lib/proxy.js +1 -120
- package/lib/quick.js +4 -4
- package/lib/{reg-exp-router-DC1R3qoY.js → reg-exp-router-C_WV84eV.js} +2 -2
- package/lib/request-DvMgGtlW.js +323 -0
- package/lib/request.js +1 -322
- package/lib/route-D8m-a2I1.js +126 -0
- package/lib/route.js +1 -125
- package/lib/router/linear-router.js +1 -1
- package/lib/router/pattern-router.js +1 -1
- package/lib/router/reg-exp-router.js +1 -1
- package/lib/router/smart-router.js +1 -1
- package/lib/router/trie-router.js +1 -1
- package/lib/router-Be_o6nFu.js +35 -0
- package/lib/router.js +1 -34
- package/lib/schema-validator-EK3cUUCt.js +22 -0
- package/lib/schema-validator.js +1 -21
- package/lib/{secure-headers-mP3j6Hm6.js → secure-headers-C5ZOcXqk.js} +1 -1
- package/lib/secure-headers.js +1 -1
- package/lib/serve-static-B7sqnftW.d.ts +18 -0
- package/lib/{serve-static-3uo_9rjF.js → serve-static-C1Nkj_xB.js} +2 -2
- package/lib/{serve-static-Cp5adzGo.js → serve-static-EiJf1zkO.js} +4 -4
- package/lib/serve-static.js +1 -1
- package/lib/{smart-router-C5CZ5XSM.js → smart-router-BjxkDQCE.js} +1 -1
- package/lib/{snapshot-text-BLz8nlSc.js → snapshot-text-CtQm3n8n.js} +23 -14
- package/lib/{src-dy3Fk9tA.js → src-BTBm4OPD.js} +6 -6
- package/lib/src-LX0E4ec4.js +117 -0
- package/lib/{ssg-BwjcA-Ge.js → ssg-BEl7MHqg.js} +5 -5
- package/lib/ssg.js +1 -1
- package/lib/stream-CzM_SHkq.js +88 -0
- package/lib/{streaming-DHST3Scg.js → streaming-BlDaph8U.js} +3 -3
- package/lib/streaming.js +1 -1
- package/lib/{test-websocket-D8WWqE5G.js → test-websocket-BLeEvybj.js} +2 -2
- package/lib/testing-BQx5T_UX.js +17 -0
- package/lib/testing.js +1 -16
- package/lib/timeout-FeqZ9A-0.js +42 -0
- package/lib/timeout.js +1 -41
- package/lib/tiny.js +2 -2
- package/lib/trailing-slash-DwTx-1sk.js +85 -0
- package/lib/trailing-slash.js +1 -84
- package/lib/{trie-router-CfFbapzL.js → trie-router-JydLKUa2.js} +2 -2
- package/lib/url-BPh4d6j-.js +197 -0
- package/lib/utils/accept.js +1 -192
- package/lib/utils/basic-auth.js +1 -19
- package/lib/utils/body.js +1 -93
- package/lib/utils/buffer.js +1 -50
- package/lib/utils/color.js +1 -36
- package/lib/utils/compress.d.ts +1 -10
- package/lib/utils/compress.js +1 -10
- package/lib/utils/concurrent.js +1 -29
- package/lib/utils/constants.js +1 -6
- package/lib/utils/cookie.js +1 -124
- package/lib/utils/crypto.js +1 -33
- package/lib/utils/encode.js +1 -32
- package/lib/utils/handler.js +1 -11
- package/lib/utils/html.js +1 -102
- package/lib/utils/ipaddr.js +1 -237
- package/lib/utils/jwt.js +1 -1
- package/lib/utils/mime.js +1 -76
- package/lib/utils/stream.js +1 -87
- package/lib/utils/url.js +1 -196
- package/lib/{validator-D84mq-dO.js → validator-Btiyt5VJ.js} +3 -3
- package/lib/validator.js +1 -1
- package/lib/websocket-DsyBIKVA.js +56 -0
- package/lib/ws.js +1 -55
- package/package.json +1 -1
- package/plugins/acryl-door/src/cli/acryl.ts +36 -5
- package/plugins/acryl-door/src/host/channel.ts +14 -6
- package/plugins/acryl-door/src/host/chat-tools.ts +2 -0
- package/plugins/acryl-door/src/host/door.ts +97 -12
- package/plugins/acryl-door/src/host/page-routes.ts +3 -1
- package/plugins/acryl-door/src/host/shell.ts +147 -0
- package/plugins/acryl-door/src/host/shim.ts +39 -3
- package/plugins/acryl-door/src/host/verbs.ts +39 -2
- package/plugins/acryl-door/src/index.ts +22 -3
- package/plugins/acryl-door/src/page/channel.ts +3 -1
- package/plugins/acryl-door/src/page/index.ts +2 -1
- package/plugins/acryl-door/src/page/protocol.ts +2 -0
- package/plugins/acryl-door/src/shell/protocol.ts +130 -0
- package/plugins/acryl-node-server/src/register.ts +29 -2
- package/plugins/agent/model.ts +6 -1
- package/plugins/agent/tools.ts +12 -2
- package/plugins/agent-panel/client/describe.ts +44 -0
- package/plugins/agent-panel/client/main.ts +4 -1
- package/plugins/agent-panel/headless.ts +29 -8
- package/plugins/agent-panel/index.ts +22 -10
- package/plugins/agent-panel/launch.ts +67 -0
- package/plugins/desktop/attach.ts +72 -0
- package/plugins/desktop/door-shell.ts +379 -0
- package/plugins/desktop/main.ts +82 -15
- package/plugins/extensions/index.ts +3 -4
- package/plugins/extensions/stage.ts +33 -5
- package/plugins/openai/index.ts +1 -1
- package/templates/agent/AGENTS.md +4 -0
- package/templates/agent/blend.yaml +4 -1
- package/templates/agent/src/app.ts +2 -0
- package/templates/agent/src/routes.ts +1 -1
- package/templates/agent/template.json +1 -0
- package/templates/agent/test/builder.test.ts +26 -21
- package/lib/helpers-CvTauQT5.js +0 -5
- package/lib/middleware-CPQ8himN.js +0 -12
- package/plugins/acryl-router/src/connection.d.ts +0 -25
- package/plugins/acryl-router/src/core/app-base.d.ts +0 -215
- package/plugins/acryl-router/src/core/app.d.ts +0 -19
- package/plugins/acryl-router/src/core/client/client.d.ts +0 -4
- package/plugins/acryl-router/src/core/client/fetch-result-please.d.ts +0 -35
- package/plugins/acryl-router/src/core/client/index.d.ts +0 -7
- package/plugins/acryl-router/src/core/client/types.d.ts +0 -229
- package/plugins/acryl-router/src/core/client/utils.d.ts +0 -18
- package/plugins/acryl-router/src/core/compose.d.ts +0 -14
- package/plugins/acryl-router/src/core/context.d.ts +0 -443
- package/plugins/acryl-router/src/core/helper/accepts/accepts.d.ts +0 -30
- package/plugins/acryl-router/src/core/helper/accepts/index.d.ts +0 -5
- package/plugins/acryl-router/src/core/helper/conninfo/index.d.ts +0 -5
- package/plugins/acryl-router/src/core/helper/conninfo/types.d.ts +0 -36
- package/plugins/acryl-router/src/core/helper/cookie/index.d.ts +0 -25
- package/plugins/acryl-router/src/core/helper/css/common.d.ts +0 -59
- package/plugins/acryl-router/src/core/helper/css/index.d.ts +0 -80
- package/plugins/acryl-router/src/core/helper/dev/index.d.ts +0 -20
- package/plugins/acryl-router/src/core/helper/factory/index.d.ts +0 -82
- package/plugins/acryl-router/src/core/helper/html/index.d.ts +0 -8
- package/plugins/acryl-router/src/core/helper/proxy/index.d.ts +0 -73
- package/plugins/acryl-router/src/core/helper/route/index.d.ts +0 -75
- package/plugins/acryl-router/src/core/helper/ssg/index.d.ts +0 -7
- package/plugins/acryl-router/src/core/helper/ssg/middleware.d.ts +0 -44
- package/plugins/acryl-router/src/core/helper/ssg/plugins.d.ts +0 -27
- package/plugins/acryl-router/src/core/helper/ssg/ssg.d.ts +0 -91
- package/plugins/acryl-router/src/core/helper/ssg/utils.d.ts +0 -16
- package/plugins/acryl-router/src/core/helper/streaming/index.d.ts +0 -8
- package/plugins/acryl-router/src/core/helper/streaming/sse.d.ts +0 -13
- package/plugins/acryl-router/src/core/helper/streaming/stream.d.ts +0 -3
- package/plugins/acryl-router/src/core/helper/streaming/text.d.ts +0 -3
- package/plugins/acryl-router/src/core/helper/streaming/utils.d.ts +0 -1
- package/plugins/acryl-router/src/core/helper/testing/index.d.ts +0 -13
- package/plugins/acryl-router/src/core/helper/websocket/index.d.ts +0 -70
- package/plugins/acryl-router/src/core/http-exception.d.ts +0 -58
- package/plugins/acryl-router/src/core/index.d.ts +0 -37
- package/plugins/acryl-router/src/core/jsx/base.d.ts +0 -61
- package/plugins/acryl-router/src/core/jsx/children.d.ts +0 -9
- package/plugins/acryl-router/src/core/jsx/components.d.ts +0 -15
- package/plugins/acryl-router/src/core/jsx/constants.d.ts +0 -6
- package/plugins/acryl-router/src/core/jsx/context.d.ts +0 -51
- package/plugins/acryl-router/src/core/jsx/dom/components.d.ts +0 -10
- package/plugins/acryl-router/src/core/jsx/dom/context.d.ts +0 -3
- package/plugins/acryl-router/src/core/jsx/dom/css.d.ts +0 -83
- package/plugins/acryl-router/src/core/jsx/dom/hooks/index.d.ts +0 -39
- package/plugins/acryl-router/src/core/jsx/dom/intrinsic-element/components.d.ts +0 -16
- package/plugins/acryl-router/src/core/jsx/dom/jsx-dev-runtime.d.ts +0 -8
- package/plugins/acryl-router/src/core/jsx/dom/jsx-runtime.d.ts +0 -7
- package/plugins/acryl-router/src/core/jsx/dom/render.d.ts +0 -73
- package/plugins/acryl-router/src/core/jsx/dom/utils.d.ts +0 -1
- package/plugins/acryl-router/src/core/jsx/hooks/index.d.ts +0 -47
- package/plugins/acryl-router/src/core/jsx/index.d.ts +0 -76
- package/plugins/acryl-router/src/core/jsx/intrinsic-element/common.d.ts +0 -6
- package/plugins/acryl-router/src/core/jsx/intrinsic-element/components.d.ts +0 -13
- package/plugins/acryl-router/src/core/jsx/intrinsic-elements.d.ts +0 -735
- package/plugins/acryl-router/src/core/jsx/streaming.d.ts +0 -36
- package/plugins/acryl-router/src/core/jsx/types.d.ts +0 -36
- package/plugins/acryl-router/src/core/jsx/utils.d.ts +0 -4
- package/plugins/acryl-router/src/core/request/constants.d.ts +0 -1
- package/plugins/acryl-router/src/core/request.d.ts +0 -306
- package/plugins/acryl-router/src/core/router/reg-exp-router/index.d.ts +0 -6
- package/plugins/acryl-router/src/core/router/reg-exp-router/matcher.d.ts +0 -7
- package/plugins/acryl-router/src/core/router/reg-exp-router/node.d.ts +0 -13
- package/plugins/acryl-router/src/core/router/reg-exp-router/prepared-router.d.ts +0 -17
- package/plugins/acryl-router/src/core/router/reg-exp-router/router.d.ts +0 -11
- package/plugins/acryl-router/src/core/router/reg-exp-router/trie.d.ts +0 -8
- package/plugins/acryl-router/src/core/router/smart-router/index.d.ts +0 -5
- package/plugins/acryl-router/src/core/router/smart-router/router.d.ts +0 -11
- package/plugins/acryl-router/src/core/router/trie-router/index.d.ts +0 -5
- package/plugins/acryl-router/src/core/router/trie-router/node.d.ts +0 -6
- package/plugins/acryl-router/src/core/router/trie-router/router.d.ts +0 -7
- package/plugins/acryl-router/src/core/router/utils.d.ts +0 -1
- package/plugins/acryl-router/src/core/router.d.ts +0 -97
- package/plugins/acryl-router/src/core/types.d.ts +0 -573
- package/plugins/acryl-router/src/core/utils/accept.d.ts +0 -6
- package/plugins/acryl-router/src/core/utils/body.d.ts +0 -79
- package/plugins/acryl-router/src/core/utils/buffer.d.ts +0 -17
- package/plugins/acryl-router/src/core/utils/color.d.ts +0 -21
- package/plugins/acryl-router/src/core/utils/concurrent.d.ts +0 -11
- package/plugins/acryl-router/src/core/utils/constants.d.ts +0 -4
- package/plugins/acryl-router/src/core/utils/cookie.d.ts +0 -41
- package/plugins/acryl-router/src/core/utils/crypto.d.ts +0 -15
- package/plugins/acryl-router/src/core/utils/handler.d.ts +0 -6
- package/plugins/acryl-router/src/core/utils/headers.d.ts +0 -8
- package/plugins/acryl-router/src/core/utils/html.d.ts +0 -44
- package/plugins/acryl-router/src/core/utils/http-status.d.ts +0 -32
- package/plugins/acryl-router/src/core/utils/mime.d.ts +0 -70
- package/plugins/acryl-router/src/core/utils/stream.d.ts +0 -31
- package/plugins/acryl-router/src/core/utils/types.d.ts +0 -128
- package/plugins/acryl-router/src/core/utils/url.d.ts +0 -44
- package/plugins/acryl-router/src/core/validator/index.d.ts +0 -7
- package/plugins/acryl-router/src/core/validator/utils.d.ts +0 -29
- package/plugins/acryl-router/src/core/validator/validator.d.ts +0 -16
- package/plugins/acryl-router/src/helpers/index.d.ts +0 -17
- package/plugins/acryl-router/src/helpers/schema-validator.d.ts +0 -54
package/lib/utils/ipaddr.js
CHANGED
|
@@ -1,238 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
/**
|
|
3
|
-
* Expand IPv6 Address
|
|
4
|
-
* @param ipV6 Shorten IPv6 Address
|
|
5
|
-
* @return expanded IPv6 Address
|
|
6
|
-
*/
|
|
7
|
-
const expandIPv6 = (ipV6) => {
|
|
8
|
-
const sections = ipV6.split(":");
|
|
9
|
-
const lastSection = sections.at(-1);
|
|
10
|
-
if (IPV4_REGEX.test(lastSection)) {
|
|
11
|
-
const octets = lastSection.split(".").map(Number);
|
|
12
|
-
sections.splice(-1, 1, (octets[0] << 8 | octets[1]).toString(16), (octets[2] << 8 | octets[3]).toString(16));
|
|
13
|
-
}
|
|
14
|
-
for (let i = 0; i < sections.length; i++) {
|
|
15
|
-
const node = sections[i];
|
|
16
|
-
if (node !== "") sections[i] = node.padStart(4, "0");
|
|
17
|
-
else {
|
|
18
|
-
while (sections[i + 1] === "") sections.splice(i + 1, 1);
|
|
19
|
-
sections[i] = new Array(8 - sections.length + 1).fill("0000").join(":");
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
return sections.join(":");
|
|
23
|
-
};
|
|
24
|
-
const IPV4_OCTET_PART = "(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])";
|
|
25
|
-
const IPV4_REGEX = new RegExp(`^(?:${IPV4_OCTET_PART}\\.){3}${IPV4_OCTET_PART}$`);
|
|
26
|
-
const INVALID_IP_ADDRESS_ERROR_CODE = "ERR_INVALID_IP_ADDRESS";
|
|
27
|
-
const CHAR_CODE_0 = 48;
|
|
28
|
-
const CHAR_CODE_9 = 57;
|
|
29
|
-
const CHAR_CODE_A = 65;
|
|
30
|
-
const CHAR_CODE_F = 70;
|
|
31
|
-
const CHAR_CODE_a = 97;
|
|
32
|
-
const CHAR_CODE_f = 102;
|
|
33
|
-
const CHAR_CODE_DOT = 46;
|
|
34
|
-
const CHAR_CODE_COLON = 58;
|
|
35
|
-
const CHAR_CODE_PERCENT = 37;
|
|
36
|
-
/**
|
|
37
|
-
* Distinct Remote Addr
|
|
38
|
-
* @param remoteAddr Remote Addr
|
|
39
|
-
*/
|
|
40
|
-
const distinctRemoteAddr = (remoteAddr) => {
|
|
41
|
-
if (IPV4_REGEX.test(remoteAddr)) return "IPv4";
|
|
42
|
-
if (remoteAddr.includes(":")) return "IPv6";
|
|
43
|
-
};
|
|
44
|
-
const createInvalidIPAddressError = (message) => {
|
|
45
|
-
const error = new TypeError(message);
|
|
46
|
-
error.code = INVALID_IP_ADDRESS_ERROR_CODE;
|
|
47
|
-
return error;
|
|
48
|
-
};
|
|
49
|
-
const throwInvalidIPv4Address = (ipv4) => {
|
|
50
|
-
throw createInvalidIPAddressError(`Invalid IPv4 address: ${ipv4}`);
|
|
51
|
-
};
|
|
52
|
-
const throwInvalidIPv6Address = (ipv6) => {
|
|
53
|
-
throw createInvalidIPAddressError(`Invalid IPv6 address: ${ipv6}`);
|
|
54
|
-
};
|
|
55
|
-
const parseIPv4ToBinary = (ipv4, start, end, onInvalid) => {
|
|
56
|
-
let result = 0n;
|
|
57
|
-
let octets = 0;
|
|
58
|
-
let octet = 0;
|
|
59
|
-
let digits = 0;
|
|
60
|
-
let firstDigit = 0;
|
|
61
|
-
for (let i = start; i <= end; i++) {
|
|
62
|
-
const code = i < end ? ipv4.charCodeAt(i) : CHAR_CODE_DOT;
|
|
63
|
-
if (code >= CHAR_CODE_0 && code <= CHAR_CODE_9) {
|
|
64
|
-
if (digits === 0) firstDigit = code;
|
|
65
|
-
else if (firstDigit === CHAR_CODE_0) onInvalid();
|
|
66
|
-
octet = octet * 10 + code - CHAR_CODE_0;
|
|
67
|
-
if (octet > 255) onInvalid();
|
|
68
|
-
digits++;
|
|
69
|
-
continue;
|
|
70
|
-
}
|
|
71
|
-
if (code !== CHAR_CODE_DOT || digits === 0 || octets === 4) onInvalid();
|
|
72
|
-
result = (result << 8n) + BigInt(octet);
|
|
73
|
-
octets++;
|
|
74
|
-
octet = 0;
|
|
75
|
-
digits = 0;
|
|
76
|
-
}
|
|
77
|
-
if (octets !== 4) onInvalid();
|
|
78
|
-
return result;
|
|
79
|
-
};
|
|
80
|
-
const parseIPv6HexCode = (code) => {
|
|
81
|
-
if (code >= CHAR_CODE_0 && code <= CHAR_CODE_9) return code - CHAR_CODE_0;
|
|
82
|
-
if (code >= CHAR_CODE_A && code <= CHAR_CODE_F) return code - CHAR_CODE_A + 10;
|
|
83
|
-
if (code >= CHAR_CODE_a && code <= CHAR_CODE_f) return code - CHAR_CODE_a + 10;
|
|
84
|
-
return -1;
|
|
85
|
-
};
|
|
86
|
-
const isIPv6LinkLocal = (ipv6binary) => ipv6binary >> 118n === 1018n;
|
|
87
|
-
/**
|
|
88
|
-
* Convert IPv4 to Uint8Array
|
|
89
|
-
* @param ipv4 IPv4 Address
|
|
90
|
-
* @returns BigInt
|
|
91
|
-
*/
|
|
92
|
-
const convertIPv4ToBinary = (ipv4) => {
|
|
93
|
-
return parseIPv4ToBinary(ipv4, 0, ipv4.length, () => throwInvalidIPv4Address(ipv4));
|
|
94
|
-
};
|
|
95
|
-
/**
|
|
96
|
-
* Convert IPv6 to Uint8Array
|
|
97
|
-
* @param ipv6 IPv6 Address
|
|
98
|
-
* @returns BigInt
|
|
99
|
-
*/
|
|
100
|
-
const convertIPv6ToBinary = (ipv6) => {
|
|
101
|
-
const length = ipv6.length;
|
|
102
|
-
const sections = [];
|
|
103
|
-
let hasZoneId = false;
|
|
104
|
-
let compressAt = -1;
|
|
105
|
-
let index = 0;
|
|
106
|
-
if (length === 0) throwInvalidIPv6Address(ipv6);
|
|
107
|
-
while (index < length) {
|
|
108
|
-
if (sections.length > 8) throwInvalidIPv6Address(ipv6);
|
|
109
|
-
let code = ipv6.charCodeAt(index);
|
|
110
|
-
if (code === CHAR_CODE_PERCENT) {
|
|
111
|
-
if (index + 1 === length) throwInvalidIPv6Address(ipv6);
|
|
112
|
-
hasZoneId = true;
|
|
113
|
-
break;
|
|
114
|
-
}
|
|
115
|
-
if (code === CHAR_CODE_COLON) {
|
|
116
|
-
if (index + 1 < length && ipv6.charCodeAt(index + 1) === CHAR_CODE_COLON) {
|
|
117
|
-
if (compressAt !== -1) throwInvalidIPv6Address(ipv6);
|
|
118
|
-
compressAt = sections.length;
|
|
119
|
-
index += 2;
|
|
120
|
-
continue;
|
|
121
|
-
}
|
|
122
|
-
throwInvalidIPv6Address(ipv6);
|
|
123
|
-
}
|
|
124
|
-
let value = 0;
|
|
125
|
-
let digits = 0;
|
|
126
|
-
const sectionStart = index;
|
|
127
|
-
while (index < length) {
|
|
128
|
-
code = ipv6.charCodeAt(index);
|
|
129
|
-
const hex = parseIPv6HexCode(code);
|
|
130
|
-
if (hex === -1) break;
|
|
131
|
-
if (digits === 4) throwInvalidIPv6Address(ipv6);
|
|
132
|
-
value = value << 4 | hex;
|
|
133
|
-
digits++;
|
|
134
|
-
index++;
|
|
135
|
-
}
|
|
136
|
-
if (index < length && ipv6.charCodeAt(index) === CHAR_CODE_DOT) {
|
|
137
|
-
let ipv4End = length;
|
|
138
|
-
for (let i = index; i < length; i++) if (ipv6.charCodeAt(i) === CHAR_CODE_PERCENT) {
|
|
139
|
-
if (i + 1 === length) throwInvalidIPv6Address(ipv6);
|
|
140
|
-
hasZoneId = true;
|
|
141
|
-
ipv4End = i;
|
|
142
|
-
break;
|
|
143
|
-
}
|
|
144
|
-
const ipv4 = parseIPv4ToBinary(ipv6, sectionStart, ipv4End, () => throwInvalidIPv6Address(ipv6));
|
|
145
|
-
sections.push(Number(ipv4 >> 16n & 65535n), Number(ipv4 & 65535n));
|
|
146
|
-
index = length;
|
|
147
|
-
break;
|
|
148
|
-
}
|
|
149
|
-
if (digits === 0) throwInvalidIPv6Address(ipv6);
|
|
150
|
-
sections.push(value);
|
|
151
|
-
if (index === length) break;
|
|
152
|
-
code = ipv6.charCodeAt(index);
|
|
153
|
-
if (code === CHAR_CODE_PERCENT) {
|
|
154
|
-
if (index + 1 === length) throwInvalidIPv6Address(ipv6);
|
|
155
|
-
hasZoneId = true;
|
|
156
|
-
break;
|
|
157
|
-
}
|
|
158
|
-
if (code !== CHAR_CODE_COLON) throwInvalidIPv6Address(ipv6);
|
|
159
|
-
if (index + 1 < length && ipv6.charCodeAt(index + 1) === CHAR_CODE_COLON) {
|
|
160
|
-
if (compressAt !== -1) throwInvalidIPv6Address(ipv6);
|
|
161
|
-
compressAt = sections.length;
|
|
162
|
-
index += 2;
|
|
163
|
-
continue;
|
|
164
|
-
}
|
|
165
|
-
index++;
|
|
166
|
-
if (index === length) throwInvalidIPv6Address(ipv6);
|
|
167
|
-
}
|
|
168
|
-
if (compressAt === -1 ? sections.length !== 8 : sections.length >= 8) throwInvalidIPv6Address(ipv6);
|
|
169
|
-
let result = 0n;
|
|
170
|
-
const zeros = compressAt === -1 ? 0 : 8 - sections.length;
|
|
171
|
-
const firstSectionEnd = compressAt === -1 ? sections.length : compressAt;
|
|
172
|
-
for (let i = 0; i < firstSectionEnd; i++) {
|
|
173
|
-
result <<= 16n;
|
|
174
|
-
result += BigInt(sections[i]);
|
|
175
|
-
}
|
|
176
|
-
for (let i = 0; i < zeros; i++) result <<= 16n;
|
|
177
|
-
for (let i = firstSectionEnd; i < sections.length; i++) {
|
|
178
|
-
result <<= 16n;
|
|
179
|
-
result += BigInt(sections[i]);
|
|
180
|
-
}
|
|
181
|
-
if (hasZoneId && !isIPv6LinkLocal(result)) throwInvalidIPv6Address(ipv6);
|
|
182
|
-
return result;
|
|
183
|
-
};
|
|
184
|
-
/**
|
|
185
|
-
* Convert a binary representation of an IPv4 address to a string.
|
|
186
|
-
* @param ipV4 binary IPv4 Address
|
|
187
|
-
* @return IPv4 Address in string
|
|
188
|
-
*/
|
|
189
|
-
const convertIPv4BinaryToString = (ipV4) => {
|
|
190
|
-
const sections = [];
|
|
191
|
-
for (let i = 0; i < 4; i++) sections.push(ipV4 >> BigInt(8 * (3 - i)) & 255n);
|
|
192
|
-
return sections.join(".");
|
|
193
|
-
};
|
|
194
|
-
/**
|
|
195
|
-
* Check if a binary IPv6 address is an IPv4-mapped IPv6 address (::ffff:x.x.x.x)
|
|
196
|
-
* @param ipv6binary binary IPv6 Address
|
|
197
|
-
* @return true if the address is an IPv4-mapped IPv6 address
|
|
198
|
-
*/
|
|
199
|
-
const isIPv4MappedIPv6 = (ipv6binary) => ipv6binary >> 32n === 65535n;
|
|
200
|
-
/**
|
|
201
|
-
* Extract the IPv4 portion from an IPv4-mapped IPv6 address
|
|
202
|
-
* @param ipv6binary binary IPv4-mapped IPv6 Address
|
|
203
|
-
* @return binary IPv4 Address
|
|
204
|
-
*/
|
|
205
|
-
const convertIPv4MappedIPv6ToIPv4 = (ipv6binary) => ipv6binary & 4294967295n;
|
|
206
|
-
/**
|
|
207
|
-
* Convert a binary representation of an IPv6 address to a string.
|
|
208
|
-
* @param ipV6 binary IPv6 Address
|
|
209
|
-
* @return normalized IPv6 Address in string
|
|
210
|
-
*/
|
|
211
|
-
const convertIPv6BinaryToString = (ipV6) => {
|
|
212
|
-
if (ipV6 === 0n) return "::";
|
|
213
|
-
if (isIPv4MappedIPv6(ipV6)) return `::ffff:${convertIPv4BinaryToString(convertIPv4MappedIPv6ToIPv4(ipV6))}`;
|
|
214
|
-
const sections = [];
|
|
215
|
-
for (let i = 0; i < 8; i++) sections.push((ipV6 >> BigInt(16 * (7 - i)) & 65535n).toString(16));
|
|
216
|
-
let currentZeroStart = -1;
|
|
217
|
-
let maxZeroStart = -1;
|
|
218
|
-
let maxZeroEnd = -1;
|
|
219
|
-
for (let i = 0; i < 8; i++) if (sections[i] === "0") {
|
|
220
|
-
if (currentZeroStart === -1) currentZeroStart = i;
|
|
221
|
-
} else if (currentZeroStart > -1) {
|
|
222
|
-
if (i - currentZeroStart > maxZeroEnd - maxZeroStart) {
|
|
223
|
-
maxZeroStart = currentZeroStart;
|
|
224
|
-
maxZeroEnd = i;
|
|
225
|
-
}
|
|
226
|
-
currentZeroStart = -1;
|
|
227
|
-
}
|
|
228
|
-
if (currentZeroStart > -1) {
|
|
229
|
-
if (8 - currentZeroStart > maxZeroEnd - maxZeroStart) {
|
|
230
|
-
maxZeroStart = currentZeroStart;
|
|
231
|
-
maxZeroEnd = 8;
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
if (maxZeroStart !== -1 && maxZeroEnd - maxZeroStart > 1) sections.splice(maxZeroStart, maxZeroEnd - maxZeroStart, ":");
|
|
235
|
-
return sections.join(":").replace(/:{2,}/g, "::");
|
|
236
|
-
};
|
|
237
|
-
//#endregion
|
|
1
|
+
import { a as convertIPv6BinaryToString, c as expandIPv6, i as convertIPv4ToBinary, l as isIPv4MappedIPv6, n as convertIPv4BinaryToString, o as convertIPv6ToBinary, r as convertIPv4MappedIPv6ToIPv4, s as distinctRemoteAddr, t as INVALID_IP_ADDRESS_ERROR_CODE } from "../ipaddr-DCoIo528.js";
|
|
238
2
|
export { INVALID_IP_ADDRESS_ERROR_CODE, convertIPv4BinaryToString, convertIPv4MappedIPv6ToIPv4, convertIPv4ToBinary, convertIPv6BinaryToString, convertIPv6ToBinary, distinctRemoteAddr, expandIPv6, isIPv4MappedIPv6 };
|
package/lib/utils/jwt.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as Jwt } from "../jwt-
|
|
1
|
+
import { t as Jwt } from "../jwt-BXoIA2fQ.js";
|
|
2
2
|
export { Jwt };
|
package/lib/utils/mime.js
CHANGED
|
@@ -1,77 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
/**
|
|
3
|
-
* @module
|
|
4
|
-
* MIME utility.
|
|
5
|
-
*/
|
|
6
|
-
const getMimeType = (filename, mimes = baseMimes) => {
|
|
7
|
-
const match = filename.match(/\.([a-zA-Z0-9]+?)$/);
|
|
8
|
-
if (!match) return;
|
|
9
|
-
return mimes[match[1].toLowerCase()];
|
|
10
|
-
};
|
|
11
|
-
const getExtension = (mimeType) => {
|
|
12
|
-
const baseType = mimeType.split(";", 1)[0].trim();
|
|
13
|
-
for (const ext in baseMimes) {
|
|
14
|
-
const stored = baseMimes[ext];
|
|
15
|
-
if (stored === mimeType || stored.split(";", 1)[0].trim() === baseType) return ext;
|
|
16
|
-
}
|
|
17
|
-
};
|
|
18
|
-
const baseMimes = {
|
|
19
|
-
aac: "audio/aac",
|
|
20
|
-
avi: "video/x-msvideo",
|
|
21
|
-
avif: "image/avif",
|
|
22
|
-
av1: "video/av1",
|
|
23
|
-
bin: "application/octet-stream",
|
|
24
|
-
bmp: "image/bmp",
|
|
25
|
-
css: "text/css; charset=utf-8",
|
|
26
|
-
csv: "text/csv; charset=utf-8",
|
|
27
|
-
eot: "application/vnd.ms-fontobject",
|
|
28
|
-
epub: "application/epub+zip",
|
|
29
|
-
gif: "image/gif",
|
|
30
|
-
gz: "application/gzip",
|
|
31
|
-
htm: "text/html; charset=utf-8",
|
|
32
|
-
html: "text/html; charset=utf-8",
|
|
33
|
-
ico: "image/x-icon",
|
|
34
|
-
ics: "text/calendar; charset=utf-8",
|
|
35
|
-
jpeg: "image/jpeg",
|
|
36
|
-
jpg: "image/jpeg",
|
|
37
|
-
js: "text/javascript; charset=utf-8",
|
|
38
|
-
json: "application/json",
|
|
39
|
-
jsonld: "application/ld+json",
|
|
40
|
-
map: "application/json",
|
|
41
|
-
mid: "audio/x-midi",
|
|
42
|
-
midi: "audio/x-midi",
|
|
43
|
-
mjs: "text/javascript; charset=utf-8",
|
|
44
|
-
mp3: "audio/mpeg",
|
|
45
|
-
mp4: "video/mp4",
|
|
46
|
-
mpeg: "video/mpeg",
|
|
47
|
-
oga: "audio/ogg",
|
|
48
|
-
ogv: "video/ogg",
|
|
49
|
-
ogx: "application/ogg",
|
|
50
|
-
opus: "audio/opus",
|
|
51
|
-
otf: "font/otf",
|
|
52
|
-
pdf: "application/pdf",
|
|
53
|
-
png: "image/png",
|
|
54
|
-
rtf: "application/rtf",
|
|
55
|
-
svg: "image/svg+xml; charset=utf-8",
|
|
56
|
-
tif: "image/tiff",
|
|
57
|
-
tiff: "image/tiff",
|
|
58
|
-
ts: "video/mp2t",
|
|
59
|
-
ttf: "font/ttf",
|
|
60
|
-
txt: "text/plain; charset=utf-8",
|
|
61
|
-
wasm: "application/wasm",
|
|
62
|
-
webm: "video/webm",
|
|
63
|
-
weba: "audio/webm",
|
|
64
|
-
webmanifest: "application/manifest+json",
|
|
65
|
-
webp: "image/webp",
|
|
66
|
-
woff: "font/woff",
|
|
67
|
-
woff2: "font/woff2",
|
|
68
|
-
xhtml: "application/xhtml+xml; charset=utf-8",
|
|
69
|
-
xml: "application/xml; charset=utf-8",
|
|
70
|
-
zip: "application/zip",
|
|
71
|
-
"3gp": "video/3gpp",
|
|
72
|
-
"3g2": "video/3gpp2",
|
|
73
|
-
gltf: "model/gltf+json",
|
|
74
|
-
glb: "model/gltf-binary"
|
|
75
|
-
};
|
|
76
|
-
//#endregion
|
|
1
|
+
import { n as getExtension, r as getMimeType, t as baseMimes } from "../mime-BnScXkQn.js";
|
|
77
2
|
export { getExtension, getMimeType, baseMimes as mimes };
|
package/lib/utils/stream.js
CHANGED
|
@@ -1,88 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
/**
|
|
3
|
-
* @module
|
|
4
|
-
* Stream utility.
|
|
5
|
-
*/
|
|
6
|
-
var StreamingApi = class {
|
|
7
|
-
writer;
|
|
8
|
-
encoder;
|
|
9
|
-
writable;
|
|
10
|
-
abortSubscribers = [];
|
|
11
|
-
responseReadable;
|
|
12
|
-
/**
|
|
13
|
-
* Whether the stream has been aborted.
|
|
14
|
-
*/
|
|
15
|
-
aborted = false;
|
|
16
|
-
/**
|
|
17
|
-
* Whether the stream has been closed normally.
|
|
18
|
-
*/
|
|
19
|
-
closed = false;
|
|
20
|
-
constructor(writable, _readable) {
|
|
21
|
-
this.writable = writable;
|
|
22
|
-
this.writer = writable.getWriter();
|
|
23
|
-
this.encoder = new TextEncoder();
|
|
24
|
-
const reader = _readable.getReader();
|
|
25
|
-
this.abortSubscribers.push(async () => {
|
|
26
|
-
await reader.cancel();
|
|
27
|
-
});
|
|
28
|
-
this.responseReadable = new ReadableStream({
|
|
29
|
-
async pull(controller) {
|
|
30
|
-
const { done, value } = await reader.read();
|
|
31
|
-
done ? controller.close() : controller.enqueue(value);
|
|
32
|
-
},
|
|
33
|
-
cancel: () => {
|
|
34
|
-
if (!this.closed) this.abort();
|
|
35
|
-
}
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
async write(input) {
|
|
39
|
-
try {
|
|
40
|
-
if (typeof input === "string") input = this.encoder.encode(input);
|
|
41
|
-
await this.writer.write(input);
|
|
42
|
-
} catch {}
|
|
43
|
-
return this;
|
|
44
|
-
}
|
|
45
|
-
async writeln(input) {
|
|
46
|
-
await this.write(input + "\n");
|
|
47
|
-
return this;
|
|
48
|
-
}
|
|
49
|
-
sleep(ms) {
|
|
50
|
-
return new Promise((res) => setTimeout(res, ms));
|
|
51
|
-
}
|
|
52
|
-
async close() {
|
|
53
|
-
this.closed = true;
|
|
54
|
-
try {
|
|
55
|
-
await this.writer.close();
|
|
56
|
-
} catch {}
|
|
57
|
-
}
|
|
58
|
-
async pipe(body) {
|
|
59
|
-
this.writer.releaseLock();
|
|
60
|
-
try {
|
|
61
|
-
await body.pipeTo(this.writable, {
|
|
62
|
-
preventClose: true,
|
|
63
|
-
preventAbort: true
|
|
64
|
-
});
|
|
65
|
-
} finally {
|
|
66
|
-
this.writer = this.writable.getWriter();
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
onAbort(listener) {
|
|
70
|
-
this.abortSubscribers.push(listener);
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Abort the stream.
|
|
74
|
-
* You can call this method when stream is aborted by external event.
|
|
75
|
-
*/
|
|
76
|
-
abort() {
|
|
77
|
-
if (!this.aborted) {
|
|
78
|
-
this.aborted = true;
|
|
79
|
-
this.abortSubscribers.forEach((subscriber) => {
|
|
80
|
-
try {
|
|
81
|
-
Promise.resolve(subscriber()).catch(() => {});
|
|
82
|
-
} catch {}
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
};
|
|
87
|
-
//#endregion
|
|
1
|
+
import { t as StreamingApi } from "../stream-CzM_SHkq.js";
|
|
88
2
|
export { StreamingApi };
|
package/lib/utils/url.js
CHANGED
|
@@ -1,197 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
const splitPath = (path) => {
|
|
3
|
-
const paths = path.split("/");
|
|
4
|
-
if (paths[0] === "") paths.shift();
|
|
5
|
-
return paths;
|
|
6
|
-
};
|
|
7
|
-
const splitRoutingPath = (routePath) => {
|
|
8
|
-
const { groups, path } = extractGroupsFromPath(routePath);
|
|
9
|
-
const paths = splitPath(path);
|
|
10
|
-
return replaceGroupMarks(paths, groups);
|
|
11
|
-
};
|
|
12
|
-
const extractGroupsFromPath = (path) => {
|
|
13
|
-
const groups = [];
|
|
14
|
-
path = path.replace(/\{[^}]+\}/g, (match, index) => {
|
|
15
|
-
const mark = `@${index}`;
|
|
16
|
-
groups.push([mark, match]);
|
|
17
|
-
return mark;
|
|
18
|
-
});
|
|
19
|
-
return {
|
|
20
|
-
groups,
|
|
21
|
-
path
|
|
22
|
-
};
|
|
23
|
-
};
|
|
24
|
-
const replaceGroupMarks = (paths, groups) => {
|
|
25
|
-
for (let i = groups.length - 1; i >= 0; i--) {
|
|
26
|
-
const [mark] = groups[i];
|
|
27
|
-
for (let j = paths.length - 1; j >= 0; j--) if (paths[j].includes(mark)) {
|
|
28
|
-
paths[j] = paths[j].replace(mark, groups[i][1]);
|
|
29
|
-
break;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
return paths;
|
|
33
|
-
};
|
|
34
|
-
const patternCache = {};
|
|
35
|
-
const getPattern = (label, next) => {
|
|
36
|
-
if (label === "*") return "*";
|
|
37
|
-
const match = label.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/);
|
|
38
|
-
if (match) {
|
|
39
|
-
const cacheKey = `${label}#${next}`;
|
|
40
|
-
if (!patternCache[cacheKey]) if (match[2]) patternCache[cacheKey] = next && next[0] !== ":" && next[0] !== "*" ? [
|
|
41
|
-
cacheKey,
|
|
42
|
-
match[1],
|
|
43
|
-
new RegExp(`^${match[2]}(?=/${next})`)
|
|
44
|
-
] : [
|
|
45
|
-
label,
|
|
46
|
-
match[1],
|
|
47
|
-
new RegExp(`^${match[2]}$`)
|
|
48
|
-
];
|
|
49
|
-
else patternCache[cacheKey] = [
|
|
50
|
-
label,
|
|
51
|
-
match[1],
|
|
52
|
-
true
|
|
53
|
-
];
|
|
54
|
-
return patternCache[cacheKey];
|
|
55
|
-
}
|
|
56
|
-
return null;
|
|
57
|
-
};
|
|
58
|
-
const tryDecode = (str, decoder) => {
|
|
59
|
-
try {
|
|
60
|
-
return decoder(str);
|
|
61
|
-
} catch {
|
|
62
|
-
return str.replace(/(?:%[0-9A-Fa-f]{2})+/g, (match) => {
|
|
63
|
-
try {
|
|
64
|
-
return decoder(match);
|
|
65
|
-
} catch {
|
|
66
|
-
return match;
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
};
|
|
71
|
-
/**
|
|
72
|
-
* Try to apply decodeURI() to given string.
|
|
73
|
-
* If it fails, skip invalid percent encoding or invalid UTF-8 sequences, and apply decodeURI() to the rest as much as possible.
|
|
74
|
-
* @param str The string to decode.
|
|
75
|
-
* @returns The decoded string that sometimes contains undecodable percent encoding.
|
|
76
|
-
* @example
|
|
77
|
-
* tryDecodeURI('Hello%20World') // 'Hello World'
|
|
78
|
-
* tryDecodeURI('Hello%20World/%A4%A2') // 'Hello World/%A4%A2'
|
|
79
|
-
*/
|
|
80
|
-
const tryDecodeURI = (str) => tryDecode(str, decodeURI);
|
|
81
|
-
const getPath = (request) => {
|
|
82
|
-
const url = request.url;
|
|
83
|
-
const start = url.indexOf("/", url.indexOf(":") + 4);
|
|
84
|
-
let i = start;
|
|
85
|
-
for (; i < url.length; i++) {
|
|
86
|
-
const charCode = url.charCodeAt(i);
|
|
87
|
-
if (charCode === 37) {
|
|
88
|
-
const queryIndex = url.indexOf("?", i);
|
|
89
|
-
const hashIndex = url.indexOf("#", i);
|
|
90
|
-
const end = queryIndex === -1 ? hashIndex === -1 ? void 0 : hashIndex : hashIndex === -1 ? queryIndex : Math.min(queryIndex, hashIndex);
|
|
91
|
-
const path = url.slice(start, end);
|
|
92
|
-
return tryDecodeURI(path.includes("%25") ? path.replace(/%25/g, "%2525") : path);
|
|
93
|
-
} else if (charCode === 63 || charCode === 35) break;
|
|
94
|
-
}
|
|
95
|
-
return url.slice(start, i);
|
|
96
|
-
};
|
|
97
|
-
/**
|
|
98
|
-
* @deprecated
|
|
99
|
-
* Use the `URL` API instead.
|
|
100
|
-
*/
|
|
101
|
-
const getQueryStrings = (url) => {
|
|
102
|
-
const queryIndex = url.indexOf("?", 8);
|
|
103
|
-
if (queryIndex === -1) return "";
|
|
104
|
-
const hashIndex = url.indexOf("#", 8);
|
|
105
|
-
return hashIndex === -1 ? url.slice(queryIndex) : queryIndex < hashIndex ? url.slice(queryIndex, hashIndex) : "";
|
|
106
|
-
};
|
|
107
|
-
const getPathNoStrict = (request) => {
|
|
108
|
-
const result = getPath(request);
|
|
109
|
-
return result.length > 1 && result.at(-1) === "/" ? result.slice(0, -1) : result;
|
|
110
|
-
};
|
|
111
|
-
/**
|
|
112
|
-
* Merge paths.
|
|
113
|
-
* @param {string[]} ...paths - The paths to merge.
|
|
114
|
-
* @returns {string} The merged path.
|
|
115
|
-
* @example
|
|
116
|
-
* mergePath('/api', '/users') // '/api/users'
|
|
117
|
-
* mergePath('/api/', '/users') // '/api/users'
|
|
118
|
-
* mergePath('/api', '/') // '/api'
|
|
119
|
-
* mergePath('/api/', '/') // '/api/'
|
|
120
|
-
*/
|
|
121
|
-
const mergePath = (base, sub, ...rest) => {
|
|
122
|
-
if (rest.length) sub = mergePath(sub, ...rest);
|
|
123
|
-
return `${base?.[0] === "/" ? "" : "/"}${base}${sub === "/" ? "" : `${base?.at(-1) === "/" ? "" : "/"}${sub?.[0] === "/" ? sub.slice(1) : sub}`}`;
|
|
124
|
-
};
|
|
125
|
-
const checkOptionalParameter = (path) => {
|
|
126
|
-
if (path.charCodeAt(path.length - 1) !== 63 || !path.includes(":")) return null;
|
|
127
|
-
const segments = path.split("/");
|
|
128
|
-
const results = [];
|
|
129
|
-
let basePath = "";
|
|
130
|
-
segments.forEach((segment) => {
|
|
131
|
-
if (segment !== "" && !/\:/.test(segment)) basePath += "/" + segment;
|
|
132
|
-
else if (/\:/.test(segment)) if (segment.charCodeAt(segment.length - 1) === 63) {
|
|
133
|
-
if (results.length === 0 && basePath === "") results.push("/");
|
|
134
|
-
else results.push(basePath);
|
|
135
|
-
const optionalSegment = segment.slice(0, -1);
|
|
136
|
-
basePath += "/" + optionalSegment;
|
|
137
|
-
results.push(basePath);
|
|
138
|
-
} else basePath += "/" + segment;
|
|
139
|
-
});
|
|
140
|
-
return results.filter((v, i, a) => a.indexOf(v) === i);
|
|
141
|
-
};
|
|
142
|
-
const tryDecodeURIComponent = (str) => str.indexOf("%") !== -1 ? tryDecode(str, decodeURIComponent_) : str;
|
|
143
|
-
const _decodeURI = (value) => {
|
|
144
|
-
if (value.indexOf("+") !== -1) value = value.replace(/\+/g, " ");
|
|
145
|
-
return tryDecodeURIComponent(value);
|
|
146
|
-
};
|
|
147
|
-
const _getQueryParam = (url, key, multiple) => {
|
|
148
|
-
const hashIndex = url.indexOf("#", 8);
|
|
149
|
-
if (hashIndex !== -1) url = url.slice(0, hashIndex);
|
|
150
|
-
let encoded;
|
|
151
|
-
if (!multiple && key && key.indexOf("%") === -1 && key.indexOf("+") === -1) {
|
|
152
|
-
let keyIndex = url.indexOf("?", 8);
|
|
153
|
-
if (keyIndex === -1) return;
|
|
154
|
-
if (!url.startsWith(key, keyIndex + 1)) keyIndex = url.indexOf(`&${key}`, keyIndex + 1);
|
|
155
|
-
while (keyIndex !== -1) {
|
|
156
|
-
const trailingKeyCode = url.charCodeAt(keyIndex + key.length + 1);
|
|
157
|
-
if (trailingKeyCode === 61) {
|
|
158
|
-
const valueIndex = keyIndex + key.length + 2;
|
|
159
|
-
const endIndex = url.indexOf("&", valueIndex);
|
|
160
|
-
return _decodeURI(url.slice(valueIndex, endIndex === -1 ? void 0 : endIndex));
|
|
161
|
-
} else if (trailingKeyCode == 38 || isNaN(trailingKeyCode)) return "";
|
|
162
|
-
keyIndex = url.indexOf(`&${key}`, keyIndex + 1);
|
|
163
|
-
}
|
|
164
|
-
encoded = /[%+]/.test(url);
|
|
165
|
-
if (!encoded) return;
|
|
166
|
-
}
|
|
167
|
-
const results = Object.create(null);
|
|
168
|
-
encoded ??= /[%+]/.test(url);
|
|
169
|
-
let keyIndex = url.indexOf("?", 8);
|
|
170
|
-
while (keyIndex !== -1) {
|
|
171
|
-
const nextKeyIndex = url.indexOf("&", keyIndex + 1);
|
|
172
|
-
let valueIndex = url.indexOf("=", keyIndex);
|
|
173
|
-
if (valueIndex > nextKeyIndex && nextKeyIndex !== -1) valueIndex = -1;
|
|
174
|
-
let name = url.slice(keyIndex + 1, valueIndex === -1 ? nextKeyIndex === -1 ? void 0 : nextKeyIndex : valueIndex);
|
|
175
|
-
if (encoded) name = _decodeURI(name);
|
|
176
|
-
keyIndex = nextKeyIndex;
|
|
177
|
-
if (name === "") continue;
|
|
178
|
-
let value;
|
|
179
|
-
if (valueIndex === -1) value = "";
|
|
180
|
-
else {
|
|
181
|
-
value = url.slice(valueIndex + 1, nextKeyIndex === -1 ? void 0 : nextKeyIndex);
|
|
182
|
-
if (encoded) value = _decodeURI(value);
|
|
183
|
-
}
|
|
184
|
-
if (multiple) {
|
|
185
|
-
if (!(results[name] && Array.isArray(results[name]))) results[name] = [];
|
|
186
|
-
results[name].push(value);
|
|
187
|
-
} else results[name] ??= value;
|
|
188
|
-
}
|
|
189
|
-
return key ? results[key] : results;
|
|
190
|
-
};
|
|
191
|
-
const getQueryParam = _getQueryParam;
|
|
192
|
-
const getQueryParams = (url, key) => {
|
|
193
|
-
return _getQueryParam(url, key, true);
|
|
194
|
-
};
|
|
195
|
-
const decodeURIComponent_ = decodeURIComponent;
|
|
196
|
-
//#endregion
|
|
1
|
+
import { a as getPattern, c as getQueryStrings, d as splitRoutingPath, f as tryDecode, i as getPathNoStrict, l as mergePath, m as tryDecodeURIComponent, n as decodeURIComponent_, o as getQueryParam, p as tryDecodeURI, r as getPath, s as getQueryParams, t as checkOptionalParameter, u as splitPath } from "../url-BPh4d6j-.js";
|
|
197
2
|
export { checkOptionalParameter, decodeURIComponent_, getPath, getPathNoStrict, getPattern, getQueryParam, getQueryParams, getQueryStrings, mergePath, splitPath, splitRoutingPath, tryDecode, tryDecodeURI, tryDecodeURIComponent };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { HTTPException } from "./http-exception.js";
|
|
2
|
-
import { bufferToFormData } from "./
|
|
3
|
-
import { getCookie } from "./cookie.js";
|
|
1
|
+
import { t as HTTPException } from "./http-exception-MjWkT89V.js";
|
|
2
|
+
import { t as bufferToFormData } from "./buffer-CkEOJCcY.js";
|
|
3
|
+
import { i as getCookie } from "./cookie-BHIduy2T.js";
|
|
4
4
|
//#region ../../plugins/acryl-router/src/core/validator/validator.ts
|
|
5
5
|
const jsonRegex = /^application\/([a-z-\.]+\+)?json(;\s*[a-zA-Z0-9\-]+\=([^;]+))*$/i;
|
|
6
6
|
const multipartRegex = /^multipart\/form-data(;\s?boundary=[a-zA-Z0-9'"()+_,\-./:=?]+)?$/i;
|
package/lib/validator.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as validator } from "./validator-
|
|
1
|
+
import { t as validator } from "./validator-Btiyt5VJ.js";
|
|
2
2
|
export { validator };
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
//#region ../../plugins/acryl-router/src/core/helper/websocket/index.ts
|
|
2
|
+
/**
|
|
3
|
+
* A context for controlling WebSockets
|
|
4
|
+
*/
|
|
5
|
+
var WSContext = class {
|
|
6
|
+
#init;
|
|
7
|
+
constructor(init) {
|
|
8
|
+
this.#init = init;
|
|
9
|
+
this.raw = init.raw;
|
|
10
|
+
this.url = init.url ? new URL(init.url) : null;
|
|
11
|
+
this.protocol = init.protocol ?? null;
|
|
12
|
+
}
|
|
13
|
+
send(source, options) {
|
|
14
|
+
this.#init.send(source, options ?? {});
|
|
15
|
+
}
|
|
16
|
+
raw;
|
|
17
|
+
binaryType = "arraybuffer";
|
|
18
|
+
get readyState() {
|
|
19
|
+
return this.#init.readyState;
|
|
20
|
+
}
|
|
21
|
+
get bufferedAmount() {
|
|
22
|
+
return this.#init.bufferedAmount ?? 0;
|
|
23
|
+
}
|
|
24
|
+
url;
|
|
25
|
+
protocol;
|
|
26
|
+
close(code, reason) {
|
|
27
|
+
this.#init.close(code, reason);
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
const createWSMessageEvent = (source) => {
|
|
31
|
+
return new MessageEvent("message", { data: source });
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Create a WebSocket adapter/helper
|
|
35
|
+
*/
|
|
36
|
+
const defineWebSocketHelper = (handler) => {
|
|
37
|
+
return ((...args) => {
|
|
38
|
+
if (typeof args[0] === "function") {
|
|
39
|
+
const [createEvents, options] = args;
|
|
40
|
+
return async function upgradeWebSocket(c, next) {
|
|
41
|
+
const result = await handler(c, await createEvents(c), options);
|
|
42
|
+
if (result) return result;
|
|
43
|
+
await next();
|
|
44
|
+
};
|
|
45
|
+
} else {
|
|
46
|
+
const [c, events, options] = args;
|
|
47
|
+
return (async () => {
|
|
48
|
+
const upgraded = await handler(c, events, options);
|
|
49
|
+
if (!upgraded) throw new Error("Failed to upgrade WebSocket");
|
|
50
|
+
return upgraded;
|
|
51
|
+
})();
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
};
|
|
55
|
+
//#endregion
|
|
56
|
+
export { createWSMessageEvent as n, defineWebSocketHelper as r, WSContext as t };
|